onEnterFrame-async-resumption-02.js (984B)
1 // A Debugger can {throw:} from onEnterFrame in an async function. 2 // The resulting promise (if any) is rejected with the thrown error value. 3 4 load(libdir + "asserts.js"); 5 6 let g = newGlobal({newCompartment: true}); 7 g.eval(` 8 async function f() { await 1; } 9 var err = new TypeError("object too hairy"); 10 `); 11 12 let dbg = new Debugger; 13 let gw = dbg.addDebuggee(g); 14 let errw = gw.makeDebuggeeValue(g.err); 15 16 // Repeat the test for each onEnterFrame event. 17 // It fires up to two times: 18 // - when the async function g.f is called; 19 // - when we resume after the await to run to the end. 20 for (let when = 0; when < 2; when++) { 21 let hits = 0; 22 dbg.onEnterFrame = frame => { 23 return hits++ < when ? undefined : {throw: errw}; 24 }; 25 26 let result = undefined; 27 g.f() 28 .then(value => { result = {returned: value}; }) 29 .catch(err => { result = {threw: err}; }); 30 31 drainJobQueue(); 32 33 assertEq(hits, when + 1); 34 assertDeepEq(result, {threw: g.err}); 35 }