test_NodeIterator_mutations_1.xhtml (6665B)
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 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>