failure-on-resume.js (1607B)
1 const dbgGlobal = newGlobal({ newCompartment: true }); 2 dbgGlobal.parent = this; 3 dbgGlobal.eval(` 4 var entered = 0; 5 var forceReturn = false; 6 Debugger(parent).onEnterFrame = function () { 7 entered++; 8 if (forceReturn) { 9 return { return: "force return" }; 10 } 11 return undefined; 12 }; 13 `); 14 15 { 16 function* f1() { yield 10; }; 17 18 dbgGlobal.entered = 0; 19 let g = f1(); 20 assertEq(dbgGlobal.entered, 1); 21 dbgGlobal.forceReturn = true; 22 let ret = g.next(); 23 dbgGlobal.forceReturn = false; 24 assertEq(dbgGlobal.entered, 2); 25 26 assertEq(ret.value, "force return"); 27 } 28 29 { 30 async function f2() { await {}; } 31 32 dbgGlobal.entered = 0; 33 let p = f2(); 34 assertEq(dbgGlobal.entered, 1); 35 dbgGlobal.forceReturn = true; 36 drainJobQueue(); 37 dbgGlobal.forceReturn = false; 38 assertEq(dbgGlobal.entered, 2); 39 40 let ret = null; 41 p.then(x => ret = x); 42 drainJobQueue(); 43 assertEq(ret, "force return"); 44 } 45 46 { 47 async function* f3() { await {}; } 48 49 dbgGlobal.entered = 0; 50 let g = f3(); 51 assertEq(dbgGlobal.entered, 1); 52 dbgGlobal.forceReturn = true; 53 let p = g.next(); 54 dbgGlobal.forceReturn = false; 55 assertEq(dbgGlobal.entered, 2); 56 57 let ret = null; 58 p.then(v => ret = v); 59 drainJobQueue(); 60 assertEq(ret.value, "force return"); 61 } 62 63 { 64 let m = registerModule("1", parseModule("await {};")); 65 moduleLink(m); 66 67 dbgGlobal.entered = 0; 68 let p = moduleEvaluate(m); 69 assertEq(dbgGlobal.entered, 1); 70 dbgGlobal.forceReturn = true; 71 drainJobQueue(); 72 dbgGlobal.forceReturn = false; 73 assertEq(dbgGlobal.entered, 2); 74 75 let ret = null; 76 p.then(x => ret = x); 77 drainJobQueue(); 78 assertEq(ret, undefined); 79 }