1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 package org.jaxen.dom;
64
65 import junit.framework.TestCase;
66
67 import javax.xml.parsers.DocumentBuilder;
68 import javax.xml.parsers.DocumentBuilderFactory;
69 import javax.xml.parsers.ParserConfigurationException;
70
71 import java.io.IOException;
72 import java.util.Iterator;
73 import java.util.List;
74
75 import org.jaxen.JaxenException;
76 import org.jaxen.XPath;
77 import org.w3c.dom.Document;
78 import org.w3c.dom.Element;
79 import org.w3c.dom.Node;
80 import org.xml.sax.SAXException;
81
82 public class XPathTest extends TestCase
83 {
84
85 private static final String BASIC_XML = "xml/basic.xml";
86
87 public XPathTest(String name)
88 {
89 super( name );
90 }
91
92 public void testConstruction() throws JaxenException
93 {
94 new DOMXPath( "/foo/bar/baz" );
95 }
96
97 public void testNamespaceDeclarationsAreNotAttributes()
98 throws ParserConfigurationException, JaxenException {
99
100 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
101 factory.setNamespaceAware(true);
102 Document doc = factory.newDocumentBuilder().newDocument();
103 Element root = doc.createElementNS("http://www.example.org/", "root");
104 doc.appendChild(root);
105 root.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "http://www.example.org/");
106
107 DOMXPath xpath = new DOMXPath( "count(/*/@*)" );
108
109 Number value = xpath.numberValueOf(doc);
110 assertEquals(0, value.intValue());
111
112 }
113
114
115 public void testUpdateDOMNodesReturnedBySelectNodes()
116 throws ParserConfigurationException, JaxenException {
117
118 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
119 factory.setNamespaceAware(true);
120 Document doc = factory.newDocumentBuilder().newDocument();
121 Element root = doc.createElementNS("http://www.example.org/", "root");
122 doc.appendChild(root);
123 root.appendChild(doc.createComment("data"));
124
125 DOMXPath xpath = new DOMXPath( "//comment()" );
126
127 List results = xpath.selectNodes(doc);
128 Node backroot = (Node) results.get(0);
129 backroot.setNodeValue("test");
130 assertEquals("test", backroot.getNodeValue());
131
132 }
133
134 public void testSelection() throws JaxenException, ParserConfigurationException, SAXException, IOException
135 {
136 XPath xpath = new DOMXPath( "/foo/bar/baz" );
137
138 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
139 factory.setNamespaceAware(true);
140 DocumentBuilder builder = factory.newDocumentBuilder();
141
142 Document doc = builder.parse( BASIC_XML );
143
144 List results = xpath.selectNodes( doc );
145
146 assertEquals( 3,
147 results.size() );
148
149 Iterator iter = results.iterator();
150
151 assertEquals( "baz",
152 ((Element)iter.next()).getLocalName() );
153
154 assertEquals( "baz",
155 ((Element)iter.next()).getLocalName() );
156
157 assertEquals( "baz",
158 ((Element)iter.next()).getLocalName() );
159
160 assertTrue( ! iter.hasNext() );
161
162 }
163
164 }