onEnterFrame-async-resumption-03.js (982B)
1 // A Debugger can {return:} from onEnterFrame at any resume point in an async function. 2 // The async function's promise is resolved with the returned value. 3 4 let g = newGlobal({newCompartment: true}); 5 g.eval(`async function f(x) { await x; }`); 6 7 let dbg = new Debugger(g); 8 function test(when) { 9 let hits = 0; 10 dbg.onEnterFrame = frame => { 11 if (frame.type == "call" && frame.callee.name === "f") { 12 if (hits++ == when) { 13 return {return: "exit"}; 14 } 15 } 16 }; 17 18 let result = undefined; 19 let finished = false; 20 g.f("hello").then(value => { result = value; finished = true; }); 21 drainJobQueue(); 22 assertEq(finished, true); 23 assertEq(hits, when + 1); 24 assertEq(result, "exit"); 25 } 26 27 // onEnterFrame with hits==0 is not a resume point; {return:} behaves differently there 28 // (see onEnterFrame-async-resumption-02.js). 29 test(1); // force return from first resume point, immediately after the await instruction