OLD | NEW |
1 <!doctype html> | 1 <!doctype html> |
2 <meta charset=utf-8> | 2 <meta charset=utf-8> |
3 <link rel=help href=https://dom.spec.whatwg.org/#interface-htmlcollection> | 3 <link rel=help href=https://dom.spec.whatwg.org/#interface-htmlcollection> |
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 | 6 |
7 <div id=log></div> | 7 <div id=log></div> |
8 | 8 |
9 <!-- with no attribute --> | 9 <!-- with no attribute --> |
10 <span></span> | 10 <span></span> |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 test(function () { | 44 test(function () { |
45 var elem = document.createElement('foo'); | 45 var elem = document.createElement('foo'); |
46 this.add_cleanup(function () {elem.remove();}); | 46 this.add_cleanup(function () {elem.remove();}); |
47 document.body.appendChild(elem); | 47 document.body.appendChild(elem); |
48 | 48 |
49 var elements = document.getElementsByTagName("foo"); | 49 var elements = document.getElementsByTagName("foo"); |
50 elements.someProperty = "some value"; | 50 elements.someProperty = "some value"; |
51 | 51 |
52 assert_array_equals(Object.getOwnPropertyNames(elements), ['0', 'someProperty'
]); | 52 assert_array_equals(Object.getOwnPropertyNames(elements), ['0', 'someProperty'
]); |
53 }, 'Object.getOwnPropertyNames on HTMLCollection with expando object'); | 53 }, 'Object.getOwnPropertyNames on HTMLCollection with expando object'); |
| 54 |
| 55 test(function() { |
| 56 var elements = document.getElementsByTagName("span"); |
| 57 var old_item = elements["some-id"]; |
| 58 var old_desc = Object.getOwnPropertyDescriptor(elements, "some-id"); |
| 59 assert_equals(old_desc.value, old_item); |
| 60 assert_false(old_desc.enumerable); |
| 61 assert_true(old_desc.configurable); |
| 62 assert_false(old_desc.writable); |
| 63 |
| 64 elements["some-id"] = 5; |
| 65 assert_equals(elements["some-id"], old_item); |
| 66 assert_throws(new TypeError(), function() { |
| 67 "use strict"; |
| 68 elements["some-id"] = 5; |
| 69 }); |
| 70 assert_throws(new TypeError(), function() { |
| 71 Object.defineProperty(elements, "some-id", { value: 5 }); |
| 72 }); |
| 73 |
| 74 delete elements["some-id"]; |
| 75 assert_equals(elements["some-id"], old_item); |
| 76 |
| 77 assert_throws(new TypeError(), function() { |
| 78 "use strict"; |
| 79 delete elements["some-id"]; |
| 80 }); |
| 81 assert_equals(elements["some-id"], old_item); |
| 82 |
| 83 }, 'Trying to set an expando that would shadow an already-existing named propert
y'); |
| 84 |
| 85 test(function() { |
| 86 var elements = document.getElementsByTagName("span"); |
| 87 var old_item = elements["new-id"]; |
| 88 var old_desc = Object.getOwnPropertyDescriptor(elements, "new-id"); |
| 89 assert_equals(old_item, undefined); |
| 90 assert_equals(old_desc, undefined); |
| 91 |
| 92 elements["new-id"] = 5; |
| 93 assert_equals(elements["new-id"], 5); |
| 94 |
| 95 var span = document.createElement("span"); |
| 96 this.add_cleanup(function () {span.remove();}); |
| 97 span.id = "new-id"; |
| 98 document.body.appendChild(span); |
| 99 |
| 100 assert_equals(elements.namedItem("new-id"), span); |
| 101 assert_equals(elements["new-id"], 5); |
| 102 |
| 103 delete elements["new-id"]; |
| 104 assert_equals(elements["new-id"], span); |
| 105 }, 'Trying to set an expando that shadows a named property that gets added later
'); |
| 106 |
| 107 test(function() { |
| 108 var elements = document.getElementsByTagName("span"); |
| 109 var old_item = elements["new-id2"]; |
| 110 var old_desc = Object.getOwnPropertyDescriptor(elements, "new-id2"); |
| 111 assert_equals(old_item, undefined); |
| 112 assert_equals(old_desc, undefined); |
| 113 |
| 114 Object.defineProperty(elements, "new-id2", { configurable: false, writable: |
| 115 false, value: 5 }); |
| 116 assert_equals(elements["new-id2"], 5); |
| 117 |
| 118 var span = document.createElement("span"); |
| 119 this.add_cleanup(function () {span.remove();}); |
| 120 span.id = "new-id2"; |
| 121 document.body.appendChild(span); |
| 122 |
| 123 assert_equals(elements.namedItem("new-id2"), span); |
| 124 assert_equals(elements["new-id2"], 5); |
| 125 |
| 126 delete elements["new-id2"]; |
| 127 assert_equals(elements["new-id2"], 5); |
| 128 |
| 129 assert_throws(new TypeError(), function() { |
| 130 "use strict"; |
| 131 delete elements["new-id2"]; |
| 132 }); |
| 133 assert_equals(elements["new-id2"], 5); |
| 134 }, 'Trying to set a non-configurable expando that shadows a named property that
gets added later'); |
54 </script> | 135 </script> |
OLD | NEW |