xml_xpath_runner.html (2125B)
1 <!doctype html> 2 <title>XPath tests</title> 3 <meta name="timeout" content="long"> 4 <script src='/resources/testharness.js'></script> 5 <script src='/resources/testharnessreport.js'></script> 6 <script> 7 setup({ explicit_done: true }); 8 9 function find_child_element(context, element) { 10 for (var i = 0; i < context.childNodes.length; i++) { 11 var child = context.childNodes[i]; 12 if (child.nodeType === Node.ELEMENT_NODE && child.tagName === element) 13 return child; 14 } 15 } 16 17 function xpath_test(test_el) { 18 /* note this func adopts the tree! */ 19 var new_doc = document.implementation.createDocument("", ""); 20 var xpath = find_child_element(test_el, "xpath"); 21 var result = find_child_element(test_el, "result"); 22 var namespace = find_child_element(result, "namespace"); 23 var localname = find_child_element(result, "localname"); 24 var nth = find_child_element(result, "nth"); 25 var tree = find_child_element(test_el, "tree"); 26 var actual_tree = new_doc.adoptNode(tree.firstElementChild); 27 new_doc.appendChild(actual_tree); 28 test(function() { 29 var result = new_doc.evaluate(xpath.textContent, // expression 30 actual_tree, // context node 31 new_doc.createNSResolver(actual_tree), // resolver 32 XPathResult.ANY_TYPE, // type 33 null); // result 34 var matched = []; 35 var cur; 36 while ((cur = result.iterateNext()) !== null) { 37 matched.push(cur); 38 } 39 assert_equals(matched.length, 1, "Should match one node"); 40 var similar = new_doc.getElementsByTagNameNS(namespace.textContent, 41 localname.textContent); 42 assert_equals(matched[0], similar[nth.textContent]); 43 }); 44 } 45 46 var xhr = new XMLHttpRequest(); 47 xhr.open("GET", "xml_xpath_tests.xml"); 48 xhr.onload = function(e) { 49 var tests = xhr.responseXML.documentElement; 50 for (var i = 0; i < tests.childNodes.length; i++) { 51 var child = tests.childNodes[i]; 52 if (child.nodeType === Node.ELEMENT_NODE) { 53 xpath_test(child); 54 } 55 } 56 done(); 57 }; 58 xhr.send(); 59 </script>