1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: _XExtendedIndexEntrySupplier.java,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
32 import com
.sun
.star
.i18n
.CollatorOptions
;
33 import com
.sun
.star
.i18n
.XExtendedIndexEntrySupplier
;
34 import com
.sun
.star
.lang
.Locale
;
36 import java
.util
.HashMap
;
38 import lib
.MultiMethodTest
;
41 public class _XExtendedIndexEntrySupplier
extends MultiMethodTest
{
42 public XExtendedIndexEntrySupplier oObj
;
43 protected Locale
[] locales
= null;
44 protected HashMap algorithms
= new HashMap();
46 public void _compareIndexEntry() {
47 requiredMethod("getIndexKey()");
48 Locale locale
= new Locale("zh", "CN", "");
49 String val1
= new String(new char[]{UnicodeStringPair
.getUnicodeValue(0), UnicodeStringPair
.getUnicodeValue(1)});
50 String val2
= new String(new char[]{UnicodeStringPair
.getUnicodeValue(1), UnicodeStringPair
.getUnicodeValue(0)});
51 short result1
= oObj
.compareIndexEntry(val1
, "", locale
, val1
, "", locale
);
52 short result2
= oObj
.compareIndexEntry(val1
, "", locale
, val2
, "", locale
);
53 short result3
= oObj
.compareIndexEntry(val2
, "", locale
, val1
, "", locale
);
55 tRes
.tested("compareIndexEntry()", result1
== 0 && result2
+ result3
== 0);
59 * gets the list of all algorithms for each listed language
60 * is OK if everyone of the returned lists are filled
62 public void _getAlgorithmList() {
63 requiredMethod("getLocaleList()");
65 boolean result
= true;
66 boolean locResult
= false;
68 for (int i
= 0; i
< locales
.length
; i
++) {
69 String
[] algNames
= oObj
.getAlgorithmList(locales
[i
]);
70 algorithms
.put(new Integer(i
), algNames
);
72 locResult
= algNames
!= null && algNames
.length
> 0;
73 System
.out
.println("Locale " + i
+ ": " + locales
[i
].Country
+","+locales
[i
].Language
);
75 for (int j
=0; j
<algNames
.length
; j
++) {
76 System
.out
.println("\tAlgorithm " + j
+ ": " + algNames
[j
]);
80 log
.println("No Algorithm found for " + locales
[i
].Country
+
81 "," + locales
[i
].Language
);
87 tRes
.tested("getAlgorithmList()", result
);
90 public void _getIndexKey() {
91 requiredMethod("loadAlgorithm()");
92 char[] characters
= new char[] { 19968 };
93 String getIndexFor
= new String(characters
);
94 for (int i
= 0; i
< locales
.length
; i
++) {
95 log
.println("Language: " + locales
[i
].Language
);
97 for (int j
= 0; j
< algorithms
.size(); j
++) {
98 String
[] algs
= (String
[])algorithms
.get(new Integer(j
));
99 for (int k
=0;k
<algs
.length
;k
++) {
100 log
.println("\t Algorythm :" +
102 oObj
.loadAlgorithm(locales
[i
], algs
[k
], CollatorOptions
.CollatorOptions_IGNORE_CASE
);
103 log
.println("\t\t Get: " +
104 oObj
.getIndexKey(getIndexFor
, "", locales
[i
]));
108 tRes
.tested("getIndexKey()", true);
112 * gets a list of all locales, is OK if this list isn't empty
114 public void _getLocaleList() {
115 locales
= oObj
.getLocaleList();
116 tRes
.tested("getLocaleList()", locales
.length
> 0);
120 * gets one phonetic canidate for the chinese local
121 * is ok if 'yi' is returned as expected.
123 public void _getPhoneticCandidate() {
124 requiredMethod("getLocaleList()");
128 Locale loc
= new Locale("zh", "CN", "");
130 for (int i
= 0;i
<UnicodeStringPair
.getValCount();i
++) {
132 char[] c
= new char[]{UnicodeStringPair
.getUnicodeValue(i
)};
134 String getting
= oObj
.getPhoneticCandidate(new String(c
), loc
);
136 boolean locResult
= getting
.equals(UnicodeStringPair
.getExpectedPhoneticString(i
));
139 log
.println("Char: "+ c
[0] + " (" + (int)c
[0] + ")");
140 log
.println("Expected " + UnicodeStringPair
.getExpectedPhoneticString(i
));
141 log
.println("Getting " + getting
);
146 tRes
.tested("getPhoneticCandidate()", res
);
150 * loads all algorithms available in all language.
151 * Is OK if no exception occurs and the method returns
152 * true for each valid algorithm and false otherwise
154 public void _loadAlgorithm() {
155 requiredMethod("getAlgorithmList()");
159 for (int i
= 0; i
< algorithms
.size(); i
++) {
160 String
[] names
= (String
[]) algorithms
.get(new Integer(i
));
161 log
.println("loading algorithms for " + locales
[i
].Country
+
162 "," + locales
[i
].Language
);
164 for (int j
= 0; j
< names
.length
; j
++) {
165 log
.println("\t Loading " + names
[j
]);
167 boolean localres
= oObj
.loadAlgorithm(locales
[i
], names
[j
],
168 CollatorOptions
.CollatorOptions_IGNORE_CASE
);
171 log
.println("\t ... didn't work - FAILED");
173 log
.println("\t ... worked - OK");
179 /* log.println("\tTrying to load 'dummy' algorithm");
181 boolean localres = !oObj.loadAlgorithm(locales[i], "dummy",
182 CollatorOptions.CollatorOptions_IGNORE_WIDTH);
185 log.println("\t ... didn't work as expected - FAILED");
187 log.println("\t ... worked - OK");
193 tRes
.tested("loadAlgorithm()", res
);
197 * checks the method usePhoneticEntry(). Only the languages ja, ko and zh
198 * should return true. Has OK state if exactly this is the case.
200 public void _usePhoneticEntry() {
201 requiredMethod("getLocaleList()");
205 for (int i
= 0; i
< locales
.length
; i
++) {
206 boolean expected
= false;
208 if (locales
[i
].Language
.equals("ja") ||
209 locales
[i
].Language
.equals("ko") ||
210 locales
[i
].Language
.equals("zh")) {
214 boolean locResult
= oObj
.usePhoneticEntry(locales
[i
]) == expected
;
217 log
.println("Failure for language " + locales
[i
].Language
);
218 log
.println("Expected " + expected
);
219 log
.println("Getting " + oObj
.usePhoneticEntry(locales
[i
]));
225 tRes
.tested("usePhoneticEntry()", res
);
229 * Helper class to handle the phonetic equivalence of unicode characters
230 * This class delivers an amount oif unicode characters and the equivalent phonetics
231 * for the "getPhoneticCandidate" test. Euivalents are only usable for zh,CN locale.
233 public static class UnicodeStringPair
{
234 final static int valCount
= 78;
235 static String
[] sStringEquivalence
= null;
236 static char[] iUnicodeEquivalence
= null;
239 sStringEquivalence
= new String
[valCount
];
240 iUnicodeEquivalence
= new char[valCount
];
244 public static int getValCount() {
248 public static String
getExpectedPhoneticString(int index
) {
249 if (index
>= valCount
) return null;
250 return sStringEquivalence
[index
];
253 public static char getUnicodeValue(int index
) {
254 if (index
> valCount
) return 0;
255 return iUnicodeEquivalence
[index
];
258 private static void fillValues() {
259 iUnicodeEquivalence
[0] = 20049; sStringEquivalence
[0] = "zhong";
260 iUnicodeEquivalence
[1] = 19968; sStringEquivalence
[1] = "yi";
261 iUnicodeEquivalence
[2] = 19969; sStringEquivalence
[2] = "ding";
262 iUnicodeEquivalence
[3] = 19970; sStringEquivalence
[3] = "kao";
263 iUnicodeEquivalence
[4] = 19971; sStringEquivalence
[4] = "qi";
264 iUnicodeEquivalence
[5] = 19972; sStringEquivalence
[5] = "shang";
265 iUnicodeEquivalence
[6] = 19973; sStringEquivalence
[6] = "xia";
266 iUnicodeEquivalence
[7] = 19975; sStringEquivalence
[7] = "wan";
267 iUnicodeEquivalence
[8] = 19976; sStringEquivalence
[8] = "zhang";
268 iUnicodeEquivalence
[9] = 19977; sStringEquivalence
[9] = "san";
269 iUnicodeEquivalence
[10] = 19978; sStringEquivalence
[10] = "shang";
270 iUnicodeEquivalence
[11] = 19979; sStringEquivalence
[11] = "xia";
271 iUnicodeEquivalence
[12] = 19980; sStringEquivalence
[12] = "ji";
272 iUnicodeEquivalence
[13] = 19981; sStringEquivalence
[13] = "bu";
273 iUnicodeEquivalence
[14] = 19982; sStringEquivalence
[14] = "yu";
274 iUnicodeEquivalence
[15] = 19983; sStringEquivalence
[15] = "mian";
275 iUnicodeEquivalence
[16] = 19984; sStringEquivalence
[16] = "gai";
276 iUnicodeEquivalence
[17] = 19985; sStringEquivalence
[17] = "chou";
277 iUnicodeEquivalence
[18] = 19986; sStringEquivalence
[18] = "chou";
278 iUnicodeEquivalence
[19] = 19987; sStringEquivalence
[19] = "zhuan";
279 iUnicodeEquivalence
[20] = 19988; sStringEquivalence
[20] = "qie";
280 iUnicodeEquivalence
[21] = 19989; sStringEquivalence
[21] = "pi";
281 iUnicodeEquivalence
[22] = 19990; sStringEquivalence
[22] = "shi";
282 iUnicodeEquivalence
[23] = 19991; sStringEquivalence
[23] = "shi";
283 iUnicodeEquivalence
[24] = 19992; sStringEquivalence
[24] = "qiu";
284 iUnicodeEquivalence
[25] = 19993; sStringEquivalence
[25] = "bing";
285 iUnicodeEquivalence
[26] = 19994; sStringEquivalence
[26] = "ye";
286 iUnicodeEquivalence
[27] = 19995; sStringEquivalence
[27] = "cong";
287 iUnicodeEquivalence
[28] = 19996; sStringEquivalence
[28] = "dong";
288 iUnicodeEquivalence
[29] = 19997; sStringEquivalence
[29] = "si";
289 iUnicodeEquivalence
[30] = 19998; sStringEquivalence
[30] = "cheng";
290 iUnicodeEquivalence
[31] = 19999; sStringEquivalence
[31] = "diu";
291 iUnicodeEquivalence
[32] = 20000; sStringEquivalence
[32] = "qiu";
292 iUnicodeEquivalence
[33] = 20001; sStringEquivalence
[33] = "liang";
293 iUnicodeEquivalence
[34] = 20002; sStringEquivalence
[34] = "diu";
294 iUnicodeEquivalence
[35] = 20003; sStringEquivalence
[35] = "you";
295 iUnicodeEquivalence
[36] = 20004; sStringEquivalence
[36] = "liang";
296 iUnicodeEquivalence
[37] = 20005; sStringEquivalence
[37] = "yan";
297 iUnicodeEquivalence
[38] = 20006; sStringEquivalence
[38] = "bing";
298 iUnicodeEquivalence
[39] = 20007; sStringEquivalence
[39] = "sang";
299 iUnicodeEquivalence
[40] = 20008; sStringEquivalence
[40] = "shu";
300 iUnicodeEquivalence
[41] = 20009; sStringEquivalence
[41] = "jiu";
301 iUnicodeEquivalence
[42] = 20010; sStringEquivalence
[42] = "ge";
302 iUnicodeEquivalence
[43] = 20011; sStringEquivalence
[43] = "ya";
303 iUnicodeEquivalence
[44] = 20012; sStringEquivalence
[44] = "qiang";
304 iUnicodeEquivalence
[45] = 20013; sStringEquivalence
[45] = "zhong";
305 iUnicodeEquivalence
[46] = 20014; sStringEquivalence
[46] = "ji";
306 iUnicodeEquivalence
[47] = 20015; sStringEquivalence
[47] = "jie";
307 iUnicodeEquivalence
[48] = 20016; sStringEquivalence
[48] = "feng";
308 iUnicodeEquivalence
[49] = 20017; sStringEquivalence
[49] = "guan";
309 iUnicodeEquivalence
[50] = 20018; sStringEquivalence
[50] = "chuan";
310 iUnicodeEquivalence
[51] = 20019; sStringEquivalence
[51] = "chan";
311 iUnicodeEquivalence
[52] = 20020; sStringEquivalence
[52] = "lin";
312 iUnicodeEquivalence
[53] = 20021; sStringEquivalence
[53] = "zhuo";
313 iUnicodeEquivalence
[54] = 20022; sStringEquivalence
[54] = "zhu";
314 iUnicodeEquivalence
[55] = 20024; sStringEquivalence
[55] = "wan";
315 iUnicodeEquivalence
[56] = 20025; sStringEquivalence
[56] = "dan";
316 iUnicodeEquivalence
[57] = 20026; sStringEquivalence
[57] = "wei";
317 iUnicodeEquivalence
[58] = 20027; sStringEquivalence
[58] = "zhu";
318 iUnicodeEquivalence
[59] = 20028; sStringEquivalence
[59] = "jing";
319 iUnicodeEquivalence
[60] = 20029; sStringEquivalence
[60] = "li";
320 iUnicodeEquivalence
[61] = 20030; sStringEquivalence
[61] = "ju";
321 iUnicodeEquivalence
[62] = 20031; sStringEquivalence
[62] = "pie";
322 iUnicodeEquivalence
[63] = 20032; sStringEquivalence
[63] = "fu";
323 iUnicodeEquivalence
[64] = 20033; sStringEquivalence
[64] = "yi";
324 iUnicodeEquivalence
[65] = 20034; sStringEquivalence
[65] = "yi";
325 iUnicodeEquivalence
[66] = 20035; sStringEquivalence
[66] = "nai";
326 iUnicodeEquivalence
[67] = 20037; sStringEquivalence
[67] = "jiu";
327 iUnicodeEquivalence
[68] = 20038; sStringEquivalence
[68] = "jiu";
328 iUnicodeEquivalence
[69] = 20039; sStringEquivalence
[69] = "tuo";
329 iUnicodeEquivalence
[70] = 20040; sStringEquivalence
[70] = "me";
330 iUnicodeEquivalence
[71] = 20041; sStringEquivalence
[71] = "yi";
331 iUnicodeEquivalence
[72] = 20043; sStringEquivalence
[72] = "zhi";
332 iUnicodeEquivalence
[73] = 20044; sStringEquivalence
[73] = "wu";
333 iUnicodeEquivalence
[74] = 20045; sStringEquivalence
[74] = "zha";
334 iUnicodeEquivalence
[75] = 20046; sStringEquivalence
[75] = "hu";
335 iUnicodeEquivalence
[76] = 20047; sStringEquivalence
[76] = "fa";
336 iUnicodeEquivalence
[77] = 20048; sStringEquivalence
[77] = "le";