1*de76a5adSDamjan Jovanovic /************************************************************** 2*de76a5adSDamjan Jovanovic * 3*de76a5adSDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4*de76a5adSDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5*de76a5adSDamjan Jovanovic * distributed with this work for additional information 6*de76a5adSDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7*de76a5adSDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8*de76a5adSDamjan Jovanovic * "License"); you may not use this file except in compliance 9*de76a5adSDamjan Jovanovic * with the License. You may obtain a copy of the License at 10*de76a5adSDamjan Jovanovic * 11*de76a5adSDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12*de76a5adSDamjan Jovanovic * 13*de76a5adSDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14*de76a5adSDamjan Jovanovic * software distributed under the License is distributed on an 15*de76a5adSDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*de76a5adSDamjan Jovanovic * KIND, either express or implied. See the License for the 17*de76a5adSDamjan Jovanovic * specific language governing permissions and limitations 18*de76a5adSDamjan Jovanovic * under the License. 19*de76a5adSDamjan Jovanovic * 20*de76a5adSDamjan Jovanovic *************************************************************/ 21*de76a5adSDamjan Jovanovic 22*de76a5adSDamjan Jovanovic 23*de76a5adSDamjan Jovanovic 24*de76a5adSDamjan Jovanovic package ifc.i18n; 25*de76a5adSDamjan Jovanovic 26*de76a5adSDamjan Jovanovic import java.text.Collator; 27*de76a5adSDamjan Jovanovic 28*de76a5adSDamjan Jovanovic import lib.MultiMethodTest; 29*de76a5adSDamjan Jovanovic 30*de76a5adSDamjan Jovanovic import com.sun.star.i18n.CollatorOptions; 31*de76a5adSDamjan Jovanovic import com.sun.star.i18n.XCollator; 32*de76a5adSDamjan Jovanovic import com.sun.star.lang.Locale; 33*de76a5adSDamjan Jovanovic 34*de76a5adSDamjan Jovanovic /** 35*de76a5adSDamjan Jovanovic * Testing <code>com.sun.star.i18n.XCollator</code> 36*de76a5adSDamjan Jovanovic * interface methods : 37*de76a5adSDamjan Jovanovic * <ul> 38*de76a5adSDamjan Jovanovic * <li><code> compareSubstring()</code></li> 39*de76a5adSDamjan Jovanovic * <li><code> compareString()</code></li> 40*de76a5adSDamjan Jovanovic * <li><code> loadDefaultCollator()</code></li> 41*de76a5adSDamjan Jovanovic * <li><code> loadCollatorAlgorithm()</code></li> 42*de76a5adSDamjan Jovanovic * <li><code> listCollatorAlgorithms()</code></li> 43*de76a5adSDamjan Jovanovic * <li><code> loadCollatorAlgorithmWithEndUserOption()</code></li> 44*de76a5adSDamjan Jovanovic * <li><code> listCollatorOptions()</code></li> 45*de76a5adSDamjan Jovanovic * </ul> <p> 46*de76a5adSDamjan Jovanovic * Test is <b> NOT </b> multithread compliant. <p> 47*de76a5adSDamjan Jovanovic * @see com.sun.star.i18n.XCollator 48*de76a5adSDamjan Jovanovic */ 49*de76a5adSDamjan Jovanovic public class _XCollator extends MultiMethodTest { 50*de76a5adSDamjan Jovanovic public XCollator oObj = null; 51*de76a5adSDamjan Jovanovic private String[] alg = null ; 52*de76a5adSDamjan Jovanovic private int[] opt = null ; 53*de76a5adSDamjan Jovanovic Locale loc = new Locale("en", "EN", ""); 54*de76a5adSDamjan Jovanovic 55*de76a5adSDamjan Jovanovic /** 56*de76a5adSDamjan Jovanovic * Just retrieves a list of algorithms. <p> 57*de76a5adSDamjan Jovanovic * Has <b>OK</b> status if non-zero length array returned. 58*de76a5adSDamjan Jovanovic */ 59*de76a5adSDamjan Jovanovic public void _listCollatorAlgorithms() { 60*de76a5adSDamjan Jovanovic alg = oObj.listCollatorAlgorithms(loc) ; 61*de76a5adSDamjan Jovanovic log.println("Collator algorithms :"); 62*de76a5adSDamjan Jovanovic if (alg != null) { 63*de76a5adSDamjan Jovanovic for (int i = 0; i < alg.length; i++) { 64*de76a5adSDamjan Jovanovic log.println(" '" + alg[i] + "'") ; 65*de76a5adSDamjan Jovanovic } 66*de76a5adSDamjan Jovanovic tRes.tested("listCollatorAlgorithms()", alg.length > 0) ; 67*de76a5adSDamjan Jovanovic } else { 68*de76a5adSDamjan Jovanovic tRes.tested("listCollatorAlgorithms()", false) ; 69*de76a5adSDamjan Jovanovic } 70*de76a5adSDamjan Jovanovic } 71*de76a5adSDamjan Jovanovic 72*de76a5adSDamjan Jovanovic /** 73*de76a5adSDamjan Jovanovic * Just gets a list of options for some collator. <p> 74*de76a5adSDamjan Jovanovic * Has <b>OK</b> status if not null value returned.<p> 75*de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 76*de76a5adSDamjan Jovanovic * <ul> 77*de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 78*de76a5adSDamjan Jovanovic * algorithm name. </li> 79*de76a5adSDamjan Jovanovic * </ul> 80*de76a5adSDamjan Jovanovic */ 81*de76a5adSDamjan Jovanovic public void _listCollatorOptions() { 82*de76a5adSDamjan Jovanovic requiredMethod("listCollatorAlgorithms()") ; 83*de76a5adSDamjan Jovanovic opt = oObj.listCollatorOptions(alg[0]) ; 84*de76a5adSDamjan Jovanovic log.println("Collator '" + alg[0] + "' options :"); 85*de76a5adSDamjan Jovanovic if (opt != null) { 86*de76a5adSDamjan Jovanovic for (int i = 0; i < opt.length; i++) { 87*de76a5adSDamjan Jovanovic log.println(" " + opt[i]) ; 88*de76a5adSDamjan Jovanovic } 89*de76a5adSDamjan Jovanovic tRes.tested("listCollatorOptions()", true) ; 90*de76a5adSDamjan Jovanovic } else { 91*de76a5adSDamjan Jovanovic tRes.tested("listCollatorOptions()", false) ; 92*de76a5adSDamjan Jovanovic } 93*de76a5adSDamjan Jovanovic } 94*de76a5adSDamjan Jovanovic 95*de76a5adSDamjan Jovanovic /** 96*de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 97*de76a5adSDamjan Jovanovic * compares strings.<p> 98*de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 99*de76a5adSDamjan Jovanovic */ 100*de76a5adSDamjan Jovanovic public void _loadDefaultCollator() { 101*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 0); 102*de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") != 0; 103*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 104*de76a5adSDamjan Jovanovic CollatorOptions.CollatorOptions_IGNORE_CASE); 105*de76a5adSDamjan Jovanovic res &= oObj.compareString("a", "A") == 0; 106*de76a5adSDamjan Jovanovic tRes.tested("loadDefaultCollator()", res) ; 107*de76a5adSDamjan Jovanovic } 108*de76a5adSDamjan Jovanovic 109*de76a5adSDamjan Jovanovic /** 110*de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 111*de76a5adSDamjan Jovanovic * compares strings.<p> 112*de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 113*de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 114*de76a5adSDamjan Jovanovic * <ul> 115*de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 116*de76a5adSDamjan Jovanovic * algorithm name. </li> 117*de76a5adSDamjan Jovanovic * </ul> 118*de76a5adSDamjan Jovanovic */ 119*de76a5adSDamjan Jovanovic public void _loadCollatorAlgorithm() { 120*de76a5adSDamjan Jovanovic requiredMethod("listCollatorAlgorithms()"); 121*de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithm(alg[0], loc, 122*de76a5adSDamjan Jovanovic CollatorOptions.CollatorOptions_IGNORE_CASE); 123*de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") == 0; 124*de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithm(alg[0], loc, 0); 125*de76a5adSDamjan Jovanovic res &= oObj.compareString("a", "A") != 0; 126*de76a5adSDamjan Jovanovic tRes.tested("loadCollatorAlgorithm()", res); 127*de76a5adSDamjan Jovanovic } 128*de76a5adSDamjan Jovanovic 129*de76a5adSDamjan Jovanovic /** 130*de76a5adSDamjan Jovanovic * Calls the method with no options and with options(IGNORE_CASE), 131*de76a5adSDamjan Jovanovic * compares strings.<p> 132*de76a5adSDamjan Jovanovic * Has <b>OK</b> status if compareString() returned correct values. 133*de76a5adSDamjan Jovanovic * The following method tests are to be completed successfully before : 134*de76a5adSDamjan Jovanovic * <ul> 135*de76a5adSDamjan Jovanovic * <li> <code> listCollatorAlgorithms </code> : to have some 136*de76a5adSDamjan Jovanovic * algorithm name. </li> 137*de76a5adSDamjan Jovanovic * </ul> 138*de76a5adSDamjan Jovanovic */ 139*de76a5adSDamjan Jovanovic public void _loadCollatorAlgorithmWithEndUserOption() { 140*de76a5adSDamjan Jovanovic requiredMethod("listCollatorAlgorithms()"); 141*de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithmWithEndUserOption(alg[0], loc, 142*de76a5adSDamjan Jovanovic new int[] {0}); 143*de76a5adSDamjan Jovanovic boolean res = oObj.compareString("A", "a") != 0; 144*de76a5adSDamjan Jovanovic oObj.loadCollatorAlgorithmWithEndUserOption(alg[0], loc, 145*de76a5adSDamjan Jovanovic new int[] {CollatorOptions.CollatorOptions_IGNORE_CASE}); 146*de76a5adSDamjan Jovanovic res = oObj.compareString("A", "a") == 0; 147*de76a5adSDamjan Jovanovic tRes.tested("loadCollatorAlgorithmWithEndUserOption()", res); 148*de76a5adSDamjan Jovanovic } 149*de76a5adSDamjan Jovanovic 150*de76a5adSDamjan Jovanovic /** 151*de76a5adSDamjan Jovanovic * Test is performed for locales : en, ru, ja, zh, ko. 152*de76a5adSDamjan Jovanovic * Default collator is loaded for each locale. Then collation 153*de76a5adSDamjan Jovanovic * is performed for different combination of symbols from range of 154*de76a5adSDamjan Jovanovic * this locale.<p> 155*de76a5adSDamjan Jovanovic * Has <b>OK</b> status if comparing of different strings 156*de76a5adSDamjan Jovanovic * returns not 0 value, then comparing in the opposite 157*de76a5adSDamjan Jovanovic * order returns value with opposite sign, and comparing 158*de76a5adSDamjan Jovanovic * of two equal strings returns 0. The such comparing is performed 159*de76a5adSDamjan Jovanovic * for one character strings. 160*de76a5adSDamjan Jovanovic */ 161*de76a5adSDamjan Jovanovic public void _compareSubstring() { 162*de76a5adSDamjan Jovanovic boolean result = true ; 163*de76a5adSDamjan Jovanovic char[] chars = new char[2] ; 164*de76a5adSDamjan Jovanovic Collator col = null ; 165*de76a5adSDamjan Jovanovic 166*de76a5adSDamjan Jovanovic log.println(" #### Testing English locale ####") ; 167*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(loc, 0) ; 168*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("en", "EN")) ; 169*de76a5adSDamjan Jovanovic for (char ch = 0x0020; ch < 0x007F; ch ++) { 170*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 171*de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 172*de76a5adSDamjan Jovanovic } 173*de76a5adSDamjan Jovanovic 174*de76a5adSDamjan Jovanovic log.println(" #### Testing Russian locale ####") ; 175*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 176*de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ru", "RU", ""), 0) ; 177*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ru", "RU")) ; 178*de76a5adSDamjan Jovanovic for (char ch = 0x0410; ch < 0x0450; ch ++) { 179*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 180*de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 181*de76a5adSDamjan Jovanovic } 182*de76a5adSDamjan Jovanovic 183*de76a5adSDamjan Jovanovic log.println(" #### Testing Japan locale ####") ; 184*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 185*de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ja", "JP", ""), 0) ; 186*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ja", "JP")) ; 187*de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 188*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 189*de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 190*de76a5adSDamjan Jovanovic } 191*de76a5adSDamjan Jovanovic 192*de76a5adSDamjan Jovanovic log.println(" #### Testing China locale ####") ; 193*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("zh", "CN", ""), 0) ; 194*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("zh", "CN")) ; 195*de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 196*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 197*de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 198*de76a5adSDamjan Jovanovic } 199*de76a5adSDamjan Jovanovic 200*de76a5adSDamjan Jovanovic log.println(" #### Testing Korean locale ####") ; 201*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("ko", "KR", ""), 0) ; 202*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ko", "KR")) ; 203*de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 204*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 205*de76a5adSDamjan Jovanovic result &= testCompareSubstring(chars, col) ; 206*de76a5adSDamjan Jovanovic } 207*de76a5adSDamjan Jovanovic 208*de76a5adSDamjan Jovanovic tRes.tested("compareSubstring()", result) ; 209*de76a5adSDamjan Jovanovic } 210*de76a5adSDamjan Jovanovic 211*de76a5adSDamjan Jovanovic /** 212*de76a5adSDamjan Jovanovic * Test is performed for locales : en, ru, ja, zh, ko. 213*de76a5adSDamjan Jovanovic * Default collator is loaded for each locale. Then collation 214*de76a5adSDamjan Jovanovic * is performed for different combination of symbols from range of 215*de76a5adSDamjan Jovanovic * this locale.<p> 216*de76a5adSDamjan Jovanovic * Has <b>OK</b> status if comparing of different strings 217*de76a5adSDamjan Jovanovic * returns not 0 value, then comparing in the opposite 218*de76a5adSDamjan Jovanovic * order returns value with opposite sign, and comparing 219*de76a5adSDamjan Jovanovic * of two equal strings returns 0. The such comparing is performed 220*de76a5adSDamjan Jovanovic * for one character strings. 221*de76a5adSDamjan Jovanovic */ 222*de76a5adSDamjan Jovanovic public void _compareString() { 223*de76a5adSDamjan Jovanovic boolean result = true ; 224*de76a5adSDamjan Jovanovic char[] chars = new char[2] ; 225*de76a5adSDamjan Jovanovic Collator col = null ; 226*de76a5adSDamjan Jovanovic log.println(" #### Testing English locale ####") ; 227*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 228*de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("en", "EN", ""), 0) ; 229*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("en", "EN")) ; 230*de76a5adSDamjan Jovanovic for (char ch = 0x0020; ch < 0x007F; ch ++) { 231*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 232*de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 233*de76a5adSDamjan Jovanovic } 234*de76a5adSDamjan Jovanovic 235*de76a5adSDamjan Jovanovic log.println(" #### Testing Russian locale ####") ; 236*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 237*de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ru", "RU", ""), 0) ; 238*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ru", "RU")) ; 239*de76a5adSDamjan Jovanovic for (char ch = 0x0410; ch < 0x0450; ch ++) { 240*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 241*de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 242*de76a5adSDamjan Jovanovic } 243*de76a5adSDamjan Jovanovic 244*de76a5adSDamjan Jovanovic log.println(" #### Testing Japan locale ####") ; 245*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator( 246*de76a5adSDamjan Jovanovic new com.sun.star.lang.Locale("ja", "JP", ""), 0) ; 247*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ja", "JP")) ; 248*de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 249*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 250*de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 251*de76a5adSDamjan Jovanovic } 252*de76a5adSDamjan Jovanovic 253*de76a5adSDamjan Jovanovic log.println(" #### Testing China locale ####") ; 254*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("zh", "CN", ""), 0) ; 255*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("zh", "CN")) ; 256*de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 257*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 258*de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 259*de76a5adSDamjan Jovanovic } 260*de76a5adSDamjan Jovanovic 261*de76a5adSDamjan Jovanovic log.println(" #### Testing Korean locale ####") ; 262*de76a5adSDamjan Jovanovic oObj.loadDefaultCollator(new Locale("ko", "KR", ""), 0) ; 263*de76a5adSDamjan Jovanovic col = Collator.getInstance(new java.util.Locale("ko", "KR")) ; 264*de76a5adSDamjan Jovanovic for (char ch = 0x4E00; ch < 0x4EFD; ch ++) { 265*de76a5adSDamjan Jovanovic chars[0] = ch ; chars[1] = (char) (ch + 1) ; 266*de76a5adSDamjan Jovanovic result &= testCompareString(chars, col) ; 267*de76a5adSDamjan Jovanovic } 268*de76a5adSDamjan Jovanovic 269*de76a5adSDamjan Jovanovic tRes.tested("compareString()", result) ; 270*de76a5adSDamjan Jovanovic } 271*de76a5adSDamjan Jovanovic 272*de76a5adSDamjan Jovanovic 273*de76a5adSDamjan Jovanovic /** 274*de76a5adSDamjan Jovanovic * Testing compareString() method. At first method is testing single chars 275*de76a5adSDamjan Jovanovic * comparing, then strings comparing. 276*de76a5adSDamjan Jovanovic * @param locChar sequence of at list two characters of a given locale 277*de76a5adSDamjan Jovanovic * to be used in comparing. 278*de76a5adSDamjan Jovanovic * @param col Collator for a given locale 279*de76a5adSDamjan Jovanovic * @return true if: 280*de76a5adSDamjan Jovanovic * <ol> 281*de76a5adSDamjan Jovanovic * <li> if comparing of two identical characters returns zero</li> 282*de76a5adSDamjan Jovanovic * <li> if comparing of two different characters returns non zero</li> 283*de76a5adSDamjan Jovanovic * <li> if comparing of two identical strings, composed of given chars 284*de76a5adSDamjan Jovanovic * returns zero</li> 285*de76a5adSDamjan Jovanovic * <li> if comparing of two different strings, composed of given chars 286*de76a5adSDamjan Jovanovic * returns non zero</li> 287*de76a5adSDamjan Jovanovic * </ol> 288*de76a5adSDamjan Jovanovic */ 289*de76a5adSDamjan Jovanovic public boolean testCompareString(char[] locChar, Collator col) { 290*de76a5adSDamjan Jovanovic boolean result = true; 291*de76a5adSDamjan Jovanovic int res; 292*de76a5adSDamjan Jovanovic String msg = ""; 293*de76a5adSDamjan Jovanovic 294*de76a5adSDamjan Jovanovic String char0 = "_"+new String(new char[] {locChar[0]}); 295*de76a5adSDamjan Jovanovic String char1 = "_"+new String(new char[] {locChar[1]}); 296*de76a5adSDamjan Jovanovic res = oObj.compareString(char0 , char0) ; 297*de76a5adSDamjan Jovanovic if (res != 0) { 298*de76a5adSDamjan Jovanovic msg += " Testing collation of single equal characters (" 299*de76a5adSDamjan Jovanovic + toUnicode(char0) + ") ... FAILED\n" ; 300*de76a5adSDamjan Jovanovic } 301*de76a5adSDamjan Jovanovic result &= res == 0 ; 302*de76a5adSDamjan Jovanovic res = oObj.compareString(char0, char1) ; 303*de76a5adSDamjan Jovanovic if (res == 0) { 304*de76a5adSDamjan Jovanovic msg += " Testing collation of single different" + 305*de76a5adSDamjan Jovanovic " characters (" + toUnicode(char0+char1) + 306*de76a5adSDamjan Jovanovic ") ... FAILED (0 returned)\n" ; 307*de76a5adSDamjan Jovanovic msg += " Java collator returned " + 308*de76a5adSDamjan Jovanovic col.compare(char0, char1) + "\n" ; 309*de76a5adSDamjan Jovanovic result = false ; 310*de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 0 311*de76a5adSDamjan Jovanovic res += oObj.compareString(char1, char0) ; 312*de76a5adSDamjan Jovanovic if (res != 0) { 313*de76a5adSDamjan Jovanovic msg += " Testing collation of single different" + 314*de76a5adSDamjan Jovanovic " characters (" + toUnicode(char0+char1) + 315*de76a5adSDamjan Jovanovic ") ... FAILED\n" ; 316*de76a5adSDamjan Jovanovic } 317*de76a5adSDamjan Jovanovic result &= res == 0 ; 318*de76a5adSDamjan Jovanovic } 319*de76a5adSDamjan Jovanovic 320*de76a5adSDamjan Jovanovic String str1 = new String(new char[] {locChar[0], locChar[0], 321*de76a5adSDamjan Jovanovic locChar[1], locChar[1], locChar[1]}) ; 322*de76a5adSDamjan Jovanovic String str2 = new String(new char[] {locChar[0], locChar[0], 323*de76a5adSDamjan Jovanovic locChar[0], locChar[1], locChar[1]}) ; 324*de76a5adSDamjan Jovanovic 325*de76a5adSDamjan Jovanovic res = oObj.compareString(str1 , str1) ; 326*de76a5adSDamjan Jovanovic if (res != 0) { 327*de76a5adSDamjan Jovanovic msg += " Testing collation of equal strings (" + 328*de76a5adSDamjan Jovanovic toUnicode(str1) + ") ... FAILED\n" ; 329*de76a5adSDamjan Jovanovic } 330*de76a5adSDamjan Jovanovic result &= res == 0 ; 331*de76a5adSDamjan Jovanovic res = oObj.compareString(str1, str2) ; 332*de76a5adSDamjan Jovanovic if (res == 0) { 333*de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 334*de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 335*de76a5adSDamjan Jovanovic ")) ... FAILED (0 returned)\n" ; 336*de76a5adSDamjan Jovanovic msg += " Java collator returned " + 337*de76a5adSDamjan Jovanovic col.compare(str1, str2) + "\n" ; 338*de76a5adSDamjan Jovanovic result = false ; 339*de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 340*de76a5adSDamjan Jovanovic res += oObj.compareString(str2, str1) ; 341*de76a5adSDamjan Jovanovic if (res != 0) { 342*de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 343*de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 344*de76a5adSDamjan Jovanovic ")) ... FAILED\n" ; 345*de76a5adSDamjan Jovanovic } 346*de76a5adSDamjan Jovanovic result &= res == 0 ; 347*de76a5adSDamjan Jovanovic } 348*de76a5adSDamjan Jovanovic 349*de76a5adSDamjan Jovanovic if (!result) { 350*de76a5adSDamjan Jovanovic log.println(msg) ; 351*de76a5adSDamjan Jovanovic } 352*de76a5adSDamjan Jovanovic return result ; 353*de76a5adSDamjan Jovanovic } 354*de76a5adSDamjan Jovanovic 355*de76a5adSDamjan Jovanovic 356*de76a5adSDamjan Jovanovic /** 357*de76a5adSDamjan Jovanovic * Testing compareSubstring() method. Method is testing substrings comparing. 358*de76a5adSDamjan Jovanovic * @param locChar sequence of at list two characters of a given locale 359*de76a5adSDamjan Jovanovic * to be used in comparing. 360*de76a5adSDamjan Jovanovic * @param col Collator for a given locale 361*de76a5adSDamjan Jovanovic * @return true if: 362*de76a5adSDamjan Jovanovic * <ol> 363*de76a5adSDamjan Jovanovic * <li> if comparing of two identical substrings of strings, composed 364*de76a5adSDamjan Jovanovic * of given chars returns zero</li> 365*de76a5adSDamjan Jovanovic * <li> if comparing of two different substrings of strings, composed 366*de76a5adSDamjan Jovanovic * of given chars returns non zero</li> 367*de76a5adSDamjan Jovanovic * </ol> 368*de76a5adSDamjan Jovanovic */ 369*de76a5adSDamjan Jovanovic public boolean testCompareSubstring(char[] locChar, Collator col) { 370*de76a5adSDamjan Jovanovic boolean result = true ; 371*de76a5adSDamjan Jovanovic int res ; 372*de76a5adSDamjan Jovanovic String msg = "" ; 373*de76a5adSDamjan Jovanovic 374*de76a5adSDamjan Jovanovic String str1 = new String(new char[] {locChar[0], locChar[0], 375*de76a5adSDamjan Jovanovic locChar[1], locChar[1], locChar[1]}) ; 376*de76a5adSDamjan Jovanovic String str2 = new String(new char[] {locChar[0], locChar[0], 377*de76a5adSDamjan Jovanovic locChar[0], locChar[1], locChar[1]}) ; 378*de76a5adSDamjan Jovanovic 379*de76a5adSDamjan Jovanovic res = oObj.compareSubstring(str1, 1, 2 , str2, 2, 2) ; 380*de76a5adSDamjan Jovanovic if (res != 0) { 381*de76a5adSDamjan Jovanovic msg += " Testing collation of equal substrings (" + 382*de76a5adSDamjan Jovanovic toUnicode(str1) + ") ... FAILED\n" ; 383*de76a5adSDamjan Jovanovic } 384*de76a5adSDamjan Jovanovic result &= res == 0 ; 385*de76a5adSDamjan Jovanovic res = oObj.compareSubstring(str1, 1, 2, str2, 1, 2) ; 386*de76a5adSDamjan Jovanovic if (res == 0) { 387*de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 388*de76a5adSDamjan Jovanovic toUnicode(str1.substring(1, 3)) + "),(" + 389*de76a5adSDamjan Jovanovic toUnicode(str2.substring(1, 3)) 390*de76a5adSDamjan Jovanovic + ")) ... FAILED (0 returned)\n" ; 391*de76a5adSDamjan Jovanovic msg += " Java collator returned " + col.compare 392*de76a5adSDamjan Jovanovic (str1.substring(1, 3), str2.substring(1, 3)) + "\n" ; 393*de76a5adSDamjan Jovanovic result = false ; 394*de76a5adSDamjan Jovanovic } else { // opposite order - sum of results must be 395*de76a5adSDamjan Jovanovic res += oObj.compareSubstring(str2, 1, 2, str1, 1, 2) ; 396*de76a5adSDamjan Jovanovic if (res != 0) { 397*de76a5adSDamjan Jovanovic msg += " Testing collation of different strings ((" + 398*de76a5adSDamjan Jovanovic toUnicode(str1) + "),(" + toUnicode(str2) + 399*de76a5adSDamjan Jovanovic ")) ... FAILED\n" ; 400*de76a5adSDamjan Jovanovic } 401*de76a5adSDamjan Jovanovic result &= res == 0 ; 402*de76a5adSDamjan Jovanovic } 403*de76a5adSDamjan Jovanovic 404*de76a5adSDamjan Jovanovic if (!result) { 405*de76a5adSDamjan Jovanovic log.println(msg) ; 406*de76a5adSDamjan Jovanovic } 407*de76a5adSDamjan Jovanovic return result ; 408*de76a5adSDamjan Jovanovic } 409*de76a5adSDamjan Jovanovic 410*de76a5adSDamjan Jovanovic 411*de76a5adSDamjan Jovanovic /** 412*de76a5adSDamjan Jovanovic * Transforms string to unicode hex codes. 413*de76a5adSDamjan Jovanovic * @param str String to be transformed 414*de76a5adSDamjan Jovanovic */ 415*de76a5adSDamjan Jovanovic public String toUnicode(String str) { 416*de76a5adSDamjan Jovanovic char[] chars = str.toCharArray() ; 417*de76a5adSDamjan Jovanovic String res = "" ; 418*de76a5adSDamjan Jovanovic for (int i = 0; i < chars.length; i++) { 419*de76a5adSDamjan Jovanovic if (i != 0) res += "," ; 420*de76a5adSDamjan Jovanovic res += Integer.toHexString(chars[i]) ; 421*de76a5adSDamjan Jovanovic } 422*de76a5adSDamjan Jovanovic return res ; 423*de76a5adSDamjan Jovanovic } 424*de76a5adSDamjan Jovanovic 425*de76a5adSDamjan Jovanovic } 426