2 * Any copyright is dedicated to the Public Domain.
3 * http://creativecommons.org/licenses/publicdomain/
5 * Jeff Walden <jwalden+code@mit.edu>
8 var gTestfile = 'mutation-prevention-methods.js';
9 //-----------------------------------------------------------------------------
10 var BUGNUMBER = 492849;
11 var summary = 'Object.is{Sealed,Frozen}, Object.{seal,freeze}';
13 print(BUGNUMBER + ": " + summary);
23 assertEq(Object.isExtensible(o1), true);
24 assertEq(Object.isSealed(o1), false);
25 assertEq(Object.isFrozen(o1), false);
27 Object.preventExtensions(o1);
29 // An non-extensible empty object has no properties, so it is vacuously sealed
31 assertEq(Object.isExtensible(o1), false);
32 assertEq(Object.isSealed(o1), true);
33 assertEq(Object.isFrozen(o1), true);
36 // Object with a data property
40 assertEq(Object.isExtensible(o2), true);
41 assertEq(Object.isSealed(o2), false);
42 assertEq(Object.isFrozen(o2), false);
44 Object.preventExtensions(o2);
46 assertEq(Object.isExtensible(o2), false);
47 assertEq(Object.isSealed(o2), false);
48 assertEq(Object.isFrozen(o2), false);
52 assertEq(Object.isExtensible(o2), false);
53 assertEq(Object.isSealed(o2), true);
54 assertEq(Object.isFrozen(o2), false);
60 desc = Object.getOwnPropertyDescriptor(o2, "1");
61 assertEq(typeof desc, "object");
62 assertEq(desc.enumerable, true);
63 assertEq(desc.configurable, false);
64 assertEq(desc.value, 2);
65 assertEq(desc.writable, true);
71 desc = Object.getOwnPropertyDescriptor(o2, "1");
72 assertEq(typeof desc, "object");
73 assertEq(desc.enumerable, true);
74 assertEq(desc.configurable, false);
75 assertEq(desc.value, 17);
76 assertEq(desc.writable, true);
82 desc = Object.getOwnPropertyDescriptor(o2, "1");
83 assertEq(typeof desc, "object");
84 assertEq(desc.enumerable, true);
85 assertEq(desc.configurable, false);
86 assertEq(desc.value, 17);
87 assertEq(desc.writable, false);
90 // Object with an accessor property
92 var o3 = { get foo() { return 17; } };
94 assertEq(Object.isExtensible(o3), true);
95 assertEq(Object.isSealed(o3), false);
96 assertEq(Object.isFrozen(o3), false);
98 Object.preventExtensions(o3);
100 assertEq(Object.isExtensible(o3), false);
101 assertEq(Object.isSealed(o3), false);
102 assertEq(Object.isFrozen(o3), false);
106 // An accessor property in a sealed object is unchanged if that object is
107 // frozen, so a sealed object containing only accessor properties is also
109 assertEq(Object.isExtensible(o3), false);
110 assertEq(Object.isSealed(o3), true);
111 assertEq(Object.isFrozen(o3), true);
115 assertEq(Object.isExtensible(o3), false);
116 assertEq(Object.isSealed(o3), true);
117 assertEq(Object.isFrozen(o3), true);
120 /******************************************************************************/
122 reportCompare(true, true);
124 print("All tests passed!");