tor-browser

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

Environment-unscopables.js (954B)


      1 // An Environment for a `with` statement does not observe bindings ruled out by @@unscopables.
      2 
      3 load(libdir + "asserts.js");
      4 
      5 let g = newGlobal({newCompartment: true});
      6 g.eval(`
      7    let x = 'global';
      8    function f() {
      9        let obj = {
     10            x: 'obj',
     11            y: 'obj',
     12            [Symbol.unscopables]: {x: 1},
     13        };
     14        with (obj)
     15            debugger;
     16    }
     17 `);
     18 let dbg = Debugger(g);
     19 let hits = 0;
     20 dbg.onDebuggerStatement = function (frame) {
     21    let env = frame.environment;
     22 
     23    assertEq(env.find("x") !== env, true);
     24    assertEq(env.names().indexOf("x"), -1);
     25    assertEq(env.getVariable("x"), undefined);
     26    assertThrowsInstanceOf(() => env.setVariable("x", 7), TypeError);
     27 
     28    assertEq(env.find("y") === env, true);
     29    assertEq(env.getVariable("y"), "obj");
     30    env.setVariable("y", 8);
     31 
     32    assertEq(frame.eval("x").return, "global");
     33    assertEq(frame.eval("y").return, 8);
     34    hits++;
     35 };
     36 g.f();
     37 assertEq(hits, 1);