test_NodeIterator_mutations_2.html (3184B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- NodeIterator mutation tests, 2. 4 Originally part of WebKit, Mochi-ified by Zack Weinberg. 5 This file based on node-iterator-00[...].html from 6 http://svn.webkit.org/repository/webkit/trunk/LayoutTests/traversal/ 7 --> 8 <head> 9 <title>DOM Traversal: NodeIterator: Mutations (2/x)</title> 10 <script src="/tests/SimpleTest/SimpleTest.js"></script> 11 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> 12 </head> 13 <p id="display"></p> 14 <div id="content" style="display: none"> 15 </div> 16 <pre id="test"> 17 <script class="testbody" type="text/javascript"> 18 function resetContent() { 19 var content = $('content'); 20 content.innerHTML = ('<span id="A"><\/span><span id="B"><\/span>' 21 + '<span id="C"><\/span><span id="D"><\/span>' 22 + '<span id="E"><\/span><span id="F"><\/span>' 23 + '<span id="G"><\/span><span id="H"><\/span>' 24 + '<span id="I"><\/span>'); 25 return content; 26 } 27 28 function makeSpan(id) { 29 var e = document.createElement('span'); 30 e.id = id; 31 return e; 32 } 33 34 function testNodeFilter(n) { 35 if (n.tagName == 'SPAN') 36 return NodeFilter.FILTER_ACCEPT; 37 return NodeFilter.FILTER_SKIP; 38 } 39 40 function checkseq(it, root, expect) { 41 var checkIt = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 42 testNodeFilter); 43 var printedPointer = (it.referenceNode == undefined); 44 var string = ''; 45 var node; 46 while ((node = checkIt.nextNode()) != null) { 47 if (!printedPointer && it.referenceNode == node) { 48 printedPointer = true; 49 var s = '[' + node.id + '] '; 50 if (it.pointerBeforeReferenceNode) 51 string += "* " + s; 52 else 53 string += s + "* "; 54 } else { 55 string += node.id + " "; 56 } 57 } 58 is(string.slice(0, -1), expect, "sequence check"); 59 } 60 61 // first a basic sanity check [node-iterator-001] 62 (function(){ 63 var root = resetContent(); 64 var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 65 testNodeFilter); 66 67 checkseq(it, root, 'A B C D E F G H I'); 68 it.nextNode(); 69 checkseq(it, root, '[A] * B C D E F G H I'); 70 it.previousNode(); 71 checkseq(it, root, '* [A] B C D E F G H I'); 72 it.previousNode(); 73 checkseq(it, root, '* [A] B C D E F G H I'); 74 })(); 75 76 // Mutations that should not move the iterator [node-iterator-002] 77 (function(){ 78 var root = resetContent(); 79 var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 80 testNodeFilter); 81 82 for (var i = 0; i < 4; i++) 83 it.nextNode(); 84 checkseq(it, root, 'A B C [D] * E F G H I'); 85 86 root.removeChild($('E')); 87 checkseq(it, root, 'A B C [D] * F G H I'); 88 89 var X = makeSpan('X'); 90 root.insertBefore(X, $('F')); 91 checkseq(it, root, 'A B C [D] * X F G H I'); 92 93 var I = $('I'); 94 root.removeChild(I); 95 root.insertBefore(I, X); 96 checkseq(it, root, 'A B C [D] * I X F G H'); 97 })(); 98 99 // 002 complete 100 101 /* Template 102 (function(){ 103 var root = resetContent(); 104 var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, 105 testNodeFilter); 106 107 })(); 108 */ 109 </script> 110 </pre> 111 </body> 112 </html>