Frame-environment-06.js (2299B)
1 // |jit-test| error:all-jobs-completed-successfully 2 // Test that Debugger.Frame.prototype.environment works on suspended 3 // async function. 4 5 load(libdir + "asserts.js"); 6 7 const g = newGlobal({ newCompartment: true }); 8 const dbg = new Debugger(g); 9 10 g.eval(` 11 var resolveTop; 12 var resolveBlock; 13 var resolveLoop; 14 var resolveCatch; 15 16 async function f() { 17 var promises = { 18 top: new Promise(r => { resolveTop = r; }), 19 block: new Promise(r => { resolveBlock = r; }), 20 loop: new Promise(r => { resolveLoop = r; }), 21 catch: new Promise(r => { resolveCatch = r; }), 22 }; 23 24 var value = 42; 25 Promise.resolve().then(resolveTop); 26 await promises.top; 27 { 28 let block = "block"; 29 Promise.resolve().then(resolveBlock); 30 await promises.block; 31 } 32 for (let loop of ["loop"]) { 33 Promise.resolve().then(resolveLoop); 34 await promises.loop; 35 } 36 try { 37 throw "err"; 38 } catch (err) { 39 Promise.resolve().then(resolveCatch); 40 await promises.catch; 41 } 42 return value; 43 } 44 `); 45 46 const waitForOnPop = frame => new Promise(r => { 47 assertEq(frame.onPop, undefined); 48 frame.onPop = () => { 49 frame.onPop = undefined; 50 r(); 51 }; 52 }); 53 54 let frame; 55 dbg.onEnterFrame = f => { 56 frame = f; 57 dbg.onEnterFrame = undefined; 58 }; 59 60 (async () => { 61 const promise = g.f(); 62 63 assertEq(!!frame, true); 64 assertEq( 65 JSON.stringify(frame.environment.names()), 66 JSON.stringify(["arguments", "promises", "value"]) 67 ); 68 assertEq(frame.environment.getVariable("value"), 42); 69 70 frame.environment.setVariable("value", 43); 71 72 assertEq(frame.environment.getVariable("value"), 43); 73 74 await waitForOnPop(frame); 75 76 assertEq( 77 JSON.stringify(frame.environment.names()), 78 JSON.stringify(["block"]) 79 ); 80 assertEq(frame.environment.getVariable("block"), "block"); 81 82 await waitForOnPop(frame); 83 84 assertEq( 85 JSON.stringify(frame.environment.names()), 86 JSON.stringify(["loop"]) 87 ); 88 assertEq(frame.environment.getVariable("loop"), "loop"); 89 90 await waitForOnPop(frame); 91 92 assertEq( 93 JSON.stringify(frame.environment.names()), 94 JSON.stringify(["err"]) 95 ); 96 assertEq(frame.environment.getVariable("err"), "err"); 97 98 const result = await promise; 99 100 assertEq(result, 43); 101 102 assertThrowsInstanceOf(() => frame.environment, Error); 103 104 throw "all-jobs-completed-successfully"; 105 })();