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

Unified Diff: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/TreeWalker.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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/TreeWalker.html
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/TreeWalker.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/TreeWalker.html
new file mode 100644
index 0000000000000000000000000000000000000000..1c9a0587f19bc96566e29987284534288db57e1d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/TreeWalker.html
@@ -0,0 +1,298 @@
+<!doctype html>
+<title>TreeWalker tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=../../../../resources/testharness.js></script>
+<script src=../../../../resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+// TODO .previousNode, .nextNode
+
+function filterNode(node, whatToShow, filter) {
+ // "If active flag is set throw an "InvalidStateError"."
+ // Ignore active flag for these tests, we aren't calling recursively
+ // TODO Test me
+
+ // "Let n be node's nodeType attribute value minus 1."
+ var n = node.nodeType - 1;
+
+ // "If the nth bit (where 0 is the least significant bit) of whatToShow is
+ // not set, return FILTER_SKIP."
+ if (!(whatToShow & (1 << n))) {
+ return NodeFilter.FILTER_SKIP;
+ }
+
+ // "If filter is null, return FILTER_ACCEPT."
+ if (!filter) {
+ return NodeFilter.FILTER_ACCEPT;
+ }
+
+ // "Set the active flag."
+ //
+ // "Let result be the return value of invoking filter."
+ //
+ // "Unset the active flag."
+ //
+ // "If an exception was thrown, re-throw the exception."
+ // TODO Test me
+ //
+ // "Return result."
+ return filter(node);
+}
+
+function testTraverseChildren(type, walker, root, whatToShow, filter) {
+ // TODO We don't test .currentNode other than the root
+ walker.currentNode = root;
+ assert_equals(walker.currentNode, root, "Setting .currentNode");
+
+ var expectedReturn = null;
+ var expectedCurrentNode = root;
+
+ // "To traverse children of type type, run these steps:
+ //
+ // "Let node be the value of the currentNode attribute."
+ var node = walker.currentNode;
+
+ // "Set node to node's first child if type is first, and node's last child
+ // if type is last."
+ node = type == "first" ? node.firstChild : node.lastChild;
+
+ // "Main: While node is not null, run these substeps:"
+ while (node) {
+ // "Filter node and let result be the return value."
+ var result = filterNode(node, whatToShow, filter);
+
+ // "If result is FILTER_ACCEPT, then set the currentNode attribute to
+ // node and return node."
+ if (result == NodeFilter.FILTER_ACCEPT) {
+ expectedCurrentNode = expectedReturn = node;
+ break;
+ }
+
+ // "If result is FILTER_SKIP, run these subsubsteps:"
+ if (result == NodeFilter.FILTER_SKIP) {
+ // "Let child be node's first child if type is first, and node's
+ // last child if type is last."
+ var child = type == "first" ? node.firstChild : node.lastChild;
+
+ // "If child is not null, set node to child and goto Main."
+ if (child) {
+ node = child;
+ continue;
+ }
+ }
+
+ // "While node is not null, run these subsubsteps:"
+ while (node) {
+ // "Let sibling be node's next sibling if type is first, and node's
+ // previous sibling if type is last."
+ var sibling = type == "first" ? node.nextSibling
+ : node.previousSibling;
+
+ // "If sibling is not null, set node to sibling and goto Main."
+ if (sibling) {
+ node = sibling;
+ break;
+ }
+
+ // "Let parent be node's parent."
+ var parent = node.parentNode;
+
+ // "If parent is null, parent is root, or parent is currentNode
+ // attribute's value, return null."
+ if (!parent || parent == root || parent == walker.currentNode) {
+ expectedReturn = node = null;
+ break;
+ } else {
+ // "Otherwise, set node to parent."
+ node = parent;
+ }
+ }
+ }
+
+ if (type == "first") {
+ assert_equals(walker.firstChild(), expectedReturn, ".firstChild()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .firstChild()");
+ } else {
+ assert_equals(walker.lastChild(), expectedReturn, ".lastChild()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .lastChild()");
+ }
+}
+
+function testTraverseSiblings(type, walker, root, whatToShow, filter) {
+ // TODO We don't test .currentNode other than the root's first or last child
+ if (!root.firstChild) {
+ // Nothing much to test
+
+ walker.currentNode = root;
+ assert_equals(walker.currentNode, root, "Setting .currentNode");
+
+ if (type == "next") {
+ assert_equals(walker.nextSibling(), null, ".nextSibling()");
+ assert_equals(walker.currentNode, root,
+ ".currentNode after .nextSibling()")
+ } else {
+ assert_equals(walker.previousSibling(), null, ".previousSibling()");
+ assert_equals(walker.currentNode, root,
+ ".currentNode after .previousSibling()")
+ }
+ return;
+ }
+
+ if (type == "next") {
+ walker.currentNode = root.firstChild;
+ assert_equals(walker.currentNode, root.firstChild,
+ "Setting .currentNode");
+ } else {
+ walker.currentNode = root.lastChild;
+ assert_equals(walker.currentNode, root.lastChild,
+ "Setting .currentNode");
+ }
+
+ var expectedReturn = null;
+ var expectedCurrentNode = type == "next" ? root.firstChild : root.lastChild;
+
+ // "To traverse siblings of type type run these steps:"
+ (function() {
+ // "Let node be the value of the currentNode attribute."
+ var node = type == "next" ? root.firstChild : root.lastChild;
+
+ // "If node is root, return null.
+ //
+ // "Run these substeps:
+ do {
+ // "Let sibling be node's next sibling if type is next, and node's
+ // previous sibling if type is previous."
+ var sibling = type == "next" ? node.nextSibling :
+ node.previousSibling;
+
+ // "While sibling is not null, run these subsubsteps:"
+ while (sibling) {
+ // "Set node to sibling."
+ node = sibling;
+
+ // "Filter node and let result be the return value."
+ var result = filterNode(node, whatToShow, filter);
+
+ // "If result is FILTER_ACCEPT, then set the currentNode
+ // attribute to node and return node."
+ if (result == NodeFilter.FILTER_ACCEPT) {
+ expectedCurrentNode = expectedReturn = node;
+ return;
+ }
+
+ // "Set sibling to node's first child if type is next, and
+ // node's last child if type is previous."
+ sibling = type == "next" ? node.firstChild : node.lastChild;
+
+ // "If result is FILTER_REJECT or sibling is null, then set
+ // sibling to node's next sibling if type is next, and node's
+ // previous sibling if type is previous."
+ if (result == NodeFilter.FILTER_REJECT || !sibling) {
+ sibling = type == "next" ? node.nextSibling :
+ node.previousSibling;
+ }
+ }
+
+ // "Set node to its parent."
+ node = node.parentNode;
+
+ // "If node is null or is root, return null.
+ if (!node || node == root) {
+ return;
+ }
+ // "Filter node and if the return value is FILTER_ACCEPT, then
+ // return null."
+ if (filterNode(node, whatToShow, filter)) {
+ return;
+ }
+
+ // "Run these substeps again."
+ } while (true);
+ })();
+
+ if (type == "next") {
+ assert_equals(walker.nextSibling(), expectedReturn, ".nextSibling()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .nextSibling()");
+ } else {
+ assert_equals(walker.previousSibling(), expectedReturn, ".previousSibling()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .previousSibling()");
+ }
+}
+
+function testWalker(root, whatToShow, filter) {
+ var walker = document.createTreeWalker(root, whatToShow, filter);
+
+ assert_equals(walker.root, root, ".root");
+ assert_equals(walker.whatToShow, whatToShow, ".whatToShow");
+ assert_equals(walker.filter, filter, ".filter");
+ assert_equals(walker.currentNode, root, ".currentNode");
+
+ var expectedReturn = null;
+ var expectedCurrentNode = walker.currentNode;
+ // "The parentNode() method must run these steps:"
+ //
+ // "Let node be the value of the currentNode attribute."
+ var node = walker.currentNode;
+
+ // "While node is not null and is not root, run these substeps:"
+ while (node && node != root) {
+ // "Let node be node's parent."
+ node = node.parentNode;
+
+ // "If node is not null and filtering node returns FILTER_ACCEPT, then
+ // set the currentNode attribute to node, return node."
+ if (node && filterNode(node, whatToShow, filter) ==
+ NodeFilter.FILTER_ACCEPT) {
+ expectedCurrentNode = expectedReturn = node;
+ }
+ }
+ assert_equals(walker.parentNode(), expectedReturn, ".parentNode()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .parentNode()");
+
+ testTraverseChildren("first", walker, root, whatToShow, filter);
+ testTraverseChildren("last", walker, root, whatToShow, filter);
+
+ testTraverseSiblings("next", walker, root, whatToShow, filter);
+ testTraverseSiblings("previous", walker, root, whatToShow, filter);
+}
+
+var whatToShows = [
+ "0",
+ "0xFFFFFFFF",
+ "NodeFilter.SHOW_ELEMENT",
+ "NodeFilter.SHOW_ATTRIBUTE",
+ "NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT",
+];
+
+var callbacks = [
+ "null",
+ "(function(node) { return true })",
+ "(function(node) { return false })",
+ "(function(node) { return node.nodeName[0] == '#' })",
+];
+
+var tests = [];
+for (var i = 0; i < testNodes.length; i++) {
+ for (var j = 0; j < whatToShows.length; j++) {
+ for (var k = 0; k < callbacks.length; k++) {
+ tests.push([
+ "document.createTreeWalker(" + testNodes[i] +
+ ", " + whatToShows[j] + ", " + callbacks[k] + ")",
+ eval(testNodes[i]), eval(whatToShows[j]), eval(callbacks[k])
+ ]);
+ }
+ }
+}
+generate_tests(testWalker, tests);
+
+testDiv.style.display = "none";
+</script>

Powered by Google App Engine
This is Rietveld 408576698