tor-browser

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

Object-seal-01.js (2388B)


      1 // Basic tests for obj.{seal,freeze,preventExtensions,isSealed,isFrozen,isExtensible}.
      2 
      3 var g = newGlobal({newCompartment: true});
      4 var dbg = new Debugger;
      5 var gw = dbg.addDebuggee(g);
      6 
      7 g.eval("function compareObjects() {\n" +
      8       "    assertEq(Object.isExtensible(x), Object.isExtensible(y));\n" +
      9       "    var xnames = Object.getOwnPropertyNames(x).sort();\n" +
     10       "    var ynames = Object.getOwnPropertyNames(y).sort();\n" +
     11       "    assertEq(xnames.length, ynames.length);\n" +
     12       "    for (var i = 0; i < xnames.length; i++) {\n" +
     13       "        assertEq(xnames[i], ynames[i]);\n" +
     14       "        var name = xnames[i];\n" +
     15       "        var xd = Object.getOwnPropertyDescriptor(x, name);\n" +
     16       "        var yd = Object.getOwnPropertyDescriptor(y, name);\n" +
     17       "        assertEq(xd.configurable, yd.configurable, code + '.' + name + ' .configurable');\n" +
     18       "        assertEq(xd.enumerable, yd.enumerable, code + '.' + name + ' .enumerable');\n" +
     19       "        assertEq(xd.writable, yd.writable, code + '.' + name + ' .writable');\n" +
     20       "    }\n" +
     21       "}\n");
     22 
     23 function test(code) {
     24    g.code = code;
     25    g.eval("x = (" + code + ");");
     26    g.eval("y = (" + code + ");");
     27    var xw = gw.getOwnPropertyDescriptor("x").value;
     28 
     29    function check() {
     30        // The Debugger.Object seal/freeze/preventExtensions methods
     31        // had the same effect as the corresponding ES5 Object methods.
     32        g.compareObjects();
     33 
     34        // The Debugger.Object introspection methods agree with the ES5 Object methods.
     35        assertEq(xw.isExtensible(), g.Object.isExtensible(g.x), code + ' isExtensible');
     36        assertEq(xw.isSealed(), g.Object.isSealed(g.x), code + ' isSealed');
     37        assertEq(xw.isFrozen(), g.Object.isFrozen(g.x), code + ' isFrozen');
     38    }
     39 
     40    check();
     41 
     42    xw.preventExtensions();
     43    assertEq(g.Object.isExtensible(g.x), false, code + ' preventExtensions');
     44    g.Object.preventExtensions(g.y);
     45    check();
     46 
     47    xw.seal();
     48    assertEq(g.Object.isSealed(g.x), true, code + ' seal');
     49    g.Object.seal(g.y);
     50    check();
     51 
     52    xw.freeze();
     53    assertEq(g.Object.isFrozen(g.x), true, code + ' freeze');
     54    g.Object.freeze(g.y);
     55    check();
     56 }
     57 
     58 test("{}");
     59 test("{a: [1], get b() { return -1; }}");
     60 test("Object.create(null, {x: {value: 3}, y: {get: Math.min}})");
     61 test("[]");
     62 test("[,,,,,]");
     63 test("[0, 1, 2]");