Index: third_party/WebKit/LayoutTests/imported/wpt/dom/collections/HTMLCollection-supported-property-names.html |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/dom/collections/HTMLCollection-supported-property-names.html b/third_party/WebKit/LayoutTests/imported/wpt/dom/collections/HTMLCollection-supported-property-names.html |
index a37163b7d189c292336f17a5db8ba3c0ac512efa..0a9df1ad6606476c3f3463032957cec931af19b4 100644 |
--- a/third_party/WebKit/LayoutTests/imported/wpt/dom/collections/HTMLCollection-supported-property-names.html |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/dom/collections/HTMLCollection-supported-property-names.html |
@@ -51,4 +51,85 @@ test(function () { |
assert_array_equals(Object.getOwnPropertyNames(elements), ['0', 'someProperty']); |
}, 'Object.getOwnPropertyNames on HTMLCollection with expando object'); |
+ |
+test(function() { |
+ var elements = document.getElementsByTagName("span"); |
+ var old_item = elements["some-id"]; |
+ var old_desc = Object.getOwnPropertyDescriptor(elements, "some-id"); |
+ assert_equals(old_desc.value, old_item); |
+ assert_false(old_desc.enumerable); |
+ assert_true(old_desc.configurable); |
+ assert_false(old_desc.writable); |
+ |
+ elements["some-id"] = 5; |
+ assert_equals(elements["some-id"], old_item); |
+ assert_throws(new TypeError(), function() { |
+ "use strict"; |
+ elements["some-id"] = 5; |
+ }); |
+ assert_throws(new TypeError(), function() { |
+ Object.defineProperty(elements, "some-id", { value: 5 }); |
+ }); |
+ |
+ delete elements["some-id"]; |
+ assert_equals(elements["some-id"], old_item); |
+ |
+ assert_throws(new TypeError(), function() { |
+ "use strict"; |
+ delete elements["some-id"]; |
+ }); |
+ assert_equals(elements["some-id"], old_item); |
+ |
+}, 'Trying to set an expando that would shadow an already-existing named property'); |
+ |
+test(function() { |
+ var elements = document.getElementsByTagName("span"); |
+ var old_item = elements["new-id"]; |
+ var old_desc = Object.getOwnPropertyDescriptor(elements, "new-id"); |
+ assert_equals(old_item, undefined); |
+ assert_equals(old_desc, undefined); |
+ |
+ elements["new-id"] = 5; |
+ assert_equals(elements["new-id"], 5); |
+ |
+ var span = document.createElement("span"); |
+ this.add_cleanup(function () {span.remove();}); |
+ span.id = "new-id"; |
+ document.body.appendChild(span); |
+ |
+ assert_equals(elements.namedItem("new-id"), span); |
+ assert_equals(elements["new-id"], 5); |
+ |
+ delete elements["new-id"]; |
+ assert_equals(elements["new-id"], span); |
+}, 'Trying to set an expando that shadows a named property that gets added later'); |
+ |
+test(function() { |
+ var elements = document.getElementsByTagName("span"); |
+ var old_item = elements["new-id2"]; |
+ var old_desc = Object.getOwnPropertyDescriptor(elements, "new-id2"); |
+ assert_equals(old_item, undefined); |
+ assert_equals(old_desc, undefined); |
+ |
+ Object.defineProperty(elements, "new-id2", { configurable: false, writable: |
+ false, value: 5 }); |
+ assert_equals(elements["new-id2"], 5); |
+ |
+ var span = document.createElement("span"); |
+ this.add_cleanup(function () {span.remove();}); |
+ span.id = "new-id2"; |
+ document.body.appendChild(span); |
+ |
+ assert_equals(elements.namedItem("new-id2"), span); |
+ assert_equals(elements["new-id2"], 5); |
+ |
+ delete elements["new-id2"]; |
+ assert_equals(elements["new-id2"], 5); |
+ |
+ assert_throws(new TypeError(), function() { |
+ "use strict"; |
+ delete elements["new-id2"]; |
+ }); |
+ assert_equals(elements["new-id2"], 5); |
+}, 'Trying to set a non-configurable expando that shadows a named property that gets added later'); |
</script> |