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