tor-browser

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

unscopables-mutation.js (1255B)


      1 // SKIP test262 export
      2 // Pending review.
      3 
      4 // When obj[@@unscopables].x changes, bindings appear and disappear accordingly.
      5 
      6 let x = "global";
      7 function getX() { return x; }
      8 
      9 let unscopables = {x: true};
     10 let obj = {x: "obj", [Symbol.unscopables]: unscopables};
     11 
     12 with (obj) {
     13    assertEq(x, "global");
     14    x = "global-1";
     15    assertEq(x, "global-1");
     16    assertEq(obj.x, "obj");
     17 
     18    unscopables.x = false;  // suddenly x appears in the with-environment
     19 
     20    assertEq(x, "obj");
     21    x = "obj-1";
     22    assertEq(getX(), "global-1");  // unchanged
     23    assertEq(obj.x, "obj-1");
     24 
     25    unscopables.x = true;  // *poof*
     26 
     27    assertEq(x, "global-1");
     28    x = "global-2";
     29    assertEq(getX(), "global-2");
     30    assertEq(obj.x, "obj-1");  // unchanged
     31 
     32    // The determination of which binding is assigned happens when the LHS of
     33    // assignment is evaluated, before the RHS. This is observable if we make
     34    // the binding appear or disappear during evaluation of the RHS, before
     35    // assigning.
     36    x = (unscopables.x = false, "global-3");
     37    assertEq(getX(), "global-3");
     38    assertEq(obj.x, "obj-1");
     39 
     40    x = (unscopables.x = true, "obj-2");
     41    assertEq(getX(), "global-3");
     42    assertEq(obj.x, "obj-2");
     43 }
     44 
     45 assertEq(x, "global-3");
     46 
     47 reportCompare(0, 0);