|
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 = 'add-property-non-extensible.js'; |
|
9 //----------------------------------------------------------------------------- |
|
10 var BUGNUMBER = 602144; |
|
11 var summary = |
|
12 'Properly method-compile attempted addition of properties to ' + |
|
13 'non-extensible objects'; |
|
14 |
|
15 print(BUGNUMBER + ": " + summary); |
|
16 |
|
17 /************** |
|
18 * BEGIN TEST * |
|
19 **************/ |
|
20 |
|
21 // No property |
|
22 |
|
23 var o1 = {}; |
|
24 for (var i = 0; i < 5; i++) |
|
25 o1.a = 3; |
|
26 assertEq(o1.a, 3); |
|
27 |
|
28 var o2 = Object.preventExtensions({}); |
|
29 for (var i = 0; i < 5; i++) |
|
30 o2.a = 3; |
|
31 assertEq(Object.getOwnPropertyDescriptor(o2, "a"), undefined); |
|
32 |
|
33 var o3 = Object.seal({}); |
|
34 for (var i = 0; i < 5; i++) |
|
35 o3.a = 3; |
|
36 assertEq(Object.getOwnPropertyDescriptor(o3, "a"), undefined); |
|
37 |
|
38 var o4 = Object.freeze({}); |
|
39 for (var i = 0; i < 5; i++) |
|
40 o4.a = 3; |
|
41 assertEq(Object.getOwnPropertyDescriptor(o4, "a"), undefined); |
|
42 |
|
43 |
|
44 // Has property |
|
45 |
|
46 var o5 = { a: 2 }; |
|
47 for (var i = 0; i < 5; i++) |
|
48 o5.a = 3; |
|
49 assertEq(o5.a, 3); |
|
50 |
|
51 var o6 = Object.preventExtensions({ a: 2 }); |
|
52 for (var i = 0; i < 5; i++) |
|
53 o6.a = 3; |
|
54 assertEq(o6.a, 3); |
|
55 |
|
56 var o7 = Object.seal({ a: 2 }); |
|
57 for (var i = 0; i < 5; i++) |
|
58 o7.a = 3; |
|
59 assertEq(o7.a, 3); |
|
60 |
|
61 var o8 = Object.freeze({ a: 2 }); |
|
62 for (var i = 0; i < 5; i++) |
|
63 o8.a = 3; |
|
64 assertEq(o8.a, 2); |
|
65 |
|
66 |
|
67 // Extensible, hit up the prototype chain |
|
68 |
|
69 var o9 = Object.create({ a: 2 }); |
|
70 for (var i = 0; i < 5; i++) |
|
71 o9.a = 3; |
|
72 assertEq(o9.a, 3); |
|
73 |
|
74 var o10 = Object.create(Object.preventExtensions({ a: 2 })); |
|
75 for (var i = 0; i < 5; i++) |
|
76 o10.a = 3; |
|
77 assertEq(o10.a, 3); |
|
78 |
|
79 var o11 = Object.create(Object.seal({ a: 2 })); |
|
80 for (var i = 0; i < 5; i++) |
|
81 o11.a = 3; |
|
82 assertEq(o11.a, 3); |
|
83 |
|
84 var o12 = Object.create(Object.freeze({ a: 2 })); |
|
85 for (var i = 0; i < 5; i++) |
|
86 o12.a = 3; |
|
87 assertEq(Object.getOwnPropertyDescriptor(o12, "a"), undefined); |
|
88 |
|
89 |
|
90 // Not extensible, hit up the prototype chain |
|
91 |
|
92 var o13 = Object.preventExtensions(Object.create({ a: 2 })); |
|
93 for (var i = 0; i < 5; i++) |
|
94 o13.a = 3; |
|
95 assertEq(Object.getOwnPropertyDescriptor(o13, "a"), undefined); |
|
96 |
|
97 var o14 = |
|
98 Object.preventExtensions(Object.create(Object.preventExtensions({ a: 2 }))); |
|
99 for (var i = 0; i < 5; i++) |
|
100 o14.a = 3; |
|
101 assertEq(Object.getOwnPropertyDescriptor(o14, "a"), undefined); |
|
102 |
|
103 var o15 = Object.preventExtensions(Object.create(Object.seal({ a: 2 }))); |
|
104 for (var i = 0; i < 5; i++) |
|
105 o15.a = 3; |
|
106 assertEq(Object.getOwnPropertyDescriptor(o15, "a"), undefined); |
|
107 |
|
108 var o16 = Object.preventExtensions(Object.create(Object.freeze({ a: 2 }))); |
|
109 for (var i = 0; i < 5; i++) |
|
110 o16.a = 3; |
|
111 assertEq(Object.getOwnPropertyDescriptor(o16, "a"), undefined); |
|
112 |
|
113 |
|
114 /******************************************************************************/ |
|
115 |
|
116 reportCompare(true, true); |
|
117 |
|
118 print("All tests passed!"); |