|
1 <html xmlns="http://www.w3.org/1999/xhtml"> |
|
2 <!-- NodeIterator mutation tests. |
|
3 Originally written by Ian Hickson, Mochi-ified by Zack Weinberg. |
|
4 This file based on 00[3-9].xml from |
|
5 http://hixie.ch/tests/adhoc/dom/traversal/node-iterator/ |
|
6 --> |
|
7 <head> |
|
8 <title>DOM Traversal: NodeIterator: Mutations (1/x)</title> |
|
9 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> |
|
11 </head> |
|
12 <body> |
|
13 <p id="display"></p> |
|
14 <div id="content" style="display: none"> |
|
15 <span id="X"></span><span id="Y"><span id="root1"><span id="A"><span id="B"><span id="C"><span id="D"><span id="E"></span></span></span></span></span></span></span> |
|
16 <span id="root2"><span id="F"><span id="FF"></span></span><span id="G"></span><span id="H"><span id="HH"></span></span></span> |
|
17 <span id="root3"><span id="I"><span id="II"></span></span><span id="J"></span><span id="K"><span id="KK"></span></span></span> |
|
18 <span id="root4"><span id="L"></span><span id="M"><span id="MM"></span></span><span id="N"></span></span> |
|
19 <span id="root5"><span id="O"></span><span id="P"><span id="PP"></span></span><span id="Q"></span></span> |
|
20 <span id="root6"><span id="R"></span><span id="S"><span id="SS"></span></span><span id="T"></span></span> |
|
21 <span id="root7"><span id="U"></span><span id="V"><span id="VV"></span></span><span id="W"></span></span> |
|
22 </div> |
|
23 <pre id="test"> |
|
24 <script class="testbody" type="text/javascript"><![CDATA[ |
|
25 /** Originally written by Ian Hickson. **/ |
|
26 |
|
27 function check(f, e, label) { |
|
28 var eid = e.id; |
|
29 var fid = f ? f.id : 'null'; |
|
30 is(f, e, label + ': expected ' + eid + ' have ' + fid); |
|
31 } |
|
32 |
|
33 var childid = 0; |
|
34 function addChildTo(a) { |
|
35 var x = document.createElementNS('http://www.w3.org/1999/xhtml', 'span'); |
|
36 x.id = 'X' + childid; |
|
37 childid++; |
|
38 ok(a, 'parent ' + (a?a.id:'undefined') + ' for child ' + x.id); |
|
39 if (a) |
|
40 a.appendChild(x); |
|
41 return x; |
|
42 } |
|
43 function remove(a) { |
|
44 var p = a.parentNode; |
|
45 ok(a && p, |
|
46 'removing ' + ( a?(a.id?a.id:'(no id)'):'undefined' ) |
|
47 + ' with parent ' + ( p?(p.id?p.id:'(no id)'):'undefined' )); |
|
48 if (a && p) |
|
49 p.removeChild(a); |
|
50 } |
|
51 |
|
52 /** Removal of nodes that should have no effect **/ |
|
53 (function () { |
|
54 var root = $('root1'); |
|
55 var A = $('A'); |
|
56 var B = $('B'); |
|
57 var C = $('C'); |
|
58 var D = $('D'); |
|
59 var E = $('E'); |
|
60 |
|
61 var iterator = document.createNodeIterator(root, NodeFilter.SHOW_ALL, |
|
62 null); |
|
63 check(iterator.nextNode(), root, '1.0'); |
|
64 |
|
65 // 1. Remove a node unrelated to the reference node |
|
66 remove($('X')); |
|
67 check(iterator.nextNode(), A, '1.1'); |
|
68 |
|
69 // 2. Remove an ancestor of the root node |
|
70 remove($('Y')); |
|
71 check(iterator.nextNode(), B, '1.2'); |
|
72 |
|
73 // 3. Remove the root node itself |
|
74 remove(root); |
|
75 check(iterator.nextNode(), C, '1.3'); |
|
76 |
|
77 // 4. Remove a descendant of the reference node |
|
78 remove(E); |
|
79 check(iterator.nextNode(), D, '1.4'); |
|
80 })(); |
|
81 |
|
82 /** Removal of the reference node **/ |
|
83 (function () { |
|
84 var root = $('root2'); |
|
85 var F = $('F'); |
|
86 var FF = $('FF'); |
|
87 var G = $('G'); |
|
88 var H = $('H'); |
|
89 var iterator = document.createNodeIterator(root, NodeFilter.SHOW_ALL, |
|
90 null); |
|
91 |
|
92 check(iterator.nextNode(), root, '2.0'); |
|
93 check(iterator.nextNode(), F, '2.1'); |
|
94 check(iterator.nextNode(), FF, '2.2'); |
|
95 check(iterator.nextNode(), G, '2.3'); |
|
96 remove(G); |
|
97 check(iterator.previousNode(), FF, '2.4'); |
|
98 remove(FF); |
|
99 check(iterator.nextNode(), H, '2.5'); |
|
100 })(); |
|
101 |
|
102 /** Removal of the reference node (deep check) **/ |
|
103 (function () { |
|
104 var root = $('root3'); |
|
105 var I = $('I'); |
|
106 var II = $('II'); |
|
107 var J = $('J'); |
|
108 var K = $('K'); |
|
109 var KK = $('KK'); |
|
110 |
|
111 var iterator = document.createNodeIterator(root, NodeFilter.SHOW_ALL, |
|
112 null); |
|
113 check(iterator.nextNode(), root, '3.0'); |
|
114 check(iterator.nextNode(), I, '3.1'); |
|
115 check(iterator.nextNode(), II, '3.2'); |
|
116 check(iterator.nextNode(), J, '3.3'); |
|
117 remove(J); |
|
118 var X = addChildTo(II); |
|
119 check(iterator.nextNode(), X, '3.4'); |
|
120 check(iterator.previousNode(), X, '3.5'); |
|
121 remove(X); |
|
122 var Y = addChildTo(II); |
|
123 check(iterator.previousNode(), Y, '3.6'); |
|
124 check(iterator.nextNode(), Y, '3.7'); |
|
125 check(iterator.nextNode(), K, '3.8'); |
|
126 check(iterator.nextNode(), KK, '3.9'); |
|
127 })(); |
|
128 |
|
129 /** Removal of an ancestor of the Reference Node (forwards) **/ |
|
130 (function () { |
|
131 var root = $('root4'); |
|
132 var L = $('L'); |
|
133 var M = $('M'); |
|
134 var MM = $('MM'); |
|
135 var N = $('N'); |
|
136 |
|
137 var iterator = document.createNodeIterator(root, NodeFilter.SHOW_ALL, |
|
138 null); |
|
139 check(iterator.nextNode(), root, '4.1'); |
|
140 check(iterator.nextNode(), L, '4.2'); |
|
141 check(iterator.nextNode(), M, '4.3'); |
|
142 check(iterator.nextNode(), MM, '4.4'); |
|
143 remove(M); |
|
144 check(iterator.previousNode(), L, '4.5'); |
|
145 })(); |
|
146 |
|
147 /** Removal of an ancestor of the Reference Node (forwards) (deep check) **/ |
|
148 (function () { |
|
149 var root = $('root5'); |
|
150 var O = $('O'); |
|
151 var P = $('P'); |
|
152 var PP = $('PP'); |
|
153 var Q = $('Q'); |
|
154 |
|
155 var iterator = document.createNodeIterator(root, NodeFilter.SHOW_ALL, |
|
156 null); |
|
157 check(iterator.nextNode(), root, '5.1'); |
|
158 check(iterator.nextNode(), O, '5.2'); |
|
159 check(iterator.nextNode(), P, '5.3'); |
|
160 check(iterator.nextNode(), PP, '5.4'); |
|
161 remove(P); |
|
162 var X = addChildTo(O); |
|
163 check(iterator.nextNode(), X, '5.5'); |
|
164 })(); |
|
165 |
|
166 /** Removal of an ancestor of the Reference Node (backwards) **/ |
|
167 (function () { |
|
168 var root = $('root6'); |
|
169 var R = $('R'); |
|
170 var S = $('S'); |
|
171 var SS = $('SS'); |
|
172 var T = $('T'); |
|
173 |
|
174 var iterator = document.createNodeIterator(root, NodeFilter.SHOW_ALL, |
|
175 null); |
|
176 check(iterator.nextNode(), root, '6.1'); |
|
177 check(iterator.nextNode(), R, '6.2'); |
|
178 check(iterator.nextNode(), S, '6.3'); |
|
179 check(iterator.nextNode(), SS, '6.4'); |
|
180 check(iterator.previousNode(), SS, '6.5'); |
|
181 remove(S); |
|
182 check(iterator.nextNode(), T, '6.6'); |
|
183 })(); |
|
184 |
|
185 /** Removal of an ancestor of the Reference Node (backwards) (deep check) **/ |
|
186 (function () { |
|
187 var root = $('root7'); |
|
188 var U = $('U'); |
|
189 var V = $('V'); |
|
190 var VV = $('VV'); |
|
191 var W = $('W'); |
|
192 |
|
193 var iterator = document.createNodeIterator(root, NodeFilter.SHOW_ALL, |
|
194 null); |
|
195 check(iterator.nextNode(), root, '7.1'); |
|
196 check(iterator.nextNode(), U, '7.2'); |
|
197 check(iterator.nextNode(), V, '7.3'); |
|
198 check(iterator.nextNode(), VV, '7.4'); |
|
199 check(iterator.previousNode(), VV, '7.5'); |
|
200 remove(V); |
|
201 var X = addChildTo(U); |
|
202 check(iterator.previousNode(), X, '7.6'); |
|
203 })(); |
|
204 ]]></script></pre></body></html> |