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 private Document doc;
87 private DocumentBuilderFactory factory;
88
89 public XPathTest(String name)
90 {
91 super( name );
92 }
93
94 public void setUp() throws ParserConfigurationException {
95 factory = DocumentBuilderFactory.newInstance();
96 factory.setNamespaceAware(true);
97 doc = factory.newDocumentBuilder().newDocument();
98 }
99
100
101 public void testConstruction() throws JaxenException
102 {
103 new DOMXPath( "/foo/bar/baz" );
104 }
105
106 public void testNamespaceDeclarationsAreNotAttributes()
107 throws ParserConfigurationException, JaxenException {
108
109 Element root = doc.createElementNS("http://www.example.org/", "root");
110 doc.appendChild(root);
111 root.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "http://www.example.org/");
112
113 DOMXPath xpath = new DOMXPath( "count(/*/@*)" );
114
115 Number value = xpath.numberValueOf(doc);
116 assertEquals(0, value.intValue());
117
118 }
119
120
121 public void testUpdateDOMNodesReturnedBySelectNodes()
122 throws ParserConfigurationException, JaxenException {
123
124 Element root = doc.createElementNS("http://www.example.org/", "root");
125 doc.appendChild(root);
126 root.appendChild(doc.createComment("data"));
127
128 DOMXPath xpath = new DOMXPath( "//comment()" );
129
130 List results = xpath.selectNodes(doc);
131 Node backroot = (Node) results.get(0);
132 backroot.setNodeValue("test");
133 assertEquals("test", backroot.getNodeValue());
134
135 }
136
137 public void testSelection() throws JaxenException, ParserConfigurationException, SAXException, IOException
138 {
139 XPath xpath = new DOMXPath( "/foo/bar/baz" );
140
141 DocumentBuilder builder = factory.newDocumentBuilder();
142
143 Document doc = builder.parse( BASIC_XML );
144
145 List results = xpath.selectNodes( doc );
146
147 assertEquals( 3,
148 results.size() );
149
150 Iterator iter = results.iterator();
151
152 assertEquals( "baz",
153 ((Element)iter.next()).getLocalName() );
154
155 assertEquals( "baz",
156 ((Element)iter.next()).getLocalName() );
157
158 assertEquals( "baz",
159 ((Element)iter.next()).getLocalName() );
160
161 assertTrue( ! iter.hasNext() );
162
163 }
164
165
166 public void testPrecedingAxisWithPositionalPredicate()
167 throws JaxenException, ParserConfigurationException, SAXException, IOException {
168
169 XPath xpath = new DOMXPath( "//c/preceding::*[1][name()='d']" );
170 DocumentBuilder builder = factory.newDocumentBuilder();
171
172 Document doc = builder.parse( "xml/web2.xml" );
173 List result = xpath.selectNodes(doc);
174 assertEquals(1, result.size());
175
176 }
177
178
179
180 public void testJaxen22()
181 throws JaxenException, ParserConfigurationException, SAXException, IOException {
182
183 XPath xpath = new DOMXPath( "name(//c/preceding::*[1])" );
184 DocumentBuilder builder = factory.newDocumentBuilder();
185
186 doc = builder.parse("xml/web2.xml");
187 Object result = xpath.evaluate(doc);
188 assertEquals("d", result);
189 }
190
191
192 public void testPrecedingAxisInDocumentOrder()
193 throws JaxenException {
194
195 XPath xpath = new DOMXPath( "preceding::*" );
196
197 Element root = doc.createElement("root");
198 doc.appendChild(root);
199
200 Element a = doc.createElement("a");
201 root.appendChild(a);
202 Element b = doc.createElement("b");
203 root.appendChild(b);
204 Element c = doc.createElement("c");
205 a.appendChild(c);
206
207 List result = xpath.selectNodes(b);
208 assertEquals(2, result.size());
209 assertEquals(a, result.get(0));
210 assertEquals(c, result.get(1));
211 }
212
213
214 }