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.FunctionCallException; 71 import org.jaxen.JaxenException; 72 import org.jaxen.XPath; 73 import org.jaxen.dom.DOMXPath; 74 import org.w3c.dom.Document ; 75 76 80 public class TranslateFunctionTest extends TestCase { 81 82 private Document doc; 83 84 public void setUp() throws ParserConfigurationException 85 { 86 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 87 factory.setNamespaceAware(true); 88 DocumentBuilder builder = factory.newDocumentBuilder(); 89 doc = builder.newDocument(); 90 doc.appendChild(doc.createElement("root")); 91 } 92 93 public void testTranslate() throws JaxenException 94 { 95 XPath xpath = new DOMXPath( "translate('abc', 'b', 'd')" ); 96 String result = (String ) xpath.evaluate( doc ); 97 assertEquals("adc", result); 98 } 99 100 public void testTranslateIgnoresExtraArguments() throws JaxenException 101 { 102 XPath xpath = new DOMXPath( "translate('abc', 'b', 'dghf')" ); 103 String result = (String ) xpath.evaluate( doc ); 104 assertEquals("adc", result); 105 } 106 107 public void testTranslateFunctionRequiresAtLeastThreeArguments() 108 throws JaxenException { 109 110 XPath xpath = new DOMXPath("translate('a', 'b')"); 111 112 try { 113 xpath.selectNodes(doc); 114 fail("Allowed translate function with two arguments"); 115 } 116 catch (FunctionCallException ex) { 117 assertNotNull(ex.getMessage()); 118 } 119 120 } 121 122 public void testTranslateRequiresAtMostThreeArguments() 123 throws JaxenException { 124 125 XPath xpath = new DOMXPath("substring-after('a', 'a', 'a', 'a')"); 126 127 try { 128 xpath.selectNodes(doc); 129 fail("Allowed translate function with four arguments"); 130 } 131 catch (FunctionCallException ex) { 132 assertNotNull(ex.getMessage()); 133 } 134 135 } 136 137 public void testTranslateStringThatContainsNonBMPChars() throws JaxenException 138 { 139 XPath xpath = new DOMXPath( "translate('ab\uD834\uDD00b', 'b', 'd')" ); 140 String result = (String ) xpath.evaluate( doc ); 141 assertEquals("ad\uD834\uDD00d", result); 142 } 143 144 145 public void testTranslateNonBMPChars() throws JaxenException 146 { 147 XPath xpath = new DOMXPath( "translate('ab\uD834\uDD00b', '\uD834\uDD00', 'd')" ); 148 String result = (String ) xpath.evaluate( doc ); 149 assertEquals("abdb", result); 150 } 151 152 153 public void testTranslateNonBMPChars2() throws JaxenException 154 { 155 XPath xpath = new DOMXPath( "translate('ab\uD834\uDD00b', '\uD834\uDD00', 'da')" ); 156 String result = (String ) xpath.evaluate( doc ); 157 assertEquals("abdb", result); 158 } 159 160 161 public void testTranslateWithNonBMPChars() throws JaxenException 162 { 163 XPath xpath = new DOMXPath( "translate('abc', 'c', '\uD834\uDD00')" ); 164 String result = (String ) xpath.evaluate( doc ); 165 assertEquals("ab\uD834\uDD00", result); 166 } 167 168 169 public void testTranslateWithNonBMPChars2() throws JaxenException 170 { 171 XPath xpath = new DOMXPath( "translate('abc', 'c', '\uD834\uDD00b')" ); 172 String result = (String ) xpath.evaluate( doc ); 173 assertEquals("ab\uD834\uDD00", result); 174 } 175 176 177 public void testTranslateWithMalformedSurrogatePair() throws JaxenException 178 { 179 XPath xpath = new DOMXPath( "translate('abc', 'c', '\uD834X\uDD00b')" ); 180 try { 181 xpath.evaluate( doc ); 182 fail("Allowed malformed surrogate pair"); 183 } 184 catch (FunctionCallException ex) { 185 assertNotNull(ex.getMessage()); 186 } 187 } 188 189 190 public void testTranslateWithMissingLowSurrogate() throws JaxenException 191 { 192 XPath xpath = new DOMXPath( "translate('abc', 'c', 'AB\uD834X')" ); 193 try { 194 xpath.evaluate( doc ); 195 fail("Allowed malformed surrogate pair"); 196 } 197 catch (FunctionCallException ex) { 198 assertNotNull(ex.getMessage()); 199 } 200 } 201 202 203 public void testTranslateWithExtraCharsInReplacementString() throws JaxenException 204 { 205 XPath xpath = new DOMXPath( "translate('abc', 'c', 'def')" ); 206 String result = (String ) xpath.evaluate( doc ); 207 assertEquals("abd", result); 208 } 209 210 211 } 212 | Popular Tags |