onEnterFrame-async-resumption-01.js (1134B)
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.hit2 = false; 8 g.eval(`async function f(x) { await x; return "ponies"; }`); 9 10 let dbg = new Debugger; 11 let gw = dbg.addDebuggee(g); 12 let hits = 0; 13 let resumption = undefined; 14 dbg.onEnterFrame = frame => { 15 if (frame.type == "call" && frame.callee.name === "f") { 16 frame.onPop = completion => { 17 assertEq(completion.return.isPromise, true); 18 hits++; 19 }; 20 21 // If we force-return a generator object here, the caller will receive 22 // a promise object resolved with that generator. 23 resumption = frame.eval(`(function* f2() { hit2 = true; })()`); 24 assertEq(resumption.return.class, "Generator"); 25 return resumption; 26 } 27 }; 28 29 let p = g.f(0); 30 assertEq(hits, 1); 31 assertEq(g.hit2, false); 32 let pw = gw.makeDebuggeeValue(p); 33 assertEq(pw.isPromise, true); 34 assertEq(pw.promiseState, "fulfilled"); 35 assertEq(pw.promiseValue, resumption.return);