1 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 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 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 } 226 | Popular Tags |