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.Comment;
65 import org.w3c.dom.Document;
66 import org.w3c.dom.ProcessingInstruction;
67 import org.w3c.dom.Text;
68 import org.xml.sax.SAXException;
69
70 /***
71 * @author Elliotte Rusty Harold
72 *
73 */
74 public class LocalNameTest extends TestCase {
75
76 private Document doc;
77
78 public void setUp() throws ParserConfigurationException, SAXException, IOException
79 {
80 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
81 factory.setNamespaceAware(true);
82 DocumentBuilder builder = factory.newDocumentBuilder();
83 doc = builder.parse( "xml/basic.xml" );
84 }
85
86
87 public LocalNameTest(String name) {
88 super(name);
89 }
90
91 public void testLocalNameOfNumber() throws JaxenException
92 {
93 try
94 {
95 XPath xpath = new DOMXPath( "local-name(3)" );
96 xpath.selectNodes( doc );
97 fail("local-name of non-node-set");
98 }
99 catch (FunctionCallException e)
100 {
101 assertEquals("The argument to the local-name function must be a node-set", e.getMessage());
102 }
103 }
104
105 public void testLocalNameWithTwoArguments() throws JaxenException
106 {
107 try
108 {
109 XPath xpath = new DOMXPath( "local-name(/*, //*)" );
110 xpath.selectNodes( doc );
111 fail("local-name with two arguments");
112 }
113 catch (FunctionCallException e)
114 {
115 assertEquals("local-name() requires zero or one argument.", e.getMessage());
116 }
117 }
118
119 public void testLocalNameAllowsNoArguments() throws JaxenException
120 {
121 XPath xpath = new DOMXPath( "local-name()" );
122 String result = (String) xpath.evaluate( doc.getDocumentElement() );
123 assertEquals("foo", result);
124 }
125
126 public void testLocalNameOfCommentIsEmptyString() throws JaxenException
127 {
128 XPath xpath = new DOMXPath( "local-name(/comment())" );
129 Comment c = doc.createComment("test");
130 doc.appendChild(c);
131 String result = (String) xpath.evaluate(doc);
132 assertEquals("", result);
133 }
134
135 public void testLocalNameOfEmptyNodeSetIsEmptyString() throws JaxenException
136 {
137 XPath xpath = new DOMXPath( "local-name(/aaa)" );
138 String result = (String) xpath.evaluate(doc);
139 assertEquals("", result);
140 }
141
142 public void testLocalNameOfProcessingInstructionIsTarget() throws JaxenException
143 {
144 XPath xpath = new DOMXPath( "local-name(/processing-instruction())" );
145 ProcessingInstruction pi = doc.createProcessingInstruction("target", "value");
146 doc.appendChild(pi);
147 String result = (String) xpath.evaluate(doc);
148 assertEquals("target", result);
149 }
150
151 public void testLocalNameOfAttribute() throws JaxenException
152 {
153 XPath xpath = new DOMXPath( "local-name(/*/@*)" );
154 Attr a = doc.createAttribute("name");
155 doc.getDocumentElement().setAttributeNode(a);
156 String result = (String) xpath.evaluate(doc);
157 assertEquals("name", result);
158 }
159
160 public void testLocalNameOfTextIsEmptyString() throws JaxenException
161 {
162 XPath xpath = new DOMXPath( "local-name(/*/text())" );
163 Text c = doc.createTextNode("test");
164 doc.getDocumentElement().appendChild(c);
165 String result = (String) xpath.evaluate(doc);
166 assertEquals("", result);
167 }
168
169 public void testLocalNameOfNamespaceIsPrefix() throws JaxenException
170 {
171 XPath xpath = new DOMXPath( "local-name(/*/namespace::node())" );
172 String result = (String) xpath.evaluate(doc);
173 assertEquals("xml", result);
174 }
175
176 public void testLocalNameNoArguments()
177 {
178 try
179 {
180 XPath xpath = new DOMXPath( "local-name()" );
181 List results = xpath.selectNodes( doc );
182 assertEquals("", results.get(0));
183 }
184 catch (Exception e)
185 {
186 e.printStackTrace();
187 fail( e.getMessage() );
188 }
189 }
190
191 }