180 lines
6.6 KiB
HTML
180 lines
6.6 KiB
HTML
<!DOCTYPE html>
|
|
<head>
|
|
<title>document.all</title>
|
|
<body>
|
|
<p>Tests document.all</p>
|
|
<script src="../../resources/testharness.js"></script>
|
|
<script src="../../resources/testharnessreport.js"></script>
|
|
<script>
|
|
|
|
let validNamedElementTags = ['a', 'button', 'embed', 'form', 'frame', 'frameset', 'iframe', 'img', 'input', 'map', 'meta', 'object', 'select', 'textarea'];
|
|
let invalidNamedElementTags = ['div', 'span', 'applet'];
|
|
let validAnInvalidNamedElementTags = validNamedElementTags.concat(invalidNamedElementTags);
|
|
|
|
let playground = document.createElement('div');
|
|
document.body.append(playground);
|
|
|
|
test(function() {
|
|
assert_equals(document.all[0], document.documentElement);
|
|
assert_equals(document.all[1], document.head);
|
|
assert_equals(document.all[2], document.head.firstElementChild);
|
|
}, "document.all's index getter returns all the elements in document order");
|
|
|
|
test(function() {
|
|
assert_equals(document.all[document.all.length + 1], undefined);
|
|
}, "document.all's index getter returns undefined for indexes greater than length");
|
|
|
|
test(function() {
|
|
assert_equals(document.all[-1], undefined);
|
|
}, "document.all's index getter returns undefined for indexes less than zero");
|
|
|
|
for (let elementTag of validNamedElementTags) {
|
|
test(function() {
|
|
let element = document.createElement(elementTag);
|
|
element.setAttribute("name", "testName");
|
|
playground.append(element);
|
|
|
|
assert_equals(document.all.namedItem('testName'), element);
|
|
assert_equals(document.all['testName'], element);
|
|
assert_equals(document.all.item('testName'), element);
|
|
assert_equals(document.all('testName'), element);
|
|
|
|
element.remove();
|
|
}, "document.all's name attribute accessing works for " + elementTag);
|
|
}
|
|
|
|
for (let elementTag of invalidNamedElementTags) {
|
|
test(function() {
|
|
let element = document.createElement(elementTag);
|
|
element.setAttribute("name", "testName");
|
|
playground.append(element);
|
|
|
|
assert_equals(document.all.namedItem('testName'), null);
|
|
assert_equals(document.all['testName'], undefined);
|
|
assert_equals(document.all.item('testName'), null);
|
|
assert_equals(document.all('testName'), null);
|
|
|
|
element.remove();
|
|
}, "document.all's name attribute accessing doesn't work for " + elementTag);
|
|
}
|
|
|
|
for (let elementTag of validAnInvalidNamedElementTags) {
|
|
test(function() {
|
|
let element = document.createElement(elementTag);
|
|
element.setAttribute("id", "testId");
|
|
playground.append(element);
|
|
|
|
assert_equals(document.all.namedItem('testId'), element);
|
|
assert_equals(document.all['testId'], element);
|
|
assert_equals(document.all.item('testId'), element);
|
|
assert_equals(document.all('testId'), element);
|
|
|
|
element.remove();
|
|
}, "document.all's id attribute accessing works for " + elementTag);
|
|
}
|
|
|
|
test(function() {
|
|
let element1 = document.createElement('button');
|
|
element1.setAttribute("name", "test");
|
|
playground.append(element1);
|
|
|
|
let element2 = document.createElement('span');
|
|
element2.setAttribute("id", "test");
|
|
playground.append(element2);
|
|
|
|
assert_equals(document.all.namedItem('test').length, 2);
|
|
assert_equals(document.all['test'].length, 2);
|
|
assert_equals(document.all.item('test').length, 2);
|
|
assert_equals(document.all('test').length, 2);
|
|
assert_class_string(document.all.namedItem('test'), "HTMLCollection");
|
|
assert_class_string(document.all['test'], "HTMLCollection");
|
|
assert_class_string(document.all.item('test'), "HTMLCollection");
|
|
assert_class_string(document.all('test'), "HTMLCollection");
|
|
|
|
element1.remove();
|
|
element2.remove();
|
|
}, "document.all will return a sub-collection if the name/id is found more than once");
|
|
|
|
test(function() {
|
|
let element1 = document.createElement('button');
|
|
element1.setAttribute("name", "test");
|
|
playground.append(element1);
|
|
|
|
let element2 = document.createElement('span');
|
|
element2.setAttribute("id", "test");
|
|
playground.append(element2);
|
|
|
|
let element3 = document.createElement('span');
|
|
element3.setAttribute("name", "test");
|
|
playground.append(element2);
|
|
|
|
assert_equals(document.all.namedItem('test').length, 2);
|
|
assert_equals(document.all['test'].length, 2);
|
|
assert_equals(document.all.item('test').length, 2);
|
|
assert_equals(document.all('test').length, 2);
|
|
assert_equals(document.all.namedItem('test')[0], element1);
|
|
assert_equals(document.all.namedItem('test')[1], element2);
|
|
assert_equals(document.all['test'][0], element1);
|
|
assert_equals(document.all['test'][1], element2);
|
|
assert_equals(document.all.item('test')[0], element1);
|
|
assert_equals(document.all.item('test')[1], element2);
|
|
assert_equals(document.all('test')[0], element1);
|
|
assert_equals(document.all('test')[1], element2);
|
|
|
|
element1.remove();
|
|
element2.remove();
|
|
element3.remove();
|
|
}, "document.all will return a sub-collection if the name/id is found more than once, but still adheres to the rules about what tags can have names");
|
|
|
|
test(function() {
|
|
let element1 = document.createElement('button');
|
|
element1.setAttribute("name", "test");
|
|
playground.append(element1);
|
|
|
|
let element2 = document.createElement('span');
|
|
element2.setAttribute("id", "test");
|
|
playground.append(element2);
|
|
|
|
let collection = document.all.namedItem('test');
|
|
assert_equals(collection.length, 2);
|
|
|
|
let element3 = document.createElement('img');
|
|
element3.setAttribute("name", "test");
|
|
playground.append(element3);
|
|
|
|
assert_equals(collection.length, 3);
|
|
|
|
element1.remove();
|
|
element2.remove();
|
|
|
|
assert_equals(collection.length, 1);
|
|
|
|
element3.remove();
|
|
}, "document.all will return a sub-collection if the name/id is found more than once, that is live");
|
|
|
|
test(function() {
|
|
assert_throws(new TypeError(), function() { document.all.namedItem() });
|
|
}, "document.all's namedItem function requires passing an argument");
|
|
|
|
test(function() {
|
|
assert_equals(document.all.item(), null);
|
|
assert_equals(document.all(), null);
|
|
}, "document.all's item function and legacy caller functionality allow passing no arguments");
|
|
|
|
test(function() {
|
|
let element = document.createElement('button');
|
|
element.setAttribute("name", "0");
|
|
playground.append(element);
|
|
|
|
assert_equals(document.all.item('0'), document.documentElement);
|
|
assert_equals(document.all('0'), document.documentElement);
|
|
assert_equals(document.all.namedItem('0'), element);
|
|
|
|
element.remove();
|
|
}, "document.all's item function and legacy caller functionality will try to convert their DOMString argument to an index before name lookup");
|
|
|
|
playground.remove();
|
|
|
|
</script>
|
|
</body>
|