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