summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html')
-rw-r--r--testing/web-platform/tests/html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html334
1 files changed, 334 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html b/testing/web-platform/tests/html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html
new file mode 100644
index 0000000000..14faa2128e
--- /dev/null
+++ b/testing/web-platform/tests/html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html
@@ -0,0 +1,334 @@
+<!DOCTYPE HTML>
+<html id="root">
+<head>
+<title>HTMLAllCollection Tests</title>
+<link rel="author" title="Dan Druta" href="mailto:dan.druta@att.com"/>
+<link rel="author" title="Philip Jägenstedt" href="mailto:philip@foolip.org"/>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlallcollection-interface"/>
+<meta name="flags" content="TOKENS" />
+<meta name="assert" content="TEST ASSERTION"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body id="tags">
+<img src="../../../../images/green.png" name="picture">
+<a name="foo"></a>
+<a name="foo"></a>
+<span id="42"></span>
+<span id="043"></span>
+<div id="4294967294"></div>
+<div id="4294967295"></div>
+<div id="4294967296"></div>
+<div id="undefined"></div>
+<div id="null"></div>
+<div name="divwithname"></div>
+<div id="-0"></div>
+<div id="log"></div>
+<script>
+var anchors = document.querySelectorAll("a");
+var divs = document.querySelectorAll("div");
+var scripts = document.querySelectorAll("script");
+var spans = document.querySelectorAll("span");
+
+test(function() {
+ assert_true(document.all instanceof HTMLAllCollection);
+}, "document.all is an HTMLAllCollection");
+
+test(function() {
+ assert_equals(document.all.length, 25);
+}, "length attribute");
+
+// indexed property getter
+
+test(function() {
+ assert_equals(document.all[0], document.documentElement);
+ assert_equals(document.all[-0], document.documentElement);
+ assert_equals(document.all[24], scripts[2]);
+}, "indexed property getter");
+
+test(function() {
+ assert_equals(document.all[-1], undefined);
+ assert_equals(document.all[25], undefined);
+ assert_equals(document.all[42], undefined);
+ assert_equals(document.all[43], undefined);
+ assert_equals(document.all[4294967294], undefined);
+ assert_equals(document.all[4294967295], divs[1]);
+ assert_equals(document.all[4294967296], divs[2]);
+}, "indexed property getter out of range");
+
+// named property getter
+
+test(function() {
+ assert_equals(document.all["root"], document.documentElement);
+ assert_equals(document.all["flags"].content, "TOKENS");
+ assert_equals(document.all["picture"].tagName, "IMG");
+}, "named property getter");
+
+test(function() {
+ assert_equals(document.all.root, document.documentElement);
+ assert_equals(document.all.flags.content, "TOKENS");
+ assert_equals(document.all.picture.tagName, "IMG");
+}, "named property getter with dot syntax");
+
+test(function() {
+ assert_equals(document.all[""], undefined);
+ assert_equals(document.all["noname"], undefined);
+ assert_equals(document.all.noname, undefined);
+ assert_equals(document.all["divwithname"], undefined);
+ assert_equals(document.all.divwithname, undefined);
+}, "named property getter with invalid name");
+
+test(function() {
+ var collection = document.all["foo"];
+ assert_equals(collection.length, 2);
+ assert_equals(collection[0], anchors[0]);
+ assert_equals(collection[1], anchors[1]);
+}, "named property getter returning collection");
+
+test(function() {
+ assert_equals(document.all["0"], document.documentElement);
+ assert_equals(document.all["24"], document.scripts[2]);
+ assert_equals(document.all["25"], undefined);
+ assert_equals(document.all["42"], undefined);
+ assert_equals(document.all["43"], undefined);
+}, "named property getter with \"array index property name\"");
+
+test(function() {
+ assert_equals(document.all["00"], undefined);
+ assert_equals(document.all["042"], undefined);
+ assert_equals(document.all["043"], spans[1]);
+ assert_equals(document.all["4294967294"], undefined);
+ assert_equals(document.all["4294967295"], divs[1]);
+ assert_equals(document.all["4294967296"], divs[2]);
+ assert_equals(document.all["-0"], divs[6]);
+}, "named property getter with invalid \"array index property name\"");
+
+test(function() {
+ assert_equals(document.all[undefined], divs[3]);
+}, "named property getter with undefined");
+
+test(function() {
+ assert_equals(document.all[null], divs[4]);
+}, "named property getter with null");
+
+// namedItem method
+
+test(function() {
+ assert_equals(document.all.namedItem("root"), document.documentElement);
+ assert_equals(document.all.namedItem("flags").content, "TOKENS");
+ assert_equals(document.all.namedItem("picture").tagName, "IMG");
+}, "namedItem method");
+
+test(function() {
+ assert_equals(document.all.namedItem(""), null);
+ assert_equals(document.all.namedItem("noname"), null);
+ assert_equals(document.all.namedItem("divwithname"), null);
+}, "namedItem method with invalid name");
+
+test(function() {
+ var collection = document.all.namedItem("foo");
+ assert_equals(collection.length, 2);
+ assert_equals(collection[0], anchors[0]);
+ assert_equals(collection[1], anchors[1]);
+}, "namedItem method returning collection");
+
+test(function() {
+ assert_equals(document.all.namedItem("0"), null);
+ assert_equals(document.all.namedItem("23"), null);
+ assert_equals(document.all.namedItem("24"), null);
+ assert_equals(document.all.namedItem("42"), spans[0]);
+ assert_equals(document.all.namedItem("43"), null);
+}, "namedItem method with \"array index property name\"");
+
+test(function() {
+ assert_equals(document.all.namedItem("00"), null);
+ assert_equals(document.all.namedItem("042"), null);
+ assert_equals(document.all.namedItem("043"), spans[1]);
+ assert_equals(document.all.namedItem("4294967294"), divs[0]);
+ assert_equals(document.all.namedItem("4294967295"), divs[1]);
+ assert_equals(document.all.namedItem("4294967296"), divs[2]);
+ assert_equals(document.all.namedItem("-0"), divs[6]);
+}, "namedItem method with invalid \"array index property name\"");
+
+test(function() {
+ assert_equals(document.all.namedItem(undefined), divs[3]);
+}, "namedItem method with undefined");
+
+test(function() {
+ assert_equals(document.all.namedItem(null), divs[4]);
+}, "namedItem method with null");
+
+test(function() {
+ assert_equals(document.all.namedItem.length, 1);
+ assert_throws_js(TypeError, function() {
+ document.all.namedItem();
+ });
+}, "namedItem method with no argument");
+
+// legacy caller
+
+test(function() {
+ assert_equals(document.all("root"), document.documentElement);
+ assert_equals(document.all("flags").content, "TOKENS");
+ assert_equals(document.all("picture").tagName, "IMG");
+}, "legacy caller");
+
+test(function() {
+ assert_equals(document.all(""), null);
+ assert_equals(document.all("noname"), null);
+ assert_equals(document.all("divwithname"), null);
+}, "legacy caller with invalid name");
+
+test(function() {
+ var collection = document.all("foo");
+ assert_equals(collection.length, 2);
+ assert_equals(collection[0], anchors[0]);
+ assert_equals(collection[1], anchors[1]);
+}, "legacy caller returning collection");
+
+test(function() {
+ assert_equals(document.all("0"), document.documentElement);
+ assert_equals(document.all("24"), document.scripts[2]);
+ assert_equals(document.all("25"), null);
+ assert_equals(document.all("42"), null);
+ assert_equals(document.all("43"), null);
+}, "legacy caller with \"array index property name\"");
+
+test(function() {
+ assert_equals(document.all(0), document.documentElement);
+ assert_equals(document.all(24), document.scripts[2]);
+ assert_equals(document.all(25), null);
+ assert_equals(document.all(42), null);
+ assert_equals(document.all(43), null);
+}, "legacy caller with \"array index property name\" as number");
+
+test(function() {
+ assert_equals(document.all("00"), null);
+ assert_equals(document.all("042"), null);
+ assert_equals(document.all("043"), spans[1]);
+ assert_equals(document.all("4294967294"), null);
+ assert_equals(document.all("4294967295"), divs[1]);
+ assert_equals(document.all("4294967296"), divs[2]);
+ assert_equals(document.all("-0"), divs[6]);
+}, "legacy caller with invalid \"array index property name\"");
+
+test(function() {
+ assert_equals(document.all(undefined), null);
+}, "legacy caller with undefined");
+
+test(function() {
+ assert_equals(document.all(null), divs[4]);
+}, "legacy caller with null");
+
+test(function() {
+ assert_equals(document.all(), null);
+}, "legacy caller with no argument");
+
+test(function() {
+ assert_throws_js(TypeError, function() {
+ new document.all("picture");
+ }, "New should not work on document.all()");
+
+ // https://esdiscuss.org/topic/isconstructor#content-11
+ assert_throws_js(TypeError, function() {
+ new (new Proxy(document.all, {
+ construct: function() {
+ return {};
+ }
+ }));
+ }, "Proxies should treat document.all() as not-a-constructor");
+}, "legacy caller is not a constructor");
+
+test(function() {
+ [undefined, null, {}, document.body].forEach(function(thisValue) {
+ assert_equals(Function.prototype.call.call(document.all, thisValue, "043"), spans[1]);
+ });
+}, "legacy caller with arbitrary this value");
+
+// item method
+
+test(function() {
+ assert_equals(document.all.item("root"), document.documentElement);
+ assert_equals(document.all.item("flags").content, "TOKENS");
+ assert_equals(document.all.item("picture").tagName, "IMG");
+}, "item method");
+
+test(function() {
+ assert_equals(document.all.item(""), null);
+ assert_equals(document.all.item("noname"), null);
+ assert_equals(document.all.item("divwithname"), null);
+}, "item method with invalid name");
+
+test(function() {
+ var collection = document.all.item("foo");
+ assert_equals(collection.length, 2);
+ assert_equals(collection[0], anchors[0]);
+ assert_equals(collection[1], anchors[1]);
+}, "item method returning collection");
+
+test(function() {
+ assert_equals(document.all.item("0"), document.documentElement);
+ assert_equals(document.all.item("24"), document.scripts[2]);
+ assert_equals(document.all.item("25"), null);
+ assert_equals(document.all.item("42"), null);
+ assert_equals(document.all.item("43"), null);
+}, "item method with \"array index property name\"");
+
+test(function() {
+ assert_equals(document.all.item(0), document.documentElement);
+ assert_equals(document.all.item(24), document.scripts[2]);
+ assert_equals(document.all.item(25), null);
+ assert_equals(document.all.item(42), null);
+ assert_equals(document.all.item(43), null);
+}, "item method with \"array index property name\" as number");
+
+test(function() {
+ assert_equals(document.all.item("00"), null);
+ assert_equals(document.all.item("042"), null);
+ assert_equals(document.all.item("043"), spans[1]);
+ assert_equals(document.all.item("4294967294"), null);
+ assert_equals(document.all.item("4294967295"), divs[1]);
+ assert_equals(document.all.item("4294967296"), divs[2]);
+ assert_equals(document.all.item("-0"), divs[6]);
+}, "item method with invalid \"array index property name\"");
+
+test(function() {
+ assert_equals(document.all.item(undefined), null);
+}, "item method with undefined");
+
+test(function() {
+ assert_equals(document.all.item(null), divs[4]);
+}, "item method with null");
+
+test(function() {
+ assert_equals(document.all.item.length, 0);
+ assert_equals(document.all.item(), null);
+}, "item method with no argument");
+
+// live HTMLCollection
+
+test(function() {
+ var collections = [
+ document.all["foo"],
+ document.all.namedItem("foo"),
+ document.all("foo"),
+ document.all.item("foo"),
+ ];
+ // a new HTMLCollection is created for each call
+ for (var i = 0; i < collections.length; i++) {
+ assert_true(collections[i] instanceof HTMLCollection);
+ for (var j = i + 1; j < collections.length; j++) {
+ assert_not_equals(collections[i], collections[j]);
+ }
+ }
+ for (var c of collections) {
+ assert_equals(c.length, 2);
+ }
+ anchors[0].name = "bar";
+ for (var c of collections) {
+ assert_equals(c.length, 1);
+ }
+}, "collections are new live HTMLCollection instances");
+</script>
+</body>
+</html>