tor-browser

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

testDirectProxySetFailure.js (1015B)


      1 // Test handling of false return from a handler.set() hook.
      2 
      3 load(libdir + "asserts.js");
      4 
      5 var obj = {x: 1};
      6 var p = new Proxy(obj, {
      7    set(target, key, value, receiver) { return false; }
      8 });
      9 
     10 // Failing to set a property is a no-op in non-strict code.
     11 assertEq(p.x = 2, 2);
     12 assertEq(obj.x, 1);
     13 
     14 // It's a TypeError in strict mode code.
     15 assertThrowsInstanceOf(() => { "use strict"; p.x = 2; }, TypeError);
     16 assertEq(obj.x, 1);
     17 
     18 // Even if the value doesn't change.
     19 assertThrowsInstanceOf(() => { "use strict"; p.x = 1; }, TypeError);
     20 assertEq(obj.x, 1);
     21 
     22 // Even if the target property doesn't already exist.
     23 assertThrowsInstanceOf(() => { "use strict"; p.z = 1; }, TypeError);
     24 assertEq("z" in obj, false);
     25 
     26 // [].sort() mutates its operand only by doing strict [[Set]] calls.
     27 var arr = ["not", "already", "in", "order"];
     28 var p2 = new Proxy(arr, {
     29    set(target, key, value, receiver) { return false; }
     30 });
     31 assertThrowsInstanceOf(() => p2.sort(), TypeError);
     32 assertDeepEq(arr, ["not", "already", "in", "order"]);