| /* |
| * Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ |
| * Contributor: |
| * Jeff Walden <jwalden+code@mit.edu> |
| */ |
| |
| var gTestfile = 'add-property-non-extensible.js'; |
| //----------------------------------------------------------------------------- |
| var BUGNUMBER = 602144; |
| var summary = |
| 'Properly method-compile attempted addition of properties to ' + |
| 'non-extensible objects'; |
| |
| print(BUGNUMBER + ": " + summary); |
| |
| /************** |
| * BEGIN TEST * |
| **************/ |
| |
| // No property |
| |
| var o1 = {}; |
| for (var i = 0; i < 5; i++) |
| o1.a = 3; |
| assertEq(o1.a, 3); |
| |
| var o2 = Object.preventExtensions({}); |
| for (var i = 0; i < 5; i++) |
| o2.a = 3; |
| assertEq(Object.getOwnPropertyDescriptor(o2, "a"), undefined); |
| |
| var o3 = Object.seal({}); |
| for (var i = 0; i < 5; i++) |
| o3.a = 3; |
| assertEq(Object.getOwnPropertyDescriptor(o3, "a"), undefined); |
| |
| var o4 = Object.freeze({}); |
| for (var i = 0; i < 5; i++) |
| o4.a = 3; |
| assertEq(Object.getOwnPropertyDescriptor(o4, "a"), undefined); |
| |
| |
| // Has property |
| |
| var o5 = { a: 2 }; |
| for (var i = 0; i < 5; i++) |
| o5.a = 3; |
| assertEq(o5.a, 3); |
| |
| var o6 = Object.preventExtensions({ a: 2 }); |
| for (var i = 0; i < 5; i++) |
| o6.a = 3; |
| assertEq(o6.a, 3); |
| |
| var o7 = Object.seal({ a: 2 }); |
| for (var i = 0; i < 5; i++) |
| o7.a = 3; |
| assertEq(o7.a, 3); |
| |
| var o8 = Object.freeze({ a: 2 }); |
| for (var i = 0; i < 5; i++) |
| o8.a = 3; |
| assertEq(o8.a, 2); |
| |
| |
| // Extensible, hit up the prototype chain |
| |
| var o9 = Object.create({ a: 2 }); |
| for (var i = 0; i < 5; i++) |
| o9.a = 3; |
| assertEq(o9.a, 3); |
| |
| var o10 = Object.create(Object.preventExtensions({ a: 2 })); |
| for (var i = 0; i < 5; i++) |
| o10.a = 3; |
| assertEq(o10.a, 3); |
| |
| var o11 = Object.create(Object.seal({ a: 2 })); |
| for (var i = 0; i < 5; i++) |
| o11.a = 3; |
| assertEq(o11.a, 3); |
| |
| var o12 = Object.create(Object.freeze({ a: 2 })); |
| for (var i = 0; i < 5; i++) |
| o12.a = 3; |
| assertEq(Object.getOwnPropertyDescriptor(o12, "a"), undefined); |
| |
| |
| // Not extensible, hit up the prototype chain |
| |
| var o13 = Object.preventExtensions(Object.create({ a: 2 })); |
| for (var i = 0; i < 5; i++) |
| o13.a = 3; |
| assertEq(Object.getOwnPropertyDescriptor(o13, "a"), undefined); |
| |
| var o14 = |
| Object.preventExtensions(Object.create(Object.preventExtensions({ a: 2 }))); |
| for (var i = 0; i < 5; i++) |
| o14.a = 3; |
| assertEq(Object.getOwnPropertyDescriptor(o14, "a"), undefined); |
| |
| var o15 = Object.preventExtensions(Object.create(Object.seal({ a: 2 }))); |
| for (var i = 0; i < 5; i++) |
| o15.a = 3; |
| assertEq(Object.getOwnPropertyDescriptor(o15, "a"), undefined); |
| |
| var o16 = Object.preventExtensions(Object.create(Object.freeze({ a: 2 }))); |
| for (var i = 0; i < 5; i++) |
| o16.a = 3; |
| assertEq(Object.getOwnPropertyDescriptor(o16, "a"), undefined); |
| |
| |
| /******************************************************************************/ |
| |
| reportCompare(true, true); |
| |
| print("All tests passed!"); |