Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / tests / ecma_5 / Object / mutation-prevention-methods.js
1 /*
2  * Any copyright is dedicated to the Public Domain.
3  * http://creativecommons.org/licenses/publicdomain/
4  * Contributor:
5  *   Jeff Walden <jwalden+code@mit.edu>
6  */
7
8 var gTestfile = 'mutation-prevention-methods.js';
9 //-----------------------------------------------------------------------------
10 var BUGNUMBER = 492849;
11 var summary = 'Object.is{Sealed,Frozen}, Object.{seal,freeze}';
12
13 print(BUGNUMBER + ": " + summary);
14
15 /**************
16  * BEGIN TEST *
17  **************/
18
19 // Empty object
20
21 var o1 = {};
22
23 assertEq(Object.isExtensible(o1), true);
24 assertEq(Object.isSealed(o1), false);
25 assertEq(Object.isFrozen(o1), false);
26
27 Object.preventExtensions(o1);
28
29 // An non-extensible empty object has no properties, so it is vacuously sealed
30 // and frozen.
31 assertEq(Object.isExtensible(o1), false);
32 assertEq(Object.isSealed(o1), true);
33 assertEq(Object.isFrozen(o1), true);
34
35
36 // Object with a data property
37
38 var o2 = { 1: 2 };
39
40 assertEq(Object.isExtensible(o2), true);
41 assertEq(Object.isSealed(o2), false);
42 assertEq(Object.isFrozen(o2), false);
43
44 Object.preventExtensions(o2);
45
46 assertEq(Object.isExtensible(o2), false);
47 assertEq(Object.isSealed(o2), false);
48 assertEq(Object.isFrozen(o2), false);
49
50 Object.seal(o2);
51
52 assertEq(Object.isExtensible(o2), false);
53 assertEq(Object.isSealed(o2), true);
54 assertEq(Object.isFrozen(o2), false);
55
56 assertEq(o2[1], 2);
57
58 var desc;
59
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);
66
67 o2[1] = 17;
68
69 assertEq(o2[1], 17);
70
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);
77
78 Object.freeze(o2);
79
80 assertEq(o2[1], 17);
81
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);
88
89
90 // Object with an accessor property
91
92 var o3 = { get foo() { return 17; } };
93
94 assertEq(Object.isExtensible(o3), true);
95 assertEq(Object.isSealed(o3), false);
96 assertEq(Object.isFrozen(o3), false);
97
98 Object.preventExtensions(o3);
99
100 assertEq(Object.isExtensible(o3), false);
101 assertEq(Object.isSealed(o3), false);
102 assertEq(Object.isFrozen(o3), false);
103
104 Object.seal(o3);
105
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
108 // vacuously frozen.
109 assertEq(Object.isExtensible(o3), false);
110 assertEq(Object.isSealed(o3), true);
111 assertEq(Object.isFrozen(o3), true);
112
113 Object.freeze(o3);
114
115 assertEq(Object.isExtensible(o3), false);
116 assertEq(Object.isSealed(o3), true);
117 assertEq(Object.isFrozen(o3), true);
118
119
120 /******************************************************************************/
121
122 reportCompare(true, true);
123
124 print("All tests passed!");