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.BaseXPath;
73 import org.jaxen.FunctionCallException;
74 import org.jaxen.JaxenException;
75 import org.jaxen.dom.DOMXPath;
76 import org.w3c.dom.Document;
77
78 /***
79 * @author Elliotte Rusty Harold
80 *
81 */
82 public class BooleanTest 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 BooleanTest(String name) {
96 super(name);
97 }
98
99
100 public void testNonEmptyNodeSetsAreTrue()
101 throws JaxenException {
102
103 BaseXPath xpath = new DOMXPath("boolean(//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("false"));
115 x3.appendChild(doc.createTextNode("false"));
116 x4.appendChild(doc.createTextNode("false"));
117
118 List result = xpath.selectNodes(doc);
119 assertEquals(1, result.size());
120 assertEquals(Boolean.TRUE, result.get(0));
121
122 }
123
124 public void testEmptyNodeSetsAreFalse()
125 throws JaxenException {
126
127 BaseXPath xpath = new DOMXPath("boolean(//y)");
128 org.w3c.dom.Element a = doc.createElementNS("", "a");
129 org.w3c.dom.Element b = doc.createElementNS("", "b");
130 doc.appendChild(a);
131 a.appendChild(b);
132 org.w3c.dom.Element x2 = doc.createElementNS("", "x");
133 org.w3c.dom.Element x3 = doc.createElementNS("", "x");
134 org.w3c.dom.Element x4 = doc.createElementNS("", "x");
135 a.appendChild(x4);
136 b.appendChild(x2);
137 b.appendChild(x3);
138 x2.appendChild(doc.createTextNode("false"));
139 x3.appendChild(doc.createTextNode("false"));
140 x4.appendChild(doc.createTextNode("false"));
141
142 List result = xpath.selectNodes(doc);
143 assertEquals(1, result.size());
144 assertEquals(Boolean.FALSE, result.get(0));
145
146 }
147
148 public void testZeroIsFalse()
149 throws JaxenException {
150
151 BaseXPath xpath = new DOMXPath("boolean(0)");
152 org.w3c.dom.Element a = doc.createElementNS("", "a");
153
154 List result = xpath.selectNodes(a);
155 assertEquals(1, result.size());
156 assertEquals(Boolean.FALSE, result.get(0));
157
158 }
159
160 public void testEmptyStringIsFalse()
161 throws JaxenException {
162
163 BaseXPath xpath = new DOMXPath("boolean('')");
164 org.w3c.dom.Element a = doc.createElementNS("", "a");
165
166 List result = xpath.selectNodes(a);
167 assertEquals(1, result.size());
168 assertEquals(Boolean.FALSE, result.get(0));
169
170 }
171
172 public void testNaNIsFalse()
173 throws JaxenException {
174
175 BaseXPath xpath = new DOMXPath("boolean(0 div 0)");
176 Object result = xpath.evaluate(null);
177 assertEquals(Boolean.FALSE, result);
178
179 }
180
181 public void testNonEmptyStringIsTrue()
182 throws JaxenException {
183
184 BaseXPath xpath = new DOMXPath("boolean('false')");
185 org.w3c.dom.Element a = doc.createElementNS("", "a");
186
187 List result = xpath.selectNodes(a);
188 assertEquals(1, result.size());
189 assertEquals(Boolean.TRUE, result.get(0));
190
191 }
192
193 public void testBooleanFunctionRequiresOneArgument()
194 throws JaxenException {
195
196 BaseXPath xpath = new DOMXPath("boolean()");
197 org.w3c.dom.Element a = doc.createElementNS("", "a");
198
199 try {
200 xpath.selectNodes(a);
201 fail("Allowed boolean function with no arguments");
202 }
203 catch (FunctionCallException ex) {
204 assertNotNull(ex.getMessage());
205 }
206
207 }
208
209 public void testBooleanFunctionRequiresExactlyOneArgument()
210 throws JaxenException {
211
212 BaseXPath xpath = new DOMXPath("boolean('', '')");
213 org.w3c.dom.Element a = doc.createElementNS("", "a");
214
215 try {
216 xpath.selectNodes(a);
217 fail("Allowed boolean function with two arguments");
218 }
219 catch (FunctionCallException ex) {
220 assertNotNull(ex.getMessage());
221 }
222
223 }
224
225 }