Frame-environment-08.js (2237B)
1 // |jit-test| error:all-jobs-completed-successfully 2 // Test that Debugger.Frame.prototype.environment works on suspended 3 // async generators. 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 await promises.top; 26 { 27 let block = "block"; 28 await promises.block; 29 } 30 for (let loop of ["loop"]) { 31 await promises.loop; 32 } 33 try { 34 throw "err"; 35 } catch (err) { 36 await promises.catch; 37 } 38 return value; 39 } 40 `); 41 42 const waitForOnPop = frame => new Promise(r => { 43 assertEq(frame.onPop, undefined); 44 frame.onPop = () => { 45 frame.onPop = undefined; 46 r(); 47 }; 48 }); 49 50 let frame; 51 dbg.onEnterFrame = f => { 52 frame = f; 53 dbg.onEnterFrame = undefined; 54 }; 55 56 (async () => { 57 const it = g.f(); 58 59 assertEq(!!frame, true); 60 61 let promise = it.next(); 62 63 assertEq( 64 JSON.stringify(frame.environment.names()), 65 JSON.stringify(["arguments", "promises", "value"]) 66 ); 67 68 //FIXME assertEq(frame.environment.getVariable("value"), 42); 69 70 frame.environment.setVariable("value", 43); 71 72 g.resolveTop(); 73 await waitForOnPop(frame); 74 75 assertEq( 76 JSON.stringify(frame.environment.names()), 77 JSON.stringify(["block"]) 78 ); 79 assertEq(frame.environment.getVariable("block"), "block"); 80 81 g.resolveBlock(); 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 g.resolveLoop(); 91 await waitForOnPop(frame); 92 93 assertEq( 94 JSON.stringify(frame.environment.names()), 95 JSON.stringify(["err"]) 96 ); 97 assertEq(frame.environment.getVariable("err"), "err"); 98 99 g.resolveCatch(); 100 const result = await promise; 101 102 assertEq(result.done, true); 103 //FIXME assertEq(result.value, 43); 104 105 assertThrowsInstanceOf(() => frame.environment, Error); 106 107 throw "all-jobs-completed-successfully"; 108 })();