Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / fast / dom / TreeWalker / TreeWalker-basic.html
blob4921af392590da500dde30f131670aeea41f5ea6
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>TreeWalker: Basic test</title>
5 <script src="../../../resources/testharness.js"></script>
6 <script src="../../../resources/testharnessreport.js"></script>
7 <link rel="stylesheet" href="../../../resources/testharness.css">
8 </head>
9 <body>
10 <p>This test checks the basic functionality of TreeWalker.</p>
11 <script>
12 function createSampleDOM()
14 // Tree structure:
15 // #a
16 // |
17 // +----+----+
18 // | |
19 // "b" #c
20 // |
21 // +----+----+
22 // | |
23 // #d <!--j-->
24 // |
25 // +----+----+
26 // | | |
27 // "e" #f "i"
28 // |
29 // +--+--+
30 // | |
31 // "g" <!--h-->
32 var div = document.createElement('div');
33 div.id = 'a';
34 div.innerHTML = 'b<div id="c"><div id="d">e<span id="f">g<!--h--></span>i</div><!--j--></div>';
35 return div;
38 function check_walker(walker, root)
40 assert_equals(walker.toString(), '[object TreeWalker]');
41 assert_equals(walker.root, root);
42 assert_equals(walker.whatToShow, 0xFFFFFFFF);
43 assert_equals(walker.filter, null);
44 assert_equals(walker.currentNode, root);
45 assert_readonly(walker, 'root');
46 assert_readonly(walker, 'whatToShow');
47 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');
57 test(function ()
59 var root = createSampleDOM();
60 var walker = document.createTreeWalker(root);
61 check_walker(walker, root);
62 }, 'Construct a TreeWalker by document.createTreeWalker(root).');
64 test(function ()
66 var root = createSampleDOM();
67 var walker = document.createTreeWalker(root, undefined, undefined);
68 check_walker(walker, root);
69 }, 'Construct a TreeWalker by document.createTreeWalker(root, undefined, undefined).');
71 test(function ()
73 assert_throws(new TypeError(), function () { document.createTreeWalker(); });
74 assert_throws(new TypeError(), function () { document.createTreeWalker(null); });
75 assert_throws(new TypeError(), function () { document.createTreeWalker(undefined); });
76 assert_throws(new TypeError(), function () { document.createTreeWalker(new Object()); });
77 assert_throws(new TypeError(), function () { document.createTreeWalker(1); });
78 }, 'Give an invalid root node to document.createTreeWalker().');
80 // |expected| should be an object indicating the expected type of node.
81 function assert_node(actual, expected)
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);
91 test(function ()
93 var root = createSampleDOM();
94 var walker = document.createTreeWalker(root);
95 var f = root.lastChild.firstChild.childNodes[1]; // An element node: div#f.
96 var body = document.body; // An element outside |root|.
98 assert_node(walker.currentNode, { type: Element, id: 'a' });
99 assert_equals(walker.parentNode(), null);
100 assert_node(walker.currentNode, { type: Element, id: 'a' });
101 assert_node(walker.firstChild(), { type: Text, nodeValue: 'b' });
102 assert_node(walker.currentNode, { type: Text, nodeValue: 'b' });
103 assert_node(walker.nextSibling(), { type: Element, id: 'c' });
104 assert_node(walker.currentNode, { type: Element, id: 'c' });
105 assert_node(walker.lastChild(), { type: Comment, nodeValue: 'j' });
106 assert_node(walker.currentNode, { type: Comment, nodeValue: 'j' });
107 assert_node(walker.previousSibling(), { type: Element, id: 'd' });
108 assert_node(walker.currentNode, { type: Element, id: 'd' });
109 assert_node(walker.nextNode(), { type: Text, nodeValue: 'e' });
110 assert_node(walker.currentNode, { type: Text, nodeValue: 'e' });
111 assert_node(walker.parentNode(), { type: Element, id: 'd' });
112 assert_node(walker.currentNode, { type: Element, id: 'd' });
113 assert_node(walker.previousNode(), { type: Element, id: 'c' });
114 assert_node(walker.currentNode, { type: Element, id: 'c' });
115 assert_equals(walker.nextSibling(), null);
116 assert_node(walker.currentNode, { type: Element, id: 'c' });
117 walker.currentNode = f;
118 assert_equals(walker.currentNode, f);
119 }, 'Walk over nodes.');
121 // FIXME: Add tests that use |whatToShow| argument and/or |filter| argument.
123 test(function() {
124 var treeWalker = document.createTreeWalker(document.body, 42, null);
125 assert_equals(treeWalker.root, document.body);
126 assert_equals(treeWalker.currentNode, document.body);
127 assert_equals(treeWalker.whatToShow, 42);
128 assert_equals(treeWalker.filter, null);
129 }, "Optional arguments to createTreeWalker should be optional (3 passed, null).");
130 </script>
131 </body>
132 </html>