1 17 package org.apache.excalibur.xml.xpath.test; 18 19 import org.apache.avalon.excalibur.testcase.ExcaliburTestCase; 20 import org.apache.avalon.framework.component.Component; 21 import org.apache.excalibur.xml.dom.DOMParser; 22 import org.apache.excalibur.xml.xpath.XPathProcessor; 23 import org.apache.excalibur.xml.xpath.PrefixResolver; 24 import org.xml.sax.InputSource ; 25 import org.w3c.dom.Document ; 26 import org.w3c.dom.Node ; 27 import org.w3c.dom.NodeList ; 28 29 import java.io.StringReader ; 30 31 36 public class XPathTestCase extends ExcaliburTestCase 37 { 38 39 static final String CONTENT1 = 40 "<?xml version=\"1.0\"?>" + 41 "<test:root xmlns:test=\"http://localhost/test\">" + 42 "<test:element1/>" + 43 "<test:element2/>" + 44 "</test:root>"; 45 46 47 static final String CONTENT2 = 48 "<?xml version=\"1.0\"?>" + 49 "<test:root xmlns:test=\"http://localhost/test2\">" + 50 "<test:element1/>" + 51 "<test:element2/>" + 52 "</test:root>"; 53 54 public XPathTestCase(String name) { 55 super(name); 56 } 57 58 public void testXPath() throws Exception { 59 DOMParser parser = null; 60 XPathProcessor processor = null; 61 try { 62 parser = (DOMParser)manager.lookup(DOMParser.ROLE); 63 processor = (XPathProcessor)manager.lookup(XPathProcessor.ROLE); 64 65 Document document1 = parser.parseDocument(new InputSource (new StringReader (CONTENT1))); 66 Document document2 = parser.parseDocument(new InputSource (new StringReader (CONTENT2))); 67 68 String expr = "/test:root/test:element1"; 70 Node node = processor.selectSingleNode(document1, expr); 71 assertNotNull("Must select <test:element1/> node, but got null", node); 72 assertEquals("Must select <test:element1/> node", Node.ELEMENT_NODE, node.getNodeType()); 73 assertEquals("Must select <test:element1/> node", "element1", node.getLocalName()); 74 75 expr = "/test:root/test:element3"; 77 node = processor.selectSingleNode(document1, expr); 78 assertNull("Must be null", node); 79 80 expr = "/test:root/test:*"; 82 NodeList list = processor.selectNodeList(document1, expr); 83 assertNotNull("Must select two nodes, but got null", list); 84 assertEquals("Must select two nodes", 2, list.getLength()); 85 assertEquals("Must select <test:element1/> node", "element1", list.item(0).getLocalName()); 86 assertEquals("Must select <test:element2/> node", "element2", list.item(1).getLocalName()); 87 88 expr = "count(/test:root/*)"; 90 Number number = processor.evaluateAsNumber(document1, expr); 91 assertEquals(2, number.intValue()); 92 93 number = processor.evaluateAsNumber(document2, expr, new PrefixResolver() { 96 public String prefixToNamespace(String prefix) 97 { 98 if (prefix.equals("test")) 99 return "http://localhost/test2"; 100 return null; 101 } 102 }); 103 assertEquals(2, number.intValue()); 104 105 expr = "count(/test:root/*) = 2"; 107 boolean bool = processor.evaluateAsBoolean(document1, expr); 108 assertEquals(true, bool); 109 110 expr = "/test:root/test:element1"; 112 node = processor.selectSingleNode(document1.getDocumentElement(), expr); 113 assertNotNull("Must select <test:element1/> node, but got null", node); 114 assertEquals("Must select <test:element1/> node", Node.ELEMENT_NODE, node.getNodeType()); 115 assertEquals("Must select <test:element1/> node", "element1", node.getLocalName()); 116 117 node = processor.selectSingleNode(document1.getDocumentElement().getFirstChild(), expr); 119 assertNotNull("Must select <test:element1/> node, but got null", node); 120 assertEquals("Must select <test:element1/> node", Node.ELEMENT_NODE, node.getNodeType()); 121 assertEquals("Must select <test:element1/> node", "element1", node.getLocalName()); 122 123 } finally { 124 if (parser != null) { 125 manager.release((Component)parser); 126 } 127 if (processor != null) { 128 manager.release((Component)processor); 129 } 130 } 131 } 132 } 133 | Popular Tags |