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.io.IOException;
65 import java.util.List;
66
67 import javax.xml.parsers.DocumentBuilder;
68 import javax.xml.parsers.DocumentBuilderFactory;
69 import javax.xml.parsers.ParserConfigurationException;
70
71 import junit.framework.TestCase;
72
73 import org.jaxen.BaseXPath;
74 import org.jaxen.FunctionCallException;
75 import org.jaxen.JaxenException;
76 import org.jaxen.dom.DOMXPath;
77 import org.w3c.dom.Document;
78 import org.xml.sax.SAXException;
79
80 /***
81 * @author Elliotte Rusty Harold
82 *
83 */
84 public class BooleanTest extends TestCase {
85
86 private Document doc;
87
88 public void setUp() throws ParserConfigurationException, SAXException, IOException
89 {
90 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
91 factory.setNamespaceAware(true);
92 DocumentBuilder builder = factory.newDocumentBuilder();
93 doc = builder.newDocument();
94 }
95
96
97 public BooleanTest(String name) {
98 super(name);
99 }
100
101
102 public void testNonEmptyNodeSetsAreTrue()
103 throws JaxenException {
104
105 BaseXPath xpath = new DOMXPath("boolean(//x)");
106 org.w3c.dom.Element a = doc.createElementNS("", "a");
107 org.w3c.dom.Element b = doc.createElementNS("", "b");
108 doc.appendChild(a);
109 a.appendChild(b);
110 org.w3c.dom.Element x2 = doc.createElementNS("", "x");
111 org.w3c.dom.Element x3 = doc.createElementNS("", "x");
112 org.w3c.dom.Element x4 = doc.createElementNS("", "x");
113 a.appendChild(x4);
114 b.appendChild(x2);
115 b.appendChild(x3);
116 x2.appendChild(doc.createTextNode("false"));
117 x3.appendChild(doc.createTextNode("false"));
118 x4.appendChild(doc.createTextNode("false"));
119
120 List result = xpath.selectNodes(doc);
121 assertEquals(1, result.size());
122 assertEquals(Boolean.TRUE, result.get(0));
123
124 }
125
126 public void testEmptyNodeSetsAreFalse()
127 throws JaxenException {
128
129 BaseXPath xpath = new DOMXPath("boolean(//y)");
130 org.w3c.dom.Element a = doc.createElementNS("", "a");
131 org.w3c.dom.Element b = doc.createElementNS("", "b");
132 doc.appendChild(a);
133 a.appendChild(b);
134 org.w3c.dom.Element x2 = doc.createElementNS("", "x");
135 org.w3c.dom.Element x3 = doc.createElementNS("", "x");
136 org.w3c.dom.Element x4 = doc.createElementNS("", "x");
137 a.appendChild(x4);
138 b.appendChild(x2);
139 b.appendChild(x3);
140 x2.appendChild(doc.createTextNode("false"));
141 x3.appendChild(doc.createTextNode("false"));
142 x4.appendChild(doc.createTextNode("false"));
143
144 List result = xpath.selectNodes(doc);
145 assertEquals(1, result.size());
146 assertEquals(Boolean.FALSE, result.get(0));
147
148 }
149
150 public void testZeroIsFalse()
151 throws JaxenException {
152
153 BaseXPath xpath = new DOMXPath("boolean(0)");
154 org.w3c.dom.Element a = doc.createElementNS("", "a");
155
156 List result = xpath.selectNodes(a);
157 assertEquals(1, result.size());
158 assertEquals(Boolean.FALSE, result.get(0));
159
160 }
161
162 public void testEmptyStringIsFalse()
163 throws JaxenException {
164
165 BaseXPath xpath = new DOMXPath("boolean('')");
166 org.w3c.dom.Element a = doc.createElementNS("", "a");
167
168 List result = xpath.selectNodes(a);
169 assertEquals(1, result.size());
170 assertEquals(Boolean.FALSE, result.get(0));
171
172 }
173
174 public void testNaNIsFalse()
175 throws JaxenException {
176
177 BaseXPath xpath = new DOMXPath("boolean(0 div 0)");
178 Object result = xpath.evaluate(null);
179 assertEquals(Boolean.FALSE, result);
180
181 }
182
183 public void testNonEmptyStringIsTrue()
184 throws JaxenException {
185
186 BaseXPath xpath = new DOMXPath("boolean('false')");
187 org.w3c.dom.Element a = doc.createElementNS("", "a");
188
189 List result = xpath.selectNodes(a);
190 assertEquals(1, result.size());
191 assertEquals(Boolean.TRUE, result.get(0));
192
193 }
194
195 public void testBooleanFunctionRequiresOneArgument()
196 throws JaxenException {
197
198 BaseXPath xpath = new DOMXPath("boolean()");
199 org.w3c.dom.Element a = doc.createElementNS("", "a");
200
201 try {
202 xpath.selectNodes(a);
203 fail("Allowed boolean function with no arguments");
204 }
205 catch (FunctionCallException ex) {
206 assertNotNull(ex.getMessage());
207 }
208
209 }
210
211 public void testBooleanFunctionRequiresExactlyOneArgument()
212 throws JaxenException {
213
214 BaseXPath xpath = new DOMXPath("boolean('', '')");
215 org.w3c.dom.Element a = doc.createElementNS("", "a");
216
217 try {
218 xpath.selectNodes(a);
219 fail("Allowed boolean function with two arguments");
220 }
221 catch (FunctionCallException ex) {
222 assertNotNull(ex.getMessage());
223 }
224
225 }
226
227 }