content/base/test/test_NodeIterator_mutations_3.html

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:fd3186caeccf
1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <title>DOM Traversal: NodeIterator: Mutations (3/x)</title>
5 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
7 </head>
8 <p id="display"></p>
9 <div id="content" style="display: none">
10 <span id=root><span id=B></span><span id=C></span><span id=D></span><span id=E><span id=E1><span id=E11></span></span></span></span>
11 </div>
12 <pre id="test">
13 <script class="testbody" type="text/javascript">
14 function removeNode(n) {
15 n.parentNode.removeChild(n);
16 }
17 var initInner = $('content').innerHTML;
18 var content = $('content');
19
20
21 function resetContent() {
22 content.innerHTML = initInner;
23 var checkIt = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT,
24 testNodeFilter);
25 var node;
26 while ((node = checkIt.nextNode()) != null) {
27 if (node.id) {
28 window[node.id] = node;
29 }
30 }
31 }
32
33 function makeSpan(id) {
34 var e = document.createElement('span');
35 e.id = id;
36 return e;
37 }
38
39 function testNodeFilter(n) {
40 if (n.tagName == 'SPAN')
41 return NodeFilter.FILTER_ACCEPT;
42 return NodeFilter.FILTER_SKIP;
43 }
44
45 function checkseq(it, root, expect) {
46 var checkIt = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
47 testNodeFilter);
48 var printedPointer = (it.referenceNode == undefined);
49 var string = '';
50 var node;
51 while ((node = checkIt.nextNode()) != null) {
52 if (!printedPointer && it.referenceNode == node) {
53 printedPointer = true;
54 var s = '[' + node.id + '] ';
55 if (it.pointerBeforeReferenceNode)
56 string += "* " + s;
57 else
58 string += s + "* ";
59 } else {
60 string += node.id + " ";
61 }
62 }
63 is(string.slice(0, -1), expect, "sequence check");
64 }
65
66 resetContent();
67 var it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
68 testNodeFilter);
69 checkseq(it, root, "root B C D * [E] E1 E11");
70
71 removeNode(C);
72 checkseq(it, root, "root B D * [E] E1 E11");
73
74 it.nextNode();
75 removeNode(D);
76 checkseq(it, root, "root B [E] * E1 E11");
77
78 it.nextNode();
79 removeNode(B);
80 checkseq(it, root, "root E [E1] * E11");
81
82 it.nextNode();
83 checkseq(it, root, "root E E1 [E11] *");
84
85 it.nextNode();
86 checkseq(it, root, "root E E1 [E11] *");
87
88 it.previousNode();
89 it.previousNode();
90 it.previousNode();
91 it.previousNode();
92 it.previousNode();
93 checkseq(it, root, "root * [E] E1 E11");
94
95 resetContent();
96 it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
97 testNodeFilter);
98 checkseq(it, root, "root B C D * [E] E1 E11");
99
100 it.nextNode();
101 it.nextNode();
102 checkseq(it, root, "root B C D E [E1] * E11");
103
104 it.previousNode();
105 it.previousNode();
106 checkseq(it, root, "root B C D * [E] E1 E11");
107
108 removeNode(D);
109 removeNode(B);
110 checkseq(it, root, "root C * [E] E1 E11");
111
112 n = makeSpan('n');
113 root.insertBefore(n, E);
114 checkseq(it, root, "root C n * [E] E1 E11");
115
116 n2 = makeSpan('n2');
117 root.insertBefore(n2, C);
118 checkseq(it, root, "root n2 C n * [E] E1 E11");
119
120 resetContent();
121 it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
122 testNodeFilter);
123 checkseq(it, root, "root B C D * [E] E1 E11");
124
125 removeNode(root);
126 checkseq(it, root, "root B C D * [E] E1 E11");
127
128 removeNode(B);
129 checkseq(it, root, "root C D * [E] E1 E11");
130
131 removeNode(D);
132 checkseq(it, root, "root C * [E] E1 E11");
133
134 it.nextNode();
135 it.nextNode();
136 it.nextNode();
137 checkseq(it, root, "root C E E1 [E11] *");
138
139 removeNode(E1);
140 checkseq(it, root, "root C [E] *");
141
142 n = makeSpan('n');
143 root.insertBefore(n, E);
144 checkseq(it, root, "root C n [E] *");
145
146 n2 = makeSpan('n2');
147 E.appendChild(n2);
148 checkseq(it, root, "root C n [E] * n2");
149
150 it.nextNode();
151 checkseq(it, root, "root C n E [n2] *");
152
153 removeNode(E);
154 checkseq(it, root, "root C n");
155
156
157 </script>
158 </pre>
159 </body>
160 </html>

mercurial