Thu, 15 Jan 2015 21:03:48 +0100
Integrate friendly tips from Tor colleagues to make (or not) 4.5 alpha 3;
This includes removal of overloaded (but unused) methods, and addition of
a overlooked call to DataStruct::SetData(nsISupports, uint32_t, bool.)
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');
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 }
33 function makeSpan(id) {
34 var e = document.createElement('span');
35 e.id = id;
36 return e;
37 }
39 function testNodeFilter(n) {
40 if (n.tagName == 'SPAN')
41 return NodeFilter.FILTER_ACCEPT;
42 return NodeFilter.FILTER_SKIP;
43 }
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 }
66 resetContent();
67 var it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
68 testNodeFilter);
69 checkseq(it, root, "root B C D * [E] E1 E11");
71 removeNode(C);
72 checkseq(it, root, "root B D * [E] E1 E11");
74 it.nextNode();
75 removeNode(D);
76 checkseq(it, root, "root B [E] * E1 E11");
78 it.nextNode();
79 removeNode(B);
80 checkseq(it, root, "root E [E1] * E11");
82 it.nextNode();
83 checkseq(it, root, "root E E1 [E11] *");
85 it.nextNode();
86 checkseq(it, root, "root E E1 [E11] *");
88 it.previousNode();
89 it.previousNode();
90 it.previousNode();
91 it.previousNode();
92 it.previousNode();
93 checkseq(it, root, "root * [E] E1 E11");
95 resetContent();
96 it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
97 testNodeFilter);
98 checkseq(it, root, "root B C D * [E] E1 E11");
100 it.nextNode();
101 it.nextNode();
102 checkseq(it, root, "root B C D E [E1] * E11");
104 it.previousNode();
105 it.previousNode();
106 checkseq(it, root, "root B C D * [E] E1 E11");
108 removeNode(D);
109 removeNode(B);
110 checkseq(it, root, "root C * [E] E1 E11");
112 n = makeSpan('n');
113 root.insertBefore(n, E);
114 checkseq(it, root, "root C n * [E] E1 E11");
116 n2 = makeSpan('n2');
117 root.insertBefore(n2, C);
118 checkseq(it, root, "root n2 C n * [E] E1 E11");
120 resetContent();
121 it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
122 testNodeFilter);
123 checkseq(it, root, "root B C D * [E] E1 E11");
125 removeNode(root);
126 checkseq(it, root, "root B C D * [E] E1 E11");
128 removeNode(B);
129 checkseq(it, root, "root C D * [E] E1 E11");
131 removeNode(D);
132 checkseq(it, root, "root C * [E] E1 E11");
134 it.nextNode();
135 it.nextNode();
136 it.nextNode();
137 checkseq(it, root, "root C E E1 [E11] *");
139 removeNode(E1);
140 checkseq(it, root, "root C [E] *");
142 n = makeSpan('n');
143 root.insertBefore(n, E);
144 checkseq(it, root, "root C n [E] *");
146 n2 = makeSpan('n2');
147 E.appendChild(n2);
148 checkseq(it, root, "root C n [E] * n2");
150 it.nextNode();
151 checkseq(it, root, "root C n E [n2] *");
153 removeNode(E);
154 checkseq(it, root, "root C n");
157 </script>
158 </pre>
159 </body>
160 </html>