dom/bindings/test/test_defineProperty.html

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:c30fdada3999
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=910220
5 -->
6 <head>
7 <meta charset="utf-8">
8 <title>Test for Bug 910220</title>
9 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
11 </head>
12 <body>
13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=910220">Mozilla Bug 910220</a>
14 <p id="display"></p>
15 <div id="content" style="display: none">
16 <form name="x"></form>
17 </div>
18 <pre id="test">
19 </pre>
20 <script type="application/javascript">
21
22 /** Test for Bug 910220 **/
23
24 function getX() {
25 return "x";
26 }
27
28 function namedSetStrict(obj) {
29 "use strict";
30 var threw;
31 try {
32 obj.x = 5;
33 threw = false;
34 } catch (e) {
35 threw = true;
36 }
37 ok(threw,
38 "Should throw in strict mode when setting named property on " + obj);
39
40 try {
41 obj[getX()] = 5;
42 threw = false;
43 } catch (e) {
44 threw = true;
45 }
46 ok(threw,
47 "Should throw in strict mode when setting named property via SETELEM on " + obj);
48
49 try {
50 Object.defineProperty(obj, "x", { value: 17 });
51 threw = false;
52 } catch (e) {
53 threw = true;
54 }
55 ok(threw,
56 "Should throw in strict mode when defining named property on " + obj);
57 }
58 function namedSetNonStrict(obj) {
59 var threw;
60 try {
61 obj.x = 5;
62 threw = false;
63 } catch (e) {
64 threw = true;
65 }
66 ok(!threw,
67 "Should not throw in non-strict mode when setting named property on " + obj);
68
69 try {
70 obj[getX()] = 5;
71 threw = false;
72 } catch (e) {
73 threw = true;
74 }
75 ok(!threw,
76 "Should not throw in non-strict mode when setting named property via SETELEM on" + obj);
77
78 try {
79 Object.defineProperty(obj, "x", { value: 17 });
80 threw = false;
81 } catch (e) {
82 threw = true;
83 }
84 ok(threw,
85 "Should throw in non-strict mode when defining named property on " + obj);
86 }
87 for (var obj of [ document, document.forms ]) {
88 namedSetStrict(obj);
89 namedSetNonStrict(obj);
90 }
91
92 function indexedSetStrict(obj) {
93 "use strict";
94 var threw;
95 try {
96 obj[0] = 5;
97 threw = false;
98 } catch (e) {
99 threw = true;
100 }
101 ok(threw,
102 "Should throw in strict mode when setting indexed property on " + obj);
103
104 try {
105 obj[1000] = 5;
106 threw = false;
107 } catch (e) {
108 threw = true;
109 }
110 ok(threw,
111 "Should throw in strict mode when setting out of bounds indexed property on " + obj);
112
113 try {
114 Object.defineProperty(obj, "0", { value: 17 });
115 threw = false;
116 } catch (e) {
117 threw = true;
118 }
119 ok(threw,
120 "Should throw in strict mode when defining indexed property on " + obj);
121 }
122 function indexedSetNonStrict(obj) {
123 var threw;
124 try {
125 obj[0] = 5;
126 threw = false;
127 } catch (e) {
128 threw = true;
129 }
130 ok(!threw,
131 "Should not throw in non-strict mode when setting indexed property on " + obj);
132
133 try {
134 obj[1000] = 5;
135 threw = false;
136 } catch (e) {
137 threw = true;
138 }
139 ok(!threw,
140 "Should not throw in non-strict mode when setting out of bounds indexed property on " + obj);
141
142 try {
143 Object.defineProperty(obj, "0", { value: 17 });
144 threw = false;
145 } catch (e) {
146 threw = true;
147 }
148 ok(threw,
149 "Should throw in non-strict mode when defining indexed property on " + obj);
150 }
151 for (var obj of [ document.forms, document.childNodes ]) {
152 indexedSetStrict(obj);
153 indexedSetNonStrict(obj);
154 }
155 </script>
156 </body>
157 </html>

mercurial