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.dom4j;
64
65 import junit.framework.Test;
66 import junit.framework.TestCase;
67 import junit.framework.TestSuite;
68 import junit.textui.TestRunner;
69
70 import java.util.Iterator;
71 import java.util.List;
72
73 import org.dom4j.Attribute;
74 import org.dom4j.Document;
75 import org.dom4j.DocumentException;
76 import org.dom4j.Element;
77 import org.dom4j.Namespace;
78 import org.dom4j.io.SAXReader;
79 import org.dom4j.tree.DefaultAttribute;
80 import org.dom4j.tree.DefaultDocument;
81 import org.dom4j.tree.DefaultElement;
82 import org.jaxen.JaxenException;
83 import org.jaxen.XPath;
84 import org.jaxen.saxpath.helpers.XPathReaderFactory;
85
86 public class XPathTest extends TestCase
87 {
88
89 private static final String BASIC_XML = "xml/basic.xml";
90
91 public static void main( String[] args )
92 {
93 TestRunner.run( suite() );
94 }
95
96 public static Test suite()
97 {
98 return new TestSuite( XPathTest.class );
99 }
100
101 public XPathTest(String name)
102 {
103 super( name );
104 }
105
106 public void setUp()
107 {
108 System.setProperty( XPathReaderFactory.DRIVER_PROPERTY,
109 "" );
110 }
111
112 public void testConstruction() throws JaxenException
113 {
114 new Dom4jXPath( "/foo/bar/baz" );
115 }
116
117 public void testSelection() throws JaxenException, DocumentException
118 {
119
120 XPath xpath = new Dom4jXPath( "/foo/bar/baz" );
121 SAXReader reader = new SAXReader();
122 Document doc = reader.read( BASIC_XML );
123 List results = xpath.selectNodes( doc );
124 assertEquals( 3, results.size() );
125 Iterator iter = results.iterator();
126 assertEquals( "baz",
127 ((Element)iter.next()).getName() );
128 assertEquals( "baz",
129 ((Element)iter.next()).getName() );
130 assertEquals( "baz",
131 ((Element)iter.next()).getName() );
132 assertTrue( ! iter.hasNext() );
133
134 }
135
136 public void testAsBoolean() throws JaxenException, DocumentException
137 {
138 XPath xpath = new Dom4jXPath( "/root/a = 'a'" );
139 SAXReader reader = new SAXReader();
140 Document doc = reader.read( "xml/simple.xml" );
141 boolean answer = xpath.booleanValueOf( doc );
142 assertTrue( "Xpath worked: " + xpath, answer );
143 xpath = new Dom4jXPath( "'a' = 'b'" );
144 answer = xpath.booleanValueOf( doc );
145 assertTrue( "XPath should return false: " + xpath, ! answer );
146 }
147
148 public void testJaxen20AttributeNamespaceNodes() throws JaxenException
149 {
150
151 Namespace ns1 = Namespace.get("p1", "www.acme1.org");
152 Namespace ns2 = Namespace.get("p2", "www.acme2.org");
153 Element element = new DefaultElement("test", ns1);
154 Attribute attribute = new DefaultAttribute("pre:foo", "bar", ns2);
155 element.add(attribute);
156 Document doc = new DefaultDocument(element);
157
158 XPath xpath = new Dom4jXPath( "//namespace::node()" );
159 List results = xpath.selectNodes( doc );
160 assertEquals( 3, results.size() );
161
162 }
163
164 public void testNamespaceNodesAreInherited() throws JaxenException
165 {
166 Namespace ns0 = Namespace.get("p0", "www.acme0.org");
167 Namespace ns1 = Namespace.get("p1", "www.acme1.org");
168 Namespace ns2 = Namespace.get("p2", "www.acme2.org");
169 Element element = new DefaultElement("test", ns1);
170 Attribute attribute = new DefaultAttribute("pre:foo", "bar", ns2);
171 element.add(attribute);
172 Element root = new DefaultElement("root", ns0);
173 root.add(element);
174 Document doc = new DefaultDocument(root);
175
176 XPath xpath = new Dom4jXPath( "/*/*/namespace::node()" );
177
178 List results = xpath.selectNodes( doc );
179
180 assertEquals( 4,
181 results.size() );
182 }
183
184 }