js/src/jit-test/tests/debug/Object-seal-01.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Basic tests for obj.{seal,freeze,preventExtensions,isSealed,isFrozen,isExtensible}.
     3 var g = newGlobal();
     4 var dbg = new Debugger;
     5 var gw = dbg.addDebuggee(g);
     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");
    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;
    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();
    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     }
    40     check();
    42     xw.preventExtensions();
    43     assertEq(g.Object.isExtensible(g.x), false, code + ' preventExtensions');
    44     g.Object.preventExtensions(g.y);
    45     check();
    47     xw.seal();
    48     assertEq(g.Object.isSealed(g.x), true, code + ' seal');
    49     g.Object.seal(g.y);
    50     check();
    52     xw.freeze();
    53     assertEq(g.Object.isFrozen(g.x), true, code + ' freeze');
    54     g.Object.freeze(g.y);
    55     check();
    56 }
    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]");

mercurial