onDebuggerStatement-async-resumption-01.js (895B)
1 // A Debugger can {return:} from onDebuggerStatement in an async function. 2 // The async function's promise is resolved with the returned value. 3 4 load(libdir + "asserts.js"); 5 6 let g = newGlobal({newCompartment: true}); 7 g.eval(` 8 async function f(x) { 9 debugger; // when==0 to force return here 10 await x; 11 debugger; // when==1 to force return here 12 } 13 `); 14 15 let dbg = new Debugger; 16 let gw = dbg.addDebuggee(g); 17 function test(when, what, expected) { 18 let hits = 0; 19 let result = "FAIL"; 20 dbg.onDebuggerStatement = frame => { 21 if (hits++ == when) 22 return {return: gw.makeDebuggeeValue(what)}; 23 }; 24 g.f(0).then(x => { result = x; }); 25 assertEq(hits, 1); 26 drainJobQueue(); 27 assertEq(hits, when + 1); 28 assertEq(result, expected); 29 } 30 31 for (let i = 0; i < 2; i++) { 32 test(i, "ok", "ok"); 33 test(i, g.Promise.resolve(37), 37); 34 }