Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/NodeIterator.html

Issue 1529523002: Import dom/ from web-platform-tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tweak W3CImportExpectations Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!doctype html>
2 <title>NodeIterator tests</title>
3 <link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
4 <meta name=timeout content=long>
5 <div id=log></div>
6 <script src=../../../../resources/testharness.js></script>
7 <script src=../../../../resources/testharnessreport.js></script>
8 <script src=../common.js></script>
9 <script>
10 "use strict";
11
12 function check_iter(iter, root, whatToShowValue) {
13 whatToShowValue = whatToShowValue === undefined ? 0xFFFFFFFF : whatToShowVal ue;
14
15 assert_equals(iter.toString(), '[object NodeIterator]', 'toString');
16 assert_equals(iter.root, root, 'root');
17 assert_equals(iter.whatToShow, whatToShowValue, 'whatToShow');
18 assert_equals(iter.filter, null, 'filter');
19 assert_equals(iter.referenceNode, root, 'referenceNode');
20 assert_equals(iter.pointerBeforeReferenceNode, true, 'pointerBeforeReference Node');
21 assert_readonly(iter, 'root');
22 assert_readonly(iter, 'whatToShow');
23 assert_readonly(iter, 'filter');
24 assert_readonly(iter, 'referenceNode');
25 assert_readonly(iter, 'pointerBeforeReferenceNode');
26 }
27
28 test(function() {
29 var iter = document.createNodeIterator(document);
30 iter.detach();
31 iter.detach();
32 }, "detach() should be a no-op");
33
34 test(function() {
35 var iter = document.createNodeIterator(document);
36 check_iter(iter, document);
37 }, "createNodeIterator() parameter defaults");
38
39 test(function() {
40 var iter = document.createNodeIterator(document, null, null);
41 check_iter(iter, document, 0);
42 }, "createNodeIterator() with null as arguments");
43
44 test(function() {
45 var iter = document.createNodeIterator(document, undefined, undefined);
46 check_iter(iter, document);
47 }, "createNodeIterator() with undefined as arguments");
48
49 test(function() {
50 var iter = document.createNodeIterator(document, NodeFilter.SHOW_ALL,
51 function() { throw {name: "failed"} });
52 assert_throws({name: "failed"}, function() { iter.nextNode() });
53 }, "Propagate exception from filter function");
54
55 function testIterator(root, whatToShow, filter) {
56 var iter = document.createNodeIterator(root, whatToShow, filter);
57
58 assert_equals(iter.root, root, ".root");
59 assert_equals(iter.referenceNode, root, "Initial .referenceNode");
60 assert_equals(iter.pointerBeforeReferenceNode, true,
61 ".pointerBeforeReferenceNode");
62 assert_equals(iter.whatToShow, whatToShow, ".whatToShow");
63 assert_equals(iter.filter, filter, ".filter");
64
65 var expectedReferenceNode = root;
66 var expectedBeforeNode = true;
67 // "Let node be the value of the referenceNode attribute."
68 var node = root;
69 // "Let before node be the value of the pointerBeforeReferenceNode
70 // attribute."
71 var beforeNode = true;
72 var i = 1;
73 // Each loop iteration runs nextNode() once.
74 while (node) {
75 do {
76 if (!beforeNode) {
77 // "If before node is false, let node be the first node following node
78 // in the iterator collection. If there is no such node return null."
79 node = nextNode(node);
80 if (!isInclusiveDescendant(node, root)) {
81 node = null;
82 break;
83 }
84 } else {
85 // "If before node is true, set it to false."
86 beforeNode = false;
87 }
88 // "Filter node and let result be the return value.
89 //
90 // "If result is FILTER_ACCEPT, go to the next step in the overall set of
91 // steps.
92 //
93 // "Otherwise, run these substeps again."
94 if (!((1 << (node.nodeType - 1)) & whatToShow)
95 || (filter && filter(node) != NodeFilter.FILTER_ACCEPT)) {
96 continue;
97 }
98
99 // "Set the referenceNode attribute to node, set the
100 // pointerBeforeReferenceNode attribute to before node, and return node."
101 expectedReferenceNode = node;
102 expectedBeforeNode = beforeNode;
103
104 break;
105 } while (true);
106
107 assert_equals(iter.nextNode(), node, ".nextNode() " + i + " time(s)");
108 assert_equals(iter.referenceNode, expectedReferenceNode,
109 ".referenceNode after nextNode() " + i + " time(s)");
110 assert_equals(iter.pointerBeforeReferenceNode, expectedBeforeNode,
111 ".pointerBeforeReferenceNode after nextNode() " + i + " time(s)");
112
113 i++;
114 }
115
116 // Same but for previousNode() (mostly copy-pasted, oh well)
117 var iter = document.createNodeIterator(root, whatToShow, filter);
118
119 var expectedReferenceNode = root;
120 var expectedBeforeNode = true;
121 // "Let node be the value of the referenceNode attribute."
122 var node = root;
123 // "Let before node be the value of the pointerBeforeReferenceNode
124 // attribute."
125 var beforeNode = true;
126 var i = 1;
127 // Each loop iteration runs previousNode() once.
128 while (node) {
129 do {
130 if (beforeNode) {
131 // "If before node is true, let node be the first node preceding node
132 // in the iterator collection. If there is no such node return null."
133 node = previousNode(node);
134 if (!isInclusiveDescendant(node, root)) {
135 node = null;
136 break;
137 }
138 } else {
139 // "If before node is false, set it to true."
140 beforeNode = true;
141 }
142 // "Filter node and let result be the return value.
143 //
144 // "If result is FILTER_ACCEPT, go to the next step in the overall set of
145 // steps.
146 //
147 // "Otherwise, run these substeps again."
148 if (!((1 << (node.nodeType - 1)) & whatToShow)
149 || (filter && filter(node) != NodeFilter.FILTER_ACCEPT)) {
150 continue;
151 }
152
153 // "Set the referenceNode attribute to node, set the
154 // pointerBeforeReferenceNode attribute to before node, and return node."
155 expectedReferenceNode = node;
156 expectedBeforeNode = beforeNode;
157
158 break;
159 } while (true);
160
161 assert_equals(iter.previousNode(), node, ".previousNode() " + i + " time(s)" );
162 assert_equals(iter.referenceNode, expectedReferenceNode,
163 ".referenceNode after previousNode() " + i + " time(s)");
164 assert_equals(iter.pointerBeforeReferenceNode, expectedBeforeNode,
165 ".pointerBeforeReferenceNode after previousNode() " + i + " time(s)");
166
167 i++;
168 }
169 }
170
171 var whatToShows = [
172 "0",
173 "0xFFFFFFFF",
174 "NodeFilter.SHOW_ELEMENT",
175 "NodeFilter.SHOW_ATTRIBUTE",
176 "NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT",
177 ];
178
179 var callbacks = [
180 "null",
181 "(function(node) { return true })",
182 "(function(node) { return false })",
183 "(function(node) { return node.nodeName[0] == '#' })",
184 ];
185
186 var tests = [];
187 for (var i = 0; i < testNodes.length; i++) {
188 for (var j = 0; j < whatToShows.length; j++) {
189 for (var k = 0; k < callbacks.length; k++) {
190 tests.push([
191 "document.createNodeIterator(" + testNodes[i]
192 + ", " + whatToShows[j] + ", " + callbacks[k] + ")",
193 eval(testNodes[i]), eval(whatToShows[j]), eval(callbacks[k])
194 ]);
195 }
196 }
197 }
198
199 generate_tests(testIterator, tests);
200
201 testDiv.style.display = "none";
202 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698