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 java.text.Collator; 27de76a5adSDamjan Jovanovic 28de76a5adSDamjan Jovanovic import com.sun.star.i18n.CollatorOptions; 29de76a5adSDamjan Jovanovic import com.sun.star.i18n.XCollator; 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.AfterClass; 34*2f709283SDamjan Jovanovic import org.junit.Before; 35*2f709283SDamjan Jovanovic import org.junit.BeforeClass; 36*2f709283SDamjan Jovanovic import org.junit.Assert; 37*2f709283SDamjan Jovanovic import org.junit.Test; 38*2f709283SDamjan Jovanovic import org.openoffice.test.uno.UnoApp; 39de76a5adSDamjan Jovanovic 40de76a5adSDamjan Jovanovic /** 41de76a5adSDamjan Jovanovic * Testing <code>com.sun.star.i18n.XCollator</code> 42de76a5adSDamjan Jovanovic * interface methods : 43de76a5adSDamjan Jovanovic * <ul> 44de76a5adSDamjan Jovanovic * <li><code> compareSubstring()</code></li> 45de76a5adSDamjan Jovanovic * <li><code> compareString()</code></li> 46de76a5adSDamjan Jovanovic * <li><code> loadDefaultCollator()</code></li> 47de76a5adSDamjan Jovanovic * <li><code> loadCollatorAlgorithm()</code></li> 48de76a5adSDamjan Jovanovic * <li><code> listCollatorAlgorithms()</code></li> 49de76a5adSDamjan Jovanovic * <li><code> loadCollatorAlgorithmWithEndUserOption()</code></li> 50de76a5adSDamjan Jovanovic * <li><code> listCollatorOptions()</code></li> 51de76a5adSDamjan Jovanovic * </ul> <p> 52de76a5adSDamjan Jovanovic * Test is <b> NOT </b> multithread compliant. <p> 53de76a5adSDamjan Jovanovic * @see com.sun.star.i18n.XCollator 54de76a5adSDamjan Jovanovic */ 55*2f709283SDamjan Jovanovic public class XCollatorTest { 56*2f709283SDamjan Jovanovic private static final UnoApp app = new UnoApp(); 57*2f709283SDamjan Jovanovic 58*2f709283SDamjan Jovanovic private XComponentContext xContext = null; 59*2f709283SDamjan Jovanovic private XCollator oObj = null; 60de76a5adSDamjan Jovanovic private String[] alg = null ; 61de76a5adSDamjan Jovanovic private int[] opt = null ; 62de76a5adSDamjan Jovanovic Locale loc = new Locale("en", "EN", ""); 63de76a5adSDamjan Jovanovic 64*2f709283SDamjan Jovanovic // setup and close connections 65*2f709283SDamjan Jovanovic @BeforeClass 66*2f709283SDamjan Jovanovic public static void setUpConnection() throws Exception 67*2f709283SDamjan Jovanovic { 68*2f709283SDamjan Jovanovic app.start(); 69*2f709283SDamjan Jovanovic } 70*2f709283SDamjan Jovanovic 71*2f709283SDamjan Jovanovic @AfterClass 72*2f709283SDamjan Jovanovic public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception 73*2f709283SDamjan Jovanovic { 74*2f709283SDamjan Jovanovic app.close(); 75*2f709283SDamjan Jovanovic } 76*2f709283SDamjan Jovanovic 77*2f709283SDamjan Jovanovic @Before 78*2f709283SDamjan Jovanovic public void before() throws Exception, java.lang.Exception 79*2f709283SDamjan Jovanovic { 80*2f709283SDamjan Jovanovic xContext = app.getComponentContext(); 81*2f709283SDamjan Jovanovic final Object object = xContext.getServiceManager().createInstanceWithContext("com.sun.star.i18n.Collator", xContext); 82*2f709283SDamjan Jovanovic oObj = UnoRuntime.queryInterface(XCollator.class, object); 83*2f709283SDamjan Jovanovic alg = oObj.listCollatorAlgorithms(loc); 84*2f709283SDamjan Jovanovic } 85*2f709283SDamjan Jovanovic 86de76a5adSDamjan Jovanovic /** 87de76a5adSDamjan Jovanovic * Just retrieves a list of algorithms. <p> 88de76a5adSDamjan Jovanovic * Has <b>OK</b> status if non-zero length array returned. 89de76a5adSDamjan Jovanovic */ 90*2f709283SDamjan Jovanovic @Test 91de76a5adSDamjan Jovanovic public void _listCollatorAlgorithms() { 92*2f709283SDamjan Jovanovic String[] algorithms = oObj.listCollatorAlgorithms(loc) ; 93*2f709283SDamjan Jovanovic System.out.println("Collator algorithms :"); 94*2f709283SDamjan Jovanovic if (algorithms != null) { 95de76a5adSDamjan Jovanovic for (int i = 0; i < alg.length; i++) { 96*2f709283SDamjan Jovanovic System.out.println(" '" + algorithms[i] + "'") ; 97de76a5adSDamjan Jovanovic } 98*2f709283SDamjan Jovanovic Assert.assertTrue("listCollatorAlgorithms()", algorithms.length > 0) ; 99de76a5adSDamjan Jovanovic } else { 100*2f709283SDamjan Jovanovic Assert.fail("listCollatorAlgorithms()"); 101de76a5adSDamjan Jovanovic } 102de76a5adSDamjan Jovanovic } 103de76a5adSDamjan Jovanovic 104de76a5adSDamjan Jovanovic /** 105de76a5adSDamjan Jovanovic * Just gets a list of options for some collator. <p> 106de76a5adSDamjan Jovanovic * Has <b>OK</b> status if not null value returned.<p> 107de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 108de76a5adSDamjan Jovanovic * <ul> 109de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 110de76a5adSDamjan Jovanovic * algorithm name. </li> 111de76a5adSDamjan Jovanovic * </ul> 112de76a5adSDamjan Jovanovic */ 113*2f709283SDamjan Jovanovic @Test 114de76a5adSDamjan Jovanovic public void _listCollatorOptions() { 115de76a5adSDamjan Jovanovic opt = oObj.listCollatorOptions(alg[0]) ; 116*2f709283SDamjan Jovanovic System.out.println("Collator '" + alg[0] + "' options :"); 117de76a5adSDamjan Jovanovic if (opt != null) { 118de76a5adSDamjan Jovanovic for (int i = 0; i < opt.length; i++) { 119*2f709283SDamjan Jovanovic System.out.println(" " + opt[i]) ; 120de76a5adSDamjan Jovanovic } 121*2f709283SDamjan Jovanovic Assert.assertTrue("listCollatorOptions()", true) ; 122de76a5adSDamjan Jovanovic } else { 123*2f709283SDamjan Jovanovic Assert.fail("listCollatorOptions()") ; 124de76a5adSDamjan Jovanovic } 125de76a5adSDamjan Jovanovic } 126de76a5adSDamjan Jovanovic 127de76a5adSDamjan Jovanovic /** 128de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 129de76a5adSDamjan Jovanovic * compares strings.<p> 130de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 131de76a5adSDamjan Jovanovic */ 132*2f709283SDamjan Jovanovic @Test 133de76a5adSDamjan Jovanovic public void _loadDefaultCollator() { 134de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 0); 135de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") != 0; 136de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 137de76a5adSDamjan Jovanovic CollatorOptions.CollatorOptions_IGNORE_CASE); 138de76a5adSDamjan Jovanovic res &= oObj.compareString("a", "A") == 0; 139*2f709283SDamjan Jovanovic Assert.assertTrue("loadDefaultCollator()", res) ; 140de76a5adSDamjan Jovanovic } 141de76a5adSDamjan Jovanovic 142de76a5adSDamjan Jovanovic /** 143de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 144de76a5adSDamjan Jovanovic * compares strings.<p> 145de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 146de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 147de76a5adSDamjan Jovanovic * <ul> 148de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 149de76a5adSDamjan Jovanovic * algorithm name. </li> 150de76a5adSDamjan Jovanovic * </ul> 151de76a5adSDamjan Jovanovic */ 152*2f709283SDamjan Jovanovic @Test 153de76a5adSDamjan Jovanovic public void _loadCollatorAlgorithm() { 154de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithm(alg[0], loc, 155de76a5adSDamjan Jovanovic CollatorOptions.CollatorOptions_IGNORE_CASE); 156de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") == 0; 157de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithm(alg[0], loc, 0); 158de76a5adSDamjan Jovanovic res &= oObj.compareString("a", "A") != 0; 159*2f709283SDamjan Jovanovic Assert.assertTrue("loadCollatorAlgorithm()", res); 160de76a5adSDamjan Jovanovic } 161de76a5adSDamjan Jovanovic 162de76a5adSDamjan Jovanovic /** 163de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 164de76a5adSDamjan Jovanovic * compares strings.<p> 165de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 166de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 167de76a5adSDamjan Jovanovic * <ul> 168de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 169de76a5adSDamjan Jovanovic * algorithm name. </li> 170de76a5adSDamjan Jovanovic * </ul> 171de76a5adSDamjan Jovanovic */ 172*2f709283SDamjan Jovanovic @Test 173de76a5adSDamjan Jovanovic public void _loadCollatorAlgorithmWithEndUserOption() { 174de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithmWithEndUserOption(alg[0], loc, 175de76a5adSDamjan Jovanovic new int[] {0}); 176de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") != 0; 177de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithmWithEndUserOption(alg[0], loc, 178de76a5adSDamjan Jovanovic new int[] {CollatorOptions.CollatorOptions_IGNORE_CASE}); 179de76a5adSDamjan Jovanovic res = oObj.compareString("A", "a") == 0; 180*2f709283SDamjan Jovanovic Assert.assertTrue("loadCollatorAlgorithmWithEndUserOption()", res); 181de76a5adSDamjan Jovanovic } 182de76a5adSDamjan Jovanovic 183de76a5adSDamjan Jovanovic /** 184de76a5adSDamjan Jovanovic * Test is performed for locales : en, ru, ja, zh, ko. 185de76a5adSDamjan Jovanovic * Default collator is loaded for each locale. Then collation 186de76a5adSDamjan Jovanovic * is performed for different combination of symbols from range of 187de76a5adSDamjan Jovanovic * this locale.<p> 188de76a5adSDamjan Jovanovic * Has <b>OK</b> status if comparing of different strings 189de76a5adSDamjan Jovanovic * returns not 0 value, then comparing in the opposite 190de76a5adSDamjan Jovanovic * order returns value with opposite sign, and comparing 191de76a5adSDamjan Jovanovic * of two equal strings returns 0. The such comparing is performed 192de76a5adSDamjan Jovanovic * for one character strings. 193de76a5adSDamjan Jovanovic */ 194*2f709283SDamjan Jovanovic @Test 195de76a5adSDamjan Jovanovic public void _compareSubstring() { 196de76a5adSDamjan Jovanovic boolean result = true ; 197de76a5adSDamjan Jovanovic char[] chars = new char[2] ; 198de76a5adSDamjan Jovanovic Collator col = null ; 199de76a5adSDamjan Jovanovic 200*2f709283SDamjan Jovanovic System.out.println(" #### Testing English locale ####") ; 201de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 0) ; 202de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("en", "EN")) ; 203de76a5adSDamjan Jovanovic for (char ch = 0x0020; ch < 0x007F; ch ++) { 204de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 205de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 206de76a5adSDamjan Jovanovic } 207de76a5adSDamjan Jovanovic 208*2f709283SDamjan Jovanovic System.out.println(" #### Testing Russian locale ####") ; 209de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 210de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ru", "RU", ""), 0) ; 211de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ru", "RU")) ; 212de76a5adSDamjan Jovanovic for (char ch = 0x0410; ch < 0x0450; ch ++) { 213de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 214de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 215de76a5adSDamjan Jovanovic } 216de76a5adSDamjan Jovanovic 217*2f709283SDamjan Jovanovic System.out.println(" #### Testing Japan locale ####") ; 218de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 219de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ja", "JP", ""), 0) ; 220de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ja", "JP")) ; 221de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 222de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 223de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 224de76a5adSDamjan Jovanovic } 225de76a5adSDamjan Jovanovic 226*2f709283SDamjan Jovanovic System.out.println(" #### Testing China locale ####") ; 227de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("zh", "CN", ""), 0) ; 228de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("zh", "CN")) ; 229de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 230de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 231de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 232de76a5adSDamjan Jovanovic } 233de76a5adSDamjan Jovanovic 234*2f709283SDamjan Jovanovic System.out.println(" #### Testing Korean locale ####") ; 235de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("ko", "KR", ""), 0) ; 236de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ko", "KR")) ; 237de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 238de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 239de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 240de76a5adSDamjan Jovanovic } 241de76a5adSDamjan Jovanovic 242*2f709283SDamjan Jovanovic Assert.assertTrue("compareSubstring()", result) ; 243de76a5adSDamjan Jovanovic } 244de76a5adSDamjan Jovanovic 245de76a5adSDamjan Jovanovic /** 246de76a5adSDamjan Jovanovic * Test is performed for locales : en, ru, ja, zh, ko. 247de76a5adSDamjan Jovanovic * Default collator is loaded for each locale. Then collation 248de76a5adSDamjan Jovanovic * is performed for different combination of symbols from range of 249de76a5adSDamjan Jovanovic * this locale.<p> 250de76a5adSDamjan Jovanovic * Has <b>OK</b> status if comparing of different strings 251de76a5adSDamjan Jovanovic * returns not 0 value, then comparing in the opposite 252de76a5adSDamjan Jovanovic * order returns value with opposite sign, and comparing 253de76a5adSDamjan Jovanovic * of two equal strings returns 0. The such comparing is performed 254de76a5adSDamjan Jovanovic * for one character strings. 255de76a5adSDamjan Jovanovic */ 256*2f709283SDamjan Jovanovic @Test 257de76a5adSDamjan Jovanovic public void _compareString() { 258de76a5adSDamjan Jovanovic boolean result = true ; 259de76a5adSDamjan Jovanovic char[] chars = new char[2] ; 260de76a5adSDamjan Jovanovic Collator col = null ; 261*2f709283SDamjan Jovanovic System.out.println(" #### Testing English locale ####") ; 262de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 263de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("en", "EN", ""), 0) ; 264de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("en", "EN")) ; 265de76a5adSDamjan Jovanovic for (char ch = 0x0020; ch < 0x007F; ch ++) { 266de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 267de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 268de76a5adSDamjan Jovanovic } 269de76a5adSDamjan Jovanovic 270*2f709283SDamjan Jovanovic System.out.println(" #### Testing Russian locale ####") ; 271de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 272de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ru", "RU", ""), 0) ; 273de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ru", "RU")) ; 274de76a5adSDamjan Jovanovic for (char ch = 0x0410; ch < 0x0450; ch ++) { 275de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 276de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 277de76a5adSDamjan Jovanovic } 278de76a5adSDamjan Jovanovic 279*2f709283SDamjan Jovanovic System.out.println(" #### Testing Japan locale ####") ; 280de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 281de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ja", "JP", ""), 0) ; 282de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ja", "JP")) ; 283de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 284de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 285de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 286de76a5adSDamjan Jovanovic } 287de76a5adSDamjan Jovanovic 288*2f709283SDamjan Jovanovic System.out.println(" #### Testing China locale ####") ; 289de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("zh", "CN", ""), 0) ; 290de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("zh", "CN")) ; 291de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 292de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 293de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 294de76a5adSDamjan Jovanovic } 295de76a5adSDamjan Jovanovic 296*2f709283SDamjan Jovanovic System.out.println(" #### Testing Korean locale ####") ; 297de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("ko", "KR", ""), 0) ; 298de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ko", "KR")) ; 299de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 300de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 301de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 302de76a5adSDamjan Jovanovic } 303de76a5adSDamjan Jovanovic 304*2f709283SDamjan Jovanovic Assert.assertTrue("compareString()", result) ; 305de76a5adSDamjan Jovanovic } 306de76a5adSDamjan Jovanovic 307de76a5adSDamjan Jovanovic /** 308de76a5adSDamjan Jovanovic * Testing compareString() method. At first method is testing single chars 309de76a5adSDamjan Jovanovic * comparing, then strings comparing. 310de76a5adSDamjan Jovanovic * @param locChar sequence of at list two characters of a given locale 311de76a5adSDamjan Jovanovic * to be used in comparing. 312de76a5adSDamjan Jovanovic * @param col Collator for a given locale 313de76a5adSDamjan Jovanovic * @return true if: 314de76a5adSDamjan Jovanovic * <ol> 315de76a5adSDamjan Jovanovic * <li> if comparing of two identical characters returns zero</li> 316de76a5adSDamjan Jovanovic * <li> if comparing of two different characters returns non zero</li> 317de76a5adSDamjan Jovanovic * <li> if comparing of two identical strings, composed of given chars 318de76a5adSDamjan Jovanovic * returns zero</li> 319de76a5adSDamjan Jovanovic * <li> if comparing of two different strings, composed of given chars 320de76a5adSDamjan Jovanovic * returns non zero</li> 321de76a5adSDamjan Jovanovic * </ol> 322de76a5adSDamjan Jovanovic */ 323de76a5adSDamjan Jovanovic public boolean testCompareString(char[] locChar, Collator col) { 324de76a5adSDamjan Jovanovic boolean result = true; 325de76a5adSDamjan Jovanovic int res; 326de76a5adSDamjan Jovanovic String msg = ""; 327de76a5adSDamjan Jovanovic 328de76a5adSDamjan Jovanovic String char0 = "_"+new String(new char[] {locChar[0]}); 329de76a5adSDamjan Jovanovic String char1 = "_"+new String(new char[] {locChar[1]}); 330de76a5adSDamjan Jovanovic res = oObj.compareString(char0 , char0) ; 331de76a5adSDamjan Jovanovic if (res != 0) { 332de76a5adSDamjan Jovanovic msg += " Testing collation of single equal characters (" 333de76a5adSDamjan Jovanovic + toUnicode(char0) + ") ... FAILED\n" ; 334de76a5adSDamjan Jovanovic } 335de76a5adSDamjan Jovanovic result &= res == 0 ; 336de76a5adSDamjan Jovanovic res = oObj.compareString(char0, char1) ; 337de76a5adSDamjan Jovanovic if (res == 0) { 338de76a5adSDamjan Jovanovic msg += " Testing collation of single different" + 339de76a5adSDamjan Jovanovic " characters (" + toUnicode(char0+char1) + 340de76a5adSDamjan Jovanovic ") ... FAILED (0 returned)\n" ; 341de76a5adSDamjan Jovanovic msg += " Java collator returned " + 342de76a5adSDamjan Jovanovic col.compare(char0, char1) + "\n" ; 343de76a5adSDamjan Jovanovic result = false ; 344de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 0 345de76a5adSDamjan Jovanovic res += oObj.compareString(char1, char0) ; 346de76a5adSDamjan Jovanovic if (res != 0) { 347de76a5adSDamjan Jovanovic msg += " Testing collation of single different" + 348de76a5adSDamjan Jovanovic " characters (" + toUnicode(char0+char1) + 349de76a5adSDamjan Jovanovic ") ... FAILED\n" ; 350de76a5adSDamjan Jovanovic } 351de76a5adSDamjan Jovanovic result &= res == 0 ; 352de76a5adSDamjan Jovanovic } 353de76a5adSDamjan Jovanovic 354de76a5adSDamjan Jovanovic String str1 = new String(new char[] {locChar[0], locChar[0], 355de76a5adSDamjan Jovanovic locChar[1], locChar[1], locChar[1]}) ; 356de76a5adSDamjan Jovanovic String str2 = new String(new char[] {locChar[0], locChar[0], 357de76a5adSDamjan Jovanovic locChar[0], locChar[1], locChar[1]}) ; 358de76a5adSDamjan Jovanovic 359de76a5adSDamjan Jovanovic res = oObj.compareString(str1 , str1) ; 360de76a5adSDamjan Jovanovic if (res != 0) { 361de76a5adSDamjan Jovanovic msg += " Testing collation of equal strings (" + 362de76a5adSDamjan Jovanovic toUnicode(str1) + ") ... FAILED\n" ; 363de76a5adSDamjan Jovanovic } 364de76a5adSDamjan Jovanovic result &= res == 0 ; 365de76a5adSDamjan Jovanovic res = oObj.compareString(str1, str2) ; 366de76a5adSDamjan Jovanovic if (res == 0) { 367de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 368de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 369de76a5adSDamjan Jovanovic ")) ... FAILED (0 returned)\n" ; 370de76a5adSDamjan Jovanovic msg += " Java collator returned " + 371de76a5adSDamjan Jovanovic col.compare(str1, str2) + "\n" ; 372de76a5adSDamjan Jovanovic result = false ; 373de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 374de76a5adSDamjan Jovanovic res += oObj.compareString(str2, str1) ; 375de76a5adSDamjan Jovanovic if (res != 0) { 376de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 377de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 378de76a5adSDamjan Jovanovic ")) ... FAILED\n" ; 379de76a5adSDamjan Jovanovic } 380de76a5adSDamjan Jovanovic result &= res == 0 ; 381de76a5adSDamjan Jovanovic } 382de76a5adSDamjan Jovanovic 383de76a5adSDamjan Jovanovic if (!result) { 384*2f709283SDamjan Jovanovic System.out.println(msg) ; 385de76a5adSDamjan Jovanovic } 386de76a5adSDamjan Jovanovic return result ; 387de76a5adSDamjan Jovanovic } 388de76a5adSDamjan Jovanovic 389de76a5adSDamjan Jovanovic /** 390de76a5adSDamjan Jovanovic * Testing compareSubstring() method. Method is testing substrings comparing. 391de76a5adSDamjan Jovanovic * @param locChar sequence of at list two characters of a given locale 392de76a5adSDamjan Jovanovic * to be used in comparing. 393de76a5adSDamjan Jovanovic * @param col Collator for a given locale 394de76a5adSDamjan Jovanovic * @return true if: 395de76a5adSDamjan Jovanovic * <ol> 396de76a5adSDamjan Jovanovic * <li> if comparing of two identical substrings of strings, composed 397de76a5adSDamjan Jovanovic * of given chars returns zero</li> 398de76a5adSDamjan Jovanovic * <li> if comparing of two different substrings of strings, composed 399de76a5adSDamjan Jovanovic * of given chars returns non zero</li> 400de76a5adSDamjan Jovanovic * </ol> 401de76a5adSDamjan Jovanovic */ 402de76a5adSDamjan Jovanovic public boolean testCompareSubstring(char[] locChar, Collator col) { 403de76a5adSDamjan Jovanovic boolean result = true ; 404de76a5adSDamjan Jovanovic int res ; 405de76a5adSDamjan Jovanovic String msg = "" ; 406de76a5adSDamjan Jovanovic 407de76a5adSDamjan Jovanovic String str1 = new String(new char[] {locChar[0], locChar[0], 408de76a5adSDamjan Jovanovic locChar[1], locChar[1], locChar[1]}) ; 409de76a5adSDamjan Jovanovic String str2 = new String(new char[] {locChar[0], locChar[0], 410de76a5adSDamjan Jovanovic locChar[0], locChar[1], locChar[1]}) ; 411de76a5adSDamjan Jovanovic 412de76a5adSDamjan Jovanovic res = oObj.compareSubstring(str1, 1, 2 , str2, 2, 2) ; 413de76a5adSDamjan Jovanovic if (res != 0) { 414de76a5adSDamjan Jovanovic msg += " Testing collation of equal substrings (" + 415de76a5adSDamjan Jovanovic toUnicode(str1) + ") ... FAILED\n" ; 416de76a5adSDamjan Jovanovic } 417de76a5adSDamjan Jovanovic result &= res == 0 ; 418de76a5adSDamjan Jovanovic res = oObj.compareSubstring(str1, 1, 2, str2, 1, 2) ; 419de76a5adSDamjan Jovanovic if (res == 0) { 420de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 421de76a5adSDamjan Jovanovic toUnicode(str1.substring(1, 3)) + "),(" + 422de76a5adSDamjan Jovanovic toUnicode(str2.substring(1, 3)) 423de76a5adSDamjan Jovanovic + ")) ... FAILED (0 returned)\n" ; 424de76a5adSDamjan Jovanovic msg += " Java collator returned " + col.compare 425de76a5adSDamjan Jovanovic (str1.substring(1, 3), str2.substring(1, 3)) + "\n" ; 426de76a5adSDamjan Jovanovic result = false ; 427de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 428de76a5adSDamjan Jovanovic res += oObj.compareSubstring(str2, 1, 2, str1, 1, 2) ; 429de76a5adSDamjan Jovanovic if (res != 0) { 430de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 431de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 432de76a5adSDamjan Jovanovic ")) ... FAILED\n" ; 433de76a5adSDamjan Jovanovic } 434de76a5adSDamjan Jovanovic result &= res == 0 ; 435de76a5adSDamjan Jovanovic } 436de76a5adSDamjan Jovanovic 437de76a5adSDamjan Jovanovic if (!result) { 438*2f709283SDamjan Jovanovic System.out.println(msg) ; 439de76a5adSDamjan Jovanovic } 440de76a5adSDamjan Jovanovic return result ; 441de76a5adSDamjan Jovanovic } 442de76a5adSDamjan Jovanovic 443de76a5adSDamjan Jovanovic /** 444de76a5adSDamjan Jovanovic * Transforms string to unicode hex codes. 445de76a5adSDamjan Jovanovic * @param str String to be transformed 446de76a5adSDamjan Jovanovic */ 447de76a5adSDamjan Jovanovic public String toUnicode(String str) { 448de76a5adSDamjan Jovanovic char[] chars = str.toCharArray() ; 449de76a5adSDamjan Jovanovic String res = "" ; 450de76a5adSDamjan Jovanovic for (int i = 0; i < chars.length; i++) { 451de76a5adSDamjan Jovanovic if (i != 0) res += "," ; 452de76a5adSDamjan Jovanovic res += Integer.toHexString(chars[i]) ; 453de76a5adSDamjan Jovanovic } 454de76a5adSDamjan Jovanovic return res ; 455de76a5adSDamjan Jovanovic } 456de76a5adSDamjan Jovanovic 457de76a5adSDamjan Jovanovic } 458