xref: /trunk/test/testuno/source/api/i18n/XTransliterationTest.java (revision efd61a206bbee858699f5a9f10508cd13f81bbbf)
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 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;
312f709283SDamjan Jovanovic import com.sun.star.uno.UnoRuntime;
322f709283SDamjan Jovanovic import com.sun.star.uno.XComponentContext;
332f709283SDamjan Jovanovic import org.junit.After;
342f709283SDamjan Jovanovic import org.junit.AfterClass;
352f709283SDamjan Jovanovic import org.junit.Before;
362f709283SDamjan Jovanovic import org.junit.BeforeClass;
372f709283SDamjan Jovanovic import org.junit.Assert;
382f709283SDamjan Jovanovic import org.junit.Test;
392f709283SDamjan 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 */
602f709283SDamjan Jovanovic public class XTransliterationTest {
612f709283SDamjan Jovanovic     private static final UnoApp app = new UnoApp();
62de76a5adSDamjan Jovanovic 
632f709283SDamjan 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 
682f709283SDamjan Jovanovic 
692f709283SDamjan Jovanovic     // setup and close connections
702f709283SDamjan Jovanovic     @BeforeClass
setUpConnection()712f709283SDamjan Jovanovic     public static void setUpConnection() throws Exception
722f709283SDamjan Jovanovic     {
732f709283SDamjan Jovanovic         app.start();
742f709283SDamjan Jovanovic     }
752f709283SDamjan Jovanovic 
762f709283SDamjan Jovanovic     @AfterClass
tearDownConnection()772f709283SDamjan Jovanovic     public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception
782f709283SDamjan Jovanovic     {
792f709283SDamjan Jovanovic         app.close();
802f709283SDamjan Jovanovic     }
812f709283SDamjan Jovanovic 
822f709283SDamjan Jovanovic     @Before
before()832f709283SDamjan Jovanovic     public void before() throws Exception {
842f709283SDamjan Jovanovic         xContext = app.getComponentContext();
852f709283SDamjan Jovanovic         oObj = UnoRuntime.queryInterface(
862f709283SDamjan Jovanovic             XTransliteration.class,
872f709283SDamjan Jovanovic             xContext.getServiceManager().createInstanceWithContext("com.sun.star.i18n.Transliteration", xContext)
882f709283SDamjan Jovanovic         );
892f709283SDamjan Jovanovic     }
902f709283SDamjan 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     */
962f709283SDamjan Jovanovic     @Test
_getAvailableModules()97de76a5adSDamjan Jovanovic     public void _getAvailableModules() {
98de76a5adSDamjan Jovanovic         mod = oObj.getAvailableModules(loc, TransliterationType.ONE_TO_ONE);
99de76a5adSDamjan Jovanovic 
100de76a5adSDamjan Jovanovic         if (mod != null) {
1012f709283SDamjan Jovanovic             System.out.println("Available modules :") ;
102de76a5adSDamjan Jovanovic             for (int i = 0; i < mod.length; i++) {
1032f709283SDamjan Jovanovic                 System.out.println("  '" + mod[i] + "'") ;
104de76a5adSDamjan Jovanovic             }
105de76a5adSDamjan Jovanovic         } else {
1062f709283SDamjan Jovanovic             System.out.println("!!! NULL returned !!!") ;
107de76a5adSDamjan Jovanovic         }
108de76a5adSDamjan Jovanovic 
1092f709283SDamjan 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     */
1182f709283SDamjan Jovanovic     @Test
_loadModule()119de76a5adSDamjan Jovanovic     public void _loadModule() {
1202f709283SDamjan 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)");
1252f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
126de76a5adSDamjan Jovanovic 
1272f709283SDamjan 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      */
1372f709283SDamjan Jovanovic     @Test
_loadModuleNew()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)");
1472f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
148de76a5adSDamjan Jovanovic 
1492f709283SDamjan 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     */
1582f709283SDamjan Jovanovic     @Test
_loadModuleByImplName()159de76a5adSDamjan Jovanovic     public void _loadModuleByImplName() {
1602f709283SDamjan 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)");
1652f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
166de76a5adSDamjan Jovanovic 
1672f709283SDamjan 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     */
1762f709283SDamjan Jovanovic     @Test
_loadModulesByImplNames()177de76a5adSDamjan Jovanovic     public void _loadModulesByImplNames() {
1782f709283SDamjan 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)");
1832f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
184de76a5adSDamjan Jovanovic 
1852f709283SDamjan 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      */
1922f709283SDamjan Jovanovic     @Test
_getType()193de76a5adSDamjan Jovanovic     public void _getType() {
194de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
195de76a5adSDamjan Jovanovic         boolean result = oObj.getType() == TransliterationType.ONE_TO_ONE;
1962f709283SDamjan 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     */
2062f709283SDamjan Jovanovic     @Test
_getName()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)");
2122f709283SDamjan Jovanovic         System.out.println("getName return: " + name);
213de76a5adSDamjan Jovanovic 
2142f709283SDamjan 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     */
2252f709283SDamjan Jovanovic     @Test
_transliterate()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 
2392f709283SDamjan 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     */
2502f709283SDamjan Jovanovic     @Test
_transliterateRange()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 
2562f709283SDamjan Jovanovic         System.out.println("transliterateRange return:");
257de76a5adSDamjan Jovanovic         for(int i = 0; i < out.length; i++) {
2582f709283SDamjan 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) {
2692f709283SDamjan Jovanovic             System.out.println("Unexpected range returned :");
270de76a5adSDamjan Jovanovic             for (int i = 0; i < out.length; i++) {
2712f709283SDamjan Jovanovic                 System.out.print("'" + out[i] +"', ");
272de76a5adSDamjan Jovanovic             }
2732f709283SDamjan Jovanovic             System.out.println();
274de76a5adSDamjan Jovanovic         }
275de76a5adSDamjan Jovanovic 
2762f709283SDamjan 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     */
2842f709283SDamjan Jovanovic     @Test
_folding()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 
2992f709283SDamjan 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     */
3082f709283SDamjan Jovanovic     @Test
_equals()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 
3182f709283SDamjan Jovanovic         System.out.println("Returned : " + res + " Match1 = " + match1[0] +
319de76a5adSDamjan Jovanovic             " Match2 = " + match2[0]) ;
320de76a5adSDamjan Jovanovic 
3212f709283SDamjan 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      */
3342f709283SDamjan Jovanovic     @Test
_compareSubstring()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 
3582f709283SDamjan 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.
364*efd61a20SJohn Bampton      * @return <code>true</code> if substrings are equal and returned
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      */
testSubstring(String str1, int p1, int len1, String str2, int p2, int len2, int expRes)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) {
3792f709283SDamjan Jovanovic             System.out.println("Exception while method calling occurs :" + e);
380de76a5adSDamjan Jovanovic         }
381de76a5adSDamjan Jovanovic 
382de76a5adSDamjan Jovanovic         if (res != expRes) {
3832f709283SDamjan Jovanovic             System.out.print("Comparing FAILED; return: " + res + ", expected: " +
384de76a5adSDamjan Jovanovic                 expRes + " ");
385de76a5adSDamjan Jovanovic             ret = false ;
386de76a5adSDamjan Jovanovic         } else {
3872f709283SDamjan Jovanovic             System.out.print("Comparing OK : ");
388de76a5adSDamjan Jovanovic         }
3892f709283SDamjan 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) {
3962f709283SDamjan Jovanovic             System.out.println("Exception while method calling occurs :" + e);
397de76a5adSDamjan Jovanovic         }
398de76a5adSDamjan Jovanovic 
399de76a5adSDamjan Jovanovic         if (res != -expRes) {
4002f709283SDamjan Jovanovic             System.out.print("Comparing FAILED; return: " + res + ", expected: " +
401de76a5adSDamjan Jovanovic                 -expRes  + " ");
402de76a5adSDamjan Jovanovic             ret = false ;
403de76a5adSDamjan Jovanovic         } else {
4042f709283SDamjan Jovanovic             System.out.print("Comparing OK :");
405de76a5adSDamjan Jovanovic         }
4062f709283SDamjan 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      */
4202f709283SDamjan Jovanovic     @Test
_compareString()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 
4402f709283SDamjan 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.
447*efd61a20SJohn Bampton      * @return <code>true</code> if strings are equal and returned
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      */
testString(String str1, String str2, int expRes)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 
testString(String str1, String str2, int expRes, boolean testReverse)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) {
4662f709283SDamjan Jovanovic             System.out.println("Exception while method calling occurs :" + e);
467de76a5adSDamjan Jovanovic         }
468de76a5adSDamjan Jovanovic 
469de76a5adSDamjan Jovanovic         if (res == expRes) {
4702f709283SDamjan Jovanovic             System.out.println("Comparing of '" + str1 + "' and '" + str2 + "' OK" );
471de76a5adSDamjan Jovanovic         } else {
4722f709283SDamjan 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) {
4832f709283SDamjan Jovanovic             System.out.println("Exception while method calling occurs :" + e);
484de76a5adSDamjan Jovanovic         }
485de76a5adSDamjan Jovanovic 
486de76a5adSDamjan Jovanovic         if (res == -expRes) {
4872f709283SDamjan Jovanovic             System.out.println("Comparing of '" + str2 + "' and '" + str1 + "' OK" );
488de76a5adSDamjan Jovanovic         } else {
4892f709283SDamjan 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