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 package org.jaxen.function;
63
64 import java.util.List;
65
66 import javax.xml.parsers.DocumentBuilder;
67 import javax.xml.parsers.DocumentBuilderFactory;
68 import javax.xml.parsers.ParserConfigurationException;
69
70 import junit.framework.TestCase;
71
72 import org.jaxen.FunctionCallException;
73 import org.jaxen.JaxenException;
74 import org.jaxen.XPath;
75 import org.jaxen.dom.DOMXPath;
76 import org.w3c.dom.Document;
77
78 /***
79 * @author Elliotte Rusty Harold
80 *
81 */
82 public class StringTest extends TestCase {
83
84 private Document doc;
85
86 public void setUp() throws ParserConfigurationException
87 {
88 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
89 factory.setNamespaceAware(true);
90 DocumentBuilder builder = factory.newDocumentBuilder();
91 doc = builder.newDocument();
92 }
93
94
95 public StringTest(String name) {
96 super(name);
97 }
98
99
100 public void testStringFunctionOperatesOnFirstNodeInDocumentOrder()
101 throws JaxenException {
102
103 XPath xpath = new DOMXPath("string(//x)");
104 org.w3c.dom.Element a = doc.createElementNS("", "a");
105 org.w3c.dom.Element b = doc.createElementNS("", "b");
106 doc.appendChild(a);
107 a.appendChild(b);
108 org.w3c.dom.Element x2 = doc.createElementNS("", "x");
109 org.w3c.dom.Element x3 = doc.createElementNS("", "x");
110 org.w3c.dom.Element x4 = doc.createElementNS("", "x");
111 a.appendChild(x4);
112 b.appendChild(x2);
113 b.appendChild(x3);
114 x2.appendChild(doc.createTextNode("2"));
115 x3.appendChild(doc.createTextNode("3"));
116 x4.appendChild(doc.createTextNode("4"));
117
118 List result = xpath.selectNodes(doc);
119 assertEquals(1, result.size());
120 assertEquals("2", result.get(0));
121
122 }
123
124 public void testStringValueOfComment()
125 throws JaxenException {
126
127 XPath xpath = new DOMXPath("string(/a/comment())");
128 org.w3c.dom.Element a = doc.createElementNS("", "a");
129 doc.appendChild(a);
130 a.appendChild(doc.createComment("data"));
131
132 String result = (String) xpath.evaluate(doc);
133 assertEquals("data", result);
134
135 }
136
137 public void testStringValueOfNamespaceNode()
138 throws JaxenException {
139
140 XPath xpath = new DOMXPath("string(/a/namespace::node())");
141 org.w3c.dom.Element a = doc.createElementNS("", "a");
142 doc.appendChild(a);
143
144 String result = (String) xpath.evaluate(doc);
145 assertEquals("http://www.w3.org/XML/1998/namespace", result);
146
147 }
148
149 public void testSmallNumbersDontUseExponentialNotation() throws JaxenException {
150 XPath xpath = new DOMXPath("string(0.0000003)");
151 String result = (String) xpath.evaluate(null);
152 assertEquals("0.0000003", result);
153 }
154
155 public void testBigNumbersDontUseExponentialNotation() throws JaxenException {
156 XPath xpath = new DOMXPath("string(100000000.5)");
157 String result = (String) xpath.evaluate(null);
158 assertEquals("100000000.5", result);
159 }
160
161 public void testStringOfInfinity() throws JaxenException {
162 XPath xpath = new DOMXPath("string(1 div 0)");
163 String result = (String) xpath.evaluate(null);
164 assertEquals("Infinity", result);
165 }
166
167 public void testStringOfNegativeInfinity() throws JaxenException {
168 XPath xpath = new DOMXPath("string(-1 div 0)");
169 String result = (String) xpath.evaluate(null);
170 assertEquals("-Infinity", result);
171 }
172
173 public void testStringOfNegativeZero() throws JaxenException {
174 XPath xpath = new DOMXPath("string(-0)");
175 String result = (String) xpath.evaluate(null);
176 assertEquals("0", result);
177 }
178
179 public void testIntegersAreFormattedAsInts() throws JaxenException {
180 XPath xpath = new DOMXPath("string(12)");
181 String result = (String) xpath.evaluate(null);
182 assertEquals("12", result);
183 }
184
185 public void testStringFunctionRequiresAtMostOneArgument()
186 throws JaxenException {
187
188 XPath xpath = new DOMXPath("string('a', 1)");
189
190 try {
191 xpath.selectNodes(doc);
192 fail("Allowed string function with two arguments");
193 }
194 catch (FunctionCallException ex) {
195 assertNotNull(ex.getMessage());
196 }
197
198 }
199 }