diff options
Diffstat (limited to 'LayoutTests/fast/dom/TreeWalker')
25 files changed, 698 insertions, 0 deletions
diff --git a/LayoutTests/fast/dom/TreeWalker/TreeWalker-currentNode-expected.txt b/LayoutTests/fast/dom/TreeWalker/TreeWalker-currentNode-expected.txt new file mode 100644 index 0000000..d9ea239 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/TreeWalker-currentNode-expected.txt @@ -0,0 +1,36 @@ +Tests the TreeWalker. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +Test that TreeWalker.parent() doesn't set the currentNode to a node not under the root. + +PASS w.currentNode is subTree +PASS w.parentNode() is null +PASS w.currentNode is subTree + +Test that we handle setting the currentNode to arbitrary nodes not under the root element. + +PASS w.parentNode() is null +PASS w.currentNode is document.documentElement +PASS w.nextNode() is document.documentElement.firstChild +PASS w.currentNode is document.documentElement.firstChild +PASS w.previousNode() is null +PASS w.currentNode is document.documentElement +PASS w.firstChild() is document.documentElement.firstChild +PASS w.currentNode is document.documentElement.firstChild +PASS w.lastChild() is document.documentElement.lastChild +PASS w.currentNode is document.documentElement.lastChild +PASS w.nextSibling() is null +PASS w.currentNode is document.documentElement +PASS w.previousSibling() is null +PASS w.currentNode is document.documentElement + +Test how we handle the case when the traversed to node within the root, but the currentElement is not. + +PASS w.nextNode() is subTree +PASS w.lastChild() is subTree +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/dom/TreeWalker/TreeWalker-currentNode.html b/LayoutTests/fast/dom/TreeWalker/TreeWalker-currentNode.html new file mode 100644 index 0000000..fa8cad3 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/TreeWalker-currentNode.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="resources/TreeWalker-currentNode.js"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> diff --git a/LayoutTests/fast/dom/TreeWalker/acceptNode-filter-expected.txt b/LayoutTests/fast/dom/TreeWalker/acceptNode-filter-expected.txt new file mode 100644 index 0000000..ca5da84 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/acceptNode-filter-expected.txt @@ -0,0 +1,53 @@ +Test JS objects as NodeFilters. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +Testing with raw function filter + filtering node A1 +PASS walker.firstChild(); walker.currentNode.id is 'A1' + filtering node B1 + filtering node B2 +PASS walker.nextNode(); walker.currentNode.id is 'B2' + +Testing with object filter + filtering node A1 +PASS walker.firstChild(); walker.currentNode.id is 'A1' + filtering node B1 + filtering node B2 +PASS walker.nextNode(); walker.currentNode.id is 'B2' + +Testing with null filter +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.nextNode(); walker.currentNode.id is 'B1' + +Testing with undefined filter +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.nextNode(); walker.currentNode.id is 'B1' + +Testing with object lacking acceptNode property +PASS walker.firstChild(); threw exception TypeError: NodeFilter object does not have an acceptNode function. +PASS walker.currentNode.id; is 'root' +PASS walker.nextNode(); threw exception TypeError: NodeFilter object does not have an acceptNode function. +PASS walker.currentNode.id; is 'root' + +Testing with object with non-function acceptNode property +PASS walker.firstChild(); threw exception TypeError: NodeFilter object does not have an acceptNode function. +PASS walker.currentNode.id; is 'root' +PASS walker.nextNode(); threw exception TypeError: NodeFilter object does not have an acceptNode function. +PASS walker.currentNode.id; is 'root' + +Testing with function having acceptNode function +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.nextNode(); walker.currentNode.id is 'B1' + +Testing acceptNode callee +Callee: function (node) { + debug('Callee: ' + arguments.callee); + return NodeFilter.FILTER_ACCEPT; + } +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/dom/TreeWalker/acceptNode-filter.html b/LayoutTests/fast/dom/TreeWalker/acceptNode-filter.html new file mode 100644 index 0000000..a6398f9 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/acceptNode-filter.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="script-tests/acceptNode-filter.js"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> diff --git a/LayoutTests/fast/dom/TreeWalker/filter-throw-expected.txt b/LayoutTests/fast/dom/TreeWalker/filter-throw-expected.txt new file mode 100644 index 0000000..c7213aa --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/filter-throw-expected.txt @@ -0,0 +1,21 @@ +Test JS objects as NodeFilters. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +Testing with object filter +Test with filter function +PASS walker.firstChild(); threw exception filter exception. +PASS walker.currentNode.id is 'root' +PASS walker.nextNode();walker.currentNode.id threw exception filter exception. +PASS walker.currentNode.id is 'root' + +Test with filter object +PASS walker.firstChild(); threw exception filter exception. +PASS walker.currentNode.id is 'root' +PASS walker.nextNode();walker.currentNode.id threw exception filter exception. +PASS walker.currentNode.id is 'root' +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/dom/TreeWalker/filter-throw.html b/LayoutTests/fast/dom/TreeWalker/filter-throw.html new file mode 100644 index 0000000..e1ad777 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/filter-throw.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="script-tests/filter-throw.js"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> diff --git a/LayoutTests/fast/dom/TreeWalker/previousNodeLastChildReject-expected.txt b/LayoutTests/fast/dom/TreeWalker/previousNodeLastChildReject-expected.txt new file mode 100644 index 0000000..0ba7bb4 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/previousNodeLastChildReject-expected.txt @@ -0,0 +1,14 @@ +Test for a specific problem with previousNode that failed in older versions of WebKit. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.nextNode(); walker.currentNode.id is 'B1' +PASS walker.nextNode(); walker.currentNode.id is 'C1' +PASS walker.nextNode(); walker.currentNode.id is 'B2' +PASS walker.previousNode(); walker.currentNode.id is 'C1' +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/dom/TreeWalker/previousNodeLastChildReject.html b/LayoutTests/fast/dom/TreeWalker/previousNodeLastChildReject.html new file mode 100644 index 0000000..9445675 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/previousNodeLastChildReject.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="script-tests/previousNodeLastChildReject.js"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> diff --git a/LayoutTests/fast/dom/TreeWalker/previousSiblingLastChildSkip-expected.txt b/LayoutTests/fast/dom/TreeWalker/previousSiblingLastChildSkip-expected.txt new file mode 100644 index 0000000..4cc3b5e --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/previousSiblingLastChildSkip-expected.txt @@ -0,0 +1,16 @@ +Test for a specific problem with previousSibling that failed in older versions of WebKit. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.nextNode(); walker.currentNode.id is 'C1' +PASS walker.nextNode(); walker.currentNode.id is 'C2' +PASS walker.nextNode(); walker.currentNode.id is 'D1' +PASS walker.nextNode(); walker.currentNode.id is 'D2' +PASS walker.nextNode(); walker.currentNode.id is 'B2' +PASS walker.previousSibling(); walker.currentNode.id is 'C2' +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/dom/TreeWalker/previousSiblingLastChildSkip.html b/LayoutTests/fast/dom/TreeWalker/previousSiblingLastChildSkip.html new file mode 100644 index 0000000..5f44a37 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/previousSiblingLastChildSkip.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="script-tests/previousSiblingLastChildSkip.js"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> diff --git a/LayoutTests/fast/dom/TreeWalker/resources/TreeWalker-currentNode.js b/LayoutTests/fast/dom/TreeWalker/resources/TreeWalker-currentNode.js new file mode 100644 index 0000000..4a6768b --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/resources/TreeWalker-currentNode.js @@ -0,0 +1,55 @@ +description("Tests the TreeWalker.") + +var subTree = document.createElement('div'); +subTree.innerHTML = "<p>Lorem ipsum <span>dolor <b>sit</b> amet</span>, consectetur <i>adipisicing</i> elit, sed do eiusmod <tt>tempor <b><i>incididunt ut</i> labore</b> et dolore magna</tt> aliqua.</p>" +document.body.appendChild(subTree); + +var all = function(node) { return true; } +var w = document.createTreeWalker(subTree, 0x01 | 0x08 | 0x10 | 0x20, all, true); + +debug("Test that TreeWalker.parent() doesn't set the currentNode to a node not under the root."); +debug(""); + +shouldBe("w.currentNode", "subTree"); +shouldBeNull("w.parentNode()"); +shouldBe("w.currentNode", "subTree"); + +debug(""); +debug("Test that we handle setting the currentNode to arbitrary nodes not under the root element."); +debug(""); + +w.currentNode = document.documentElement; +shouldBeNull("w.parentNode()"); +shouldBe("w.currentNode", "document.documentElement"); +w.currentNode = document.documentElement; +shouldBe("w.nextNode()", "document.documentElement.firstChild"); +shouldBe("w.currentNode", "document.documentElement.firstChild"); +w.currentNode = document.documentElement; +shouldBeNull("w.previousNode()"); +shouldBe("w.currentNode", "document.documentElement"); +w.currentNode = document.documentElement; +shouldBe("w.firstChild()", "document.documentElement.firstChild"); +shouldBe("w.currentNode", "document.documentElement.firstChild"); +w.currentNode = document.documentElement; +shouldBe("w.lastChild()", "document.documentElement.lastChild"); +shouldBe("w.currentNode", "document.documentElement.lastChild"); +w.currentNode = document.documentElement; +shouldBeNull("w.nextSibling()"); +shouldBe("w.currentNode", "document.documentElement"); +w.currentNode = document.documentElement; +shouldBeNull("w.previousSibling()"); +shouldBe("w.currentNode", "document.documentElement"); + +debug(""); +debug("Test how we handle the case when the traversed to node within the root, but the currentElement is not."); +debug(""); + +w.currentNode = subTree.previousSibling; +shouldBe("w.nextNode()", "subTree"); +w.currentNode = document.body; +shouldBe("w.lastChild()", "subTree"); + +// Cleanup +document.body.removeChild(subTree); + +var successfullyParsed = true; diff --git a/LayoutTests/fast/dom/TreeWalker/script-tests/TEMPLATE.html b/LayoutTests/fast/dom/TreeWalker/script-tests/TEMPLATE.html new file mode 100644 index 0000000..1951c43 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/script-tests/TEMPLATE.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="YOUR_JS_FILE_HERE"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> diff --git a/LayoutTests/fast/dom/TreeWalker/script-tests/acceptNode-filter.js b/LayoutTests/fast/dom/TreeWalker/script-tests/acceptNode-filter.js new file mode 100644 index 0000000..79c26cc --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/script-tests/acceptNode-filter.js @@ -0,0 +1,81 @@ +description('Test JS objects as NodeFilters.'); + +var walker; +var testElement = document.createElement("div"); +testElement.id = 'root'; +testElement.innerHTML='<div id="A1"><div id="B1"></div><div id="B2"></div></div>'; + +function filter(node) +{ + debug(" filtering node " + node.id); + if (node.id == "B1") + return NodeFilter.FILTER_SKIP; + return NodeFilter.FILTER_ACCEPT; +} + +debug("Testing with raw function filter"); +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B2'"); + +debug("<br>Testing with object filter"); +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, { + acceptNode : function(node) { + debug(" filtering node " + node.id); + if (node.id == "B1") + return NodeFilter.FILTER_SKIP; + return NodeFilter.FILTER_ACCEPT; + } + }, false); + +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B2'"); + +debug("<br>Testing with null filter"); +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, null, false); + +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B1'"); + +debug("<br>Testing with undefined filter"); +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, undefined, false); + +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B1'"); + +debug("<br>Testing with object lacking acceptNode property"); +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, {}, false); + +shouldThrow("walker.firstChild();"); +shouldBe("walker.currentNode.id;", "'root'"); +shouldThrow("walker.nextNode();"); +shouldBe("walker.currentNode.id;", "'root'"); + +debug("<br>Testing with object with non-function acceptNode property"); +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, { acceptNode: "foo" }, false); + +shouldThrow("walker.firstChild();"); +shouldBe("walker.currentNode.id;", "'root'"); +shouldThrow("walker.nextNode();"); +shouldBe("walker.currentNode.id;", "'root'"); + +debug("<br>Testing with function having acceptNode function"); +var filter = function() { return NodeFilter.FILTER_ACCEPT; }; +filter.acceptNode = function(node) { return NodeFilter.FILTER_SKIP; }; +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); + +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B1'"); + +debug("<br>Testing acceptNode callee"); +var filter = { + acceptNode: function(node) { + debug('Callee: ' + arguments.callee); + return NodeFilter.FILTER_ACCEPT; + } +}; +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); + +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); + +var successfullyParsed = true; diff --git a/LayoutTests/fast/dom/TreeWalker/script-tests/filter-throw.js b/LayoutTests/fast/dom/TreeWalker/script-tests/filter-throw.js new file mode 100644 index 0000000..1127f77 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/script-tests/filter-throw.js @@ -0,0 +1,32 @@ +description('Test JS objects as NodeFilters.'); + +var walker; +var testElement = document.createElement("div"); +testElement.id = 'root'; +testElement.innerHTML='<div id="A1"><div id="B1"></div><div id="B2"></div></div>'; +debug("Testing with object filter"); +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, function(node) { + throw('filter exception'); + return NodeFilter.FILTER_ACCEPT; +}, false); + +debug("Test with filter function"); +shouldThrow("walker.firstChild();"); +shouldBe("walker.currentNode.id", "'root'") +shouldThrow("walker.nextNode();walker.currentNode.id"); +shouldBe("walker.currentNode.id", "'root'") + +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, { + acceptNode : function(node) { + throw('filter exception'); + return NodeFilter.FILTER_ACCEPT; + } + }, false); + +debug("<br>Test with filter object"); +shouldThrow("walker.firstChild();"); +shouldBe("walker.currentNode.id", "'root'") +shouldThrow("walker.nextNode();walker.currentNode.id"); +shouldBe("walker.currentNode.id", "'root'") + +var successfullyParsed = true; diff --git a/LayoutTests/fast/dom/TreeWalker/script-tests/previousNodeLastChildReject.js b/LayoutTests/fast/dom/TreeWalker/script-tests/previousNodeLastChildReject.js new file mode 100644 index 0000000..dcc7e58 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/script-tests/previousNodeLastChildReject.js @@ -0,0 +1,21 @@ +description('Test for a specific problem with previousNode that failed in older versions of WebKit.'); + +var testElement = document.createElement("div"); +testElement.innerHTML='<div id="A1"><div id="B1"><div id="C1"></div><div id="C2"><div id="D1"></div><div id="D2"></div></div></div><div id="B2"><div id="C3"></div><div id="C4"></div></div></div>'; + +function filter(node) +{ + if (node.id == "C2") + return NodeFilter.FILTER_REJECT; + return NodeFilter.FILTER_ACCEPT; +} + +var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); + +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'C1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B2'"); +shouldBe("walker.previousNode(); walker.currentNode.id", "'C1'"); + +var successfullyParsed = true; diff --git a/LayoutTests/fast/dom/TreeWalker/script-tests/previousSiblingLastChildSkip.js b/LayoutTests/fast/dom/TreeWalker/script-tests/previousSiblingLastChildSkip.js new file mode 100644 index 0000000..ed7c577 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/script-tests/previousSiblingLastChildSkip.js @@ -0,0 +1,23 @@ +description('Test for a specific problem with previousSibling that failed in older versions of WebKit.'); + +var testElement = document.createElement("div"); +testElement.innerHTML='<div id="A1"><div id="B1"><div id="C1"></div><div id="C2"><div id="D1"></div><div id="D2"></div></div></div><div id="B2"><div id="C3"></div><div id="C4"></div></div></div>'; + +function filter(node) +{ + if (node.id == "B1") + return NodeFilter.FILTER_SKIP; + return NodeFilter.FILTER_ACCEPT; +} + +var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); + +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'C1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'C2'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'D1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'D2'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B2'"); +shouldBe("walker.previousSibling(); walker.currentNode.id", "'C2'"); + +var successfullyParsed = true; diff --git a/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-reject.js b/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-reject.js new file mode 100644 index 0000000..33fdbef --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-reject.js @@ -0,0 +1,58 @@ +description('Test TreeWalker with rejection'); + +var walker; +var testElement = document.createElement("div"); +testElement.innerHTML='<div id="A1"> <div id="B1"> <div id="C1"></div> </div> <div id="B2"></div><div id="B3"></div> </div>'; + +var rejectB1Filter = { + acceptNode: function(node) { + if (node.id == 'B1') + return NodeFilter.FILTER_REJECT; + + return NodeFilter.FILTER_ACCEPT; + } +} + +var rejectB2Filter = { + acceptNode: function(node) { + if (node.id == 'B2') + return NodeFilter.FILTER_SKIP; + + return NodeFilter.FILTER_ACCEPT; + } +} + +debug("<br>Testing nextNode") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB1Filter, false); +shouldBe("walker.nextNode(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B2'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B3'"); + +debug("<br>Testing firstChild") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB1Filter, false); +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.firstChild(); walker.currentNode.id", "'B2'"); + +debug("<br>Testing nextSibling") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB2Filter, false); +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.firstChild(); walker.currentNode.id", "'B1'"); +shouldBe("walker.nextSibling(); walker.currentNode.id", "'B3'"); + +debug("<br>Testing parentNode") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB1Filter, false); +walker.currentNode = testElement.querySelectorAll('#C1')[0]; +shouldBe("walker.parentNode(); walker.currentNode.id", "'A1'"); + +debug("<br>Testing previousSibling") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB2Filter, false); +walker.currentNode = testElement.querySelectorAll('#B3')[0]; +shouldBe("walker.previousSibling(); walker.currentNode.id", "'B1'"); + +debug("<br>Testing previousNode") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB1Filter, false); +walker.currentNode = testElement.querySelectorAll('#B3')[0]; +shouldBe("walker.previousNode(); walker.currentNode.id", "'B2'"); +shouldBe("walker.previousNode(); walker.currentNode.id", "'A1'"); + +var successfullyParsed = true; diff --git a/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip-most.js b/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip-most.js new file mode 100644 index 0000000..b3d21ab --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip-most.js @@ -0,0 +1,27 @@ +description('Test TreeWalker with skipping'); + +var walker; +var testElement = document.createElement("div"); +testElement.innerHTML='<div id="A1"><div id="B1" class="keep"></div><div id="B2">this text matters</div><div id="B3" class="keep"></div></div>'; + +var filter = { + acceptNode: function(node) { + if (node.className == 'keep') + return NodeFilter.FILTER_ACCEPT; + + return NodeFilter.FILTER_SKIP; + } +} + +debug("<br>Testing nextSibling") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); +shouldBe("walker.firstChild(); walker.currentNode.id", "'B1'"); +shouldBe("walker.nextSibling(); walker.currentNode.id", "'B3'"); + +debug("<br>Testing previousSibling") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); +walker.currentNode = testElement.querySelectorAll('#B3')[0]; +shouldBe("walker.previousSibling(); walker.currentNode.id", "'B1'"); + + +var successfullyParsed = true; diff --git a/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip.js b/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip.js new file mode 100644 index 0000000..d328f53 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip.js @@ -0,0 +1,60 @@ +description('Test TreeWalker with skipping'); + +var walker; +var testElement = document.createElement("div"); +testElement.innerHTML='<div id="A1"> <div id="B1"> <div id="C1"></div> </div> <div id="B2"></div><div id="B3"></div> </div>'; + +var skipB1Filter = { + acceptNode: function(node) { + if (node.id == 'B1') + return NodeFilter.FILTER_SKIP; + + return NodeFilter.FILTER_ACCEPT; + } +} + +var skipB2Filter = { + acceptNode: function(node) { + if (node.id == 'B2') + return NodeFilter.FILTER_SKIP; + + return NodeFilter.FILTER_ACCEPT; + } +} + +debug("<br>Testing nextNode") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter, false); +shouldBe("walker.nextNode(); walker.currentNode.id", "'A1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'C1'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B2'"); +shouldBe("walker.nextNode(); walker.currentNode.id", "'B3'"); + +debug("<br>Testing firstChild") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter, false); +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.firstChild(); walker.currentNode.id", "'C1'"); + +debug("<br>Testing nextSibling") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter, false); +shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); +shouldBe("walker.firstChild(); walker.currentNode.id", "'B1'"); +shouldBe("walker.nextSibling(); walker.currentNode.id", "'B3'"); + +debug("<br>Testing parentNode") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter, false); +walker.currentNode = testElement.querySelectorAll('#C1')[0]; +shouldBe("walker.parentNode(); walker.currentNode.id", "'A1'"); + +debug("<br>Testing previousSibling") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter, false); +walker.currentNode = testElement.querySelectorAll('#B3')[0]; +shouldBe("walker.previousSibling(); walker.currentNode.id", "'B1'"); + +debug("<br>Testing previousNode") +walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter, false); +walker.currentNode = testElement.querySelectorAll('#B3')[0]; +shouldBe("walker.previousNode(); walker.currentNode.id", "'B2'"); +shouldBe("walker.previousNode(); walker.currentNode.id", "'C1'"); +shouldBe("walker.previousNode(); walker.currentNode.id", "'A1'"); + +var successfullyParsed = true; diff --git a/LayoutTests/fast/dom/TreeWalker/traversal-reject-expected.txt b/LayoutTests/fast/dom/TreeWalker/traversal-reject-expected.txt new file mode 100644 index 0000000..89a3127 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/traversal-reject-expected.txt @@ -0,0 +1,33 @@ +Test TreeWalker with rejection + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + + +Testing nextNode +PASS walker.nextNode(); walker.currentNode.id is 'A1' +PASS walker.nextNode(); walker.currentNode.id is 'B2' +PASS walker.nextNode(); walker.currentNode.id is 'B3' + +Testing firstChild +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.firstChild(); walker.currentNode.id is 'B2' + +Testing nextSibling +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.firstChild(); walker.currentNode.id is 'B1' +PASS walker.nextSibling(); walker.currentNode.id is 'B3' + +Testing parentNode +PASS walker.parentNode(); walker.currentNode.id is 'A1' + +Testing previousSibling +PASS walker.previousSibling(); walker.currentNode.id is 'B1' + +Testing previousNode +PASS walker.previousNode(); walker.currentNode.id is 'B2' +PASS walker.previousNode(); walker.currentNode.id is 'A1' +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/dom/TreeWalker/traversal-reject.html b/LayoutTests/fast/dom/TreeWalker/traversal-reject.html new file mode 100644 index 0000000..ca34d86 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/traversal-reject.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="script-tests/traversal-reject.js"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> diff --git a/LayoutTests/fast/dom/TreeWalker/traversal-skip-expected.txt b/LayoutTests/fast/dom/TreeWalker/traversal-skip-expected.txt new file mode 100644 index 0000000..65bf98f --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/traversal-skip-expected.txt @@ -0,0 +1,35 @@ +Test TreeWalker with skipping + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + + +Testing nextNode +PASS walker.nextNode(); walker.currentNode.id is 'A1' +PASS walker.nextNode(); walker.currentNode.id is 'C1' +PASS walker.nextNode(); walker.currentNode.id is 'B2' +PASS walker.nextNode(); walker.currentNode.id is 'B3' + +Testing firstChild +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.firstChild(); walker.currentNode.id is 'C1' + +Testing nextSibling +PASS walker.firstChild(); walker.currentNode.id is 'A1' +PASS walker.firstChild(); walker.currentNode.id is 'B1' +PASS walker.nextSibling(); walker.currentNode.id is 'B3' + +Testing parentNode +PASS walker.parentNode(); walker.currentNode.id is 'A1' + +Testing previousSibling +PASS walker.previousSibling(); walker.currentNode.id is 'B1' + +Testing previousNode +PASS walker.previousNode(); walker.currentNode.id is 'B2' +PASS walker.previousNode(); walker.currentNode.id is 'C1' +PASS walker.previousNode(); walker.currentNode.id is 'A1' +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/dom/TreeWalker/traversal-skip-most-expected.txt b/LayoutTests/fast/dom/TreeWalker/traversal-skip-most-expected.txt new file mode 100644 index 0000000..2be59a2 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/traversal-skip-most-expected.txt @@ -0,0 +1,16 @@ +Test TreeWalker with skipping + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + + +Testing nextSibling +PASS walker.firstChild(); walker.currentNode.id is 'B1' +PASS walker.nextSibling(); walker.currentNode.id is 'B3' + +Testing previousSibling +PASS walker.previousSibling(); walker.currentNode.id is 'B1' +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/fast/dom/TreeWalker/traversal-skip-most.html b/LayoutTests/fast/dom/TreeWalker/traversal-skip-most.html new file mode 100644 index 0000000..141f979 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/traversal-skip-most.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="script-tests/traversal-skip-most.js"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> diff --git a/LayoutTests/fast/dom/TreeWalker/traversal-skip.html b/LayoutTests/fast/dom/TreeWalker/traversal-skip.html new file mode 100644 index 0000000..d788624 --- /dev/null +++ b/LayoutTests/fast/dom/TreeWalker/traversal-skip.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<link rel="stylesheet" href="../../js/resources/js-test-style.css"> +<script src="../../js/resources/js-test-pre.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script src="script-tests/traversal-skip.js"></script> +<script src="../../js/resources/js-test-post.js"></script> +</body> +</html> |