Frame-environment-07.js (1516B)
1 // Test that Debugger.Frame.prototype.environment works on suspended generators. 2 3 load(libdir + "asserts.js"); 4 5 const g = newGlobal({ newCompartment: true }); 6 const dbg = new Debugger(g); 7 8 g.eval(` 9 function* f() { 10 var value = 42; 11 yield; 12 { 13 let block = "block"; 14 yield; 15 } 16 for (let loop of ["loop"]) { 17 yield; 18 } 19 try { 20 throw "err"; 21 } catch (err) { 22 yield; 23 } 24 return value; 25 } 26 `); 27 28 let frame; 29 dbg.onEnterFrame = f => { 30 frame = f; 31 dbg.onEnterFrame = undefined; 32 }; 33 34 const it = g.f(); 35 36 assertEq(!!frame, true); 37 38 let result = it.next(); 39 40 assertEq(result.done, false); 41 assertEq(result.value, undefined); 42 43 assertEq( 44 JSON.stringify(frame.environment.names()), 45 JSON.stringify(["arguments", "value"]) 46 ); 47 48 assertEq(frame.environment.getVariable("value"), 42); 49 50 frame.environment.setVariable("value", 43); 51 52 assertEq(frame.environment.getVariable("value"), 43); 53 54 result = it.next(); 55 56 assertEq( 57 JSON.stringify(frame.environment.names()), 58 JSON.stringify(["block"]) 59 ); 60 assertEq(frame.environment.getVariable("block"), "block"); 61 62 result = it.next(); 63 64 assertEq( 65 JSON.stringify(frame.environment.names()), 66 JSON.stringify(["loop"]) 67 ); 68 assertEq(frame.environment.getVariable("loop"), "loop"); 69 70 result = it.next(); 71 72 assertEq( 73 JSON.stringify(frame.environment.names()), 74 JSON.stringify(["err"]) 75 ); 76 assertEq(frame.environment.getVariable("err"), "err"); 77 78 result = it.next(); 79 80 assertEq(result.done, true); 81 assertEq(result.value, 43); 82 83 assertThrowsInstanceOf(() => frame.environment, Error);