| Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/NodeIterator.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/NodeIterator.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/NodeIterator.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..544a63bf0f38be14acc5f320f5ae39b800166f8c
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/traversal/NodeIterator.html
|
| @@ -0,0 +1,202 @@
|
| +<!doctype html>
|
| +<title>NodeIterator 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";
|
| +
|
| +function check_iter(iter, root, whatToShowValue) {
|
| + whatToShowValue = whatToShowValue === undefined ? 0xFFFFFFFF : whatToShowValue;
|
| +
|
| + assert_equals(iter.toString(), '[object NodeIterator]', 'toString');
|
| + assert_equals(iter.root, root, 'root');
|
| + assert_equals(iter.whatToShow, whatToShowValue, 'whatToShow');
|
| + assert_equals(iter.filter, null, 'filter');
|
| + assert_equals(iter.referenceNode, root, 'referenceNode');
|
| + assert_equals(iter.pointerBeforeReferenceNode, true, 'pointerBeforeReferenceNode');
|
| + assert_readonly(iter, 'root');
|
| + assert_readonly(iter, 'whatToShow');
|
| + assert_readonly(iter, 'filter');
|
| + assert_readonly(iter, 'referenceNode');
|
| + assert_readonly(iter, 'pointerBeforeReferenceNode');
|
| +}
|
| +
|
| +test(function() {
|
| + var iter = document.createNodeIterator(document);
|
| + iter.detach();
|
| + iter.detach();
|
| +}, "detach() should be a no-op");
|
| +
|
| +test(function() {
|
| + var iter = document.createNodeIterator(document);
|
| + check_iter(iter, document);
|
| +}, "createNodeIterator() parameter defaults");
|
| +
|
| +test(function() {
|
| + var iter = document.createNodeIterator(document, null, null);
|
| + check_iter(iter, document, 0);
|
| +}, "createNodeIterator() with null as arguments");
|
| +
|
| +test(function() {
|
| + var iter = document.createNodeIterator(document, undefined, undefined);
|
| + check_iter(iter, document);
|
| +}, "createNodeIterator() with undefined as arguments");
|
| +
|
| +test(function() {
|
| + var iter = document.createNodeIterator(document, NodeFilter.SHOW_ALL,
|
| + function() { throw {name: "failed"} });
|
| + assert_throws({name: "failed"}, function() { iter.nextNode() });
|
| +}, "Propagate exception from filter function");
|
| +
|
| +function testIterator(root, whatToShow, filter) {
|
| + var iter = document.createNodeIterator(root, whatToShow, filter);
|
| +
|
| + assert_equals(iter.root, root, ".root");
|
| + assert_equals(iter.referenceNode, root, "Initial .referenceNode");
|
| + assert_equals(iter.pointerBeforeReferenceNode, true,
|
| + ".pointerBeforeReferenceNode");
|
| + assert_equals(iter.whatToShow, whatToShow, ".whatToShow");
|
| + assert_equals(iter.filter, filter, ".filter");
|
| +
|
| + var expectedReferenceNode = root;
|
| + var expectedBeforeNode = true;
|
| + // "Let node be the value of the referenceNode attribute."
|
| + var node = root;
|
| + // "Let before node be the value of the pointerBeforeReferenceNode
|
| + // attribute."
|
| + var beforeNode = true;
|
| + var i = 1;
|
| + // Each loop iteration runs nextNode() once.
|
| + while (node) {
|
| + do {
|
| + if (!beforeNode) {
|
| + // "If before node is false, let node be the first node following node
|
| + // in the iterator collection. If there is no such node return null."
|
| + node = nextNode(node);
|
| + if (!isInclusiveDescendant(node, root)) {
|
| + node = null;
|
| + break;
|
| + }
|
| + } else {
|
| + // "If before node is true, set it to false."
|
| + beforeNode = false;
|
| + }
|
| + // "Filter node and let result be the return value.
|
| + //
|
| + // "If result is FILTER_ACCEPT, go to the next step in the overall set of
|
| + // steps.
|
| + //
|
| + // "Otherwise, run these substeps again."
|
| + if (!((1 << (node.nodeType - 1)) & whatToShow)
|
| + || (filter && filter(node) != NodeFilter.FILTER_ACCEPT)) {
|
| + continue;
|
| + }
|
| +
|
| + // "Set the referenceNode attribute to node, set the
|
| + // pointerBeforeReferenceNode attribute to before node, and return node."
|
| + expectedReferenceNode = node;
|
| + expectedBeforeNode = beforeNode;
|
| +
|
| + break;
|
| + } while (true);
|
| +
|
| + assert_equals(iter.nextNode(), node, ".nextNode() " + i + " time(s)");
|
| + assert_equals(iter.referenceNode, expectedReferenceNode,
|
| + ".referenceNode after nextNode() " + i + " time(s)");
|
| + assert_equals(iter.pointerBeforeReferenceNode, expectedBeforeNode,
|
| + ".pointerBeforeReferenceNode after nextNode() " + i + " time(s)");
|
| +
|
| + i++;
|
| + }
|
| +
|
| + // Same but for previousNode() (mostly copy-pasted, oh well)
|
| + var iter = document.createNodeIterator(root, whatToShow, filter);
|
| +
|
| + var expectedReferenceNode = root;
|
| + var expectedBeforeNode = true;
|
| + // "Let node be the value of the referenceNode attribute."
|
| + var node = root;
|
| + // "Let before node be the value of the pointerBeforeReferenceNode
|
| + // attribute."
|
| + var beforeNode = true;
|
| + var i = 1;
|
| + // Each loop iteration runs previousNode() once.
|
| + while (node) {
|
| + do {
|
| + if (beforeNode) {
|
| + // "If before node is true, let node be the first node preceding node
|
| + // in the iterator collection. If there is no such node return null."
|
| + node = previousNode(node);
|
| + if (!isInclusiveDescendant(node, root)) {
|
| + node = null;
|
| + break;
|
| + }
|
| + } else {
|
| + // "If before node is false, set it to true."
|
| + beforeNode = true;
|
| + }
|
| + // "Filter node and let result be the return value.
|
| + //
|
| + // "If result is FILTER_ACCEPT, go to the next step in the overall set of
|
| + // steps.
|
| + //
|
| + // "Otherwise, run these substeps again."
|
| + if (!((1 << (node.nodeType - 1)) & whatToShow)
|
| + || (filter && filter(node) != NodeFilter.FILTER_ACCEPT)) {
|
| + continue;
|
| + }
|
| +
|
| + // "Set the referenceNode attribute to node, set the
|
| + // pointerBeforeReferenceNode attribute to before node, and return node."
|
| + expectedReferenceNode = node;
|
| + expectedBeforeNode = beforeNode;
|
| +
|
| + break;
|
| + } while (true);
|
| +
|
| + assert_equals(iter.previousNode(), node, ".previousNode() " + i + " time(s)");
|
| + assert_equals(iter.referenceNode, expectedReferenceNode,
|
| + ".referenceNode after previousNode() " + i + " time(s)");
|
| + assert_equals(iter.pointerBeforeReferenceNode, expectedBeforeNode,
|
| + ".pointerBeforeReferenceNode after previousNode() " + i + " time(s)");
|
| +
|
| + i++;
|
| + }
|
| +}
|
| +
|
| +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.createNodeIterator(" + testNodes[i]
|
| + + ", " + whatToShows[j] + ", " + callbacks[k] + ")",
|
| + eval(testNodes[i]), eval(whatToShows[j]), eval(callbacks[k])
|
| + ]);
|
| + }
|
| + }
|
| +}
|
| +
|
| +generate_tests(testIterator, tests);
|
| +
|
| +testDiv.style.display = "none";
|
| +</script>
|
|
|