onEnterFrame-async-resumption-06.js (1317B)
1 // A Debugger can {return:} from the first onEnterFrame for an async function. 2 // (The exact behavior is undocumented; we're testing that it doesn't crash.) 3 4 ignoreUnhandledRejections(); 5 6 let g = newGlobal({newCompartment: true}); 7 g.eval(`async function f(x) { await x; return "ponies"; }`); 8 g.eval(`async function f2(x) { await x; return "moar ponies"; }`); 9 10 let dbg = new Debugger; 11 let gw = dbg.addDebuggee(g); 12 let hits = 0; 13 let resumption = undefined; 14 let savedAsyncGen = undefined; 15 dbg.onEnterFrame = frame => { 16 if (frame.type == "call" && frame.callee.name === "f2") { 17 frame.onPop = completion => { 18 if (savedAsyncGen === undefined) { 19 savedAsyncGen = completion.return; 20 } 21 }; 22 } 23 if (frame.type == "call" && frame.callee.name === "f") { 24 frame.onPop = completion => { 25 hits++; 26 }; 27 28 return {return: savedAsyncGen}; 29 } 30 }; 31 32 let p2 = g.f2(0); 33 let p = g.f(0); 34 35 assertEq(hits, 1); 36 37 drainJobQueue(); 38 39 assertEq(hits, 1); 40 41 let pw2 = gw.makeDebuggeeValue(p2); 42 assertEq(pw2.isPromise, true); 43 assertEq(pw2.promiseState, "fulfilled"); 44 assertEq(pw2.promiseValue, "moar ponies"); 45 46 let pw = gw.makeDebuggeeValue(p); 47 assertEq(pw.isPromise, true); 48 assertEq(pw.promiseState, "fulfilled"); 49 assertEq(pw.promiseValue, "moar ponies");