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'); | |
135 </script> | 54 </script> |
OLD | NEW |