| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>Node.childNodes</title> |
| <link rel=help href="https://dom.spec.whatwg.org/#dom-node-childnodes"> |
| <link rel=author title="Tim Taubert" href="mailto:ttaubert@mozilla.com"> |
| <link rel=author title="Ms2ger" href="mailto:Ms2ger@gmail.com"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <div style="display: none"> |
| <ul id='test'><li>1</li><li>2</li><li>3</li><li>4</li></ul> |
| </div> |
| <script> |
| test(function() { |
| var element = document.createElement("p"); |
| assert_equals(element.childNodes, element.childNodes); |
| }, "Caching of Node.childNodes"); |
| |
| var check_parent_node = function(node) { |
| assert_array_equals(node.childNodes, []); |
| |
| var children = node.childNodes; |
| var child = document.createElement("p"); |
| node.appendChild(child); |
| assert_equals(node.childNodes, children); |
| assert_array_equals(children, [child]); |
| assert_equals(children.item(0), child); |
| |
| var child2 = document.createComment("comment"); |
| node.appendChild(child2); |
| assert_array_equals(children, [child, child2]); |
| assert_equals(children.item(0), child); |
| assert_equals(children.item(1), child2); |
| |
| assert_false(2 in children); |
| assert_equals(children[2], undefined); |
| assert_equals(children.item(2), null); |
| }; |
| |
| test(function() { |
| check_parent_node(document.createElement("p")); |
| }, "Node.childNodes on an Element."); |
| |
| test(function() { |
| check_parent_node(document.createDocumentFragment()); |
| }, "Node.childNodes on a DocumentFragment."); |
| |
| test(function() { |
| check_parent_node(new Document()); |
| }, "Node.childNodes on a Document."); |
| |
| test(function() { |
| var node = document.createElement("div"); |
| var kid1 = document.createElement("p"); |
| var kid2 = document.createTextNode("hey"); |
| var kid3 = document.createElement("span"); |
| node.appendChild(kid1); |
| node.appendChild(kid2); |
| node.appendChild(kid3); |
| |
| var list = node.childNodes; |
| assert_array_equals([...list], [kid1, kid2, kid3]); |
| |
| var keys = list.keys(); |
| assert_false(keys instanceof Array); |
| keys = [...keys]; |
| assert_array_equals(keys, [0, 1, 2]); |
| |
| var values = list.values(); |
| assert_false(values instanceof Array); |
| values = [...values]; |
| assert_array_equals(values, [kid1, kid2, kid3]); |
| |
| var entries = list.entries(); |
| assert_false(entries instanceof Array); |
| entries = [...entries]; |
| assert_equals(entries.length, keys.length); |
| assert_equals(entries.length, values.length); |
| for (var i = 0; i < entries.length; ++i) { |
| assert_array_equals(entries[i], [keys[i], values[i]]); |
| } |
| |
| var cur = 0; |
| var thisObj = {}; |
| list.forEach(function(value, key, listObj) { |
| assert_equals(listObj, list); |
| assert_equals(this, thisObj); |
| assert_equals(value, values[cur]); |
| assert_equals(key, keys[cur]); |
| cur++; |
| }, thisObj); |
| assert_equals(cur, entries.length); |
| |
| assert_equals(list[Symbol.iterator], Array.prototype[Symbol.iterator]); |
| assert_equals(list.keys, Array.prototype.keys); |
| if (Array.prototype.values) { |
| assert_equals(list.values, Array.prototype.values); |
| } |
| assert_equals(list.entries, Array.prototype.entries); |
| assert_equals(list.forEach, Array.prototype.forEach); |
| }, "Iterator behavior of Node.childNodes"); |
| |
| |
| test(() => { |
| var node = document.getElementById("test"); |
| var children = node.childNodes; |
| assert_true(children instanceof NodeList); |
| var li = document.createElement("li"); |
| assert_equals(children.length, 4); |
| |
| node.appendChild(li); |
| assert_equals(children.length, 5); |
| |
| node.removeChild(li); |
| assert_equals(children.length, 4); |
| }, "Node.childNodes should be a live collection"); |
| </script> |