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">
10 <p>This test checks the basic functionality of TreeWalker.
</p>
12 function createSampleDOM()
32 var div
= document
.createElement('div');
34 div
.innerHTML
= 'b<div id="c"><div id="d">e<span id="f">g<!--h--></span>i</div><!--j--></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');
59 var root
= createSampleDOM();
60 var walker
= document
.createTreeWalker(root
);
61 check_walker(walker
, root
);
62 }, 'Construct a TreeWalker by document.createTreeWalker(root).');
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).');
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
);
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.
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).");