diff options
Diffstat (limited to 'js/src/jit-test/tests/debug/Frame-onPop-async-01.js')
-rw-r--r-- | js/src/jit-test/tests/debug/Frame-onPop-async-01.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Frame-onPop-async-01.js b/js/src/jit-test/tests/debug/Frame-onPop-async-01.js new file mode 100644 index 0000000000..8d491f3f7f --- /dev/null +++ b/js/src/jit-test/tests/debug/Frame-onPop-async-01.js @@ -0,0 +1,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"); |