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.

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

mercurial