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'); |
100 </script> | 179 </script> |
OLD | NEW |