diff options
Diffstat (limited to 'LayoutTests/fast/dom/TreeWalker/script-tests')
8 files changed, 315 insertions, 0 deletions
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; |