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 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 public void testStringFunctionOperatesOnFirstNodeInDocumentOrder() 101 throws JaxenException { 102 103 BaseXPath 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 testSmallNumbersDontUseExponentialNotation() throws JaxenException { 125 BaseXPath xpath = new DOMXPath("string(0.0000003)"); 126 String result = (String ) xpath.evaluate(null); 127 assertEquals("0.0000003", result); 128 } 129 130 public void testBigNumbersDontUseExponentialNotation() throws JaxenException { 131 BaseXPath xpath = new DOMXPath("string(100000000.5)"); 132 String result = (String ) xpath.evaluate(null); 133 assertEquals("100000000.5", result); 134 } 135 136 public void testStringOfInfinity() throws JaxenException { 137 BaseXPath xpath = new DOMXPath("string(1 div 0)"); 138 String result = (String ) xpath.evaluate(null); 139 assertEquals("Infinity", result); 140 } 141 142 public void testStringOfNegativeInfinity() throws JaxenException { 143 BaseXPath xpath = new DOMXPath("string(-1 div 0)"); 144 String result = (String ) xpath.evaluate(null); 145 assertEquals("-Infinity", result); 146 } 147 148 public void testStringOfNegativeZero() throws JaxenException { 149 BaseXPath xpath = new DOMXPath("string(-0)"); 150 String result = (String ) xpath.evaluate(null); 151 assertEquals("0", result); 152 } 153 154 public void testIntegersAreFormattedAsInts() throws JaxenException { 155 BaseXPath xpath = new DOMXPath("string(12)"); 156 String result = (String ) xpath.evaluate(null); 157 assertEquals("12", result); 158 } 159 160 public void testStringFunctionRequiresAtMostOneArgument() 161 throws JaxenException { 162 163 BaseXPath xpath = new DOMXPath("string('a', 1)"); 164 165 try { 166 xpath.selectNodes(doc); 167 fail("Allowed string function with two arguments"); 168 } 169 catch (FunctionCallException ex) { 170 assertNotNull(ex.getMessage()); 171 } 172 173 } 174 } 175 | Popular Tags |