acceptNode-filter.js revision eff69b907ef2cd3a9af0351287a929c66f58e3f6
1description('Test JS objects as NodeFilters.'); 2 3var walker; 4var testElement = document.createElement("div"); 5testElement.id = 'root'; 6testElement.innerHTML='<div id="A1"><div id="B1"></div><div id="B2"></div></div>'; 7 8function filter(node) 9{ 10 debug(" filtering node " + node.id); 11 if (node.id == "B1") 12 return NodeFilter.FILTER_SKIP; 13 return NodeFilter.FILTER_ACCEPT; 14} 15 16debug("Testing with raw function filter"); 17walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); 18shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); 19shouldBe("walker.nextNode(); walker.currentNode.id", "'B2'"); 20 21debug("<br>Testing with object filter"); 22walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, { 23 acceptNode : function(node) { 24 debug(" filtering node " + node.id); 25 if (node.id == "B1") 26 return NodeFilter.FILTER_SKIP; 27 return NodeFilter.FILTER_ACCEPT; 28 } 29 }, false); 30 31shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); 32shouldBe("walker.nextNode(); walker.currentNode.id", "'B2'"); 33 34debug("<br>Testing with null filter"); 35walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, null, false); 36 37shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); 38shouldBe("walker.nextNode(); walker.currentNode.id", "'B1'"); 39 40debug("<br>Testing with undefined filter"); 41walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, undefined, false); 42 43shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); 44shouldBe("walker.nextNode(); walker.currentNode.id", "'B1'"); 45 46debug("<br>Testing with object lacking acceptNode property"); 47walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, {}, false); 48 49shouldThrow("walker.firstChild();"); 50shouldBe("walker.currentNode.id;", "'root'"); 51shouldThrow("walker.nextNode();"); 52shouldBe("walker.currentNode.id;", "'root'"); 53 54debug("<br>Testing with object with non-function acceptNode property"); 55walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, { acceptNode: "foo" }, false); 56 57shouldThrow("walker.firstChild();"); 58shouldBe("walker.currentNode.id;", "'root'"); 59shouldThrow("walker.nextNode();"); 60shouldBe("walker.currentNode.id;", "'root'"); 61 62debug("<br>Testing with function having acceptNode function"); 63var filter = function() { return NodeFilter.FILTER_ACCEPT; }; 64filter.acceptNode = function(node) { return NodeFilter.FILTER_SKIP; }; 65walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); 66 67shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); 68shouldBe("walker.nextNode(); walker.currentNode.id", "'B1'"); 69 70debug("<br>Testing acceptNode callee"); 71var filter = { 72 acceptNode: function(node) { 73 debug('Callee: ' + arguments.callee); 74 return NodeFilter.FILTER_ACCEPT; 75 } 76}; 77walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter, false); 78 79shouldBe("walker.firstChild(); walker.currentNode.id", "'A1'"); 80 81var successfullyParsed = true; 82