summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/dom/nodes/NodeList-Iterable.html
blob: fcbee175cb3e07235fcd759e866feb488e31e91f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!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>