diff --git a/tests/wpt/dom/collections/HTMLCollection-as-prototype.html b/tests/wpt/dom/collections/HTMLCollection-as-prototype.html
new file mode 100644
index 00000000..d572d35c
--- /dev/null
+++ b/tests/wpt/dom/collections/HTMLCollection-as-prototype.html
@@ -0,0 +1,29 @@
+
+
+
Objects whose prototype is an HTMLCollection
+
+
+
+
diff --git a/tests/wpt/dom/collections/HTMLCollection-delete.html b/tests/wpt/dom/collections/HTMLCollection-delete.html
new file mode 100644
index 00000000..99420d43
--- /dev/null
+++ b/tests/wpt/dom/collections/HTMLCollection-delete.html
@@ -0,0 +1,45 @@
+
+
+Deleting properties from HTMLCollection
+
+
+
+
+
diff --git a/tests/wpt/dom/collections/HTMLCollection-empty-name.html b/tests/wpt/dom/collections/HTMLCollection-empty-name.html
new file mode 100644
index 00000000..4fc34db7
--- /dev/null
+++ b/tests/wpt/dom/collections/HTMLCollection-empty-name.html
@@ -0,0 +1,65 @@
+
+
+HTMLCollection and empty names
+
+
+
+
+
diff --git a/tests/wpt/dom/collections/HTMLCollection-iterator.html b/tests/wpt/dom/collections/HTMLCollection-iterator.html
new file mode 100644
index 00000000..6296fd1b
--- /dev/null
+++ b/tests/wpt/dom/collections/HTMLCollection-iterator.html
@@ -0,0 +1,45 @@
+
+
+
+
+HTMLCollection @@iterator Test
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/collections/HTMLCollection-live-mutations.window.js b/tests/wpt/dom/collections/HTMLCollection-live-mutations.window.js
new file mode 100644
index 00000000..7dbfc6cc
--- /dev/null
+++ b/tests/wpt/dom/collections/HTMLCollection-live-mutations.window.js
@@ -0,0 +1,93 @@
+function testHTMLCollection(name, hooks) {
+ test(() => {
+ const nodes = {
+ root: document.createElement("div"),
+ div1: document.createElement("div"),
+ div2: document.createElement("div"),
+ p: document.createElement("p")
+ };
+
+ nodes.div1.id = "div1";
+ nodes.div2.id = "div2";
+
+ const list = nodes.root.getElementsByTagName("div");
+
+ hooks.initial(list, nodes);
+
+ nodes.root.appendChild(nodes.div1);
+ nodes.root.appendChild(nodes.p);
+ nodes.root.appendChild(nodes.div2);
+
+ hooks.afterInsertion(list, nodes);
+
+ nodes.root.removeChild(nodes.div1);
+
+ hooks.afterRemoval(list, nodes);
+ }, `HTMLCollection live mutations: ${name}`);
+}
+
+testHTMLCollection("HTMLCollection.length", {
+ initial(list) {
+ assert_equals(list.length, 0);
+ },
+ afterInsertion(list) {
+ assert_equals(list.length, 2);
+ },
+ afterRemoval(list) {
+ assert_equals(list.length, 1);
+ }
+});
+
+testHTMLCollection("HTMLCollection.item(index)", {
+ initial(list) {
+ assert_equals(list.item(0), null);
+ },
+ afterInsertion(list, nodes) {
+ assert_equals(list.item(0), nodes.div1);
+ assert_equals(list.item(1), nodes.div2);
+ },
+ afterRemoval(list, nodes) {
+ assert_equals(list.item(0), nodes.div2);
+ }
+});
+
+testHTMLCollection("HTMLCollection[index]", {
+ initial(list) {
+ assert_equals(list[0], undefined);
+ },
+ afterInsertion(list, nodes) {
+ assert_equals(list[0], nodes.div1);
+ assert_equals(list[1], nodes.div2);
+ },
+ afterRemoval(list, nodes) {
+ assert_equals(list[0], nodes.div2);
+ }
+});
+
+testHTMLCollection("HTMLCollection.namedItem(index)", {
+ initial(list) {
+ assert_equals(list.namedItem("div1"), null);
+ assert_equals(list.namedItem("div2"), null);
+ },
+ afterInsertion(list, nodes) {
+ assert_equals(list.namedItem("div1"), nodes.div1);
+ assert_equals(list.namedItem("div2"), nodes.div2);
+ },
+ afterRemoval(list, nodes) {
+ assert_equals(list.namedItem("div1"), null);
+ assert_equals(list.namedItem("div2"), nodes.div2);
+ }
+});
+
+testHTMLCollection("HTMLCollection ownPropertyNames", {
+ initial(list) {
+ assert_object_equals(Object.getOwnPropertyNames(list), []);
+ },
+ afterInsertion(list) {
+ assert_object_equals(Object.getOwnPropertyNames(list), ["0", "1", "div1", "div2"]);
+ },
+ afterRemoval(list) {
+ assert_object_equals(Object.getOwnPropertyNames(list), ["0", "div2"]);
+ }
+});
+
diff --git a/tests/wpt/dom/collections/HTMLCollection-own-props.html b/tests/wpt/dom/collections/HTMLCollection-own-props.html
new file mode 100644
index 00000000..99dc425d
--- /dev/null
+++ b/tests/wpt/dom/collections/HTMLCollection-own-props.html
@@ -0,0 +1,109 @@
+
+
+HTMLCollection getters and own properties
+
+
+
+
diff --git a/tests/wpt/dom/collections/HTMLCollection-supported-property-indices.html b/tests/wpt/dom/collections/HTMLCollection-supported-property-indices.html
new file mode 100644
index 00000000..5339ec31
--- /dev/null
+++ b/tests/wpt/dom/collections/HTMLCollection-supported-property-indices.html
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/collections/HTMLCollection-supported-property-names.html b/tests/wpt/dom/collections/HTMLCollection-supported-property-names.html
new file mode 100644
index 00000000..3d21e166
--- /dev/null
+++ b/tests/wpt/dom/collections/HTMLCollection-supported-property-names.html
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/dom/collections/domstringmap-supported-property-names.html b/tests/wpt/dom/collections/domstringmap-supported-property-names.html
new file mode 100644
index 00000000..430aa44c
--- /dev/null
+++ b/tests/wpt/dom/collections/domstringmap-supported-property-names.html
@@ -0,0 +1,54 @@
+
+
+DOMStringMap Test: Supported property names
+
+
+
+
+Simple
+
+Simple
+
+
+ John Doe
+
+
+ Jane Doe
+
+ Jim Doe
+
+
diff --git a/tests/wpt/dom/collections/namednodemap-supported-property-names.html b/tests/wpt/dom/collections/namednodemap-supported-property-names.html
new file mode 100644
index 00000000..2c5dee4e
--- /dev/null
+++ b/tests/wpt/dom/collections/namednodemap-supported-property-names.html
@@ -0,0 +1,30 @@
+
+
+NamedNodeMap Test: Supported property names
+
+
+
+Simple
+
+
\ No newline at end of file