xref: /trunk/test/testuno/source/api/i18n/XCollatorTest.java (revision de76a5ada4912555267334a137577732392f43a0)
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