| <!DOCTYPE html> | |
| <html> | |
| <!-- | |
| Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip.js | |
| --> | |
| <head> | |
| <title>TreeWalker: traversal-skip</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="traversal-support.js"></script> | |
| <link rel="stylesheet" href="/resources/testharness.css"> | |
| <div id=log></div> | |
| </head> | |
| <body> | |
| <p>Test TreeWalker with skipping</p> | |
| <script> | |
| var testElement; | |
| setup(function() { | |
| testElement = document.createElement("div"); | |
| testElement.id = 'root'; | |
| // testElement.innerHTML='<div id="A1"> <div id="B1"> <div id="C1"></div> </div> <div id="B2"></div><div id="B3"></div> </div>'; | |
| // <div id="A1"> | |
| // <div id="B1"> | |
| // <div id="C1"></div> | |
| // </div> | |
| // <div id="B2"></div> | |
| // <div id="B3"></div> | |
| // </div> | |
| // XXX for Servo, build the tree without using innerHTML | |
| var a1 = document.createElement("div"); a1.id = "A1"; | |
| var b1 = document.createElement("div"); b1.id = "B1"; | |
| var b2 = document.createElement("div"); b2.id = "B2"; | |
| var b3 = document.createElement("div"); b3.id = "B3"; | |
| var c1 = document.createElement("div"); c1.id = "C1"; | |
| testElement.appendChild(a1); | |
| a1.appendChild(b1); | |
| a1.appendChild(b2); | |
| a1.appendChild(b3); | |
| b1.appendChild(c1); | |
| }); | |
| 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; | |
| } | |
| } | |
| test(function() | |
| { | |
| var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter); | |
| assert_node(walker.nextNode(), { type: Element, id: 'A1' }); | |
| assert_node(walker.nextNode(), { type: Element, id: 'C1' }); | |
| assert_node(walker.nextNode(), { type: Element, id: 'B2' }); | |
| assert_node(walker.nextNode(), { type: Element, id: 'B3' }); | |
| }, 'Testing nextNode'); | |
| test(function() | |
| { | |
| var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter); | |
| assert_node(walker.firstChild(), { type: Element, id: 'A1' }); | |
| assert_node(walker.firstChild(), { type: Element, id: 'C1' }); | |
| }, 'Testing firstChild'); | |
| test(function() | |
| { | |
| var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter); | |
| assert_node(walker.firstChild(), { type: Element, id: 'A1' }); | |
| assert_node(walker.firstChild(), { type: Element, id: 'B1' }); | |
| assert_node(walker.nextSibling(), { type: Element, id: 'B3' }); | |
| }, 'Testing nextSibling'); | |
| test(function() | |
| { | |
| var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter); | |
| walker.currentNode = testElement.querySelectorAll('#C1')[0]; | |
| assert_node(walker.parentNode(), { type: Element, id: 'A1' }); | |
| }, 'Testing parentNode'); | |
| test(function() | |
| { | |
| var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter); | |
| walker.currentNode = testElement.querySelectorAll('#B3')[0]; | |
| assert_node(walker.previousSibling(), { type: Element, id: 'B1' }); | |
| }, 'Testing previousSibling'); | |
| test(function() | |
| { | |
| var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter); | |
| walker.currentNode = testElement.querySelectorAll('#B3')[0]; | |
| assert_node(walker.previousNode(), { type: Element, id: 'B2' }); | |
| assert_node(walker.previousNode(), { type: Element, id: 'C1' }); | |
| assert_node(walker.previousNode(), { type: Element, id: 'A1' }); | |
| }, 'Testing previousNode'); | |
| </script> | |
| </body> | |
| </html> |