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