TreeWalker-basic.html (5413B)
1 <!DOCTYPE html> 2 <html> 3 <!-- 4 Test adapted from chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/TreeWalker-basic.html 5 --> 6 <head> 7 <title>TreeWalker: Basic test</title> 8 <script src="/resources/testharness.js"></script> 9 <script src="/resources/testharnessreport.js"></script> 10 <script src="support/assert-node.js"></script> 11 <div id=log></div> 12 </head> 13 <body> 14 <p>This test checks the basic functionality of TreeWalker.</p> 15 <script> 16 function createSampleDOM() 17 { 18 // Tree structure: 19 // #a 20 // | 21 // +----+----+ 22 // | | 23 // "b" #c 24 // | 25 // +----+----+ 26 // | | 27 // #d <!--j--> 28 // | 29 // +----+----+ 30 // | | | 31 // "e" #f "i" 32 // | 33 // +--+--+ 34 // | | 35 // "g" <!--h--> 36 var div = document.createElement('div'); 37 div.id = 'a'; 38 // div.innerHTML = 'b<div id="c"><div id="d">e<span id="f">g<!--h--></span>i</div><!--j--></div>'; 39 40 div.appendChild(document.createTextNode("b")); 41 42 var c = document.createElement("div"); 43 c.id = 'c'; 44 div.appendChild(c); 45 46 var d = document.createElement("div"); 47 d.id = 'd'; 48 c.appendChild(d); 49 50 var e = document.createTextNode("e"); 51 d.appendChild(e); 52 53 var f = document.createElement("span"); 54 f.id = 'f'; 55 d.appendChild(f); 56 57 var g = document.createTextNode("g"); 58 f.appendChild(g); 59 60 var h = document.createComment("h"); 61 f.appendChild(h); 62 63 var i = document.createTextNode("i"); 64 d.appendChild(i); 65 66 var j = document.createComment("j"); 67 c.appendChild(j); 68 69 return div; 70 } 71 72 function check_walker(walker, root, whatToShowValue) 73 { 74 whatToShowValue = whatToShowValue === undefined ? 0xFFFFFFFF : whatToShowValue; 75 76 assert_equals(walker.toString(), '[object TreeWalker]', 'toString'); 77 assert_equals(walker.root, root, 'root'); 78 assert_equals(walker.whatToShow, whatToShowValue, 'whatToShow'); 79 assert_equals(walker.filter, null, 'filter'); 80 assert_equals(walker.currentNode, root, 'currentNode'); 81 assert_readonly(walker, 'root'); 82 assert_readonly(walker, 'whatToShow'); 83 assert_readonly(walker, 'filter'); 84 } 85 86 test(function () 87 { 88 var root = createSampleDOM(); 89 var walker = document.createTreeWalker(root); 90 check_walker(walker, root); 91 }, 'Construct a TreeWalker by document.createTreeWalker(root).'); 92 93 test(function () 94 { 95 var root = createSampleDOM(); 96 var walker = document.createTreeWalker(root, null, null); 97 check_walker(walker, root, 0); 98 }, 'Construct a TreeWalker by document.createTreeWalker(root, null, null).'); 99 100 test(function () 101 { 102 var root = createSampleDOM(); 103 var walker = document.createTreeWalker(root, undefined, undefined); 104 check_walker(walker, root); 105 }, 'Construct a TreeWalker by document.createTreeWalker(root, undefined, undefined).'); 106 107 test(function () 108 { 109 assert_throws_js(TypeError, function () { document.createTreeWalker(); }); 110 assert_throws_js(TypeError, function () { document.createTreeWalker(null); }); 111 assert_throws_js(TypeError, function () { document.createTreeWalker(undefined); }); 112 assert_throws_js(TypeError, function () { document.createTreeWalker(new Object()); }); 113 assert_throws_js(TypeError, function () { document.createTreeWalker(1); }); 114 }, 'Give an invalid root node to document.createTreeWalker().'); 115 116 test(function () 117 { 118 var root = createSampleDOM(); 119 var walker = document.createTreeWalker(root); 120 var f = root.lastChild.firstChild.childNodes[1]; // An element node: div#f. 121 122 assert_node(walker.currentNode, { type: Element, id: 'a' }); 123 assert_equals(walker.parentNode(), null); 124 assert_node(walker.currentNode, { type: Element, id: 'a' }); 125 assert_node(walker.firstChild(), { type: Text, nodeValue: 'b' }); 126 assert_node(walker.currentNode, { type: Text, nodeValue: 'b' }); 127 assert_node(walker.nextSibling(), { type: Element, id: 'c' }); 128 assert_node(walker.currentNode, { type: Element, id: 'c' }); 129 assert_node(walker.lastChild(), { type: Comment, nodeValue: 'j' }); 130 assert_node(walker.currentNode, { type: Comment, nodeValue: 'j' }); 131 assert_node(walker.previousSibling(), { type: Element, id: 'd' }); 132 assert_node(walker.currentNode, { type: Element, id: 'd' }); 133 assert_node(walker.nextNode(), { type: Text, nodeValue: 'e' }); 134 assert_node(walker.currentNode, { type: Text, nodeValue: 'e' }); 135 assert_node(walker.parentNode(), { type: Element, id: 'd' }); 136 assert_node(walker.currentNode, { type: Element, id: 'd' }); 137 assert_node(walker.previousNode(), { type: Element, id: 'c' }); 138 assert_node(walker.currentNode, { type: Element, id: 'c' }); 139 assert_equals(walker.nextSibling(), null); 140 assert_node(walker.currentNode, { type: Element, id: 'c' }); 141 walker.currentNode = f; 142 assert_equals(walker.currentNode, f); 143 }, 'Walk over nodes.'); 144 145 test(function() { 146 var treeWalker = document.createTreeWalker(document.body, 42, null); 147 assert_equals(treeWalker.root, document.body); 148 assert_equals(treeWalker.currentNode, document.body); 149 assert_equals(treeWalker.whatToShow, 42); 150 assert_equals(treeWalker.filter, null); 151 }, "Optional arguments to createTreeWalker should be optional (3 passed, null)."); 152 </script> 153 </body> 154 </html>