OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <html> |
| 3 <!-- |
| 4 Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit
/LayoutTests/fast/dom/TreeWalker/script-tests/acceptNode-filter.js |
| 5 --> |
| 6 <head> |
| 7 <title>TreeWalker: acceptNode-filter</title> |
| 8 <script src="../../../../resources/testharness.js"></script> |
| 9 <script src="../../../../resources/testharnessreport.js"></script> |
| 10 <script src="traversal-support.js"></script> |
| 11 <link rel="stylesheet" href="../../../../resources/testharness.css"> |
| 12 <div id=log></div> |
| 13 </head> |
| 14 <body> |
| 15 <p>Test JS objects as NodeFilters</p> |
| 16 <script> |
| 17 var testElement; |
| 18 setup(function() { |
| 19 testElement = document.createElement("div"); |
| 20 testElement.id = 'root'; |
| 21 //testElement.innerHTML='<div id="A1"><div id="B1"></div><div id="B2"></div>
</div>'; |
| 22 |
| 23 // XXX for Servo, build the tree without using innerHTML |
| 24 var a1 = document.createElement("div"); |
| 25 a1.id = "A1"; |
| 26 var b1 = document.createElement("div"); |
| 27 b1.id = "B1"; |
| 28 var b2 = document.createElement("div"); |
| 29 b2.id = "B2"; |
| 30 testElement.appendChild(a1); |
| 31 a1.appendChild(b1); |
| 32 a1.appendChild(b2); |
| 33 }); |
| 34 |
| 35 test(function() |
| 36 { |
| 37 function filter(node) |
| 38 { |
| 39 if (node.id == "B1") |
| 40 return NodeFilter.FILTER_SKIP; |
| 41 return NodeFilter.FILTER_ACCEPT; |
| 42 } |
| 43 |
| 44 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
filter); |
| 45 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 46 assert_node(walker.firstChild(), { type: Element, id: 'A1' }); |
| 47 assert_node(walker.currentNode, { type: Element, id: 'A1' }); |
| 48 assert_node(walker.nextNode(), { type: Element, id: 'B2' }); |
| 49 assert_node(walker.currentNode, { type: Element, id: 'B2' }); |
| 50 }, 'Testing with raw function filter'); |
| 51 |
| 52 test(function() |
| 53 { |
| 54 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
{ |
| 55 acceptNode : function(node) { |
| 56 if (node.id == "B1") |
| 57 return NodeFilter.FILTER_SKIP; |
| 58 return NodeFilter.FILTER_ACCEPT; |
| 59 } |
| 60 }); |
| 61 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 62 assert_node(walker.firstChild(), { type: Element, id: 'A1' }); |
| 63 assert_node(walker.currentNode, { type: Element, id: 'A1' }); |
| 64 assert_node(walker.nextNode(), { type: Element, id: 'B2' }); |
| 65 assert_node(walker.currentNode, { type: Element, id: 'B2' }); |
| 66 }, 'Testing with object filter'); |
| 67 |
| 68 test(function() |
| 69 { |
| 70 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
null); |
| 71 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 72 assert_node(walker.firstChild(), { type: Element, id: 'A1' }); |
| 73 assert_node(walker.currentNode, { type: Element, id: 'A1' }); |
| 74 assert_node(walker.nextNode(), { type: Element, id: 'B1' }); |
| 75 assert_node(walker.currentNode, { type: Element, id: 'B1' }); |
| 76 }, 'Testing with null filter'); |
| 77 |
| 78 test(function() |
| 79 { |
| 80 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
undefined); |
| 81 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 82 assert_node(walker.firstChild(), { type: Element, id: 'A1' }); |
| 83 assert_node(walker.currentNode, { type: Element, id: 'A1' }); |
| 84 assert_node(walker.nextNode(), { type: Element, id: 'B1' }); |
| 85 assert_node(walker.currentNode, { type: Element, id: 'B1' }); |
| 86 }, 'Testing with undefined filter'); |
| 87 |
| 88 test(function() |
| 89 { |
| 90 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
{}); |
| 91 assert_throws(new TypeError(), function () { walker.firstChild(); }); |
| 92 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 93 assert_throws(new TypeError(), function () { walker.nextNode(); }); |
| 94 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 95 }, 'Testing with object lacking acceptNode property'); |
| 96 |
| 97 test(function() |
| 98 { |
| 99 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
{ acceptNode: "foo" }); |
| 100 assert_throws(new TypeError(), function () { walker.firstChild(); }); |
| 101 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 102 assert_throws(new TypeError(), function () { walker.nextNode(); }); |
| 103 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 104 }, 'Testing with object with non-function acceptNode property'); |
| 105 |
| 106 test(function() |
| 107 { |
| 108 var filter = function() { return NodeFilter.FILTER_ACCEPT; }; |
| 109 filter.acceptNode = function(node) { return NodeFilter.FILTER_SKIP; }; |
| 110 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
filter); |
| 111 assert_node(walker.firstChild(), { type: Element, id: 'A1' }); |
| 112 assert_node(walker.nextNode(), { type: Element, id: 'B1' }); |
| 113 }, 'Testing with function having acceptNode function'); |
| 114 |
| 115 test(function() |
| 116 { |
| 117 var filter = { |
| 118 acceptNode: function(node) { |
| 119 return NodeFilter.FILTER_ACCEPT; |
| 120 } |
| 121 }; |
| 122 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
filter); |
| 123 assert_node(walker.firstChild(), { type: Element, id: 'A1' }); |
| 124 }, 'Testing acceptNode callee'); |
| 125 |
| 126 test(function() |
| 127 { |
| 128 var test_error = { name: "test" }; |
| 129 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, |
| 130 function(node) { |
| 131 throw test_error; |
| 132 }); |
| 133 assert_throws(test_error, function () { walker.firstChild(); }); |
| 134 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 135 assert_throws(test_error, function () { walker.nextNode(); }); |
| 136 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 137 }, 'Testing with filter function that throws'); |
| 138 |
| 139 test(function() |
| 140 { |
| 141 var test_error = { name: "test" }; |
| 142 var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, |
| 143 { |
| 144 acceptNode : function(node) { |
| 145 throw test_error; |
| 146 } |
| 147 }); |
| 148 assert_throws(test_error, function () { walker.firstChild(); }); |
| 149 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 150 assert_throws(test_error, function () { walker.nextNode(); }); |
| 151 assert_node(walker.currentNode, { type: Element, id: 'root' }); |
| 152 }, 'Testing with filter object that throws'); |
| 153 |
| 154 </script> |
| 155 </body> |
| 156 </html> |
OLD | NEW |