OLD | NEW |
1 <!doctype html> | 1 <!doctype html> |
2 <meta charset=utf-8> | 2 <meta charset=utf-8> |
3 <title></title> | 3 <title></title> |
4 <script src=/resources/testharness.js></script> | 4 <script src=/resources/testharness.js></script> |
5 <script src=/resources/testharnessreport.js></script> | 5 <script src=/resources/testharnessreport.js></script> |
6 <!-- We want to use a tag name that will not interact with our test harness, | 6 <!-- We want to use a tag name that will not interact with our test harness, |
7 so just make one up. "foo" is a good one --> | 7 so just make one up. "foo" is a good one --> |
8 | 8 |
9 <!-- Ids that look like negative indices. These should come first, so we can | 9 <!-- Ids that look like negative indices. These should come first, so we can |
10 assert that lookups for nonnegative indices find these by index --> | 10 assert that lookups for nonnegative indices find these by index --> |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 assert_equals(collection.namedItem(4294967296), | 90 assert_equals(collection.namedItem(4294967296), |
91 document.getElementById("4294967296")); | 91 document.getElementById("4294967296")); |
92 assert_equals(collection.namedItem(4294967297), | 92 assert_equals(collection.namedItem(4294967297), |
93 document.getElementById("4294967297")); | 93 document.getElementById("4294967297")); |
94 assert_equals(collection[4294967293], undefined); | 94 assert_equals(collection[4294967293], undefined); |
95 assert_equals(collection[4294967294], undefined); | 95 assert_equals(collection[4294967294], undefined); |
96 assert_equals(collection[4294967295], document.getElementById("4294967295")); | 96 assert_equals(collection[4294967295], document.getElementById("4294967295")); |
97 assert_equals(collection[4294967296], document.getElementById("4294967296")); | 97 assert_equals(collection[4294967296], document.getElementById("4294967296")); |
98 assert_equals(collection[4294967297], document.getElementById("4294967297")); | 98 assert_equals(collection[4294967297], document.getElementById("4294967297")); |
99 }, "Handling of property names that look like integers around 2^32"); | 99 }, "Handling of property names that look like integers around 2^32"); |
100 | |
101 test(function() { | |
102 var elements = document.getElementsByTagName("foo"); | |
103 var old_item = elements[0]; | |
104 var old_desc = Object.getOwnPropertyDescriptor(elements, 0); | |
105 assert_equals(old_desc.value, old_item); | |
106 assert_true(old_desc.enumerable); | |
107 assert_true(old_desc.configurable); | |
108 assert_false(old_desc.writable); | |
109 | |
110 elements[0] = 5; | |
111 assert_equals(elements[0], old_item); | |
112 assert_throws(new TypeError(), function() { | |
113 "use strict"; | |
114 elements[0] = 5; | |
115 }); | |
116 assert_throws(new TypeError(), function() { | |
117 Object.defineProperty(elements, 0, { value: 5 }); | |
118 }); | |
119 | |
120 delete elements[0]; | |
121 assert_equals(elements[0], old_item); | |
122 | |
123 assert_throws(new TypeError(), function() { | |
124 "use strict"; | |
125 delete elements[0]; | |
126 }); | |
127 assert_equals(elements[0], old_item); | |
128 }, 'Trying to set an expando that would shadow an already-existing indexed prope
rty'); | |
129 | |
130 test(function() { | |
131 var elements = document.getElementsByTagName("foo"); | |
132 var idx = elements.length; | |
133 var old_item = elements[idx]; | |
134 var old_desc = Object.getOwnPropertyDescriptor(elements, idx); | |
135 assert_equals(old_item, undefined); | |
136 assert_equals(old_desc, undefined); | |
137 | |
138 // [[DefineOwnProperty]] will disallow defining an indexed expando. | |
139 elements[idx] = 5; | |
140 assert_equals(elements[idx], undefined); | |
141 assert_throws(new TypeError(), function() { | |
142 "use strict"; | |
143 elements[idx] = 5; | |
144 }); | |
145 assert_throws(new TypeError(), function() { | |
146 Object.defineProperty(elements, idx, { value: 5 }); | |
147 }); | |
148 | |
149 // Check that deletions out of range do not throw | |
150 delete elements[idx]; | |
151 (function() { | |
152 "use strict"; | |
153 delete elements[idx]; | |
154 })(); | |
155 }, 'Trying to set an expando with an indexed property name past the end of the l
ist'); | |
156 | |
157 test(function(){ | |
158 var elements = document.getElementsByTagName("foo"); | |
159 var old_item = elements[0]; | |
160 var old_desc = Object.getOwnPropertyDescriptor(elements, 0); | |
161 assert_equals(old_desc.value, old_item); | |
162 assert_true(old_desc.enumerable); | |
163 assert_true(old_desc.configurable); | |
164 assert_false(old_desc.writable); | |
165 | |
166 Object.prototype[0] = 5; | |
167 this.add_cleanup(function () { delete Object.prototype[0]; }); | |
168 assert_equals(elements[0], old_item); | |
169 | |
170 delete elements[0]; | |
171 assert_equals(elements[0], old_item); | |
172 | |
173 assert_throws(new TypeError(), function() { | |
174 "use strict"; | |
175 delete elements[0]; | |
176 }); | |
177 assert_equals(elements[0], old_item); | |
178 }, 'Trying to delete an indexed property name should never work'); | |
179 </script> | 100 </script> |
OLD | NEW |