| <!doctype html> |
| <meta charset="utf-8"> |
| <title>NodeList Iterable Test</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <p id="1"></p> |
| <p id="2"></p> |
| <p id="3"></p> |
| <p id="4"></p> |
| <p id="5"></p> |
| |
| <div id="live"><b id="b1">1</b><b id="b2">2</b><b id="b3">3</b></div> |
| <script> |
| var paragraphs; |
| setup(function() { |
| paragraphs = document.querySelectorAll('p'); |
| }) |
| test(function() { |
| assert_true('length' in paragraphs); |
| }, 'NodeList has length method.'); |
| test(function() { |
| assert_true('values' in paragraphs); |
| }, 'NodeList has values method.'); |
| test(function() { |
| assert_true('entries' in paragraphs); |
| }, 'NodeList has entries method.'); |
| test(function() { |
| assert_true('forEach' in paragraphs); |
| }, 'NodeList has forEach method.'); |
| test(function() { |
| assert_true(Symbol.iterator in paragraphs); |
| }, 'NodeList has Symbol.iterator.'); |
| test(function() { |
| var ids = "12345", idx=0; |
| for(var node of paragraphs){ |
| assert_equals(node.getAttribute('id'), ids[idx++]); |
| } |
| }, 'NodeList is iterable via for-of loop.'); |
| |
| test(function() { |
| assert_array_equals(Object.keys(paragraphs), ['0', '1', '2', '3', '4']); |
| }, 'NodeList responds to Object.keys correctly'); |
| |
| test(function() { |
| var container = document.getElementById('live'); |
| var nodeList = container.childNodes; |
| |
| var ids = []; |
| for (var el of nodeList) { |
| ids.push(el.id); |
| assert_equals(el.localName, 'b'); |
| if (ids.length < 3) { |
| var newEl = document.createElement('b'); |
| newEl.id = 'after' + el.id; |
| container.appendChild(newEl); |
| } |
| } |
| |
| assert_array_equals(ids, ['b1', 'b2', 'b3', 'afterb1', 'afterb2']); |
| }, 'live NodeLists are for-of iterable and update appropriately'); |
| </script> |