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 242f709283SDamjan Jovanovic package api.i18n; 25de76a5adSDamjan Jovanovic 26de76a5adSDamjan Jovanovic import java.text.Collator; 27*6438e1d6SDamjan Jovanovic import java.util.Arrays; 28*6438e1d6SDamjan Jovanovic import java.util.Collection; 29de76a5adSDamjan Jovanovic 30de76a5adSDamjan Jovanovic import com.sun.star.i18n.CollatorOptions; 31de76a5adSDamjan Jovanovic import com.sun.star.i18n.XCollator; 32de76a5adSDamjan Jovanovic import com.sun.star.lang.Locale; 332f709283SDamjan Jovanovic import com.sun.star.uno.UnoRuntime; 342f709283SDamjan Jovanovic import com.sun.star.uno.XComponentContext; 352f709283SDamjan Jovanovic import org.junit.AfterClass; 362f709283SDamjan Jovanovic import org.junit.Before; 372f709283SDamjan Jovanovic import org.junit.BeforeClass; 382f709283SDamjan Jovanovic import org.junit.Assert; 392f709283SDamjan Jovanovic import org.junit.Test; 40*6438e1d6SDamjan Jovanovic import org.junit.runner.RunWith; 41*6438e1d6SDamjan Jovanovic import org.junit.runners.Parameterized; 42*6438e1d6SDamjan Jovanovic import org.junit.runners.Parameterized.Parameters; 432f709283SDamjan Jovanovic import org.openoffice.test.uno.UnoApp; 44de76a5adSDamjan Jovanovic 45de76a5adSDamjan Jovanovic /** 46de76a5adSDamjan Jovanovic * Testing <code>com.sun.star.i18n.XCollator</code> 47de76a5adSDamjan Jovanovic * interface methods : 48de76a5adSDamjan Jovanovic * <ul> 49de76a5adSDamjan Jovanovic * <li><code> compareSubstring()</code></li> 50de76a5adSDamjan Jovanovic * <li><code> compareString()</code></li> 51de76a5adSDamjan Jovanovic * <li><code> loadDefaultCollator()</code></li> 52de76a5adSDamjan Jovanovic * <li><code> loadCollatorAlgorithm()</code></li> 53de76a5adSDamjan Jovanovic * <li><code> listCollatorAlgorithms()</code></li> 54de76a5adSDamjan Jovanovic * <li><code> loadCollatorAlgorithmWithEndUserOption()</code></li> 55de76a5adSDamjan Jovanovic * <li><code> listCollatorOptions()</code></li> 56de76a5adSDamjan Jovanovic * </ul> <p> 57de76a5adSDamjan Jovanovic * Test is <b> NOT </b> multithread compliant. <p> 58de76a5adSDamjan Jovanovic * @see com.sun.star.i18n.XCollator 59de76a5adSDamjan Jovanovic */ 60*6438e1d6SDamjan Jovanovic @RunWith(Parameterized.class) 612f709283SDamjan Jovanovic public class XCollatorTest { 622f709283SDamjan Jovanovic private static final UnoApp app = new UnoApp(); 632f709283SDamjan Jovanovic 64*6438e1d6SDamjan Jovanovic private String collatorServiceName; 652f709283SDamjan Jovanovic private XComponentContext xContext = null; 662f709283SDamjan Jovanovic private XCollator oObj = null; 67de76a5adSDamjan Jovanovic private String[] alg = null ; 68de76a5adSDamjan Jovanovic private int[] opt = null ; 69de76a5adSDamjan Jovanovic Locale loc = new Locale("en", "EN", ""); 70de76a5adSDamjan Jovanovic 712f709283SDamjan Jovanovic // setup and close connections 722f709283SDamjan Jovanovic @BeforeClass setUpConnection()732f709283SDamjan Jovanovic public static void setUpConnection() throws Exception 742f709283SDamjan Jovanovic { 752f709283SDamjan Jovanovic app.start(); 762f709283SDamjan Jovanovic } 772f709283SDamjan Jovanovic 782f709283SDamjan Jovanovic @AfterClass tearDownConnection()792f709283SDamjan Jovanovic public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception 802f709283SDamjan Jovanovic { 812f709283SDamjan Jovanovic app.close(); 822f709283SDamjan Jovanovic } 832f709283SDamjan Jovanovic 84*6438e1d6SDamjan Jovanovic @Parameters(name = "{0}") data()85*6438e1d6SDamjan Jovanovic public static Collection<Object[]> data() { 86*6438e1d6SDamjan Jovanovic return Arrays.asList(new Object[][]{ 87*6438e1d6SDamjan Jovanovic {"com.sun.star.i18n.Collator"}, 88*6438e1d6SDamjan Jovanovic {"com.sun.star.i18n.ChapterCollator"} 89*6438e1d6SDamjan Jovanovic }); 90*6438e1d6SDamjan Jovanovic } 91*6438e1d6SDamjan Jovanovic XCollatorTest(String collatorServiceName)92*6438e1d6SDamjan Jovanovic public XCollatorTest(String collatorServiceName) { 93*6438e1d6SDamjan Jovanovic this.collatorServiceName = collatorServiceName; 94*6438e1d6SDamjan Jovanovic } 95*6438e1d6SDamjan Jovanovic 962f709283SDamjan Jovanovic @Before before()972f709283SDamjan Jovanovic public void before() throws Exception, java.lang.Exception 982f709283SDamjan Jovanovic { 992f709283SDamjan Jovanovic xContext = app.getComponentContext(); 100*6438e1d6SDamjan Jovanovic final Object object = xContext.getServiceManager().createInstanceWithContext(collatorServiceName, xContext); 1012f709283SDamjan Jovanovic oObj = UnoRuntime.queryInterface(XCollator.class, object); 1022f709283SDamjan Jovanovic alg = oObj.listCollatorAlgorithms(loc); 1032f709283SDamjan Jovanovic } 1042f709283SDamjan Jovanovic 105de76a5adSDamjan Jovanovic /** 106de76a5adSDamjan Jovanovic * Just retrieves a list of algorithms. <p> 107de76a5adSDamjan Jovanovic * Has <b>OK</b> status if non-zero length array returned. 108de76a5adSDamjan Jovanovic */ 1092f709283SDamjan Jovanovic @Test _listCollatorAlgorithms()110de76a5adSDamjan Jovanovic public void _listCollatorAlgorithms() { 1112f709283SDamjan Jovanovic String[] algorithms = oObj.listCollatorAlgorithms(loc) ; 1122f709283SDamjan Jovanovic System.out.println("Collator algorithms :"); 1132f709283SDamjan Jovanovic if (algorithms != null) { 114de76a5adSDamjan Jovanovic for (int i = 0; i < alg.length; i++) { 1152f709283SDamjan Jovanovic System.out.println(" '" + algorithms[i] + "'") ; 116de76a5adSDamjan Jovanovic } 1172f709283SDamjan Jovanovic Assert.assertTrue("listCollatorAlgorithms()", algorithms.length > 0) ; 118de76a5adSDamjan Jovanovic } else { 1192f709283SDamjan Jovanovic Assert.fail("listCollatorAlgorithms()"); 120de76a5adSDamjan Jovanovic } 121de76a5adSDamjan Jovanovic } 122de76a5adSDamjan Jovanovic 123de76a5adSDamjan Jovanovic /** 124de76a5adSDamjan Jovanovic * Just gets a list of options for some collator. <p> 125de76a5adSDamjan Jovanovic * Has <b>OK</b> status if not null value returned.<p> 126de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 127de76a5adSDamjan Jovanovic * <ul> 128de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 129de76a5adSDamjan Jovanovic * algorithm name. </li> 130de76a5adSDamjan Jovanovic * </ul> 131de76a5adSDamjan Jovanovic */ 1322f709283SDamjan Jovanovic @Test _listCollatorOptions()133de76a5adSDamjan Jovanovic public void _listCollatorOptions() { 134de76a5adSDamjan Jovanovic opt = oObj.listCollatorOptions(alg[0]) ; 1352f709283SDamjan Jovanovic System.out.println("Collator '" + alg[0] + "' options :"); 136de76a5adSDamjan Jovanovic if (opt != null) { 137de76a5adSDamjan Jovanovic for (int i = 0; i < opt.length; i++) { 1382f709283SDamjan Jovanovic System.out.println(" " + opt[i]) ; 139de76a5adSDamjan Jovanovic } 1402f709283SDamjan Jovanovic Assert.assertTrue("listCollatorOptions()", true) ; 141de76a5adSDamjan Jovanovic } else { 1422f709283SDamjan Jovanovic Assert.fail("listCollatorOptions()") ; 143de76a5adSDamjan Jovanovic } 144de76a5adSDamjan Jovanovic } 145de76a5adSDamjan Jovanovic 146de76a5adSDamjan Jovanovic /** 147de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 148de76a5adSDamjan Jovanovic * compares strings.<p> 149de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 150de76a5adSDamjan Jovanovic */ 1512f709283SDamjan Jovanovic @Test _loadDefaultCollator()152de76a5adSDamjan Jovanovic public void _loadDefaultCollator() { 153de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 0); 154de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") != 0; 155de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 156de76a5adSDamjan Jovanovic CollatorOptions.CollatorOptions_IGNORE_CASE); 157de76a5adSDamjan Jovanovic res &= oObj.compareString("a", "A") == 0; 1582f709283SDamjan Jovanovic Assert.assertTrue("loadDefaultCollator()", res) ; 159de76a5adSDamjan Jovanovic } 160de76a5adSDamjan Jovanovic 161de76a5adSDamjan Jovanovic /** 162de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 163de76a5adSDamjan Jovanovic * compares strings.<p> 164de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 165de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 166de76a5adSDamjan Jovanovic * <ul> 167de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 168de76a5adSDamjan Jovanovic * algorithm name. </li> 169de76a5adSDamjan Jovanovic * </ul> 170de76a5adSDamjan Jovanovic */ 1712f709283SDamjan Jovanovic @Test _loadCollatorAlgorithm()172de76a5adSDamjan Jovanovic public void _loadCollatorAlgorithm() { 173de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithm(alg[0], loc, 174de76a5adSDamjan Jovanovic CollatorOptions.CollatorOptions_IGNORE_CASE); 175de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") == 0; 176de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithm(alg[0], loc, 0); 177de76a5adSDamjan Jovanovic res &= oObj.compareString("a", "A") != 0; 1782f709283SDamjan Jovanovic Assert.assertTrue("loadCollatorAlgorithm()", res); 179de76a5adSDamjan Jovanovic } 180de76a5adSDamjan Jovanovic 181de76a5adSDamjan Jovanovic /** 182de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 183de76a5adSDamjan Jovanovic * compares strings.<p> 184de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 185de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 186de76a5adSDamjan Jovanovic * <ul> 187de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 188de76a5adSDamjan Jovanovic * algorithm name. </li> 189de76a5adSDamjan Jovanovic * </ul> 190de76a5adSDamjan Jovanovic */ 1912f709283SDamjan Jovanovic @Test _loadCollatorAlgorithmWithEndUserOption()192de76a5adSDamjan Jovanovic public void _loadCollatorAlgorithmWithEndUserOption() { 193de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithmWithEndUserOption(alg[0], loc, 194de76a5adSDamjan Jovanovic new int[] {0}); 195de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") != 0; 196de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithmWithEndUserOption(alg[0], loc, 197de76a5adSDamjan Jovanovic new int[] {CollatorOptions.CollatorOptions_IGNORE_CASE}); 198de76a5adSDamjan Jovanovic res = oObj.compareString("A", "a") == 0; 1992f709283SDamjan Jovanovic Assert.assertTrue("loadCollatorAlgorithmWithEndUserOption()", res); 200de76a5adSDamjan Jovanovic } 201de76a5adSDamjan Jovanovic 202de76a5adSDamjan Jovanovic /** 203de76a5adSDamjan Jovanovic * Test is performed for locales : en, ru, ja, zh, ko. 204de76a5adSDamjan Jovanovic * Default collator is loaded for each locale. Then collation 205de76a5adSDamjan Jovanovic * is performed for different combination of symbols from range of 206de76a5adSDamjan Jovanovic * this locale.<p> 207de76a5adSDamjan Jovanovic * Has <b>OK</b> status if comparing of different strings 208de76a5adSDamjan Jovanovic * returns not 0 value, then comparing in the opposite 209de76a5adSDamjan Jovanovic * order returns value with opposite sign, and comparing 210de76a5adSDamjan Jovanovic * of two equal strings returns 0. The such comparing is performed 211de76a5adSDamjan Jovanovic * for one character strings. 212de76a5adSDamjan Jovanovic */ 2132f709283SDamjan Jovanovic @Test _compareSubstring()214de76a5adSDamjan Jovanovic public void _compareSubstring() { 215de76a5adSDamjan Jovanovic boolean result = true ; 216de76a5adSDamjan Jovanovic char[] chars = new char[2] ; 217de76a5adSDamjan Jovanovic Collator col = null ; 218de76a5adSDamjan Jovanovic 2192f709283SDamjan Jovanovic System.out.println(" #### Testing English locale ####") ; 220de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 0) ; 221de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("en", "EN")) ; 222de76a5adSDamjan Jovanovic for (char ch = 0x0020; ch < 0x007F; ch ++) { 223de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 224de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 225de76a5adSDamjan Jovanovic } 226de76a5adSDamjan Jovanovic 2272f709283SDamjan Jovanovic System.out.println(" #### Testing Russian locale ####") ; 228de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 229de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ru", "RU", ""), 0) ; 230de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ru", "RU")) ; 231de76a5adSDamjan Jovanovic for (char ch = 0x0410; ch < 0x0450; ch ++) { 232de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 233de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 234de76a5adSDamjan Jovanovic } 235de76a5adSDamjan Jovanovic 2362f709283SDamjan Jovanovic System.out.println(" #### Testing Japan locale ####") ; 237de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 238de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ja", "JP", ""), 0) ; 239de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ja", "JP")) ; 240de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 241de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 242de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 243de76a5adSDamjan Jovanovic } 244de76a5adSDamjan Jovanovic 2452f709283SDamjan Jovanovic System.out.println(" #### Testing China locale ####") ; 246de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("zh", "CN", ""), 0) ; 247de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("zh", "CN")) ; 248de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 249de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 250de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 251de76a5adSDamjan Jovanovic } 252de76a5adSDamjan Jovanovic 2532f709283SDamjan Jovanovic System.out.println(" #### Testing Korean locale ####") ; 254de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("ko", "KR", ""), 0) ; 255de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ko", "KR")) ; 256de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 257de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 258de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 259de76a5adSDamjan Jovanovic } 260de76a5adSDamjan Jovanovic 2612f709283SDamjan Jovanovic Assert.assertTrue("compareSubstring()", result) ; 262de76a5adSDamjan Jovanovic } 263de76a5adSDamjan Jovanovic 264de76a5adSDamjan Jovanovic /** 265de76a5adSDamjan Jovanovic * Test is performed for locales : en, ru, ja, zh, ko. 266de76a5adSDamjan Jovanovic * Default collator is loaded for each locale. Then collation 267de76a5adSDamjan Jovanovic * is performed for different combination of symbols from range of 268de76a5adSDamjan Jovanovic * this locale.<p> 269de76a5adSDamjan Jovanovic * Has <b>OK</b> status if comparing of different strings 270de76a5adSDamjan Jovanovic * returns not 0 value, then comparing in the opposite 271de76a5adSDamjan Jovanovic * order returns value with opposite sign, and comparing 272de76a5adSDamjan Jovanovic * of two equal strings returns 0. The such comparing is performed 273de76a5adSDamjan Jovanovic * for one character strings. 274de76a5adSDamjan Jovanovic */ 2752f709283SDamjan Jovanovic @Test _compareString()276de76a5adSDamjan Jovanovic public void _compareString() { 277de76a5adSDamjan Jovanovic boolean result = true ; 278de76a5adSDamjan Jovanovic char[] chars = new char[2] ; 279de76a5adSDamjan Jovanovic Collator col = null ; 2802f709283SDamjan Jovanovic System.out.println(" #### Testing English locale ####") ; 281de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 282de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("en", "EN", ""), 0) ; 283de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("en", "EN")) ; 284de76a5adSDamjan Jovanovic for (char ch = 0x0020; ch < 0x007F; ch ++) { 285de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 286de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 287de76a5adSDamjan Jovanovic } 288de76a5adSDamjan Jovanovic 2892f709283SDamjan Jovanovic System.out.println(" #### Testing Russian locale ####") ; 290de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 291de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ru", "RU", ""), 0) ; 292de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ru", "RU")) ; 293de76a5adSDamjan Jovanovic for (char ch = 0x0410; ch < 0x0450; ch ++) { 294de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 295de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 296de76a5adSDamjan Jovanovic } 297de76a5adSDamjan Jovanovic 2982f709283SDamjan Jovanovic System.out.println(" #### Testing Japan locale ####") ; 299de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 300de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ja", "JP", ""), 0) ; 301de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ja", "JP")) ; 302de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 303de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 304de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 305de76a5adSDamjan Jovanovic } 306de76a5adSDamjan Jovanovic 3072f709283SDamjan Jovanovic System.out.println(" #### Testing China locale ####") ; 308de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("zh", "CN", ""), 0) ; 309de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("zh", "CN")) ; 310de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 311de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 312de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 313de76a5adSDamjan Jovanovic } 314de76a5adSDamjan Jovanovic 3152f709283SDamjan Jovanovic System.out.println(" #### Testing Korean locale ####") ; 316de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("ko", "KR", ""), 0) ; 317de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ko", "KR")) ; 318de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 319de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 320de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 321de76a5adSDamjan Jovanovic } 322de76a5adSDamjan Jovanovic 3232f709283SDamjan Jovanovic Assert.assertTrue("compareString()", result) ; 324de76a5adSDamjan Jovanovic } 325de76a5adSDamjan Jovanovic 326de76a5adSDamjan Jovanovic /** 327de76a5adSDamjan Jovanovic * Testing compareString() method. At first method is testing single chars 328de76a5adSDamjan Jovanovic * comparing, then strings comparing. 329de76a5adSDamjan Jovanovic * @param locChar sequence of at list two characters of a given locale 330de76a5adSDamjan Jovanovic * to be used in comparing. 331de76a5adSDamjan Jovanovic * @param col Collator for a given locale 332de76a5adSDamjan Jovanovic * @return true if: 333de76a5adSDamjan Jovanovic * <ol> 334de76a5adSDamjan Jovanovic * <li> if comparing of two identical characters returns zero</li> 335de76a5adSDamjan Jovanovic * <li> if comparing of two different characters returns non zero</li> 336de76a5adSDamjan Jovanovic * <li> if comparing of two identical strings, composed of given chars 337de76a5adSDamjan Jovanovic * returns zero</li> 338de76a5adSDamjan Jovanovic * <li> if comparing of two different strings, composed of given chars 339de76a5adSDamjan Jovanovic * returns non zero</li> 340de76a5adSDamjan Jovanovic * </ol> 341de76a5adSDamjan Jovanovic */ testCompareString(char[] locChar, Collator col)342de76a5adSDamjan Jovanovic public boolean testCompareString(char[] locChar, Collator col) { 343de76a5adSDamjan Jovanovic boolean result = true; 344de76a5adSDamjan Jovanovic int res; 345de76a5adSDamjan Jovanovic String msg = ""; 346de76a5adSDamjan Jovanovic 347de76a5adSDamjan Jovanovic String char0 = "_"+new String(new char[] {locChar[0]}); 348de76a5adSDamjan Jovanovic String char1 = "_"+new String(new char[] {locChar[1]}); 349de76a5adSDamjan Jovanovic res = oObj.compareString(char0 , char0) ; 350de76a5adSDamjan Jovanovic if (res != 0) { 351de76a5adSDamjan Jovanovic msg += " Testing collation of single equal characters (" 352de76a5adSDamjan Jovanovic + toUnicode(char0) + ") ... FAILED\n" ; 353de76a5adSDamjan Jovanovic } 354de76a5adSDamjan Jovanovic result &= res == 0 ; 355de76a5adSDamjan Jovanovic res = oObj.compareString(char0, char1) ; 356de76a5adSDamjan Jovanovic if (res == 0) { 357de76a5adSDamjan Jovanovic msg += " Testing collation of single different" + 358de76a5adSDamjan Jovanovic " characters (" + toUnicode(char0+char1) + 359de76a5adSDamjan Jovanovic ") ... FAILED (0 returned)\n" ; 360de76a5adSDamjan Jovanovic msg += " Java collator returned " + 361de76a5adSDamjan Jovanovic col.compare(char0, char1) + "\n" ; 362de76a5adSDamjan Jovanovic result = false ; 363de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 0 364de76a5adSDamjan Jovanovic res += oObj.compareString(char1, char0) ; 365de76a5adSDamjan Jovanovic if (res != 0) { 366de76a5adSDamjan Jovanovic msg += " Testing collation of single different" + 367de76a5adSDamjan Jovanovic " characters (" + toUnicode(char0+char1) + 368de76a5adSDamjan Jovanovic ") ... FAILED\n" ; 369de76a5adSDamjan Jovanovic } 370de76a5adSDamjan Jovanovic result &= res == 0 ; 371de76a5adSDamjan Jovanovic } 372de76a5adSDamjan Jovanovic 373de76a5adSDamjan Jovanovic String str1 = new String(new char[] {locChar[0], locChar[0], 374de76a5adSDamjan Jovanovic locChar[1], locChar[1], locChar[1]}) ; 375de76a5adSDamjan Jovanovic String str2 = new String(new char[] {locChar[0], locChar[0], 376de76a5adSDamjan Jovanovic locChar[0], locChar[1], locChar[1]}) ; 377de76a5adSDamjan Jovanovic 378de76a5adSDamjan Jovanovic res = oObj.compareString(str1 , str1) ; 379de76a5adSDamjan Jovanovic if (res != 0) { 380de76a5adSDamjan Jovanovic msg += " Testing collation of equal strings (" + 381de76a5adSDamjan Jovanovic toUnicode(str1) + ") ... FAILED\n" ; 382de76a5adSDamjan Jovanovic } 383de76a5adSDamjan Jovanovic result &= res == 0 ; 384de76a5adSDamjan Jovanovic res = oObj.compareString(str1, str2) ; 385de76a5adSDamjan Jovanovic if (res == 0) { 386de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 387de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 388de76a5adSDamjan Jovanovic ")) ... FAILED (0 returned)\n" ; 389de76a5adSDamjan Jovanovic msg += " Java collator returned " + 390de76a5adSDamjan Jovanovic col.compare(str1, str2) + "\n" ; 391de76a5adSDamjan Jovanovic result = false ; 392de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 393de76a5adSDamjan Jovanovic res += oObj.compareString(str2, str1) ; 394de76a5adSDamjan Jovanovic if (res != 0) { 395de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 396de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 397de76a5adSDamjan Jovanovic ")) ... FAILED\n" ; 398de76a5adSDamjan Jovanovic } 399de76a5adSDamjan Jovanovic result &= res == 0 ; 400de76a5adSDamjan Jovanovic } 401de76a5adSDamjan Jovanovic 402de76a5adSDamjan Jovanovic if (!result) { 4032f709283SDamjan Jovanovic System.out.println(msg) ; 404de76a5adSDamjan Jovanovic } 405de76a5adSDamjan Jovanovic return result ; 406de76a5adSDamjan Jovanovic } 407de76a5adSDamjan Jovanovic 408de76a5adSDamjan Jovanovic /** 409de76a5adSDamjan Jovanovic * Testing compareSubstring() method. Method is testing substrings comparing. 410de76a5adSDamjan Jovanovic * @param locChar sequence of at list two characters of a given locale 411de76a5adSDamjan Jovanovic * to be used in comparing. 412de76a5adSDamjan Jovanovic * @param col Collator for a given locale 413de76a5adSDamjan Jovanovic * @return true if: 414de76a5adSDamjan Jovanovic * <ol> 415de76a5adSDamjan Jovanovic * <li> if comparing of two identical substrings of strings, composed 416de76a5adSDamjan Jovanovic * of given chars returns zero</li> 417de76a5adSDamjan Jovanovic * <li> if comparing of two different substrings of strings, composed 418de76a5adSDamjan Jovanovic * of given chars returns non zero</li> 419de76a5adSDamjan Jovanovic * </ol> 420de76a5adSDamjan Jovanovic */ testCompareSubstring(char[] locChar, Collator col)421de76a5adSDamjan Jovanovic public boolean testCompareSubstring(char[] locChar, Collator col) { 422de76a5adSDamjan Jovanovic boolean result = true ; 423de76a5adSDamjan Jovanovic int res ; 424de76a5adSDamjan Jovanovic String msg = "" ; 425de76a5adSDamjan Jovanovic 426de76a5adSDamjan Jovanovic String str1 = new String(new char[] {locChar[0], locChar[0], 427de76a5adSDamjan Jovanovic locChar[1], locChar[1], locChar[1]}) ; 428de76a5adSDamjan Jovanovic String str2 = new String(new char[] {locChar[0], locChar[0], 429de76a5adSDamjan Jovanovic locChar[0], locChar[1], locChar[1]}) ; 430de76a5adSDamjan Jovanovic 431de76a5adSDamjan Jovanovic res = oObj.compareSubstring(str1, 1, 2 , str2, 2, 2) ; 432de76a5adSDamjan Jovanovic if (res != 0) { 433de76a5adSDamjan Jovanovic msg += " Testing collation of equal substrings (" + 434de76a5adSDamjan Jovanovic toUnicode(str1) + ") ... FAILED\n" ; 435de76a5adSDamjan Jovanovic } 436de76a5adSDamjan Jovanovic result &= res == 0 ; 437de76a5adSDamjan Jovanovic res = oObj.compareSubstring(str1, 1, 2, str2, 1, 2) ; 438de76a5adSDamjan Jovanovic if (res == 0) { 439de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 440de76a5adSDamjan Jovanovic toUnicode(str1.substring(1, 3)) + "),(" + 441de76a5adSDamjan Jovanovic toUnicode(str2.substring(1, 3)) 442de76a5adSDamjan Jovanovic + ")) ... FAILED (0 returned)\n" ; 443de76a5adSDamjan Jovanovic msg += " Java collator returned " + col.compare 444de76a5adSDamjan Jovanovic (str1.substring(1, 3), str2.substring(1, 3)) + "\n" ; 445de76a5adSDamjan Jovanovic result = false ; 446de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 447de76a5adSDamjan Jovanovic res += oObj.compareSubstring(str2, 1, 2, str1, 1, 2) ; 448de76a5adSDamjan Jovanovic if (res != 0) { 449de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 450de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 451de76a5adSDamjan Jovanovic ")) ... FAILED\n" ; 452de76a5adSDamjan Jovanovic } 453de76a5adSDamjan Jovanovic result &= res == 0 ; 454de76a5adSDamjan Jovanovic } 455de76a5adSDamjan Jovanovic 456de76a5adSDamjan Jovanovic if (!result) { 4572f709283SDamjan Jovanovic System.out.println(msg) ; 458de76a5adSDamjan Jovanovic } 459de76a5adSDamjan Jovanovic return result ; 460de76a5adSDamjan Jovanovic } 461de76a5adSDamjan Jovanovic 462de76a5adSDamjan Jovanovic /** 463de76a5adSDamjan Jovanovic * Transforms string to unicode hex codes. 464de76a5adSDamjan Jovanovic * @param str String to be transformed 465de76a5adSDamjan Jovanovic */ toUnicode(String str)466de76a5adSDamjan Jovanovic public String toUnicode(String str) { 467de76a5adSDamjan Jovanovic char[] chars = str.toCharArray() ; 468de76a5adSDamjan Jovanovic String res = "" ; 469de76a5adSDamjan Jovanovic for (int i = 0; i < chars.length; i++) { 470de76a5adSDamjan Jovanovic if (i != 0) res += "," ; 471de76a5adSDamjan Jovanovic res += Integer.toHexString(chars[i]) ; 472de76a5adSDamjan Jovanovic } 473de76a5adSDamjan Jovanovic return res ; 474de76a5adSDamjan Jovanovic } 475de76a5adSDamjan Jovanovic 476de76a5adSDamjan Jovanovic } 477