tor-browser

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

testDirectProxyDefinePropertyFailure.js (867B)


      1 // Test handling of false return from a handler.defineProperty() hook.
      2 
      3 load(libdir + "asserts.js");
      4 
      5 var obj = {x: 1, y: 2};
      6 var nope = false;
      7 var p = new Proxy(obj, {
      8    defineProperty(target, key, desc) { return nope; }
      9 });
     10 
     11 // Object.defineProperty throws on failure.
     12 print(1);
     13 assertThrowsInstanceOf(() => Object.defineProperty(p, "z", {value: 3}), TypeError);
     14 assertEq("z" in obj, false);
     15 assertThrowsInstanceOf(() => Object.defineProperty(p, "x", {value: 0}), TypeError);
     16 
     17 // Setting a property ultimately causes [[DefineOwnProperty]] to be called.
     18 // In strict mode code only, this is a TypeError.
     19 print(2);
     20 assertEq(p.z = 3, 3);
     21 assertThrowsInstanceOf(() => { "use strict"; p.z = 3; }, TypeError);
     22 
     23 // Other falsy values also trigger failure.
     24 print(3);
     25 for (nope of [0, -0, NaN, ""])
     26    assertThrowsInstanceOf(() => { "use strict"; p.z = 3; }, TypeError);