<!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(new 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(new TypeError(), function() {
    new document.all("picture");
  }, "New should not work on document.all()");

  // https://esdiscuss.org/topic/isconstructor#content-11
  assert_throws(new 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>
