/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ * Contributor: * Jeff Walden */ var gTestfile = 'mutation-prevention-methods.js'; //----------------------------------------------------------------------------- var BUGNUMBER = 492849; var summary = 'Object.is{Sealed,Frozen}, Object.{seal,freeze}'; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ // Empty object var o1 = {}; assertEq(Object.isExtensible(o1), true); assertEq(Object.isSealed(o1), false); assertEq(Object.isFrozen(o1), false); Object.preventExtensions(o1); // An non-extensible empty object has no properties, so it is vacuously sealed // and frozen. assertEq(Object.isExtensible(o1), false); assertEq(Object.isSealed(o1), true); assertEq(Object.isFrozen(o1), true); // Object with a data property var o2 = { 1: 2 }; assertEq(Object.isExtensible(o2), true); assertEq(Object.isSealed(o2), false); assertEq(Object.isFrozen(o2), false); Object.preventExtensions(o2); assertEq(Object.isExtensible(o2), false); assertEq(Object.isSealed(o2), false); assertEq(Object.isFrozen(o2), false); Object.seal(o2); assertEq(Object.isExtensible(o2), false); assertEq(Object.isSealed(o2), true); assertEq(Object.isFrozen(o2), false); assertEq(o2[1], 2); var desc; desc = Object.getOwnPropertyDescriptor(o2, "1"); assertEq(typeof desc, "object"); assertEq(desc.enumerable, true); assertEq(desc.configurable, false); assertEq(desc.value, 2); assertEq(desc.writable, true); o2[1] = 17; assertEq(o2[1], 17); desc = Object.getOwnPropertyDescriptor(o2, "1"); assertEq(typeof desc, "object"); assertEq(desc.enumerable, true); assertEq(desc.configurable, false); assertEq(desc.value, 17); assertEq(desc.writable, true); Object.freeze(o2); assertEq(o2[1], 17); desc = Object.getOwnPropertyDescriptor(o2, "1"); assertEq(typeof desc, "object"); assertEq(desc.enumerable, true); assertEq(desc.configurable, false); assertEq(desc.value, 17); assertEq(desc.writable, false); // Object with an accessor property var o3 = { get foo() { return 17; } }; assertEq(Object.isExtensible(o3), true); assertEq(Object.isSealed(o3), false); assertEq(Object.isFrozen(o3), false); Object.preventExtensions(o3); assertEq(Object.isExtensible(o3), false); assertEq(Object.isSealed(o3), false); assertEq(Object.isFrozen(o3), false); Object.seal(o3); // An accessor property in a sealed object is unchanged if that object is // frozen, so a sealed object containing only accessor properties is also // vacuously frozen. assertEq(Object.isExtensible(o3), false); assertEq(Object.isSealed(o3), true); assertEq(Object.isFrozen(o3), true); Object.freeze(o3); assertEq(Object.isExtensible(o3), false); assertEq(Object.isSealed(o3), true); assertEq(Object.isFrozen(o3), true); /******************************************************************************/ reportCompare(true, true); print("All tests passed!");