|
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 = '15.2.3.10-01.js'; |
|
9 //----------------------------------------------------------------------------- |
|
10 var BUGNUMBER = 492849; |
|
11 var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible'; |
|
12 |
|
13 print(BUGNUMBER + ": " + summary); |
|
14 |
|
15 /************** |
|
16 * BEGIN TEST * |
|
17 **************/ |
|
18 |
|
19 function trySetProperty(o, p, v, strict) |
|
20 { |
|
21 function strictSetProperty() |
|
22 { |
|
23 "use strict"; |
|
24 o[p] = v; |
|
25 } |
|
26 |
|
27 function setProperty() |
|
28 { |
|
29 o[p] = v; |
|
30 } |
|
31 |
|
32 assertEq(Object.prototype.hasOwnProperty.call(o, p), false); |
|
33 |
|
34 try |
|
35 { |
|
36 if (strict) |
|
37 strictSetProperty(); |
|
38 else |
|
39 setProperty(); |
|
40 if (o[p] === v) |
|
41 return "set"; |
|
42 if (p in o) |
|
43 return "set-converted"; |
|
44 return "swallowed"; |
|
45 } |
|
46 catch (e) |
|
47 { |
|
48 return "throw"; |
|
49 } |
|
50 } |
|
51 |
|
52 function tryDefineProperty(o, p, v) |
|
53 { |
|
54 assertEq(Object.prototype.hasOwnProperty.call(o, p), false); |
|
55 |
|
56 try |
|
57 { |
|
58 Object.defineProperty(o, p, { value: v }); |
|
59 if (o[p] === v) |
|
60 return "set"; |
|
61 if (p in o) |
|
62 return "set-converted"; |
|
63 return "swallowed"; |
|
64 } |
|
65 catch (e) |
|
66 { |
|
67 return "throw"; |
|
68 } |
|
69 } |
|
70 |
|
71 assertEq(typeof Object.preventExtensions, "function"); |
|
72 assertEq(Object.preventExtensions.length, 1); |
|
73 |
|
74 var slowArray = [1, 2, 3]; |
|
75 slowArray.slow = 5; |
|
76 var objs = |
|
77 [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/]; |
|
78 |
|
79 for (var i = 0, sz = objs.length; i < sz; i++) |
|
80 { |
|
81 var o = objs[i]; |
|
82 assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?"); |
|
83 |
|
84 var o2 = Object.preventExtensions(o); |
|
85 assertEq(o, o2); |
|
86 |
|
87 assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?"); |
|
88 |
|
89 assertEq(trySetProperty(o, "baz", 17, true), "throw", |
|
90 "unexpected behavior for strict-mode property-addition to " + |
|
91 "object " + i); |
|
92 assertEq(trySetProperty(o, "baz", 17, false), "swallowed", |
|
93 "unexpected behavior for property-addition to object " + i); |
|
94 |
|
95 assertEq(tryDefineProperty(o, "baz", 17), "throw", |
|
96 "unexpected behavior for new property definition on object " + i); |
|
97 } |
|
98 |
|
99 /******************************************************************************/ |
|
100 |
|
101 reportCompare(true, true); |
|
102 |
|
103 print("All tests passed!"); |