tor-browser

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

getter-primitive-value.js (2974B)


      1 function testNativeGetter() {
      2    function test() {
      3        var xs = [Symbol("a"), Symbol("b")];
      4        var ys = ["a", "b"];
      5 
      6        for (var i = 0; i < 100; ++i) {
      7            var r = xs[i & 1].description;
      8            assertEq(r, ys[i & 1]);
      9        }
     10    }
     11    for (var i = 0; i < 2; ++i) test();
     12 }
     13 testNativeGetter();
     14 
     15 function testScriptedGetter() {
     16    Object.defineProperty(Symbol.prototype, "desc", {
     17        get() {
     18            "use strict";
     19            assertEq(typeof this, "symbol");
     20            return this.description;
     21        }
     22    });
     23 
     24    function test() {
     25        var xs = [Symbol("a"), Symbol("b")];
     26        var ys = ["a", "b"];
     27 
     28        for (var i = 0; i < 100; ++i) {
     29            var r = xs[i & 1].desc;
     30            assertEq(r, ys[i & 1]);
     31        }
     32    }
     33    for (var i = 0; i < 2; ++i) test();
     34 }
     35 testScriptedGetter();
     36 
     37 function testScriptedGetterNonStrict() {
     38    Object.defineProperty(Symbol.prototype, "desc_nonstrict", {
     39        get() {
     40            assertEq(typeof this, "object");
     41            return this.description;
     42        }
     43    });
     44 
     45    function test() {
     46        var xs = [Symbol("a"), Symbol("b")];
     47        var ys = ["a", "b"];
     48 
     49        for (var i = 0; i < 100; ++i) {
     50            var r = xs[i & 1].desc_nonstrict;
     51            assertEq(r, ys[i & 1]);
     52        }
     53    }
     54    for (var i = 0; i < 2; ++i) test();
     55 }
     56 testScriptedGetterNonStrict();
     57 
     58 function testNativeGetterPrototype() {
     59    Object.defineProperty(Object.prototype, "description_proto",
     60        Object.getOwnPropertyDescriptor(Symbol.prototype, "description"));
     61 
     62    function test() {
     63        var xs = [Symbol("a"), Symbol("b")];
     64        var ys = ["a", "b"];
     65 
     66        for (var i = 0; i < 100; ++i) {
     67            var r = xs[i & 1].description_proto;
     68            assertEq(r, ys[i & 1]);
     69        }
     70    }
     71    for (var i = 0; i < 2; ++i) test();
     72 }
     73 testNativeGetterPrototype();
     74 
     75 function testScriptedGetterPrototype() {
     76    Object.defineProperty(Object.prototype, "desc_proto", {
     77        get() {
     78            "use strict";
     79            assertEq(typeof this, "symbol");
     80            return this.description;
     81        }
     82    });
     83 
     84    function test() {
     85        var xs = [Symbol("a"), Symbol("b")];
     86        var ys = ["a", "b"];
     87 
     88        for (var i = 0; i < 100; ++i) {
     89            var r = xs[i & 1].desc_proto;
     90            assertEq(r, ys[i & 1]);
     91        }
     92    }
     93    for (var i = 0; i < 2; ++i) test();
     94 }
     95 testScriptedGetterPrototype();
     96 
     97 function testScriptedGetterNonStrictPrototype() {
     98    Object.defineProperty(Object.prototype, "desc_nonstrict_proto", {
     99        get() {
    100            assertEq(typeof this, "object");
    101            return this.description;
    102        }
    103    });
    104 
    105    function test() {
    106        var xs = [Symbol("a"), Symbol("b")];
    107        var ys = ["a", "b"];
    108 
    109        for (var i = 0; i < 100; ++i) {
    110            var r = xs[i & 1].desc_nonstrict_proto;
    111            assertEq(r, ys[i & 1]);
    112        }
    113    }
    114    for (var i = 0; i < 2; ++i) test();
    115 }
    116 testScriptedGetterNonStrictPrototype();