1eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdescription('Test TreeWalker with skipping');
2eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
3eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar walker;
4eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar testElement = document.createElement("div");
5eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlocktestElement.innerHTML='<div id="A1">  <div id="B1">  <div id="C1"></div>  </div>  <div id="B2"></div><div id="B3"></div>  </div>';
6eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
7eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar skipB1Filter = {
8eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block  acceptNode: function(node) {
9eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block    if (node.id == 'B1')
10eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block      return NodeFilter.FILTER_SKIP;
11eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
12eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block    return NodeFilter.FILTER_ACCEPT;
13eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block  }
14eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block}
15eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
16eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar skipB2Filter = {
17eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block  acceptNode: function(node) {
18eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block    if (node.id == 'B2')
19eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block      return NodeFilter.FILTER_SKIP;
20eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
21eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block    return NodeFilter.FILTER_ACCEPT;
22eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block  }
23eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block}
24eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
25eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("<br>Testing nextNode")
26eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter, false);
27eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.nextNode(); walker.currentNode.id", "'A1'");
28eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.nextNode(); walker.currentNode.id", "'C1'");
29eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.nextNode(); walker.currentNode.id", "'B2'");
30eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.nextNode(); walker.currentNode.id", "'B3'");
31eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
32eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("<br>Testing firstChild")
33eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter, false);
34eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.firstChild(); walker.currentNode.id", "'A1'");
35eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.firstChild(); walker.currentNode.id", "'C1'");
36eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
37eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("<br>Testing nextSibling")
38eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter, false);
39eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.firstChild(); walker.currentNode.id", "'A1'");
40eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.firstChild(); walker.currentNode.id", "'B1'");
41eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.nextSibling(); walker.currentNode.id", "'B3'");
42eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
43eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("<br>Testing parentNode")
44eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter, false);
45eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker.currentNode = testElement.querySelectorAll('#C1')[0];
46eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.parentNode(); walker.currentNode.id", "'A1'");
47eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
48eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("<br>Testing previousSibling")
49eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter, false);
50eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker.currentNode = testElement.querySelectorAll('#B3')[0];
51eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.previousSibling(); walker.currentNode.id", "'B1'");
52eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
53eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("<br>Testing previousNode")
54eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter, false);
55eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockwalker.currentNode = testElement.querySelectorAll('#B3')[0];
56eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.previousNode(); walker.currentNode.id", "'B2'");
57eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.previousNode(); walker.currentNode.id", "'C1'");
58eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("walker.previousNode(); walker.currentNode.id", "'A1'");
59eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block
60eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar successfullyParsed = true;
61