mirror of
https://github.com/servo/servo.git
synced 2025-08-14 18:05:36 +01:00
Update web-platform-tests to revision 0d318188757a9c996e20b82db201fd04de5aa255
This commit is contained in:
parent
b2a5225831
commit
1a81b18b9f
12321 changed files with 544385 additions and 6 deletions
177
tests/wpt/web-platform-tests/dom/traversal/NodeIterator.html
Normal file
177
tests/wpt/web-platform-tests/dom/traversal/NodeIterator.html
Normal file
|
@ -0,0 +1,177 @@
|
|||
<!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";
|
||||
|
||||
test(function() {
|
||||
var iter = document.createNodeIterator(document);
|
||||
iter.detach();
|
||||
iter.detach();
|
||||
}, "detach() should be a no-op");
|
||||
|
||||
test(function() {
|
||||
var iter = document.createNodeIterator(document);
|
||||
assert_equals(iter.whatToShow, 0xFFFFFFFF, "whatToShow");
|
||||
assert_equals(iter.filter, null, "filter");
|
||||
}, "createNodeIterator() parameter defaults");
|
||||
|
||||
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>
|
Loading…
Add table
Add a link
Reference in a new issue