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