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 |