tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);