1 61 62 package org.jaxen.function; 63 64 import javax.xml.parsers.DocumentBuilder ; 65 import javax.xml.parsers.DocumentBuilderFactory ; 66 import javax.xml.parsers.ParserConfigurationException ; 67 68 import junit.framework.TestCase; 69 70 import org.jaxen.BaseXPath; 71 import org.jaxen.FunctionCallException; 72 import org.jaxen.JaxenException; 73 import org.jaxen.XPath; 74 import org.jaxen.dom.DOMXPath; 75 import org.w3c.dom.Document ; 76 77 81 public class StringLengthTest extends TestCase { 82 83 private Document doc; 84 85 public void setUp() throws ParserConfigurationException 86 { 87 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 88 factory.setNamespaceAware(true); 89 DocumentBuilder builder = factory.newDocumentBuilder(); 90 doc = builder.newDocument(); 91 doc.appendChild(doc.createElement("root")); 92 } 93 94 95 public StringLengthTest(String name) { 96 super(name); 97 } 98 99 public void testStringLengthOfNumber() throws JaxenException 100 { 101 XPath xpath = new DOMXPath( "string-length(3)" ); 102 Double result = (Double ) xpath.evaluate( doc ); 103 assertEquals(1, result.intValue()); 104 } 105 106 public void testStringLengthOfEmptyString() throws JaxenException 107 { 108 XPath xpath = new DOMXPath( "string-length('')" ); 109 Double result = (Double ) xpath.evaluate( doc ); 110 assertEquals(0, result.intValue()); 111 } 112 113 public void testStringLengthOfString() throws JaxenException 114 { 115 XPath xpath = new DOMXPath( "string-length('0123456789')" ); 116 Double result = (Double ) xpath.evaluate( doc ); 117 assertEquals(10, result.intValue()); 118 } 119 120 public void testStringLengthFunctionOperatesOnContextNode() 121 throws JaxenException { 122 123 BaseXPath xpath = new DOMXPath("string-length()"); 124 Double result = (Double ) xpath.evaluate( doc ); 125 assertEquals(0, result.intValue()); 126 127 } 128 129 public void testStringLengthFunctionCountsUnicodeCharactersNotJavaChars() 130 throws JaxenException { 131 132 BaseXPath xpath = new DOMXPath("string-length('\uD834\uDD00')"); 133 Double result = (Double ) xpath.evaluate( doc ); 134 assertEquals(1, result.intValue()); 135 136 } 137 138 public void testStringLengthFunctionWithMalformedString() 139 throws JaxenException { 140 141 BaseXPath xpath = new DOMXPath("string-length('\uD834A\uDD00')"); 142 try { 143 xpath.evaluate( doc ); 144 fail("Allowed Malformed string"); 145 } 146 catch (FunctionCallException ex) { 147 assertNotNull(ex.getMessage()); 148 } 149 150 } 151 152 public void testStringLengthFunctionRequiresExactlyOneArgument() 153 throws JaxenException { 154 155 BaseXPath xpath = new DOMXPath("string-length('', '')"); 156 157 try { 158 xpath.selectNodes(doc); 159 fail("Allowed string-length function with two arguments"); 160 } 161 catch (FunctionCallException ex) { 162 assertNotNull(ex.getMessage()); 163 } 164 165 } 166 167 } 168 | Popular Tags |