xref: /trunk/test/testuno/source/api/i18n/XTransliterationTest.java (revision de76a5ada4912555267334a137577732392f43a0)
1*de76a5adSDamjan Jovanovic /**************************************************************
2*de76a5adSDamjan Jovanovic  *
3*de76a5adSDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
4*de76a5adSDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
5*de76a5adSDamjan Jovanovic  * distributed with this work for additional information
6*de76a5adSDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
7*de76a5adSDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
8*de76a5adSDamjan Jovanovic  * "License"); you may not use this file except in compliance
9*de76a5adSDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
10*de76a5adSDamjan Jovanovic  *
11*de76a5adSDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
12*de76a5adSDamjan Jovanovic  *
13*de76a5adSDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
14*de76a5adSDamjan Jovanovic  * software distributed under the License is distributed on an
15*de76a5adSDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*de76a5adSDamjan Jovanovic  * KIND, either express or implied.  See the License for the
17*de76a5adSDamjan Jovanovic  * specific language governing permissions and limitations
18*de76a5adSDamjan Jovanovic  * under the License.
19*de76a5adSDamjan Jovanovic  *
20*de76a5adSDamjan Jovanovic  *************************************************************/
21*de76a5adSDamjan Jovanovic 
22*de76a5adSDamjan Jovanovic 
23*de76a5adSDamjan Jovanovic 
24*de76a5adSDamjan Jovanovic package ifc.i18n;
25*de76a5adSDamjan Jovanovic 
26*de76a5adSDamjan Jovanovic import lib.MultiMethodTest;
27*de76a5adSDamjan Jovanovic 
28*de76a5adSDamjan Jovanovic import com.sun.star.i18n.TransliterationModules;
29*de76a5adSDamjan Jovanovic import com.sun.star.i18n.TransliterationModulesNew;
30*de76a5adSDamjan Jovanovic import com.sun.star.i18n.TransliterationType;
31*de76a5adSDamjan Jovanovic import com.sun.star.i18n.XTransliteration;
32*de76a5adSDamjan Jovanovic import com.sun.star.lang.Locale;
33*de76a5adSDamjan Jovanovic 
34*de76a5adSDamjan Jovanovic /**
35*de76a5adSDamjan Jovanovic * Testing <code>com.sun.star.i18n.XTransliteration</code>
36*de76a5adSDamjan Jovanovic * interface methods :
37*de76a5adSDamjan Jovanovic * <ul>
38*de76a5adSDamjan Jovanovic *  <li><code> getName()</code></li>
39*de76a5adSDamjan Jovanovic *  <li><code> getType()</code></li>
40*de76a5adSDamjan Jovanovic *  <li><code> loadModule()</code></li>
41*de76a5adSDamjan Jovanovic *  <li><code> loadModuleNew()</code></li>
42*de76a5adSDamjan Jovanovic *  <li><code> loadModuleByImplName()</code></li>
43*de76a5adSDamjan Jovanovic *  <li><code> loadModulesByImplNames()</code></li>
44*de76a5adSDamjan Jovanovic *  <li><code> getAvailableModules()</code></li>
45*de76a5adSDamjan Jovanovic *  <li><code> transliterate()</code></li>
46*de76a5adSDamjan Jovanovic *  <li><code> folding()</code></li>
47*de76a5adSDamjan Jovanovic *  <li><code> equals()</code></li>
48*de76a5adSDamjan Jovanovic *  <li><code> transliterateRange()</code></li>
49*de76a5adSDamjan Jovanovic * </ul> <p>
50*de76a5adSDamjan Jovanovic * Test is <b> NOT </b> multithread compliant. <p>
51*de76a5adSDamjan Jovanovic * @see com.sun.star.i18n.XTransliteration
52*de76a5adSDamjan Jovanovic */
53*de76a5adSDamjan Jovanovic public class _XTransliteration extends MultiMethodTest {
54*de76a5adSDamjan Jovanovic 
55*de76a5adSDamjan Jovanovic     public XTransliteration oObj = null;
56*de76a5adSDamjan Jovanovic     private String[] mod = null ;
57*de76a5adSDamjan Jovanovic     private Locale loc = new Locale("en", "EN", "") ;
58*de76a5adSDamjan Jovanovic 
59*de76a5adSDamjan Jovanovic     /**
60*de76a5adSDamjan Jovanovic     * Gets all available transliteration modules. <p>
61*de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if array returned has at least
62*de76a5adSDamjan Jovanovic     * one module name.
63*de76a5adSDamjan Jovanovic     */
64*de76a5adSDamjan Jovanovic     public void _getAvailableModules() {
65*de76a5adSDamjan Jovanovic         mod = oObj.getAvailableModules(loc, TransliterationType.ONE_TO_ONE);
66*de76a5adSDamjan Jovanovic 
67*de76a5adSDamjan Jovanovic         if (mod != null) {
68*de76a5adSDamjan Jovanovic             log.println("Available modules :") ;
69*de76a5adSDamjan Jovanovic             for (int i = 0; i < mod.length; i++) {
70*de76a5adSDamjan Jovanovic                 log.println("  '" + mod[i] + "'") ;
71*de76a5adSDamjan Jovanovic             }
72*de76a5adSDamjan Jovanovic         } else {
73*de76a5adSDamjan Jovanovic             log.println("!!! NULL returned !!!") ;
74*de76a5adSDamjan Jovanovic         }
75*de76a5adSDamjan Jovanovic 
76*de76a5adSDamjan Jovanovic         tRes.tested("getAvailableModules()", mod != null && mod.length > 0) ;
77*de76a5adSDamjan Jovanovic     }
78*de76a5adSDamjan Jovanovic 
79*de76a5adSDamjan Jovanovic     /**
80*de76a5adSDamjan Jovanovic     * Calls the method for load IGNORE_CASE module and checks the name returned
81*de76a5adSDamjan Jovanovic     * by the method <code>getName</code>. <p>
82*de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method <code>getName</code> returns the
83*de76a5adSDamjan Jovanovic     * string "case ignore (generic)".
84*de76a5adSDamjan Jovanovic     */
85*de76a5adSDamjan Jovanovic     public void _loadModule() {
86*de76a5adSDamjan Jovanovic         log.println("Load module IGNORE_CASE");
87*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.IGNORE_CASE, loc);
88*de76a5adSDamjan Jovanovic 
89*de76a5adSDamjan Jovanovic         String name = oObj.getName();
90*de76a5adSDamjan Jovanovic         boolean res = name.equals("case ignore (generic)");
91*de76a5adSDamjan Jovanovic         log.println("getName return: " + name);
92*de76a5adSDamjan Jovanovic 
93*de76a5adSDamjan Jovanovic         tRes.tested("loadModule()", res );
94*de76a5adSDamjan Jovanovic     }
95*de76a5adSDamjan Jovanovic 
96*de76a5adSDamjan Jovanovic     /**
97*de76a5adSDamjan Jovanovic      * Loads <code>LOWERCASE_UPPERCASE</code> module and checks the current
98*de76a5adSDamjan Jovanovic      * name of object. <p>
99*de76a5adSDamjan Jovanovic      *
100*de76a5adSDamjan Jovanovic      * Has <b>OK</b> status if the name of the object is equals to
101*de76a5adSDamjan Jovanovic      * 'lower_to_upper(generic)'
102*de76a5adSDamjan Jovanovic      */
103*de76a5adSDamjan Jovanovic     public void _loadModuleNew() {
104*de76a5adSDamjan Jovanovic         boolean result = true ;
105*de76a5adSDamjan Jovanovic 
106*de76a5adSDamjan Jovanovic         oObj.loadModuleNew(
107*de76a5adSDamjan Jovanovic             new TransliterationModulesNew[]
108*de76a5adSDamjan Jovanovic             {TransliterationModulesNew.LOWERCASE_UPPERCASE}, loc);
109*de76a5adSDamjan Jovanovic 
110*de76a5adSDamjan Jovanovic         String name = oObj.getName();
111*de76a5adSDamjan Jovanovic         result = name.equals("lower_to_upper(generic)");
112*de76a5adSDamjan Jovanovic         log.println("getName return: " + name);
113*de76a5adSDamjan Jovanovic 
114*de76a5adSDamjan Jovanovic         tRes.tested("loadModuleNew()", result);
115*de76a5adSDamjan Jovanovic     }
116*de76a5adSDamjan Jovanovic 
117*de76a5adSDamjan Jovanovic     /**
118*de76a5adSDamjan Jovanovic     * Calls the method for load LOWERCASE_UPPERCASE module and
119*de76a5adSDamjan Jovanovic     * checks the name returned by the method <code>getName</code>. <p>
120*de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method <code>getName</code> returns the
121*de76a5adSDamjan Jovanovic     * string "lower_to_upper(generic)".
122*de76a5adSDamjan Jovanovic     */
123*de76a5adSDamjan Jovanovic     public void _loadModuleByImplName() {
124*de76a5adSDamjan Jovanovic         log.println("Load module LOWERCASE_UPPERCASE");
125*de76a5adSDamjan Jovanovic         oObj.loadModuleByImplName("LOWERCASE_UPPERCASE", loc);
126*de76a5adSDamjan Jovanovic 
127*de76a5adSDamjan Jovanovic         String name = oObj.getName();
128*de76a5adSDamjan Jovanovic         boolean res = name.equals("lower_to_upper(generic)");
129*de76a5adSDamjan Jovanovic         log.println("getName return: " + name);
130*de76a5adSDamjan Jovanovic 
131*de76a5adSDamjan Jovanovic         tRes.tested("loadModuleByImplName()", res);
132*de76a5adSDamjan Jovanovic     }
133*de76a5adSDamjan Jovanovic 
134*de76a5adSDamjan Jovanovic     /**
135*de76a5adSDamjan Jovanovic     * Calls the method for load UPPERCASE_LOWERCASE module and
136*de76a5adSDamjan Jovanovic     * checks the name returned by the method <code>getName</code>. <p>
137*de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method <code>getName</code> returns the
138*de76a5adSDamjan Jovanovic     * string "upper_to_lower(generic)".
139*de76a5adSDamjan Jovanovic     */
140*de76a5adSDamjan Jovanovic     public void _loadModulesByImplNames() {
141*de76a5adSDamjan Jovanovic         log.println("Load module UPPERCASE_LOWERCASE");
142*de76a5adSDamjan Jovanovic         oObj.loadModulesByImplNames(new String[]{"UPPERCASE_LOWERCASE"}, loc);
143*de76a5adSDamjan Jovanovic 
144*de76a5adSDamjan Jovanovic         String name = oObj.getName();
145*de76a5adSDamjan Jovanovic         boolean res = name.equals("upper_to_lower(generic)");
146*de76a5adSDamjan Jovanovic         log.println("getName return: " + name);
147*de76a5adSDamjan Jovanovic 
148*de76a5adSDamjan Jovanovic         tRes.tested("loadModulesByImplNames()", res);
149*de76a5adSDamjan Jovanovic     }
150*de76a5adSDamjan Jovanovic 
151*de76a5adSDamjan Jovanovic     /**
152*de76a5adSDamjan Jovanovic      * Loads <code>LOWERCASE_UPPERCASE</code> module and checks current type.
153*de76a5adSDamjan Jovanovic      * <p>Has <b>OK</b> status if the type is <code>ONE_TO_ONE</code>
154*de76a5adSDamjan Jovanovic      */
155*de76a5adSDamjan Jovanovic     public void _getType() {
156*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
157*de76a5adSDamjan Jovanovic         boolean result = oObj.getType() == TransliterationType.ONE_TO_ONE;
158*de76a5adSDamjan Jovanovic         tRes.tested("getType()", result);
159*de76a5adSDamjan Jovanovic     }
160*de76a5adSDamjan Jovanovic 
161*de76a5adSDamjan Jovanovic     /**
162*de76a5adSDamjan Jovanovic     * Loads UPPERCASE_LOWERCASE module and
163*de76a5adSDamjan Jovanovic     * checks the name returned by the method <code>getName</code>. <p>
164*de76a5adSDamjan Jovanovic     *
165*de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method <code>getName</code> returns the
166*de76a5adSDamjan Jovanovic     * string "upper_to_lower(generic)".
167*de76a5adSDamjan Jovanovic     */
168*de76a5adSDamjan Jovanovic     public void _getName() {
169*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
170*de76a5adSDamjan Jovanovic 
171*de76a5adSDamjan Jovanovic         String name = oObj.getName();
172*de76a5adSDamjan Jovanovic         boolean res = name.equals("lower_to_upper(generic)");
173*de76a5adSDamjan Jovanovic         log.println("getName return: " + name);
174*de76a5adSDamjan Jovanovic 
175*de76a5adSDamjan Jovanovic         tRes.tested("getName()", res);
176*de76a5adSDamjan Jovanovic     }
177*de76a5adSDamjan Jovanovic 
178*de76a5adSDamjan Jovanovic     /**
179*de76a5adSDamjan Jovanovic     * First loads <code>LOWERCASE_UPPERCASE</code> module.
180*de76a5adSDamjan Jovanovic     * Then tries to transliterate (make uppercase) a substring. <p>
181*de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if all chars were made uppercase,
182*de76a5adSDamjan Jovanovic     * and array returned has size as substring length, and its
183*de76a5adSDamjan Jovanovic     * elements are positions of substring characters in the source
184*de76a5adSDamjan Jovanovic     * string.
185*de76a5adSDamjan Jovanovic     */
186*de76a5adSDamjan Jovanovic     public void _transliterate() {
187*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
188*de76a5adSDamjan Jovanovic 
189*de76a5adSDamjan Jovanovic         int[][] offs = new int[1][] ;
190*de76a5adSDamjan Jovanovic 
191*de76a5adSDamjan Jovanovic         String out = oObj.transliterate("AaBbCc", 1, 4, offs) ;
192*de76a5adSDamjan Jovanovic 
193*de76a5adSDamjan Jovanovic         boolean result = "ABBC".equals(out) && offs[0].length == 4 &&
194*de76a5adSDamjan Jovanovic             offs[0][0] == 1 &&
195*de76a5adSDamjan Jovanovic             offs[0][1] == 2 &&
196*de76a5adSDamjan Jovanovic             offs[0][2] == 3 &&
197*de76a5adSDamjan Jovanovic             offs[0][3] == 4 ;
198*de76a5adSDamjan Jovanovic 
199*de76a5adSDamjan Jovanovic         tRes.tested("transliterate()", result) ;
200*de76a5adSDamjan Jovanovic     }
201*de76a5adSDamjan Jovanovic 
202*de76a5adSDamjan Jovanovic 
203*de76a5adSDamjan Jovanovic     /**
204*de76a5adSDamjan Jovanovic     * First loads <code>LOWERCASE_UPPERCASE</code> module.
205*de76a5adSDamjan Jovanovic     * Tries to transliterate a range of two characters. <p>
206*de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the appropriate String array
207*de76a5adSDamjan Jovanovic     * returned (not null, length = 4, with two ranges
208*de76a5adSDamjan Jovanovic     * (a, i), (A, I) in any order).
209*de76a5adSDamjan Jovanovic     */
210*de76a5adSDamjan Jovanovic     public void _transliterateRange() {
211*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.IGNORE_CASE, loc);
212*de76a5adSDamjan Jovanovic 
213*de76a5adSDamjan Jovanovic         String[] out = oObj.transliterateRange("a", "i") ;
214*de76a5adSDamjan Jovanovic 
215*de76a5adSDamjan Jovanovic         log.println("transliterateRange return:");
216*de76a5adSDamjan Jovanovic         for(int i = 0; i < out.length; i++) {
217*de76a5adSDamjan Jovanovic             log.println(out[i]);
218*de76a5adSDamjan Jovanovic         }
219*de76a5adSDamjan Jovanovic 
220*de76a5adSDamjan Jovanovic         boolean bOK = out != null &&
221*de76a5adSDamjan Jovanovic             out.length == 4 &&
222*de76a5adSDamjan Jovanovic             ("A".equals(out[0]) && "I".equals(out[1]) &&
223*de76a5adSDamjan Jovanovic             "a".equals(out[2]) && "i".equals(out[3])) ||
224*de76a5adSDamjan Jovanovic             ("a".equals(out[0]) && "i".equals(out[1]) &&
225*de76a5adSDamjan Jovanovic             "A".equals(out[2]) && "I".equals(out[3])) ;
226*de76a5adSDamjan Jovanovic 
227*de76a5adSDamjan Jovanovic         if (!bOK) {
228*de76a5adSDamjan Jovanovic             log.println("Unexpected range returned :");
229*de76a5adSDamjan Jovanovic             for (int i = 0; i < out.length; i++) {
230*de76a5adSDamjan Jovanovic                 log.print("'" + out[i] +"', ");
231*de76a5adSDamjan Jovanovic             }
232*de76a5adSDamjan Jovanovic             log.println();
233*de76a5adSDamjan Jovanovic         }
234*de76a5adSDamjan Jovanovic 
235*de76a5adSDamjan Jovanovic         tRes.tested("transliterateRange()", bOK);
236*de76a5adSDamjan Jovanovic     }
237*de76a5adSDamjan Jovanovic 
238*de76a5adSDamjan Jovanovic     /**
239*de76a5adSDamjan Jovanovic     * This method is used internally by <code>equals</code>
240*de76a5adSDamjan Jovanovic     * method so it indirectly tested in this method. <p>
241*de76a5adSDamjan Jovanovic     * Always has <b>OK</b> status.
242*de76a5adSDamjan Jovanovic     */
243*de76a5adSDamjan Jovanovic     public void _folding() {
244*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
245*de76a5adSDamjan Jovanovic 
246*de76a5adSDamjan Jovanovic         int[][] offs = new int[1][] ;
247*de76a5adSDamjan Jovanovic 
248*de76a5adSDamjan Jovanovic         String out = oObj.folding("AaBbCc", 1, 4, offs) ;
249*de76a5adSDamjan Jovanovic 
250*de76a5adSDamjan Jovanovic         boolean result = "ABBC".equals(out) && offs[0].length == 4 &&
251*de76a5adSDamjan Jovanovic             offs[0][0] == 1 &&
252*de76a5adSDamjan Jovanovic             offs[0][1] == 2 &&
253*de76a5adSDamjan Jovanovic             offs[0][2] == 3 &&
254*de76a5adSDamjan Jovanovic             offs[0][3] == 4 ;
255*de76a5adSDamjan Jovanovic 
256*de76a5adSDamjan Jovanovic 
257*de76a5adSDamjan Jovanovic         tRes.tested("folding()", result) ;
258*de76a5adSDamjan Jovanovic     }
259*de76a5adSDamjan Jovanovic 
260*de76a5adSDamjan Jovanovic 
261*de76a5adSDamjan Jovanovic     /**
262*de76a5adSDamjan Jovanovic     * First loads <code>LOWERCASE_UPPERCASE</code> module.
263*de76a5adSDamjan Jovanovic     * Tries to compare two equal substrings. <p>
264*de76a5adSDamjan Jovanovic     * Has <b>OK</b> status if the method returned <code>true</code>.
265*de76a5adSDamjan Jovanovic     */
266*de76a5adSDamjan Jovanovic     public void _equals() {
267*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
268*de76a5adSDamjan Jovanovic 
269*de76a5adSDamjan Jovanovic         int[] match1 = new int[1],
270*de76a5adSDamjan Jovanovic               match2 = new int[1] ;
271*de76a5adSDamjan Jovanovic 
272*de76a5adSDamjan Jovanovic         boolean res = oObj.equals("aAbBcC", 1, 3, match1, "aAbBcC", 1,
273*de76a5adSDamjan Jovanovic             3, match2) ;
274*de76a5adSDamjan Jovanovic 
275*de76a5adSDamjan Jovanovic         log.println("Returned : " + res + " Match1 = " + match1[0] +
276*de76a5adSDamjan Jovanovic             " Match2 = " + match2[0]) ;
277*de76a5adSDamjan Jovanovic 
278*de76a5adSDamjan Jovanovic         tRes.tested("equals()", res) ;
279*de76a5adSDamjan Jovanovic     }
280*de76a5adSDamjan Jovanovic 
281*de76a5adSDamjan Jovanovic     /**
282*de76a5adSDamjan Jovanovic      * Test performed for sets of equal substrings, not equal
283*de76a5adSDamjan Jovanovic      * substrings, and with out of bounds offset and length
284*de76a5adSDamjan Jovanovic      * parameters.<p>
285*de76a5adSDamjan Jovanovic      *
286*de76a5adSDamjan Jovanovic      * Has <b>OK</b> status if comparings of equal substrings
287*de76a5adSDamjan Jovanovic      * always return 0, if comparisons of none equal returns
288*de76a5adSDamjan Jovanovic      * proper value according to lexicographical order and if
289*de76a5adSDamjan Jovanovic      * comparisons with invalid parameters return none 0 value.
290*de76a5adSDamjan Jovanovic      */
291*de76a5adSDamjan Jovanovic     public void _compareSubstring() {
292*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
293*de76a5adSDamjan Jovanovic         boolean result = true ;
294*de76a5adSDamjan Jovanovic 
295*de76a5adSDamjan Jovanovic         // substrings below must be equal
296*de76a5adSDamjan Jovanovic         result &= testSubstring("", 0, 0, "", 0, 0, 0) ;
297*de76a5adSDamjan Jovanovic         result &= testSubstring("aa", 1, 0, "", 0, 0, 0) ;
298*de76a5adSDamjan Jovanovic         result &= testSubstring("aa", 1, 0, "aa", 2, 0, 0) ;
299*de76a5adSDamjan Jovanovic         result &= testSubstring("a", 0, 1, "a", 0, 1, 0) ;
300*de76a5adSDamjan Jovanovic         result &= testSubstring("ab", 0, 2, "ab", 0, 2, 0) ;
301*de76a5adSDamjan Jovanovic         result &= testSubstring("abc", 1, 2, "abc", 1, 2, 0) ;
302*de76a5adSDamjan Jovanovic         result &= testSubstring("abcdef", 0, 3, "123abc", 3, 3, 0) ;
303*de76a5adSDamjan Jovanovic         result &= testSubstring("abcdef", 1, 1, "123abc", 4, 1, 0) ;
304*de76a5adSDamjan Jovanovic 
305*de76a5adSDamjan Jovanovic         // substrings below must NOT be equal
306*de76a5adSDamjan Jovanovic         result &= testSubstring("a", 0, 1, "a", 0, 0, 1) ;
307*de76a5adSDamjan Jovanovic         result &= testSubstring("aaa", 1, 1, "", 0, 0, 1) ;
308*de76a5adSDamjan Jovanovic         result &= testSubstring("bbb", 2, 1, "aaa", 2, 1, 1) ;
309*de76a5adSDamjan Jovanovic         result &= testSubstring("abc", 0, 3, "abc", 0, 2, 1) ;
310*de76a5adSDamjan Jovanovic         result &= testSubstring("bbc", 1, 2, "bbc", 0, 2, 1) ;
311*de76a5adSDamjan Jovanovic 
312*de76a5adSDamjan Jovanovic         // testing with wrong offsets and lengths
313*de76a5adSDamjan Jovanovic 
314*de76a5adSDamjan Jovanovic         tRes.tested("compareSubstring()", result) ;
315*de76a5adSDamjan Jovanovic     }
316*de76a5adSDamjan Jovanovic 
317*de76a5adSDamjan Jovanovic     /**
318*de76a5adSDamjan Jovanovic      * Performs tesing of two substrings. Also testing of opposite
319*de76a5adSDamjan Jovanovic      * substrings order performed.
320*de76a5adSDamjan Jovanovic      * @return <code>true</code> if substrings are equal and retruned
321*de76a5adSDamjan Jovanovic      * value is 0 for both orders,
322*de76a5adSDamjan Jovanovic      * if substrings are different and expected value
323*de76a5adSDamjan Jovanovic      * returned for direct order and opposite value returned for
324*de76a5adSDamjan Jovanovic      * opposite order.
325*de76a5adSDamjan Jovanovic      */
326*de76a5adSDamjan Jovanovic     private boolean testSubstring(String str1, int p1, int len1,
327*de76a5adSDamjan Jovanovic         String str2, int p2, int len2, int expRes) {
328*de76a5adSDamjan Jovanovic 
329*de76a5adSDamjan Jovanovic         boolean ret = true ;
330*de76a5adSDamjan Jovanovic 
331*de76a5adSDamjan Jovanovic         int res = -666 ;
332*de76a5adSDamjan Jovanovic         try {
333*de76a5adSDamjan Jovanovic             res = oObj.compareSubstring(str1, p1, len1, str2, p2, len2);
334*de76a5adSDamjan Jovanovic         } catch (java.lang.NullPointerException e) {
335*de76a5adSDamjan Jovanovic             log.println("Exception while method calling occurs :" + e);
336*de76a5adSDamjan Jovanovic         }
337*de76a5adSDamjan Jovanovic 
338*de76a5adSDamjan Jovanovic         if (res != expRes) {
339*de76a5adSDamjan Jovanovic             log.print("Comparing FAILED; return: " + res + ", expected: " +
340*de76a5adSDamjan Jovanovic                 expRes + " ");
341*de76a5adSDamjan Jovanovic             ret = false ;
342*de76a5adSDamjan Jovanovic         } else {
343*de76a5adSDamjan Jovanovic             log.print("Comparing OK : ");
344*de76a5adSDamjan Jovanovic         }
345*de76a5adSDamjan Jovanovic         log.println("('" + str1 + "', " + p1 + ", " + len1 + ", '" +
346*de76a5adSDamjan Jovanovic             str2 + "', " + p2 + ", " + len2 + ")");
347*de76a5adSDamjan Jovanovic 
348*de76a5adSDamjan Jovanovic         res = -666 ;
349*de76a5adSDamjan Jovanovic         try {
350*de76a5adSDamjan Jovanovic             res = oObj.compareSubstring(str2, p2, len2, str1, p1, len1);
351*de76a5adSDamjan Jovanovic         } catch (java.lang.NullPointerException e) {
352*de76a5adSDamjan Jovanovic             log.println("Exception while method calling occurs :" + e);
353*de76a5adSDamjan Jovanovic         }
354*de76a5adSDamjan Jovanovic 
355*de76a5adSDamjan Jovanovic         if (res != -expRes) {
356*de76a5adSDamjan Jovanovic             log.print("Comparing FAILED; return: " + res + ", expected: " +
357*de76a5adSDamjan Jovanovic                 -expRes  + " ");
358*de76a5adSDamjan Jovanovic             ret = false ;
359*de76a5adSDamjan Jovanovic         } else {
360*de76a5adSDamjan Jovanovic             log.print("Comparing OK :");
361*de76a5adSDamjan Jovanovic         }
362*de76a5adSDamjan Jovanovic         log.println("('" + str2 + "', " + p2 + ", " + len2 + ", '" +
363*de76a5adSDamjan Jovanovic             str1 + "', " + p1 + ", " + len1 + ")");
364*de76a5adSDamjan Jovanovic 
365*de76a5adSDamjan Jovanovic         return ret ;
366*de76a5adSDamjan Jovanovic     }
367*de76a5adSDamjan Jovanovic 
368*de76a5adSDamjan Jovanovic     /**
369*de76a5adSDamjan Jovanovic      * Test performed for sets of equal strings and not equal
370*de76a5adSDamjan Jovanovic      * strings.<p>
371*de76a5adSDamjan Jovanovic      *
372*de76a5adSDamjan Jovanovic      * Has <b>OK</b> status if comparings of equal strings
373*de76a5adSDamjan Jovanovic      * always return 0 and if comparisons of none equal returns
374*de76a5adSDamjan Jovanovic      * proper value according to lexicographical order .
375*de76a5adSDamjan Jovanovic      */
376*de76a5adSDamjan Jovanovic     public void _compareString() {
377*de76a5adSDamjan Jovanovic         oObj.loadModule(TransliterationModules.LOWERCASE_UPPERCASE, loc);
378*de76a5adSDamjan Jovanovic         boolean result = true ;
379*de76a5adSDamjan Jovanovic 
380*de76a5adSDamjan Jovanovic         result &= testString("", "", 0) ;
381*de76a5adSDamjan Jovanovic         result &= testString("a", "", 1) ;
382*de76a5adSDamjan Jovanovic         result &= testString("a", "a", 0) ;
383*de76a5adSDamjan Jovanovic         result &= testString("A", "a", 0) ;
384*de76a5adSDamjan Jovanovic         result &= testString("b", "a", 1) ;
385*de76a5adSDamjan Jovanovic         result &= testString("\n", "\n", 0) ;
386*de76a5adSDamjan Jovanovic         result &= testString("\n", "\t", 1) ;
387*de76a5adSDamjan Jovanovic         result &= testString("aaa", "aaa", 0) ;
388*de76a5adSDamjan Jovanovic         result &= testString("aaA", "aaa", 0) ;
389*de76a5adSDamjan Jovanovic         result &= testString("aaa", "aa", 1) ;
390*de76a5adSDamjan Jovanovic         result &= testString("ab", "aaa", 1) ;
391*de76a5adSDamjan Jovanovic         result &= testString("aba", "aa", 1) ;
392*de76a5adSDamjan Jovanovic         result &= testString("aaa\t\na", "aaa\t\na", 0) ;
393*de76a5adSDamjan Jovanovic         result &= testString("aaa\t\nb", "aaa\t\na", 1) ;
394*de76a5adSDamjan Jovanovic 
395*de76a5adSDamjan Jovanovic         tRes.tested("compareString()", result) ;
396*de76a5adSDamjan Jovanovic     }
397*de76a5adSDamjan Jovanovic 
398*de76a5adSDamjan Jovanovic     /**
399*de76a5adSDamjan Jovanovic      * Performs tesing of two strings. If the expected value is not 0
400*de76a5adSDamjan Jovanovic      * (i.e. strings are not equal), then also testing of opposite
401*de76a5adSDamjan Jovanovic      * strings order performed.
402*de76a5adSDamjan Jovanovic      * @return <code>true</code> if strings are equal and retruned
403*de76a5adSDamjan Jovanovic      * value is 0, if strings are different and expected value
404*de76a5adSDamjan Jovanovic      * returned for direct order and opposite value returned for
405*de76a5adSDamjan Jovanovic      * opposite order.
406*de76a5adSDamjan Jovanovic      */
407*de76a5adSDamjan Jovanovic     protected boolean testString(String str1, String str2, int expRes) {
408*de76a5adSDamjan Jovanovic         if (expRes == 0) return testString(str1, str2, expRes, false) ;
409*de76a5adSDamjan Jovanovic         return testString(str1, str2, expRes, true) ;
410*de76a5adSDamjan Jovanovic     }
411*de76a5adSDamjan Jovanovic 
412*de76a5adSDamjan Jovanovic     private boolean testString(String str1, String str2, int expRes,
413*de76a5adSDamjan Jovanovic         boolean testReverse) {
414*de76a5adSDamjan Jovanovic 
415*de76a5adSDamjan Jovanovic         boolean ret = true ;
416*de76a5adSDamjan Jovanovic 
417*de76a5adSDamjan Jovanovic         int res = -666 ;
418*de76a5adSDamjan Jovanovic         try {
419*de76a5adSDamjan Jovanovic             res = oObj.compareString(str1, str2);
420*de76a5adSDamjan Jovanovic         } catch (java.lang.NullPointerException e) {
421*de76a5adSDamjan Jovanovic             log.println("Exception while method calling occurs :" + e);
422*de76a5adSDamjan Jovanovic         }
423*de76a5adSDamjan Jovanovic 
424*de76a5adSDamjan Jovanovic         if (res == expRes) {
425*de76a5adSDamjan Jovanovic             log.println("Comparing of '" + str1 + "' and '" + str2 + "' OK" );
426*de76a5adSDamjan Jovanovic         } else {
427*de76a5adSDamjan Jovanovic             log.println("Comparing of '" + str1 + "' and '" + str2 +
428*de76a5adSDamjan Jovanovic                 "' FAILED; return: " + res + ", expected: " + expRes);
429*de76a5adSDamjan Jovanovic             ret = false ;
430*de76a5adSDamjan Jovanovic         }
431*de76a5adSDamjan Jovanovic 
432*de76a5adSDamjan Jovanovic         if (!testReverse) return ret ;
433*de76a5adSDamjan Jovanovic 
434*de76a5adSDamjan Jovanovic         res = -666 ;
435*de76a5adSDamjan Jovanovic         try {
436*de76a5adSDamjan Jovanovic             res = oObj.compareString(str2, str1);
437*de76a5adSDamjan Jovanovic         } catch (java.lang.NullPointerException e) {
438*de76a5adSDamjan Jovanovic             log.println("Exception while method calling occurs :" + e);
439*de76a5adSDamjan Jovanovic         }
440*de76a5adSDamjan Jovanovic 
441*de76a5adSDamjan Jovanovic         if (res == -expRes) {
442*de76a5adSDamjan Jovanovic             log.println("Comparing of '" + str2 + "' and '" + str1 + "' OK" );
443*de76a5adSDamjan Jovanovic         } else {
444*de76a5adSDamjan Jovanovic             log.println("Comparing of '" + str2 + "' and '" + str1 +
445*de76a5adSDamjan Jovanovic                 "' FAILED; return: " + res + ", expected: " + -expRes);
446*de76a5adSDamjan Jovanovic             ret = false ;
447*de76a5adSDamjan Jovanovic         }
448*de76a5adSDamjan Jovanovic 
449*de76a5adSDamjan Jovanovic         return ret ;
450*de76a5adSDamjan Jovanovic     }
451*de76a5adSDamjan Jovanovic }
452