1de76a5adSDamjan Jovanovic /************************************************************** 2de76a5adSDamjan Jovanovic * 3de76a5adSDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4de76a5adSDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5de76a5adSDamjan Jovanovic * distributed with this work for additional information 6de76a5adSDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7de76a5adSDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8de76a5adSDamjan Jovanovic * "License"); you may not use this file except in compliance 9de76a5adSDamjan Jovanovic * with the License. You may obtain a copy of the License at 10de76a5adSDamjan Jovanovic * 11de76a5adSDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12de76a5adSDamjan Jovanovic * 13de76a5adSDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14de76a5adSDamjan Jovanovic * software distributed under the License is distributed on an 15de76a5adSDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16de76a5adSDamjan Jovanovic * KIND, either express or implied. See the License for the 17de76a5adSDamjan Jovanovic * specific language governing permissions and limitations 18de76a5adSDamjan Jovanovic * under the License. 19de76a5adSDamjan Jovanovic * 20de76a5adSDamjan Jovanovic *************************************************************/ 21de76a5adSDamjan Jovanovic 22de76a5adSDamjan Jovanovic 23de76a5adSDamjan Jovanovic 24*2f709283SDamjan Jovanovic package api.i18n; 25de76a5adSDamjan Jovanovic 26de76a5adSDamjan Jovanovic import com.sun.star.i18n.TransliterationModules; 27de76a5adSDamjan Jovanovic import com.sun.star.i18n.TransliterationModulesNew; 28de76a5adSDamjan Jovanovic import com.sun.star.i18n.TransliterationType; 29de76a5adSDamjan Jovanovic import com.sun.star.i18n.XTransliteration; 30de76a5adSDamjan Jovanovic import com.sun.star.lang.Locale; 31*2f709283SDamjan Jovanovic import com.sun.star.uno.UnoRuntime; 32*2f709283SDamjan Jovanovic import com.sun.star.uno.XComponentContext; 33*2f709283SDamjan Jovanovic import org.junit.After; 34*2f709283SDamjan Jovanovic import org.junit.AfterClass; 35*2f709283SDamjan Jovanovic import org.junit.Before; 36*2f709283SDamjan Jovanovic import org.junit.BeforeClass; 37*2f709283SDamjan Jovanovic import org.junit.Assert; 38*2f709283SDamjan Jovanovic import org.junit.Test; 39*2f709283SDamjan Jovanovic import org.openoffice.test.uno.UnoApp; 40de76a5adSDamjan Jovanovic 41de76a5adSDamjan Jovanovic /** 42de76a5adSDamjan Jovanovic * Testing <code>com.sun.star.i18n.XTransliteration</code> 43de76a5adSDamjan Jovanovic * interface methods : 44de76a5adSDamjan Jovanovic * <ul> 45de76a5adSDamjan Jovanovic * <li><code> getName()</code></li> 46de76a5adSDamjan Jovanovic * <li><code> getType()</code></li> 47de76a5adSDamjan Jovanovic * <li><code> loadModule()</code></li> 48de76a5adSDamjan Jovanovic * <li><code> loadModuleNew()</code></li> 49de76a5adSDamjan Jovanovic * <li><code> loadModuleByImplName()</code></li> 50de76a5adSDamjan Jovanovic * <li><code> loadModulesByImplNames()</code></li> 51de76a5adSDamjan Jovanovic * <li><code> getAvailableModules()</code></li> 52de76a5adSDamjan Jovanovic * <li><code> transliterate()</code></li> 53de76a5adSDamjan Jovanovic * <li><code> folding()</code></li> 54de76a5adSDamjan Jovanovic * <li><code> equals()</code></li> 55de76a5adSDamjan Jovanovic * <li><code> transliterateRange()</code></li> 56de76a5adSDamjan Jovanovic * </ul> <p> 57de76a5adSDamjan Jovanovic * Test is <b> NOT </b> multithread compliant. <p> 58de76a5adSDamjan Jovanovic * @see com.sun.star.i18n.XTransliteration 59de76a5adSDamjan Jovanovic */ 60*2f709283SDamjan Jovanovic public class XTransliterationTest { 61*2f709283SDamjan Jovanovic private static final UnoApp app = new UnoApp(); 62de76a5adSDamjan Jovanovic 63*2f709283SDamjan Jovanovic private XComponentContext xContext = null; 64de76a5adSDamjan Jovanovic public XTransliteration oObj = null; 65de76a5adSDamjan Jovanovic private String[] mod = null ; 66de76a5adSDamjan Jovanovic private Locale loc = new Locale("en", "EN", "") ; 67de76a5adSDamjan Jovanovic 68*2f709283SDamjan Jovanovic 69*2f709283SDamjan Jovanovic // setup and close connections 70*2f709283SDamjan Jovanovic @BeforeClass 71*2f709283SDamjan Jovanovic public static void setUpConnection() throws Exception 72*2f709283SDamjan Jovanovic { 73*2f709283SDamjan Jovanovic app.start(); 74*2f709283SDamjan Jovanovic } 75*2f709283SDamjan Jovanovic 76*2f709283SDamjan Jovanovic @AfterClass 77*2f709283SDamjan Jovanovic public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception 78*2f709283SDamjan Jovanovic { 79*2f709283SDamjan Jovanovic app.close(); 80*2f709283SDamjan Jovanovic } 81*2f709283SDamjan Jovanovic 82*2f709283SDamjan Jovanovic @Before 83*2f709283SDamjan Jovanovic public void before() throws Exception { 84*2f709283SDamjan Jovanovic xContext = app.getComponentContext(); 85*2f709283SDamjan Jovanovic oObj = UnoRuntime.queryInterface( 86*2f709283SDamjan Jovanovic XTransliteration.class, 87*2f709283SDamjan Jovanovic xContext.getServiceManager().createInstanceWithContext("com.sun.star.i18n.Transliteration", xContext) 88*2f709283SDamjan Jovanovic ); 89*2f709283SDamjan Jovanovic } 90*2f709283SDamjan Jovanovic 91de76a5adSDamjan Jovanovic /** 92de76a5adSDamjan Jovanovic * Gets all available transliteration modules. <p> 93de76a5adSDamjan Jovanovic * Has <b>OK</b> status if array returned has at least 94de76a5adSDamjan Jovanovic * one module name. 95de76a5adSDamjan Jovanovic */ 96*2f709283SDamjan Jovanovic @Test 97de76a5adSDamjan Jovanovic public void _getAvailableModules() { 98de76a5adSDamjan Jovanovic mod = oObj.getAvailableModules(loc, TransliterationType.ONE_TO_ONE); 99de76a5adSDamjan Jovanovic 100de76a5adSDamjan Jovanovic if (mod != null) { 101*2f709283SDamjan Jovanovic System.out.println("Available modules :") ; 102de76a5adSDamjan Jovanovic for (int i = 0; i < mod.length; i++) { 103*2f709283SDamjan Jovanovic System.out.println(" '" + mod[i] + "'") ; 104de76a5adSDamjan Jovanovic } 105de76a5adSDamjan Jovanovic } else { 106*2f709283SDamjan Jovanovic System.out.println("!!! NULL returned !!!") ; 107de76a5adSDamjan Jovanovic } 108de76a5adSDamjan Jovanovic 109*2f709283SDamjan Jovanovic Assert.assertTrue("getAvailableModules()", mod != null && mod.length > 0) ; 110de76a5adSDamjan Jovanovic } 111de76a5adSDamjan Jovanovic 112de76a5adSDamjan Jovanovic /** 113de76a5adSDamjan Jovanovic * Calls the method for load IGNORE_CASE module and checks the name returned 114de76a5adSDamjan Jovanovic * by the method <code>getName</code>. <p> 115de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the method <code>getName</code> returns the 116de76a5adSDamjan Jovanovic * string "case ignore (generic)". 117de76a5adSDamjan Jovanovic */ 118*2f709283SDamjan Jovanovic @Test 119de76a5adSDamjan Jovanovic public void _loadModule() { 120*2f709283SDamjan Jovanovic System.out.println("Load module IGNORE_CASE"); 121de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.IGNORE_CASE, loc); 122de76a5adSDamjan Jovanovic 123de76a5adSDamjan Jovanovic String name = oObj.getName(); 124de76a5adSDamjan Jovanovic boolean res = name.equals("case ignore (generic)"); 125*2f709283SDamjan Jovanovic System.out.println("getName return: " + name); 126de76a5adSDamjan Jovanovic 127*2f709283SDamjan Jovanovic Assert.assertTrue("loadModule()", res ); 128de76a5adSDamjan Jovanovic } 129de76a5adSDamjan Jovanovic 130de76a5adSDamjan Jovanovic /** 131de76a5adSDamjan Jovanovic * Loads <code>LOWERCASE_UPPERCASE</code> module and checks the current 132de76a5adSDamjan Jovanovic * name of object. <p> 133de76a5adSDamjan Jovanovic * 134de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the name of the object is equals to 135de76a5adSDamjan Jovanovic * 'lower_to_upper(generic)' 136de76a5adSDamjan Jovanovic */ 137*2f709283SDamjan Jovanovic @Test 138de76a5adSDamjan Jovanovic public void _loadModuleNew() { 139de76a5adSDamjan Jovanovic boolean result = true ; 140de76a5adSDamjan Jovanovic 141de76a5adSDamjan Jovanovic oObj.loadModuleNew( 142de76a5adSDamjan Jovanovic new TransliterationModulesNew[] 143de76a5adSDamjan Jovanovic {TransliterationModulesNew.LOWERCASE_UPPERCASE}, loc); 144de76a5adSDamjan Jovanovic 145de76a5adSDamjan Jovanovic String name = oObj.getName(); 146de76a5adSDamjan Jovanovic result = name.equals("lower_to_upper(generic)"); 147*2f709283SDamjan Jovanovic System.out.println("getName return: " + name); 148de76a5adSDamjan Jovanovic 149*2f709283SDamjan Jovanovic Assert.assertTrue("loadModuleNew()", result); 150de76a5adSDamjan Jovanovic } 151de76a5adSDamjan Jovanovic 152de76a5adSDamjan Jovanovic /** 153de76a5adSDamjan Jovanovic * Calls the method for load LOWERCASE_UPPERCASE module and 154de76a5adSDamjan Jovanovic * checks the name returned by the method <code>getName</code>. <p> 155de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the method <code>getName</code> returns the 156de76a5adSDamjan Jovanovic * string "lower_to_upper(generic)". 157de76a5adSDamjan Jovanovic */ 158*2f709283SDamjan Jovanovic @Test 159de76a5adSDamjan Jovanovic public void _loadModuleByImplName() { 160*2f709283SDamjan Jovanovic System.out.println("Load module LOWERCASE_UPPERCASE"); 161de76a5adSDamjan Jovanovic oObj.loadModuleByImplName("LOWERCASE_UPPERCASE", loc); 162de76a5adSDamjan Jovanovic 163de76a5adSDamjan Jovanovic String name = oObj.getName(); 164de76a5adSDamjan Jovanovic boolean res = name.equals("lower_to_upper(generic)"); 165*2f709283SDamjan Jovanovic System.out.println("getName return: " + name); 166de76a5adSDamjan Jovanovic 167*2f709283SDamjan Jovanovic Assert.assertTrue("loadModuleByImplName()", res); 168de76a5adSDamjan Jovanovic } 169de76a5adSDamjan Jovanovic 170de76a5adSDamjan Jovanovic /** 171de76a5adSDamjan Jovanovic * Calls the method for load UPPERCASE_LOWERCASE module and 172de76a5adSDamjan Jovanovic * checks the name returned by the method <code>getName</code>. <p> 173de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the method <code>getName</code> returns the 174de76a5adSDamjan Jovanovic * string "upper_to_lower(generic)". 175de76a5adSDamjan Jovanovic */ 176*2f709283SDamjan Jovanovic @Test 177de76a5adSDamjan Jovanovic public void _loadModulesByImplNames() { 178*2f709283SDamjan Jovanovic System.out.println("Load module UPPERCASE_LOWERCASE"); 179de76a5adSDamjan Jovanovic oObj.loadModulesByImplNames(new String[]{"UPPERCASE_LOWERCASE"}, loc); 180de76a5adSDamjan Jovanovic 181de76a5adSDamjan Jovanovic String name = oObj.getName(); 182de76a5adSDamjan Jovanovic boolean res = name.equals("upper_to_lower(generic)"); 183*2f709283SDamjan Jovanovic System.out.println("getName return: " + name); 184de76a5adSDamjan Jovanovic 185*2f709283SDamjan Jovanovic Assert.assertTrue("loadModulesByImplNames()", res); 186de76a5adSDamjan Jovanovic } 187de76a5adSDamjan Jovanovic 188de76a5adSDamjan Jovanovic /** 189de76a5adSDamjan Jovanovic * Loads <code>LOWERCASE_UPPERCASE</code> module and checks current type. 190de76a5adSDamjan Jovanovic * <p>Has <b>OK</b> status if the type is <code>ONE_TO_ONE</code> 191de76a5adSDamjan Jovanovic */ 192*2f709283SDamjan Jovanovic @Test 193de76a5adSDamjan Jovanovic public void _getType() { 194de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc); 195de76a5adSDamjan Jovanovic boolean result = oObj.getType() == TransliterationType.ONE_TO_ONE; 196*2f709283SDamjan Jovanovic Assert.assertTrue("getType()", result); 197de76a5adSDamjan Jovanovic } 198de76a5adSDamjan Jovanovic 199de76a5adSDamjan Jovanovic /** 200de76a5adSDamjan Jovanovic * Loads UPPERCASE_LOWERCASE module and 201de76a5adSDamjan Jovanovic * checks the name returned by the method <code>getName</code>. <p> 202de76a5adSDamjan Jovanovic * 203de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the method <code>getName</code> returns the 204de76a5adSDamjan Jovanovic * string "upper_to_lower(generic)". 205de76a5adSDamjan Jovanovic */ 206*2f709283SDamjan Jovanovic @Test 207de76a5adSDamjan Jovanovic public void _getName() { 208de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc); 209de76a5adSDamjan Jovanovic 210de76a5adSDamjan Jovanovic String name = oObj.getName(); 211de76a5adSDamjan Jovanovic boolean res = name.equals("lower_to_upper(generic)"); 212*2f709283SDamjan Jovanovic System.out.println("getName return: " + name); 213de76a5adSDamjan Jovanovic 214*2f709283SDamjan Jovanovic Assert.assertTrue("getName()", res); 215de76a5adSDamjan Jovanovic } 216de76a5adSDamjan Jovanovic 217de76a5adSDamjan Jovanovic /** 218de76a5adSDamjan Jovanovic * First loads <code>LOWERCASE_UPPERCASE</code> module. 219de76a5adSDamjan Jovanovic * Then tries to transliterate (make uppercase) a substring. <p> 220de76a5adSDamjan Jovanovic * Has <b>OK</b> status if all chars were made uppercase, 221de76a5adSDamjan Jovanovic * and array returned has size as substring length, and its 222de76a5adSDamjan Jovanovic * elements are positions of substring characters in the source 223de76a5adSDamjan Jovanovic * string. 224de76a5adSDamjan Jovanovic */ 225*2f709283SDamjan Jovanovic @Test 226de76a5adSDamjan Jovanovic public void _transliterate() { 227de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc); 228de76a5adSDamjan Jovanovic 229de76a5adSDamjan Jovanovic int[][] offs = new int[1][] ; 230de76a5adSDamjan Jovanovic 231de76a5adSDamjan Jovanovic String out = oObj.transliterate("AaBbCc", 1, 4, offs) ; 232de76a5adSDamjan Jovanovic 233de76a5adSDamjan Jovanovic boolean result = "ABBC".equals(out) && offs[0].length == 4 && 234de76a5adSDamjan Jovanovic offs[0][0] == 1 && 235de76a5adSDamjan Jovanovic offs[0][1] == 2 && 236de76a5adSDamjan Jovanovic offs[0][2] == 3 && 237de76a5adSDamjan Jovanovic offs[0][3] == 4 ; 238de76a5adSDamjan Jovanovic 239*2f709283SDamjan Jovanovic Assert.assertTrue("transliterate()", result) ; 240de76a5adSDamjan Jovanovic } 241de76a5adSDamjan Jovanovic 242de76a5adSDamjan Jovanovic 243de76a5adSDamjan Jovanovic /** 244de76a5adSDamjan Jovanovic * First loads <code>LOWERCASE_UPPERCASE</code> module. 245de76a5adSDamjan Jovanovic * Tries to transliterate a range of two characters. <p> 246de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the appropriate String array 247de76a5adSDamjan Jovanovic * returned (not null, length = 4, with two ranges 248de76a5adSDamjan Jovanovic * (a, i), (A, I) in any order). 249de76a5adSDamjan Jovanovic */ 250*2f709283SDamjan Jovanovic @Test 251de76a5adSDamjan Jovanovic public void _transliterateRange() { 252de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.IGNORE_CASE, loc); 253de76a5adSDamjan Jovanovic 254de76a5adSDamjan Jovanovic String[] out = oObj.transliterateRange("a", "i") ; 255de76a5adSDamjan Jovanovic 256*2f709283SDamjan Jovanovic System.out.println("transliterateRange return:"); 257de76a5adSDamjan Jovanovic for(int i = 0; i < out.length; i++) { 258*2f709283SDamjan Jovanovic System.out.println(out[i]); 259de76a5adSDamjan Jovanovic } 260de76a5adSDamjan Jovanovic 261de76a5adSDamjan Jovanovic boolean bOK = out != null && 262de76a5adSDamjan Jovanovic out.length == 4 && 263de76a5adSDamjan Jovanovic ("A".equals(out[0]) && "I".equals(out[1]) && 264de76a5adSDamjan Jovanovic "a".equals(out[2]) && "i".equals(out[3])) || 265de76a5adSDamjan Jovanovic ("a".equals(out[0]) && "i".equals(out[1]) && 266de76a5adSDamjan Jovanovic "A".equals(out[2]) && "I".equals(out[3])) ; 267de76a5adSDamjan Jovanovic 268de76a5adSDamjan Jovanovic if (!bOK) { 269*2f709283SDamjan Jovanovic System.out.println("Unexpected range returned :"); 270de76a5adSDamjan Jovanovic for (int i = 0; i < out.length; i++) { 271*2f709283SDamjan Jovanovic System.out.print("'" + out[i] +"', "); 272de76a5adSDamjan Jovanovic } 273*2f709283SDamjan Jovanovic System.out.println(); 274de76a5adSDamjan Jovanovic } 275de76a5adSDamjan Jovanovic 276*2f709283SDamjan Jovanovic Assert.assertTrue("transliterateRange()", bOK); 277de76a5adSDamjan Jovanovic } 278de76a5adSDamjan Jovanovic 279de76a5adSDamjan Jovanovic /** 280de76a5adSDamjan Jovanovic * This method is used internally by <code>equals</code> 281de76a5adSDamjan Jovanovic * method so it indirectly tested in this method. <p> 282de76a5adSDamjan Jovanovic * Always has <b>OK</b> status. 283de76a5adSDamjan Jovanovic */ 284*2f709283SDamjan Jovanovic @Test 285de76a5adSDamjan Jovanovic public void _folding() { 286de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc); 287de76a5adSDamjan Jovanovic 288de76a5adSDamjan Jovanovic int[][] offs = new int[1][] ; 289de76a5adSDamjan Jovanovic 290de76a5adSDamjan Jovanovic String out = oObj.folding("AaBbCc", 1, 4, offs) ; 291de76a5adSDamjan Jovanovic 292de76a5adSDamjan Jovanovic boolean result = "ABBC".equals(out) && offs[0].length == 4 && 293de76a5adSDamjan Jovanovic offs[0][0] == 1 && 294de76a5adSDamjan Jovanovic offs[0][1] == 2 && 295de76a5adSDamjan Jovanovic offs[0][2] == 3 && 296de76a5adSDamjan Jovanovic offs[0][3] == 4 ; 297de76a5adSDamjan Jovanovic 298de76a5adSDamjan Jovanovic 299*2f709283SDamjan Jovanovic Assert.assertTrue("folding()", result) ; 300de76a5adSDamjan Jovanovic } 301de76a5adSDamjan Jovanovic 302de76a5adSDamjan Jovanovic 303de76a5adSDamjan Jovanovic /** 304de76a5adSDamjan Jovanovic * First loads <code>LOWERCASE_UPPERCASE</code> module. 305de76a5adSDamjan Jovanovic * Tries to compare two equal substrings. <p> 306de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the method returned <code>true</code>. 307de76a5adSDamjan Jovanovic */ 308*2f709283SDamjan Jovanovic @Test 309de76a5adSDamjan Jovanovic public void _equals() { 310de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc); 311de76a5adSDamjan Jovanovic 312de76a5adSDamjan Jovanovic int[] match1 = new int[1], 313de76a5adSDamjan Jovanovic match2 = new int[1] ; 314de76a5adSDamjan Jovanovic 315de76a5adSDamjan Jovanovic boolean res = oObj.equals("aAbBcC", 1, 3, match1, "aAbBcC", 1, 316de76a5adSDamjan Jovanovic 3, match2) ; 317de76a5adSDamjan Jovanovic 318*2f709283SDamjan Jovanovic System.out.println("Returned : " + res + " Match1 = " + match1[0] + 319de76a5adSDamjan Jovanovic " Match2 = " + match2[0]) ; 320de76a5adSDamjan Jovanovic 321*2f709283SDamjan Jovanovic Assert.assertTrue("equals()", res) ; 322de76a5adSDamjan Jovanovic } 323de76a5adSDamjan Jovanovic 324de76a5adSDamjan Jovanovic /** 325de76a5adSDamjan Jovanovic * Test performed for sets of equal substrings, not equal 326de76a5adSDamjan Jovanovic * substrings, and with out of bounds offset and length 327de76a5adSDamjan Jovanovic * parameters.<p> 328de76a5adSDamjan Jovanovic * 329de76a5adSDamjan Jovanovic * Has <b>OK</b> status if comparings of equal substrings 330de76a5adSDamjan Jovanovic * always return 0, if comparisons of none equal returns 331de76a5adSDamjan Jovanovic * proper value according to lexicographical order and if 332de76a5adSDamjan Jovanovic * comparisons with invalid parameters return none 0 value. 333de76a5adSDamjan Jovanovic */ 334*2f709283SDamjan Jovanovic @Test 335de76a5adSDamjan Jovanovic public void _compareSubstring() { 336de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc); 337de76a5adSDamjan Jovanovic boolean result = true ; 338de76a5adSDamjan Jovanovic 339de76a5adSDamjan Jovanovic // substrings below must be equal 340de76a5adSDamjan Jovanovic result &= testSubstring("", 0, 0, "", 0, 0, 0) ; 341de76a5adSDamjan Jovanovic result &= testSubstring("aa", 1, 0, "", 0, 0, 0) ; 342de76a5adSDamjan Jovanovic result &= testSubstring("aa", 1, 0, "aa", 2, 0, 0) ; 343de76a5adSDamjan Jovanovic result &= testSubstring("a", 0, 1, "a", 0, 1, 0) ; 344de76a5adSDamjan Jovanovic result &= testSubstring("ab", 0, 2, "ab", 0, 2, 0) ; 345de76a5adSDamjan Jovanovic result &= testSubstring("abc", 1, 2, "abc", 1, 2, 0) ; 346de76a5adSDamjan Jovanovic result &= testSubstring("abcdef", 0, 3, "123abc", 3, 3, 0) ; 347de76a5adSDamjan Jovanovic result &= testSubstring("abcdef", 1, 1, "123abc", 4, 1, 0) ; 348de76a5adSDamjan Jovanovic 349de76a5adSDamjan Jovanovic // substrings below must NOT be equal 350de76a5adSDamjan Jovanovic result &= testSubstring("a", 0, 1, "a", 0, 0, 1) ; 351de76a5adSDamjan Jovanovic result &= testSubstring("aaa", 1, 1, "", 0, 0, 1) ; 352de76a5adSDamjan Jovanovic result &= testSubstring("bbb", 2, 1, "aaa", 2, 1, 1) ; 353de76a5adSDamjan Jovanovic result &= testSubstring("abc", 0, 3, "abc", 0, 2, 1) ; 354de76a5adSDamjan Jovanovic result &= testSubstring("bbc", 1, 2, "bbc", 0, 2, 1) ; 355de76a5adSDamjan Jovanovic 356de76a5adSDamjan Jovanovic // testing with wrong offsets and lengths 357de76a5adSDamjan Jovanovic 358*2f709283SDamjan Jovanovic Assert.assertTrue("compareSubstring()", result) ; 359de76a5adSDamjan Jovanovic } 360de76a5adSDamjan Jovanovic 361de76a5adSDamjan Jovanovic /** 362de76a5adSDamjan Jovanovic * Performs tesing of two substrings. Also testing of opposite 363de76a5adSDamjan Jovanovic * substrings order performed. 364de76a5adSDamjan Jovanovic * @return <code>true</code> if substrings are equal and retruned 365de76a5adSDamjan Jovanovic * value is 0 for both orders, 366de76a5adSDamjan Jovanovic * if substrings are different and expected value 367de76a5adSDamjan Jovanovic * returned for direct order and opposite value returned for 368de76a5adSDamjan Jovanovic * opposite order. 369de76a5adSDamjan Jovanovic */ 370de76a5adSDamjan Jovanovic private boolean testSubstring(String str1, int p1, int len1, 371de76a5adSDamjan Jovanovic String str2, int p2, int len2, int expRes) { 372de76a5adSDamjan Jovanovic 373de76a5adSDamjan Jovanovic boolean ret = true ; 374de76a5adSDamjan Jovanovic 375de76a5adSDamjan Jovanovic int res = -666 ; 376de76a5adSDamjan Jovanovic try { 377de76a5adSDamjan Jovanovic res = oObj.compareSubstring(str1, p1, len1, str2, p2, len2); 378de76a5adSDamjan Jovanovic } catch (java.lang.NullPointerException e) { 379*2f709283SDamjan Jovanovic System.out.println("Exception while method calling occurs :" + e); 380de76a5adSDamjan Jovanovic } 381de76a5adSDamjan Jovanovic 382de76a5adSDamjan Jovanovic if (res != expRes) { 383*2f709283SDamjan Jovanovic System.out.print("Comparing FAILED; return: " + res + ", expected: " + 384de76a5adSDamjan Jovanovic expRes + " "); 385de76a5adSDamjan Jovanovic ret = false ; 386de76a5adSDamjan Jovanovic } else { 387*2f709283SDamjan Jovanovic System.out.print("Comparing OK : "); 388de76a5adSDamjan Jovanovic } 389*2f709283SDamjan Jovanovic System.out.println("('" + str1 + "', " + p1 + ", " + len1 + ", '" + 390de76a5adSDamjan Jovanovic str2 + "', " + p2 + ", " + len2 + ")"); 391de76a5adSDamjan Jovanovic 392de76a5adSDamjan Jovanovic res = -666 ; 393de76a5adSDamjan Jovanovic try { 394de76a5adSDamjan Jovanovic res = oObj.compareSubstring(str2, p2, len2, str1, p1, len1); 395de76a5adSDamjan Jovanovic } catch (java.lang.NullPointerException e) { 396*2f709283SDamjan Jovanovic System.out.println("Exception while method calling occurs :" + e); 397de76a5adSDamjan Jovanovic } 398de76a5adSDamjan Jovanovic 399de76a5adSDamjan Jovanovic if (res != -expRes) { 400*2f709283SDamjan Jovanovic System.out.print("Comparing FAILED; return: " + res + ", expected: " + 401de76a5adSDamjan Jovanovic -expRes + " "); 402de76a5adSDamjan Jovanovic ret = false ; 403de76a5adSDamjan Jovanovic } else { 404*2f709283SDamjan Jovanovic System.out.print("Comparing OK :"); 405de76a5adSDamjan Jovanovic } 406*2f709283SDamjan Jovanovic System.out.println("('" + str2 + "', " + p2 + ", " + len2 + ", '" + 407de76a5adSDamjan Jovanovic str1 + "', " + p1 + ", " + len1 + ")"); 408de76a5adSDamjan Jovanovic 409de76a5adSDamjan Jovanovic return ret ; 410de76a5adSDamjan Jovanovic } 411de76a5adSDamjan Jovanovic 412de76a5adSDamjan Jovanovic /** 413de76a5adSDamjan Jovanovic * Test performed for sets of equal strings and not equal 414de76a5adSDamjan Jovanovic * strings.<p> 415de76a5adSDamjan Jovanovic * 416de76a5adSDamjan Jovanovic * Has <b>OK</b> status if comparings of equal strings 417de76a5adSDamjan Jovanovic * always return 0 and if comparisons of none equal returns 418de76a5adSDamjan Jovanovic * proper value according to lexicographical order . 419de76a5adSDamjan Jovanovic */ 420*2f709283SDamjan Jovanovic @Test 421de76a5adSDamjan Jovanovic public void _compareString() { 422de76a5adSDamjan Jovanovic oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc); 423de76a5adSDamjan Jovanovic boolean result = true ; 424de76a5adSDamjan Jovanovic 425de76a5adSDamjan Jovanovic result &= testString("", "", 0) ; 426de76a5adSDamjan Jovanovic result &= testString("a", "", 1) ; 427de76a5adSDamjan Jovanovic result &= testString("a", "a", 0) ; 428de76a5adSDamjan Jovanovic result &= testString("A", "a", 0) ; 429de76a5adSDamjan Jovanovic result &= testString("b", "a", 1) ; 430de76a5adSDamjan Jovanovic result &= testString("\n", "\n", 0) ; 431de76a5adSDamjan Jovanovic result &= testString("\n", "\t", 1) ; 432de76a5adSDamjan Jovanovic result &= testString("aaa", "aaa", 0) ; 433de76a5adSDamjan Jovanovic result &= testString("aaA", "aaa", 0) ; 434de76a5adSDamjan Jovanovic result &= testString("aaa", "aa", 1) ; 435de76a5adSDamjan Jovanovic result &= testString("ab", "aaa", 1) ; 436de76a5adSDamjan Jovanovic result &= testString("aba", "aa", 1) ; 437de76a5adSDamjan Jovanovic result &= testString("aaa\t\na", "aaa\t\na", 0) ; 438de76a5adSDamjan Jovanovic result &= testString("aaa\t\nb", "aaa\t\na", 1) ; 439de76a5adSDamjan Jovanovic 440*2f709283SDamjan Jovanovic Assert.assertTrue("compareString()", result) ; 441de76a5adSDamjan Jovanovic } 442de76a5adSDamjan Jovanovic 443de76a5adSDamjan Jovanovic /** 444de76a5adSDamjan Jovanovic * Performs tesing of two strings. If the expected value is not 0 445de76a5adSDamjan Jovanovic * (i.e. strings are not equal), then also testing of opposite 446de76a5adSDamjan Jovanovic * strings order performed. 447de76a5adSDamjan Jovanovic * @return <code>true</code> if strings are equal and retruned 448de76a5adSDamjan Jovanovic * value is 0, if strings are different and expected value 449de76a5adSDamjan Jovanovic * returned for direct order and opposite value returned for 450de76a5adSDamjan Jovanovic * opposite order. 451de76a5adSDamjan Jovanovic */ 452de76a5adSDamjan Jovanovic protected boolean testString(String str1, String str2, int expRes) { 453de76a5adSDamjan Jovanovic if (expRes == 0) return testString(str1, str2, expRes, false) ; 454de76a5adSDamjan Jovanovic return testString(str1, str2, expRes, true) ; 455de76a5adSDamjan Jovanovic } 456de76a5adSDamjan Jovanovic 457de76a5adSDamjan Jovanovic private boolean testString(String str1, String str2, int expRes, 458de76a5adSDamjan Jovanovic boolean testReverse) { 459de76a5adSDamjan Jovanovic 460de76a5adSDamjan Jovanovic boolean ret = true ; 461de76a5adSDamjan Jovanovic 462de76a5adSDamjan Jovanovic int res = -666 ; 463de76a5adSDamjan Jovanovic try { 464de76a5adSDamjan Jovanovic res = oObj.compareString(str1, str2); 465de76a5adSDamjan Jovanovic } catch (java.lang.NullPointerException e) { 466*2f709283SDamjan Jovanovic System.out.println("Exception while method calling occurs :" + e); 467de76a5adSDamjan Jovanovic } 468de76a5adSDamjan Jovanovic 469de76a5adSDamjan Jovanovic if (res == expRes) { 470*2f709283SDamjan Jovanovic System.out.println("Comparing of '" + str1 + "' and '" + str2 + "' OK" ); 471de76a5adSDamjan Jovanovic } else { 472*2f709283SDamjan Jovanovic System.out.println("Comparing of '" + str1 + "' and '" + str2 + 473de76a5adSDamjan Jovanovic "' FAILED; return: " + res + ", expected: " + expRes); 474de76a5adSDamjan Jovanovic ret = false ; 475de76a5adSDamjan Jovanovic } 476de76a5adSDamjan Jovanovic 477de76a5adSDamjan Jovanovic if (!testReverse) return ret ; 478de76a5adSDamjan Jovanovic 479de76a5adSDamjan Jovanovic res = -666 ; 480de76a5adSDamjan Jovanovic try { 481de76a5adSDamjan Jovanovic res = oObj.compareString(str2, str1); 482de76a5adSDamjan Jovanovic } catch (java.lang.NullPointerException e) { 483*2f709283SDamjan Jovanovic System.out.println("Exception while method calling occurs :" + e); 484de76a5adSDamjan Jovanovic } 485de76a5adSDamjan Jovanovic 486de76a5adSDamjan Jovanovic if (res == -expRes) { 487*2f709283SDamjan Jovanovic System.out.println("Comparing of '" + str2 + "' and '" + str1 + "' OK" ); 488de76a5adSDamjan Jovanovic } else { 489*2f709283SDamjan Jovanovic System.out.println("Comparing of '" + str2 + "' and '" + str1 + 490de76a5adSDamjan Jovanovic "' FAILED; return: " + res + ", expected: " + -expRes); 491de76a5adSDamjan Jovanovic ret = false ; 492de76a5adSDamjan Jovanovic } 493de76a5adSDamjan Jovanovic 494de76a5adSDamjan Jovanovic return ret ; 495de76a5adSDamjan Jovanovic } 496de76a5adSDamjan Jovanovic } 497