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 NameTest 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 NameTest(String name) {
88 super(name);
89 }
90
91 public void testNameOfNumber() throws JaxenException
92 {
93 try
94 {
95 XPath xpath = new DOMXPath( "name(3)" );
96 xpath.selectNodes( doc );
97 fail("name of non-node-set");
98 }
99 catch (FunctionCallException e)
100 {
101 assertEquals("The argument to the name function must be a node-set", e.getMessage());
102 }
103 }
104
105 public void testNameWithTwoArguments() throws JaxenException
106 {
107 try
108 {
109 XPath xpath = new DOMXPath( "name(/*, //*)" );
110 xpath.selectNodes( doc );
111 fail("name with two arguments");
112 }
113 catch (FunctionCallException e)
114 {
115 assertEquals("name() requires zero or one argument.", e.getMessage());
116 }
117 }
118
119 public void testNameAllowsNoArguments() throws JaxenException
120 {
121 XPath xpath = new DOMXPath( "name()" );
122 String result = (String) xpath.evaluate( doc.getDocumentElement() );
123 assertEquals("foo", result);
124 }
125
126 public void testNameOfCommentIsEmptyString() throws JaxenException
127 {
128 XPath xpath = new DOMXPath( "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 testNameOfProcessingInstructionIsTarget() throws JaxenException
136 {
137 XPath xpath = new DOMXPath( "name(/processing-instruction())" );
138 ProcessingInstruction pi = doc.createProcessingInstruction("target", "value");
139 doc.appendChild(pi);
140 String result = (String) xpath.evaluate(doc);
141 assertEquals("target", result);
142 }
143
144 public void testNameOfAttribute() throws JaxenException
145 {
146 XPath xpath = new DOMXPath( "name(/*/@*)" );
147 Attr a = doc.createAttribute("name");
148 doc.getDocumentElement().setAttributeNode(a);
149 String result = (String) xpath.evaluate(doc);
150 assertEquals("name", result);
151 }
152
153 public void testNameOfTextIsEmptyString() throws JaxenException
154 {
155 XPath xpath = new DOMXPath( "name(/*/text())" );
156 Text c = doc.createTextNode("test");
157 doc.getDocumentElement().appendChild(c);
158 String result = (String) xpath.evaluate(doc);
159 assertEquals("", result);
160 }
161
162 public void testNameOfNamespaceIsPrefix() throws JaxenException
163 {
164 XPath xpath = new DOMXPath( "name(/*/namespace::node())" );
165 String result = (String) xpath.evaluate(doc);
166 assertEquals("xml", result);
167 }
168
169 public void testNameNoArguments()
170 {
171 try
172 {
173 XPath xpath = new DOMXPath( "name()" );
174 List results = xpath.selectNodes( doc );
175 assertEquals("", results.get(0));
176 }
177 catch (Exception e)
178 {
179 e.printStackTrace();
180 fail( e.getMessage() );
181 }
182 }
183
184 }