summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/onDebuggerStatement-async-resumption-01.js
blob: e8607217f6225b186776a8dce264120f4a530611 (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
// A Debugger can {return:} from onDebuggerStatement in an async function.
// The async function's promise is resolved with the returned value.

load(libdir + "asserts.js");

let g = newGlobal({newCompartment: true});
g.eval(`
    async function f(x) {
        debugger;  // when==0 to force return here
        await x;
        debugger;  // when==1 to force return here
    }
`);

let dbg = new Debugger;
let gw = dbg.addDebuggee(g);
function test(when, what, expected) {
    let hits = 0;
    let result = "FAIL";
    dbg.onDebuggerStatement = frame => {
        if (hits++ == when)
            return {return: gw.makeDebuggeeValue(what)};
    };
    g.f(0).then(x => { result = x; });
    assertEq(hits, 1);
    drainJobQueue();
    assertEq(hits, when + 1);
    assertEq(result, expected);
}

for (let i = 0; i < 2; i++) {
    test(i, "ok", "ok");
    test(i, g.Promise.resolve(37), 37);
}