tor-browser

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

testDirectProxySetReceiverLookup.js (1849B)


      1 // Assigning to a proxy with no set handler causes the proxy's
      2 // getOwnPropertyDescriptor handler to be called just before defineProperty
      3 // in some cases. (ES6 draft rev 28, 2014 Oct 14, 9.1.9 step 5.c.)
      4 
      5 var attrs = ["configurable", "enumerable", "writable", "value", "get", "set"];
      6 
      7 function test(target, id, existingDesc, expectedDesc) {
      8    var log = "";
      9    var p = new Proxy(target, {
     10        getOwnPropertyDescriptor(t, idarg) {
     11            assertEq(idarg, id);
     12            log += "g";
     13            return existingDesc;
     14        },
     15        defineProperty(t, idarg, desc) {
     16            assertEq(idarg, id);
     17            for (var attr of attrs) {
     18                var args = JSON.stringify([target, id, existingDesc]).slice(1, -1);
     19                assertEq(attr in desc, attr in expectedDesc,
     20                         `test(${args}), checking existence of desc.${attr}`);
     21                assertEq(desc[attr], expectedDesc[attr],
     22                         `test(${args}), checking value of desc.${attr}`);
     23            }
     24            log += "d";
     25            return true;
     26        }
     27    });
     28    p[id] = "pizza";
     29    assertEq(log, "gd");
     30 }
     31 
     32 var fullDesc = {
     33    configurable: true,
     34    enumerable: true,
     35    writable: true,
     36    value: "pizza"
     37 };
     38 var valueOnlyDesc = {
     39    value: "pizza"
     40 };
     41 var sealedDesc = {
     42    configurable: false,
     43    enumerable: true,
     44    writable: true,
     45    value: "pizza"
     46 };
     47 
     48 test({}, "x", undefined, fullDesc);
     49 test({}, "x", fullDesc, valueOnlyDesc);
     50 test({x: 1}, "x", undefined, fullDesc);
     51 test({x: 1}, "x", fullDesc, valueOnlyDesc);
     52 test(Object.seal({x: 1}), "x", sealedDesc, valueOnlyDesc);
     53 test(Object.create({x: 1}), "x", undefined, fullDesc);
     54 test([0, 1, 2], "2", undefined, fullDesc);
     55 test([0, 1, 2], "2", fullDesc, valueOnlyDesc);
     56 test([0, 1, 2], "3", undefined, fullDesc);
     57 test([0, 1, 2], "3", fullDesc, valueOnlyDesc);