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 package org.jaxen.test;
49
50 import java.io.IOException;
51 import java.util.List;
52
53 import javax.xml.parsers.DocumentBuilder;
54 import javax.xml.parsers.DocumentBuilderFactory;
55 import javax.xml.parsers.ParserConfigurationException;
56
57 import junit.framework.TestCase;
58
59 import org.jaxen.FunctionCallException;
60 import org.jaxen.JaxenException;
61 import org.jaxen.XPath;
62 import org.jaxen.dom.DOMXPath;
63 import org.w3c.dom.Attr;
64 import org.w3c.dom.Document;
65 import org.w3c.dom.ProcessingInstruction;
66 import org.w3c.dom.Text;
67 import org.xml.sax.SAXException;
68
69 /***
70 * @author Elliotte Rusty Harold
71 *
72 */
73 public class NamespaceURITest extends TestCase {
74
75 private Document doc;
76 private DocumentBuilder builder;
77
78 public void setUp() throws ParserConfigurationException, SAXException, IOException
79 {
80 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
81 factory.setNamespaceAware(true);
82 builder = factory.newDocumentBuilder();
83 doc = builder.parse( "xml/basic.xml" );
84 }
85
86
87 public NamespaceURITest(String name) {
88 super(name);
89 }
90
91 public void testNamespaceURIOfNumber() throws JaxenException
92 {
93 try
94 {
95 XPath xpath = new DOMXPath( "namespace-uri(3)" );
96 xpath.selectNodes( doc );
97 fail("namespace-uri of non-node-set");
98 }
99 catch (FunctionCallException e)
100 {
101 assertEquals("The argument to the namespace-uri function must be a node-set", e.getMessage());
102 }
103 }
104
105 public void testNamespaceURINoArguments() throws JaxenException
106 {
107 XPath xpath = new DOMXPath( "namespace-uri()" );
108 List results = xpath.selectNodes( doc );
109 assertEquals("", results.get(0));
110 }
111
112 public void testNamespaceURIOfEmptyNodeSetIsEmptyString() throws JaxenException
113 {
114 XPath xpath = new DOMXPath( "namespace-uri(/aaa)" );
115 String result = (String) xpath.evaluate(doc);
116 assertEquals("", result);
117 }
118
119 public void testNamespaceURIOfProcessingInstructionIsEmptyString() throws JaxenException
120 {
121 XPath xpath = new DOMXPath( "namespace-uri(/processing-instruction())" );
122 ProcessingInstruction pi = doc.createProcessingInstruction("target", "value");
123 doc.appendChild(pi);
124 String result = (String) xpath.evaluate(doc);
125 assertEquals("", result);
126 }
127
128 public void testNamespaceURIOfAttribute() throws JaxenException
129 {
130 XPath xpath = new DOMXPath( "namespace-uri(/*/@*)" );
131 Attr a = doc.createAttribute("name");
132 doc.getDocumentElement().setAttributeNode(a);
133 Object result = xpath.evaluate(doc);
134 assertEquals("", result);
135 }
136
137 public void testNamespaceURIOfAttributeInNamespace() throws JaxenException
138 {
139 XPath xpath = new DOMXPath( "namespace-uri(/*/@*)" );
140 Attr a = doc.createAttributeNS("http://www.w3.org/", "pre:name");
141 doc.getDocumentElement().setAttributeNode(a);
142 Object result = xpath.evaluate(doc);
143 assertEquals("http://www.w3.org/", result);
144 }
145
146 public void testNamespaceURIOfTextIsEmptyString() throws JaxenException
147 {
148 XPath xpath = new DOMXPath( "namespace-uri(/*/text())" );
149 Text c = doc.createTextNode("test");
150 doc.getDocumentElement().appendChild(c);
151 String result = (String) xpath.evaluate(doc);
152 assertEquals("", result);
153 }
154
155 public void testNamespaceURIRequiresAtMostOneArgument() throws JaxenException
156 {
157 XPath xpath = new DOMXPath( "namespace-uri(/*, /*)" );
158 try {
159 xpath.evaluate(doc);
160 fail("Allowed namespace-uri function with no arguments");
161 }
162 catch (FunctionCallException ex) {
163 assertNotNull(ex.getMessage());
164 }
165 }
166
167 public void testNamespaceURIOfNamespaceIsNull() throws JaxenException
168 {
169 XPath xpath = new DOMXPath( "namespace-uri(/*/namespace::node())" );
170 String result = (String) xpath.evaluate(doc);
171 assertEquals("", result);
172 }
173
174 public void testNamespaceURIOfComment()
175 throws JaxenException {
176
177 XPath xpath = new DOMXPath("namespace-uri(/a/comment())");
178 Document document = builder.getDOMImplementation().createDocument(null, "a", null);
179 document.getDocumentElement().appendChild(document.createComment("data"));
180
181 String result = (String) xpath.evaluate(document);
182 assertEquals("", result);
183
184 }
185
186 }