summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-onPop-async-01.js
blob: 8d491f3f7fb457c43ac72f1046183daee94ecbec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// When an async function awaits, if Frame.onPop processes microtasks,
// the async function itself will not run. It'll run later.
//
// This is a reentrancy test, like Frame-onPop-generators-03.

let g = newGlobal({newCompartment: true});
g.log = "";
g.eval(`
  async function f() {
    log += "1";
    debugger;
    log += "2";
    await Promise.resolve(3);
    log += "3";
    return "ok";
  }
`);

let dbg = Debugger(g);
dbg.onDebuggerStatement = frame => {
  frame.onPop = completion => {
    // What we are really testing is that when onPop is called, we have not
    // yet thrown this async function activation back into the hopper.
    g.log += 'A';
    drainJobQueue();
    g.log += 'B';

    frame.onPop = completion => {
      g.log += 'C';
    };
  };
};

let status = "FAIL - g.f() did not resolve";
g.f().then(value => { status = value; });
assertEq(g.log, "12AB");
drainJobQueue();
assertEq(g.log, "12AB3C");
assertEq(status, "ok");