xref: /trunk/test/testuno/source/api/i18n/XTransliterationTest.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 com.sun.star.i18n.TransliterationModules;
27de76a5adSDamjan Jovanovic import com.sun.star.i18n.TransliterationModulesNew;
28de76a5adSDamjan Jovanovic import com.sun.star.i18n.TransliterationType;
29de76a5adSDamjan Jovanovic import com.sun.star.i18n.XTransliteration;
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.After;
34*2f709283SDamjan Jovanovic import org.junit.AfterClass;
35*2f709283SDamjan Jovanovic import org.junit.Before;
36*2f709283SDamjan Jovanovic import org.junit.BeforeClass;
37*2f709283SDamjan Jovanovic import org.junit.Assert;
38*2f709283SDamjan Jovanovic import org.junit.Test;
39*2f709283SDamjan Jovanovic import org.openoffice.test.uno.UnoApp;
40de76a5adSDamjan Jovanovic 
41de76a5adSDamjan Jovanovic /**
42de76a5adSDamjan Jovanovic * Testing <code>com.sun.star.i18n.XTransliteration</code>
43de76a5adSDamjan Jovanovic * interface methods :
44de76a5adSDamjan Jovanovic * <ul>
45de76a5adSDamjan Jovanovic *  <li><code> getName()</code></li>
46de76a5adSDamjan Jovanovic *  <li><code> getType()</code></li>
47de76a5adSDamjan Jovanovic *  <li><code> loadModule()</code></li>
48de76a5adSDamjan Jovanovic *  <li><code> loadModuleNew()</code></li>
49de76a5adSDamjan Jovanovic *  <li><code> loadModuleByImplName()</code></li>
50de76a5adSDamjan Jovanovic *  <li><code> loadModulesByImplNames()</code></li>
51de76a5adSDamjan Jovanovic *  <li><code> getAvailableModules()</code></li>
52de76a5adSDamjan Jovanovic *  <li><code> transliterate()</code></li>
53de76a5adSDamjan Jovanovic *  <li><code> folding()</code></li>
54de76a5adSDamjan Jovanovic *  <li><code> equals()</code></li>
55de76a5adSDamjan Jovanovic *  <li><code> transliterateRange()</code></li>
56de76a5adSDamjan Jovanovic * </ul> <p>
57de76a5adSDamjan Jovanovic * Test is <b> NOT </b> multithread compliant. <p>
58de76a5adSDamjan Jovanovic * @see com.sun.star.i18n.XTransliteration
59de76a5adSDamjan Jovanovic */
60*2f709283SDamjan Jovanovic public class XTransliterationTest {
61*2f709283SDamjan Jovanovic     private static final UnoApp app = new UnoApp();
62de76a5adSDamjan Jovanovic 
63*2f709283SDamjan Jovanovic     private XComponentContext xContext = null;
64de76a5adSDamjan Jovanovic     public XTransliteration oObj = null;
65de76a5adSDamjan Jovanovic     private String[] mod = null ;
66de76a5adSDamjan Jovanovic     private Locale loc = new Locale("en", "EN", "") ;
67de76a5adSDamjan Jovanovic 
68*2f709283SDamjan Jovanovic 
69*2f709283SDamjan Jovanovic     // setup and close connections
70*2f709283SDamjan Jovanovic     @BeforeClass
71*2f709283SDamjan Jovanovic     public static void setUpConnection() throws Exception
72*2f709283SDamjan Jovanovic     {
73*2f709283SDamjan Jovanovic         app.start();
74*2f709283SDamjan Jovanovic     }
75*2f709283SDamjan Jovanovic 
76*2f709283SDamjan Jovanovic     @AfterClass
77*2f709283SDamjan Jovanovic     public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception
78*2f709283SDamjan Jovanovic     {
79*2f709283SDamjan Jovanovic         app.close();
80*2f709283SDamjan Jovanovic     }
81*2f709283SDamjan Jovanovic 
82*2f709283SDamjan Jovanovic     @Before
83*2f709283SDamjan Jovanovic     public void before() throws Exception {
84*2f709283SDamjan Jovanovic         xContext = app.getComponentContext();
85*2f709283SDamjan Jovanovic         oObj = UnoRuntime.queryInterface(
86*2f709283SDamjan Jovanovic             XTransliteration.class,
87*2f709283SDamjan Jovanovic             xContext.getServiceManager().createInstanceWithContext("com.sun.star.i18n.Transliteration", xContext)
88*2f709283SDamjan Jovanovic         );
89*2f709283SDamjan Jovanovic     }
90*2f709283SDamjan Jovanovic 
91de76a5adSDamjan Jovanovic     /**
92de76a5adSDamjan Jovanovic     * Gets all available transliteration modules. <p>
93de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if array returned has at least
94de76a5adSDamjan Jovanovic     * one module name.
95de76a5adSDamjan Jovanovic     */
96*2f709283SDamjan Jovanovic     @Test
97de76a5adSDamjan Jovanovic     public void _getAvailableModules() {
98de76a5adSDamjan Jovanovic         mod = oObj.getAvailableModules(loc, TransliterationType.ONE_TO_ONE);
99de76a5adSDamjan Jovanovic 
100de76a5adSDamjan Jovanovic         if (mod != null) {
101*2f709283SDamjan Jovanovic             System.out.println("Available modules :") ;
102de76a5adSDamjan Jovanovic             for (int i = 0; i < mod.length; i++) {
103*2f709283SDamjan Jovanovic                 System.out.println("  '" + mod[i] + "'") ;
104de76a5adSDamjan Jovanovic             }
105de76a5adSDamjan Jovanovic         } else {
106*2f709283SDamjan Jovanovic             System.out.println("!!! NULL returned !!!") ;
107de76a5adSDamjan Jovanovic         }
108de76a5adSDamjan Jovanovic 
109*2f709283SDamjan Jovanovic         Assert.assertTrue("getAvailableModules()", mod != null && mod.length > 0) ;
110de76a5adSDamjan Jovanovic     }
111de76a5adSDamjan Jovanovic 
112de76a5adSDamjan Jovanovic     /**
113de76a5adSDamjan Jovanovic     * Calls the method for load IGNORE_CASE module and checks the name returned
114de76a5adSDamjan Jovanovic     * by the method <code>getName</code>. <p>
115de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method <code>getName</code> returns the
116de76a5adSDamjan Jovanovic     * string "case ignore (generic)".
117de76a5adSDamjan Jovanovic     */
118*2f709283SDamjan Jovanovic     @Test
119de76a5adSDamjan Jovanovic     public void _loadModule() {
120*2f709283SDamjan Jovanovic         System.out.println("Load module IGNORE_CASE");
121de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.IGNORE_CASE, loc);
122de76a5adSDamjan Jovanovic 
123de76a5adSDamjan Jovanovic         String name = oObj.getName();
124de76a5adSDamjan Jovanovic         boolean res = name.equals("case ignore (generic)");
125*2f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
126de76a5adSDamjan Jovanovic 
127*2f709283SDamjan Jovanovic         Assert.assertTrue("loadModule()", res );
128de76a5adSDamjan Jovanovic     }
129de76a5adSDamjan Jovanovic 
130de76a5adSDamjan Jovanovic     /**
131de76a5adSDamjan Jovanovic      * Loads <code>LOWERCASE_UPPERCASE</code> module and checks the current
132de76a5adSDamjan Jovanovic      * name of object. <p>
133de76a5adSDamjan Jovanovic      *
134de76a5adSDamjan Jovanovic      * Has <b>OK</b> status if the name of the object is equals to
135de76a5adSDamjan Jovanovic      * 'lower_to_upper(generic)'
136de76a5adSDamjan Jovanovic      */
137*2f709283SDamjan Jovanovic     @Test
138de76a5adSDamjan Jovanovic     public void _loadModuleNew() {
139de76a5adSDamjan Jovanovic         boolean result = true ;
140de76a5adSDamjan Jovanovic 
141de76a5adSDamjan Jovanovic         oObj.loadModuleNew(
142de76a5adSDamjan Jovanovic             new TransliterationModulesNew[]
143de76a5adSDamjan Jovanovic             {TransliterationModulesNew.LOWERCASE_UPPERCASE}, loc);
144de76a5adSDamjan Jovanovic 
145de76a5adSDamjan Jovanovic         String name = oObj.getName();
146de76a5adSDamjan Jovanovic         result = name.equals("lower_to_upper(generic)");
147*2f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
148de76a5adSDamjan Jovanovic 
149*2f709283SDamjan Jovanovic         Assert.assertTrue("loadModuleNew()", result);
150de76a5adSDamjan Jovanovic     }
151de76a5adSDamjan Jovanovic 
152de76a5adSDamjan Jovanovic     /**
153de76a5adSDamjan Jovanovic     * Calls the method for load LOWERCASE_UPPERCASE module and
154de76a5adSDamjan Jovanovic     * checks the name returned by the method <code>getName</code>. <p>
155de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method <code>getName</code> returns the
156de76a5adSDamjan Jovanovic     * string "lower_to_upper(generic)".
157de76a5adSDamjan Jovanovic     */
158*2f709283SDamjan Jovanovic     @Test
159de76a5adSDamjan Jovanovic     public void _loadModuleByImplName() {
160*2f709283SDamjan Jovanovic         System.out.println("Load module LOWERCASE_UPPERCASE");
161de76a5adSDamjan Jovanovic         oObj.loadModuleByImplName("LOWERCASE_UPPERCASE", loc);
162de76a5adSDamjan Jovanovic 
163de76a5adSDamjan Jovanovic         String name = oObj.getName();
164de76a5adSDamjan Jovanovic         boolean res = name.equals("lower_to_upper(generic)");
165*2f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
166de76a5adSDamjan Jovanovic 
167*2f709283SDamjan Jovanovic         Assert.assertTrue("loadModuleByImplName()", res);
168de76a5adSDamjan Jovanovic     }
169de76a5adSDamjan Jovanovic 
170de76a5adSDamjan Jovanovic     /**
171de76a5adSDamjan Jovanovic     * Calls the method for load UPPERCASE_LOWERCASE module and
172de76a5adSDamjan Jovanovic     * checks the name returned by the method <code>getName</code>. <p>
173de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method <code>getName</code> returns the
174de76a5adSDamjan Jovanovic     * string "upper_to_lower(generic)".
175de76a5adSDamjan Jovanovic     */
176*2f709283SDamjan Jovanovic     @Test
177de76a5adSDamjan Jovanovic     public void _loadModulesByImplNames() {
178*2f709283SDamjan Jovanovic         System.out.println("Load module UPPERCASE_LOWERCASE");
179de76a5adSDamjan Jovanovic         oObj.loadModulesByImplNames(new String[]{"UPPERCASE_LOWERCASE"}, loc);
180de76a5adSDamjan Jovanovic 
181de76a5adSDamjan Jovanovic         String name = oObj.getName();
182de76a5adSDamjan Jovanovic         boolean res = name.equals("upper_to_lower(generic)");
183*2f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
184de76a5adSDamjan Jovanovic 
185*2f709283SDamjan Jovanovic         Assert.assertTrue("loadModulesByImplNames()", res);
186de76a5adSDamjan Jovanovic     }
187de76a5adSDamjan Jovanovic 
188de76a5adSDamjan Jovanovic     /**
189de76a5adSDamjan Jovanovic      * Loads <code>LOWERCASE_UPPERCASE</code> module and checks current type.
190de76a5adSDamjan Jovanovic      * <p>Has <b>OK</b> status if the type is <code>ONE_TO_ONE</code>
191de76a5adSDamjan Jovanovic      */
192*2f709283SDamjan Jovanovic     @Test
193de76a5adSDamjan Jovanovic     public void _getType() {
194de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
195de76a5adSDamjan Jovanovic         boolean result = oObj.getType() == TransliterationType.ONE_TO_ONE;
196*2f709283SDamjan Jovanovic         Assert.assertTrue("getType()", result);
197de76a5adSDamjan Jovanovic     }
198de76a5adSDamjan Jovanovic 
199de76a5adSDamjan Jovanovic     /**
200de76a5adSDamjan Jovanovic     * Loads UPPERCASE_LOWERCASE module and
201de76a5adSDamjan Jovanovic     * checks the name returned by the method <code>getName</code>. <p>
202de76a5adSDamjan Jovanovic     *
203de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method <code>getName</code> returns the
204de76a5adSDamjan Jovanovic     * string "upper_to_lower(generic)".
205de76a5adSDamjan Jovanovic     */
206*2f709283SDamjan Jovanovic     @Test
207de76a5adSDamjan Jovanovic     public void _getName() {
208de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
209de76a5adSDamjan Jovanovic 
210de76a5adSDamjan Jovanovic         String name = oObj.getName();
211de76a5adSDamjan Jovanovic         boolean res = name.equals("lower_to_upper(generic)");
212*2f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
213de76a5adSDamjan Jovanovic 
214*2f709283SDamjan Jovanovic         Assert.assertTrue("getName()", res);
215de76a5adSDamjan Jovanovic     }
216de76a5adSDamjan Jovanovic 
217de76a5adSDamjan Jovanovic     /**
218de76a5adSDamjan Jovanovic     * First loads <code>LOWERCASE_UPPERCASE</code> module.
219de76a5adSDamjan Jovanovic     * Then tries to transliterate (make uppercase) a substring. <p>
220de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if all chars were made uppercase,
221de76a5adSDamjan Jovanovic     * and array returned has size as substring length, and its
222de76a5adSDamjan Jovanovic     * elements are positions of substring characters in the source
223de76a5adSDamjan Jovanovic     * string.
224de76a5adSDamjan Jovanovic     */
225*2f709283SDamjan Jovanovic     @Test
226de76a5adSDamjan Jovanovic     public void _transliterate() {
227de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
228de76a5adSDamjan Jovanovic 
229de76a5adSDamjan Jovanovic         int[][] offs = new int[1][] ;
230de76a5adSDamjan Jovanovic 
231de76a5adSDamjan Jovanovic         String out = oObj.transliterate("AaBbCc", 1, 4, offs) ;
232de76a5adSDamjan Jovanovic 
233de76a5adSDamjan Jovanovic         boolean result = "ABBC".equals(out) && offs[0].length == 4 &&
234de76a5adSDamjan Jovanovic             offs[0][0] == 1 &&
235de76a5adSDamjan Jovanovic             offs[0][1] == 2 &&
236de76a5adSDamjan Jovanovic             offs[0][2] == 3 &&
237de76a5adSDamjan Jovanovic             offs[0][3] == 4 ;
238de76a5adSDamjan Jovanovic 
239*2f709283SDamjan Jovanovic         Assert.assertTrue("transliterate()", result) ;
240de76a5adSDamjan Jovanovic     }
241de76a5adSDamjan Jovanovic 
242de76a5adSDamjan Jovanovic 
243de76a5adSDamjan Jovanovic     /**
244de76a5adSDamjan Jovanovic     * First loads <code>LOWERCASE_UPPERCASE</code> module.
245de76a5adSDamjan Jovanovic     * Tries to transliterate a range of two characters. <p>
246de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the appropriate String array
247de76a5adSDamjan Jovanovic     * returned (not null, length = 4, with two ranges
248de76a5adSDamjan Jovanovic     * (a, i), (A, I) in any order).
249de76a5adSDamjan Jovanovic     */
250*2f709283SDamjan Jovanovic     @Test
251de76a5adSDamjan Jovanovic     public void _transliterateRange() {
252de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.IGNORE_CASE, loc);
253de76a5adSDamjan Jovanovic 
254de76a5adSDamjan Jovanovic         String[] out = oObj.transliterateRange("a", "i") ;
255de76a5adSDamjan Jovanovic 
256*2f709283SDamjan Jovanovic         System.out.println("transliterateRange return:");
257de76a5adSDamjan Jovanovic         for(int i = 0; i < out.length; i++) {
258*2f709283SDamjan Jovanovic             System.out.println(out[i]);
259de76a5adSDamjan Jovanovic         }
260de76a5adSDamjan Jovanovic 
261de76a5adSDamjan Jovanovic         boolean bOK = out != null &&
262de76a5adSDamjan Jovanovic             out.length == 4 &&
263de76a5adSDamjan Jovanovic             ("A".equals(out[0]) && "I".equals(out[1]) &&
264de76a5adSDamjan Jovanovic             "a".equals(out[2]) && "i".equals(out[3])) ||
265de76a5adSDamjan Jovanovic             ("a".equals(out[0]) && "i".equals(out[1]) &&
266de76a5adSDamjan Jovanovic             "A".equals(out[2]) && "I".equals(out[3])) ;
267de76a5adSDamjan Jovanovic 
268de76a5adSDamjan Jovanovic         if (!bOK) {
269*2f709283SDamjan Jovanovic             System.out.println("Unexpected range returned :");
270de76a5adSDamjan Jovanovic             for (int i = 0; i < out.length; i++) {
271*2f709283SDamjan Jovanovic                 System.out.print("'" + out[i] +"', ");
272de76a5adSDamjan Jovanovic             }
273*2f709283SDamjan Jovanovic             System.out.println();
274de76a5adSDamjan Jovanovic         }
275de76a5adSDamjan Jovanovic 
276*2f709283SDamjan Jovanovic         Assert.assertTrue("transliterateRange()", bOK);
277de76a5adSDamjan Jovanovic     }
278de76a5adSDamjan Jovanovic 
279de76a5adSDamjan Jovanovic     /**
280de76a5adSDamjan Jovanovic     * This method is used internally by <code>equals</code>
281de76a5adSDamjan Jovanovic     * method so it indirectly tested in this method. <p>
282de76a5adSDamjan Jovanovic     * Always has <b>OK</b> status.
283de76a5adSDamjan Jovanovic     */
284*2f709283SDamjan Jovanovic     @Test
285de76a5adSDamjan Jovanovic     public void _folding() {
286de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
287de76a5adSDamjan Jovanovic 
288de76a5adSDamjan Jovanovic         int[][] offs = new int[1][] ;
289de76a5adSDamjan Jovanovic 
290de76a5adSDamjan Jovanovic         String out = oObj.folding("AaBbCc", 1, 4, offs) ;
291de76a5adSDamjan Jovanovic 
292de76a5adSDamjan Jovanovic         boolean result = "ABBC".equals(out) && offs[0].length == 4 &&
293de76a5adSDamjan Jovanovic             offs[0][0] == 1 &&
294de76a5adSDamjan Jovanovic             offs[0][1] == 2 &&
295de76a5adSDamjan Jovanovic             offs[0][2] == 3 &&
296de76a5adSDamjan Jovanovic             offs[0][3] == 4 ;
297de76a5adSDamjan Jovanovic 
298de76a5adSDamjan Jovanovic 
299*2f709283SDamjan Jovanovic         Assert.assertTrue("folding()", result) ;
300de76a5adSDamjan Jovanovic     }
301de76a5adSDamjan Jovanovic 
302de76a5adSDamjan Jovanovic 
303de76a5adSDamjan Jovanovic     /**
304de76a5adSDamjan Jovanovic     * First loads <code>LOWERCASE_UPPERCASE</code> module.
305de76a5adSDamjan Jovanovic     * Tries to compare two equal substrings. <p>
306de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method returned <code>true</code>.
307de76a5adSDamjan Jovanovic     */
308*2f709283SDamjan Jovanovic     @Test
309de76a5adSDamjan Jovanovic     public void _equals() {
310de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
311de76a5adSDamjan Jovanovic 
312de76a5adSDamjan Jovanovic         int[] match1 = new int[1],
313de76a5adSDamjan Jovanovic               match2 = new int[1] ;
314de76a5adSDamjan Jovanovic 
315de76a5adSDamjan Jovanovic         boolean res = oObj.equals("aAbBcC", 1, 3, match1, "aAbBcC", 1,
316de76a5adSDamjan Jovanovic             3, match2) ;
317de76a5adSDamjan Jovanovic 
318*2f709283SDamjan Jovanovic         System.out.println("Returned : " + res + " Match1 = " + match1[0] +
319de76a5adSDamjan Jovanovic             " Match2 = " + match2[0]) ;
320de76a5adSDamjan Jovanovic 
321*2f709283SDamjan Jovanovic         Assert.assertTrue("equals()", res) ;
322de76a5adSDamjan Jovanovic     }
323de76a5adSDamjan Jovanovic 
324de76a5adSDamjan Jovanovic     /**
325de76a5adSDamjan Jovanovic      * Test performed for sets of equal substrings, not equal
326de76a5adSDamjan Jovanovic      * substrings, and with out of bounds offset and length
327de76a5adSDamjan Jovanovic      * parameters.<p>
328de76a5adSDamjan Jovanovic      *
329de76a5adSDamjan Jovanovic      * Has <b>OK</b> status if comparings of equal substrings
330de76a5adSDamjan Jovanovic      * always return 0, if comparisons of none equal returns
331de76a5adSDamjan Jovanovic      * proper value according to lexicographical order and if
332de76a5adSDamjan Jovanovic      * comparisons with invalid parameters return none 0 value.
333de76a5adSDamjan Jovanovic      */
334*2f709283SDamjan Jovanovic     @Test
335de76a5adSDamjan Jovanovic     public void _compareSubstring() {
336de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
337de76a5adSDamjan Jovanovic         boolean result = true ;
338de76a5adSDamjan Jovanovic 
339de76a5adSDamjan Jovanovic         // substrings below must be equal
340de76a5adSDamjan Jovanovic         result &= testSubstring("", 0, 0, "", 0, 0, 0) ;
341de76a5adSDamjan Jovanovic         result &= testSubstring("aa", 1, 0, "", 0, 0, 0) ;
342de76a5adSDamjan Jovanovic         result &= testSubstring("aa", 1, 0, "aa", 2, 0, 0) ;
343de76a5adSDamjan Jovanovic         result &= testSubstring("a", 0, 1, "a", 0, 1, 0) ;
344de76a5adSDamjan Jovanovic         result &= testSubstring("ab", 0, 2, "ab", 0, 2, 0) ;
345de76a5adSDamjan Jovanovic         result &= testSubstring("abc", 1, 2, "abc", 1, 2, 0) ;
346de76a5adSDamjan Jovanovic         result &= testSubstring("abcdef", 0, 3, "123abc", 3, 3, 0) ;
347de76a5adSDamjan Jovanovic         result &= testSubstring("abcdef", 1, 1, "123abc", 4, 1, 0) ;
348de76a5adSDamjan Jovanovic 
349de76a5adSDamjan Jovanovic         // substrings below must NOT be equal
350de76a5adSDamjan Jovanovic         result &= testSubstring("a", 0, 1, "a", 0, 0, 1) ;
351de76a5adSDamjan Jovanovic         result &= testSubstring("aaa", 1, 1, "", 0, 0, 1) ;
352de76a5adSDamjan Jovanovic         result &= testSubstring("bbb", 2, 1, "aaa", 2, 1, 1) ;
353de76a5adSDamjan Jovanovic         result &= testSubstring("abc", 0, 3, "abc", 0, 2, 1) ;
354de76a5adSDamjan Jovanovic         result &= testSubstring("bbc", 1, 2, "bbc", 0, 2, 1) ;
355de76a5adSDamjan Jovanovic 
356de76a5adSDamjan Jovanovic         // testing with wrong offsets and lengths
357de76a5adSDamjan Jovanovic 
358*2f709283SDamjan Jovanovic         Assert.assertTrue("compareSubstring()", result) ;
359de76a5adSDamjan Jovanovic     }
360de76a5adSDamjan Jovanovic 
361de76a5adSDamjan Jovanovic     /**
362de76a5adSDamjan Jovanovic      * Performs tesing of two substrings. Also testing of opposite
363de76a5adSDamjan Jovanovic      * substrings order performed.
364de76a5adSDamjan Jovanovic      * @return <code>true</code> if substrings are equal and retruned
365de76a5adSDamjan Jovanovic      * value is 0 for both orders,
366de76a5adSDamjan Jovanovic      * if substrings are different and expected value
367de76a5adSDamjan Jovanovic      * returned for direct order and opposite value returned for
368de76a5adSDamjan Jovanovic      * opposite order.
369de76a5adSDamjan Jovanovic      */
370de76a5adSDamjan Jovanovic     private boolean testSubstring(String str1, int p1, int len1,
371de76a5adSDamjan Jovanovic         String str2, int p2, int len2, int expRes) {
372de76a5adSDamjan Jovanovic 
373de76a5adSDamjan Jovanovic         boolean ret = true ;
374de76a5adSDamjan Jovanovic 
375de76a5adSDamjan Jovanovic         int res = -666 ;
376de76a5adSDamjan Jovanovic         try {
377de76a5adSDamjan Jovanovic             res = oObj.compareSubstring(str1, p1, len1, str2, p2, len2);
378de76a5adSDamjan Jovanovic         } catch (java.lang.NullPointerException e) {
379*2f709283SDamjan Jovanovic             System.out.println("Exception while method calling occurs :" + e);
380de76a5adSDamjan Jovanovic         }
381de76a5adSDamjan Jovanovic 
382de76a5adSDamjan Jovanovic         if (res != expRes) {
383*2f709283SDamjan Jovanovic             System.out.print("Comparing FAILED; return: " + res + ", expected: " +
384de76a5adSDamjan Jovanovic                 expRes + " ");
385de76a5adSDamjan Jovanovic             ret = false ;
386de76a5adSDamjan Jovanovic         } else {
387*2f709283SDamjan Jovanovic             System.out.print("Comparing OK : ");
388de76a5adSDamjan Jovanovic         }
389*2f709283SDamjan Jovanovic         System.out.println("('" + str1 + "', " + p1 + ", " + len1 + ", '" +
390de76a5adSDamjan Jovanovic             str2 + "', " + p2 + ", " + len2 + ")");
391de76a5adSDamjan Jovanovic 
392de76a5adSDamjan Jovanovic         res = -666 ;
393de76a5adSDamjan Jovanovic         try {
394de76a5adSDamjan Jovanovic             res = oObj.compareSubstring(str2, p2, len2, str1, p1, len1);
395de76a5adSDamjan Jovanovic         } catch (java.lang.NullPointerException e) {
396*2f709283SDamjan Jovanovic             System.out.println("Exception while method calling occurs :" + e);
397de76a5adSDamjan Jovanovic         }
398de76a5adSDamjan Jovanovic 
399de76a5adSDamjan Jovanovic         if (res != -expRes) {
400*2f709283SDamjan Jovanovic             System.out.print("Comparing FAILED; return: " + res + ", expected: " +
401de76a5adSDamjan Jovanovic                 -expRes  + " ");
402de76a5adSDamjan Jovanovic             ret = false ;
403de76a5adSDamjan Jovanovic         } else {
404*2f709283SDamjan Jovanovic             System.out.print("Comparing OK :");
405de76a5adSDamjan Jovanovic         }
406*2f709283SDamjan Jovanovic         System.out.println("('" + str2 + "', " + p2 + ", " + len2 + ", '" +
407de76a5adSDamjan Jovanovic             str1 + "', " + p1 + ", " + len1 + ")");
408de76a5adSDamjan Jovanovic 
409de76a5adSDamjan Jovanovic         return ret ;
410de76a5adSDamjan Jovanovic     }
411de76a5adSDamjan Jovanovic 
412de76a5adSDamjan Jovanovic     /**
413de76a5adSDamjan Jovanovic      * Test performed for sets of equal strings and not equal
414de76a5adSDamjan Jovanovic      * strings.<p>
415de76a5adSDamjan Jovanovic      *
416de76a5adSDamjan Jovanovic      * Has <b>OK</b> status if comparings of equal strings
417de76a5adSDamjan Jovanovic      * always return 0 and if comparisons of none equal returns
418de76a5adSDamjan Jovanovic      * proper value according to lexicographical order .
419de76a5adSDamjan Jovanovic      */
420*2f709283SDamjan Jovanovic     @Test
421de76a5adSDamjan Jovanovic     public void _compareString() {
422de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
423de76a5adSDamjan Jovanovic         boolean result = true ;
424de76a5adSDamjan Jovanovic 
425de76a5adSDamjan Jovanovic         result &= testString("", "", 0) ;
426de76a5adSDamjan Jovanovic         result &= testString("a", "", 1) ;
427de76a5adSDamjan Jovanovic         result &= testString("a", "a", 0) ;
428de76a5adSDamjan Jovanovic         result &= testString("A", "a", 0) ;
429de76a5adSDamjan Jovanovic         result &= testString("b", "a", 1) ;
430de76a5adSDamjan Jovanovic         result &= testString("\n", "\n", 0) ;
431de76a5adSDamjan Jovanovic         result &= testString("\n", "\t", 1) ;
432de76a5adSDamjan Jovanovic         result &= testString("aaa", "aaa", 0) ;
433de76a5adSDamjan Jovanovic         result &= testString("aaA", "aaa", 0) ;
434de76a5adSDamjan Jovanovic         result &= testString("aaa", "aa", 1) ;
435de76a5adSDamjan Jovanovic         result &= testString("ab", "aaa", 1) ;
436de76a5adSDamjan Jovanovic         result &= testString("aba", "aa", 1) ;
437de76a5adSDamjan Jovanovic         result &= testString("aaa\t\na", "aaa\t\na", 0) ;
438de76a5adSDamjan Jovanovic         result &= testString("aaa\t\nb", "aaa\t\na", 1) ;
439de76a5adSDamjan Jovanovic 
440*2f709283SDamjan Jovanovic         Assert.assertTrue("compareString()", result) ;
441de76a5adSDamjan Jovanovic     }
442de76a5adSDamjan Jovanovic 
443de76a5adSDamjan Jovanovic     /**
444de76a5adSDamjan Jovanovic      * Performs tesing of two strings. If the expected value is not 0
445de76a5adSDamjan Jovanovic      * (i.e. strings are not equal), then also testing of opposite
446de76a5adSDamjan Jovanovic      * strings order performed.
447de76a5adSDamjan Jovanovic      * @return <code>true</code> if strings are equal and retruned
448de76a5adSDamjan Jovanovic      * value is 0, if strings are different and expected value
449de76a5adSDamjan Jovanovic      * returned for direct order and opposite value returned for
450de76a5adSDamjan Jovanovic      * opposite order.
451de76a5adSDamjan Jovanovic      */
452de76a5adSDamjan Jovanovic     protected boolean testString(String str1, String str2, int expRes) {
453de76a5adSDamjan Jovanovic         if (expRes == 0) return testString(str1, str2, expRes, false) ;
454de76a5adSDamjan Jovanovic         return testString(str1, str2, expRes, true) ;
455de76a5adSDamjan Jovanovic     }
456de76a5adSDamjan Jovanovic 
457de76a5adSDamjan Jovanovic     private boolean testString(String str1, String str2, int expRes,
458de76a5adSDamjan Jovanovic         boolean testReverse) {
459de76a5adSDamjan Jovanovic 
460de76a5adSDamjan Jovanovic         boolean ret = true ;
461de76a5adSDamjan Jovanovic 
462de76a5adSDamjan Jovanovic         int res = -666 ;
463de76a5adSDamjan Jovanovic         try {
464de76a5adSDamjan Jovanovic             res = oObj.compareString(str1, str2);
465de76a5adSDamjan Jovanovic         } catch (java.lang.NullPointerException e) {
466*2f709283SDamjan Jovanovic             System.out.println("Exception while method calling occurs :" + e);
467de76a5adSDamjan Jovanovic         }
468de76a5adSDamjan Jovanovic 
469de76a5adSDamjan Jovanovic         if (res == expRes) {
470*2f709283SDamjan Jovanovic             System.out.println("Comparing of '" + str1 + "' and '" + str2 + "' OK" );
471de76a5adSDamjan Jovanovic         } else {
472*2f709283SDamjan Jovanovic             System.out.println("Comparing of '" + str1 + "' and '" + str2 +
473de76a5adSDamjan Jovanovic                 "' FAILED; return: " + res + ", expected: " + expRes);
474de76a5adSDamjan Jovanovic             ret = false ;
475de76a5adSDamjan Jovanovic         }
476de76a5adSDamjan Jovanovic 
477de76a5adSDamjan Jovanovic         if (!testReverse) return ret ;
478de76a5adSDamjan Jovanovic 
479de76a5adSDamjan Jovanovic         res = -666 ;
480de76a5adSDamjan Jovanovic         try {
481de76a5adSDamjan Jovanovic             res = oObj.compareString(str2, str1);
482de76a5adSDamjan Jovanovic         } catch (java.lang.NullPointerException e) {
483*2f709283SDamjan Jovanovic             System.out.println("Exception while method calling occurs :" + e);
484de76a5adSDamjan Jovanovic         }
485de76a5adSDamjan Jovanovic 
486de76a5adSDamjan Jovanovic         if (res == -expRes) {
487*2f709283SDamjan Jovanovic             System.out.println("Comparing of '" + str2 + "' and '" + str1 + "' OK" );
488de76a5adSDamjan Jovanovic         } else {
489*2f709283SDamjan Jovanovic             System.out.println("Comparing of '" + str2 + "' and '" + str1 +
490de76a5adSDamjan Jovanovic                 "' FAILED; return: " + res + ", expected: " + -expRes);
491de76a5adSDamjan Jovanovic             ret = false ;
492de76a5adSDamjan Jovanovic         }
493de76a5adSDamjan Jovanovic 
494de76a5adSDamjan Jovanovic         return ret ;
495de76a5adSDamjan Jovanovic     }
496de76a5adSDamjan Jovanovic }
497