tor-browser

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

basic.js (2056B)


      1 function getLogString(obj) {
      2    let log = getWatchtowerLog();
      3    return log.map(item => {
      4        assertEq(item.object, obj);
      5        if (typeof item.extra === "symbol") {
      6            item.extra = "<symbol>";
      7        }
      8        return item.kind + (item.extra ? ": " + item.extra : "");
      9    }).join("\n");
     10 }
     11 
     12 function testBasic() {
     13    let o = {};
     14    addWatchtowerTarget(o);
     15 
     16    o.x = 1;
     17    o.y = 2;
     18    o[Symbol()] = 3;
     19    Object.defineProperty(o, "foo", {enumerable: false, configurable: false, value: 1});
     20    Object.defineProperty(o, "getter", {get() { return 123; }});
     21    o.__proto__ = {};
     22    o.__proto__ = null;
     23    o[12345] = 1; // Sparse elements are included for now.
     24    delete o.x;
     25    Object.defineProperty(o, "y", {writable: false});
     26    Object.defineProperty(o, "x", {value: 0});
     27    Object.seal(o);
     28    Object.freeze(o);
     29 
     30    let log = getLogString(o);
     31    assertEq(log,
     32 `add-prop: x
     33 add-prop: y
     34 add-prop: <symbol>
     35 add-prop: foo
     36 add-prop: getter
     37 proto-change
     38 proto-change
     39 add-prop: 12345
     40 remove-prop: x
     41 change-prop-flags: y
     42 add-prop: x
     43 freeze-or-seal
     44 freeze-or-seal`);
     45 }
     46 for (var i = 0; i < 20; i++) {
     47    testBasic();
     48 }
     49 
     50 // Object.assign edge case.
     51 function testAssign() {
     52    let o = {};
     53    o.x = 1;
     54    delete o.x;
     55    let from = {x: 1, y: 2, z: 3, a: 4};
     56    addWatchtowerTarget(o);
     57    addWatchtowerTarget(from);
     58    Object.assign(o, from);
     59    let log = getLogString(o);
     60    assertEq(log, "add-prop: x\nadd-prop: y\nadd-prop: z\nadd-prop: a");
     61 }
     62 testAssign();
     63 
     64 function testJit() {
     65    for (var i = 0; i < 20; i++) {
     66        let o = {};
     67        addWatchtowerTarget(o);
     68        o.x = 1;
     69        o.y = 2;
     70        let log = getLogString(o);
     71        assertEq(log, "add-prop: x\nadd-prop: y");
     72    }
     73 }
     74 testJit();
     75 
     76 // array.length is a custom data property.
     77 function testCustomDataProp() {
     78    let o = [];
     79    addWatchtowerTarget(o);
     80 
     81    Object.defineProperty(o, "length", {writable: false});
     82    let log = getLogString(o);
     83    assertEq(log, "change-prop-flags: length");
     84 }
     85 for (var i = 0; i < 20; i++) {
     86    testCustomDataProp();
     87 }