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