2 * This file is part of the LibreOffice project.
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 * This file incorporates work covered by the following license notice:
10 * Licensed to the Apache Software Foundation (ASF) under one or more
11 * contributor license agreements. See the NOTICE file distributed
12 * with this work for additional information regarding copyright
13 * ownership. The ASF licenses this file to you under the Apache
14 * License, Version 2.0 (the "License"); you may not use this file
15 * except in compliance with the License. You may obtain a copy of
16 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 import com
.sun
.star
.i18n
.CollatorOptions
;
21 import com
.sun
.star
.i18n
.XExtendedIndexEntrySupplier
;
22 import com
.sun
.star
.lang
.Locale
;
24 import java
.util
.HashMap
;
26 import lib
.MultiMethodTest
;
29 public class _XExtendedIndexEntrySupplier
extends MultiMethodTest
{
30 public XExtendedIndexEntrySupplier oObj
;
31 protected Locale
[] locales
= null;
32 protected HashMap
<Integer
, String
[]> algorithms
= new HashMap
<Integer
, String
[]>();
34 public void _compareIndexEntry() {
35 requiredMethod("getIndexKey()");
36 Locale locale
= new Locale("zh", "CN", "");
37 String val1
= new String(new char[]{UnicodeStringPair
.getUnicodeValue(0), UnicodeStringPair
.getUnicodeValue(1)});
38 String val2
= new String(new char[]{UnicodeStringPair
.getUnicodeValue(1), UnicodeStringPair
.getUnicodeValue(0)});
39 short result1
= oObj
.compareIndexEntry(val1
, "", locale
, val1
, "", locale
);
40 short result2
= oObj
.compareIndexEntry(val1
, "", locale
, val2
, "", locale
);
41 short result3
= oObj
.compareIndexEntry(val2
, "", locale
, val1
, "", locale
);
43 tRes
.tested("compareIndexEntry()", result1
== 0 && result2
+ result3
== 0);
47 * gets the list of all algorithms for each listed language
48 * is OK if everyone of the returned lists are filled
50 public void _getAlgorithmList() {
51 requiredMethod("getLocaleList()");
53 boolean result
= true;
54 boolean locResult
= false;
56 for (int i
= 0; i
< locales
.length
; i
++) {
57 String
[] algNames
= oObj
.getAlgorithmList(locales
[i
]);
58 algorithms
.put(Integer
.valueOf(i
), algNames
);
60 locResult
= algNames
!= null && algNames
.length
> 0;
61 System
.out
.println("Locale " + i
+ ": " + locales
[i
].Country
+","+locales
[i
].Language
);
63 for (int j
=0; j
<algNames
.length
; j
++) {
64 System
.out
.println("\tAlgorithm " + j
+ ": " + algNames
[j
]);
68 log
.println("No Algorithm found for " + locales
[i
].Country
+
69 "," + locales
[i
].Language
);
75 tRes
.tested("getAlgorithmList()", result
);
78 public void _getIndexKey() {
79 requiredMethod("loadAlgorithm()");
80 char[] characters
= new char[] { 19968 };
81 String getIndexFor
= new String(characters
);
82 for (int i
= 0; i
< locales
.length
; i
++) {
83 log
.println("Language: " + locales
[i
].Language
);
85 for (int j
= 0; j
< algorithms
.size(); j
++) {
86 String
[] algs
= algorithms
.get(Integer
.valueOf(j
));
87 for (int k
=0;k
<algs
.length
;k
++) {
88 log
.println("\t Algorythm :" +
90 oObj
.loadAlgorithm(locales
[i
], algs
[k
], CollatorOptions
.CollatorOptions_IGNORE_CASE
);
91 log
.println("\t\t Get: " +
92 oObj
.getIndexKey(getIndexFor
, "", locales
[i
]));
96 tRes
.tested("getIndexKey()", true);
100 * gets a list of all locales, is OK if this list isn't empty
102 public void _getLocaleList() {
103 locales
= oObj
.getLocaleList();
104 tRes
.tested("getLocaleList()", locales
.length
> 0);
108 * gets one phonetic canidate for the chinese local
109 * is ok if 'yi' is returned as expected.
111 public void _getPhoneticCandidate() {
112 requiredMethod("getLocaleList()");
116 Locale loc
= new Locale("zh", "CN", "");
118 for (int i
= 0;i
<UnicodeStringPair
.getValCount();i
++) {
120 char[] c
= new char[]{UnicodeStringPair
.getUnicodeValue(i
)};
122 String getting
= oObj
.getPhoneticCandidate(new String(c
), loc
);
124 boolean locResult
= getting
.equals(UnicodeStringPair
.getExpectedPhoneticString(i
));
127 log
.println("Char: "+ c
[0] + " (" + (int)c
[0] + ")");
128 log
.println("Expected " + UnicodeStringPair
.getExpectedPhoneticString(i
));
129 log
.println("Getting " + getting
);
134 tRes
.tested("getPhoneticCandidate()", res
);
138 * loads all algorithms available in all language.
139 * Is OK if no exception occurs and the method returns
140 * true for each valid algorithm and false otherwise
142 public void _loadAlgorithm() {
143 requiredMethod("getAlgorithmList()");
147 for (int i
= 0; i
< algorithms
.size(); i
++) {
148 String
[] names
= algorithms
.get(Integer
.valueOf(i
));
149 log
.println("loading algorithms for " + locales
[i
].Country
+
150 "," + locales
[i
].Language
);
152 for (int j
= 0; j
< names
.length
; j
++) {
153 log
.println("\t Loading " + names
[j
]);
155 boolean localres
= oObj
.loadAlgorithm(locales
[i
], names
[j
],
156 CollatorOptions
.CollatorOptions_IGNORE_CASE
);
159 log
.println("\t ... didn't work - FAILED");
161 log
.println("\t ... worked - OK");
168 tRes
.tested("loadAlgorithm()", res
);
172 * checks the method usePhoneticEntry(). Only the languages ja, ko and zh
173 * should return true. Has OK state if exactly this is the case.
175 public void _usePhoneticEntry() {
176 requiredMethod("getLocaleList()");
180 for (int i
= 0; i
< locales
.length
; i
++) {
181 boolean expected
= false;
183 if (locales
[i
].Language
.equals("ja") ||
184 locales
[i
].Language
.equals("ko") ||
185 locales
[i
].Language
.equals("zh")) {
189 boolean locResult
= oObj
.usePhoneticEntry(locales
[i
]) == expected
;
192 log
.println("Failure for language " + locales
[i
].Language
);
193 log
.println("Expected " + expected
);
194 log
.println("Getting " + oObj
.usePhoneticEntry(locales
[i
]));
200 tRes
.tested("usePhoneticEntry()", res
);
204 * Helper class to handle the phonetic equivalence of unicode characters
205 * This class delivers an amount oif unicode characters and the equivalent phonetics
206 * for the "getPhoneticCandidate" test. Euivalents are only usable for zh,CN locale.
208 public static class UnicodeStringPair
{
209 final static int valCount
= 78;
210 static final String
[] sStringEquivalence
= new String
[valCount
];
211 static final char[] iUnicodeEquivalence
= new char[valCount
];
217 public static int getValCount() {
221 public static String
getExpectedPhoneticString(int index
) {
222 if (index
>= valCount
) return null;
223 return sStringEquivalence
[index
];
226 public static char getUnicodeValue(int index
) {
227 if (index
> valCount
) return 0;
228 return iUnicodeEquivalence
[index
];
231 private static void fillValues() {
232 iUnicodeEquivalence
[0] = 20049; sStringEquivalence
[0] = "zhong";
233 iUnicodeEquivalence
[1] = 19968; sStringEquivalence
[1] = "yi";
234 iUnicodeEquivalence
[2] = 19969; sStringEquivalence
[2] = "ding";
235 iUnicodeEquivalence
[3] = 19970; sStringEquivalence
[3] = "kao";
236 iUnicodeEquivalence
[4] = 19971; sStringEquivalence
[4] = "qi";
237 iUnicodeEquivalence
[5] = 19972; sStringEquivalence
[5] = "shang";
238 iUnicodeEquivalence
[6] = 19973; sStringEquivalence
[6] = "xia";
239 iUnicodeEquivalence
[7] = 19975; sStringEquivalence
[7] = "wan";
240 iUnicodeEquivalence
[8] = 19976; sStringEquivalence
[8] = "zhang";
241 iUnicodeEquivalence
[9] = 19977; sStringEquivalence
[9] = "san";
242 iUnicodeEquivalence
[10] = 19978; sStringEquivalence
[10] = "shang";
243 iUnicodeEquivalence
[11] = 19979; sStringEquivalence
[11] = "xia";
244 iUnicodeEquivalence
[12] = 19980; sStringEquivalence
[12] = "ji";
245 iUnicodeEquivalence
[13] = 19981; sStringEquivalence
[13] = "bu";
246 iUnicodeEquivalence
[14] = 19982; sStringEquivalence
[14] = "yu";
247 iUnicodeEquivalence
[15] = 19983; sStringEquivalence
[15] = "mian";
248 iUnicodeEquivalence
[16] = 19984; sStringEquivalence
[16] = "gai";
249 iUnicodeEquivalence
[17] = 19985; sStringEquivalence
[17] = "chou";
250 iUnicodeEquivalence
[18] = 19986; sStringEquivalence
[18] = "chou";
251 iUnicodeEquivalence
[19] = 19987; sStringEquivalence
[19] = "zhuan";
252 iUnicodeEquivalence
[20] = 19988; sStringEquivalence
[20] = "qie";
253 iUnicodeEquivalence
[21] = 19989; sStringEquivalence
[21] = "pi";
254 iUnicodeEquivalence
[22] = 19990; sStringEquivalence
[22] = "shi";
255 iUnicodeEquivalence
[23] = 19991; sStringEquivalence
[23] = "shi";
256 iUnicodeEquivalence
[24] = 19992; sStringEquivalence
[24] = "qiu";
257 iUnicodeEquivalence
[25] = 19993; sStringEquivalence
[25] = "bing";
258 iUnicodeEquivalence
[26] = 19994; sStringEquivalence
[26] = "ye";
259 iUnicodeEquivalence
[27] = 19995; sStringEquivalence
[27] = "cong";
260 iUnicodeEquivalence
[28] = 19996; sStringEquivalence
[28] = "dong";
261 iUnicodeEquivalence
[29] = 19997; sStringEquivalence
[29] = "si";
262 iUnicodeEquivalence
[30] = 19998; sStringEquivalence
[30] = "cheng";
263 iUnicodeEquivalence
[31] = 19999; sStringEquivalence
[31] = "diu";
264 iUnicodeEquivalence
[32] = 20000; sStringEquivalence
[32] = "qiu";
265 iUnicodeEquivalence
[33] = 20001; sStringEquivalence
[33] = "liang";
266 iUnicodeEquivalence
[34] = 20002; sStringEquivalence
[34] = "diu";
267 iUnicodeEquivalence
[35] = 20003; sStringEquivalence
[35] = "you";
268 iUnicodeEquivalence
[36] = 20004; sStringEquivalence
[36] = "liang";
269 iUnicodeEquivalence
[37] = 20005; sStringEquivalence
[37] = "yan";
270 iUnicodeEquivalence
[38] = 20006; sStringEquivalence
[38] = "bing";
271 iUnicodeEquivalence
[39] = 20007; sStringEquivalence
[39] = "sang";
272 iUnicodeEquivalence
[40] = 20008; sStringEquivalence
[40] = "shu";
273 iUnicodeEquivalence
[41] = 20009; sStringEquivalence
[41] = "jiu";
274 iUnicodeEquivalence
[42] = 20010; sStringEquivalence
[42] = "ge";
275 iUnicodeEquivalence
[43] = 20011; sStringEquivalence
[43] = "ya";
276 iUnicodeEquivalence
[44] = 20012; sStringEquivalence
[44] = "qiang";
277 iUnicodeEquivalence
[45] = 20013; sStringEquivalence
[45] = "zhong";
278 iUnicodeEquivalence
[46] = 20014; sStringEquivalence
[46] = "ji";
279 iUnicodeEquivalence
[47] = 20015; sStringEquivalence
[47] = "jie";
280 iUnicodeEquivalence
[48] = 20016; sStringEquivalence
[48] = "feng";
281 iUnicodeEquivalence
[49] = 20017; sStringEquivalence
[49] = "guan";
282 iUnicodeEquivalence
[50] = 20018; sStringEquivalence
[50] = "chuan";
283 iUnicodeEquivalence
[51] = 20019; sStringEquivalence
[51] = "chan";
284 iUnicodeEquivalence
[52] = 20020; sStringEquivalence
[52] = "lin";
285 iUnicodeEquivalence
[53] = 20021; sStringEquivalence
[53] = "zhuo";
286 iUnicodeEquivalence
[54] = 20022; sStringEquivalence
[54] = "zhu";
287 iUnicodeEquivalence
[55] = 20024; sStringEquivalence
[55] = "wan";
288 iUnicodeEquivalence
[56] = 20025; sStringEquivalence
[56] = "dan";
289 iUnicodeEquivalence
[57] = 20026; sStringEquivalence
[57] = "wei";
290 iUnicodeEquivalence
[58] = 20027; sStringEquivalence
[58] = "zhu";
291 iUnicodeEquivalence
[59] = 20028; sStringEquivalence
[59] = "jing";
292 iUnicodeEquivalence
[60] = 20029; sStringEquivalence
[60] = "li";
293 iUnicodeEquivalence
[61] = 20030; sStringEquivalence
[61] = "ju";
294 iUnicodeEquivalence
[62] = 20031; sStringEquivalence
[62] = "pie";
295 iUnicodeEquivalence
[63] = 20032; sStringEquivalence
[63] = "fu";
296 iUnicodeEquivalence
[64] = 20033; sStringEquivalence
[64] = "yi";
297 iUnicodeEquivalence
[65] = 20034; sStringEquivalence
[65] = "yi";
298 iUnicodeEquivalence
[66] = 20035; sStringEquivalence
[66] = "nai";
299 iUnicodeEquivalence
[67] = 20037; sStringEquivalence
[67] = "jiu";
300 iUnicodeEquivalence
[68] = 20038; sStringEquivalence
[68] = "jiu";
301 iUnicodeEquivalence
[69] = 20039; sStringEquivalence
[69] = "tuo";
302 iUnicodeEquivalence
[70] = 20040; sStringEquivalence
[70] = "me";
303 iUnicodeEquivalence
[71] = 20041; sStringEquivalence
[71] = "yi";
304 iUnicodeEquivalence
[72] = 20043; sStringEquivalence
[72] = "zhi";
305 iUnicodeEquivalence
[73] = 20044; sStringEquivalence
[73] = "wu";
306 iUnicodeEquivalence
[74] = 20045; sStringEquivalence
[74] = "zha";
307 iUnicodeEquivalence
[75] = 20046; sStringEquivalence
[75] = "hu";
308 iUnicodeEquivalence
[76] = 20047; sStringEquivalence
[76] = "fa";
309 iUnicodeEquivalence
[77] = 20048; sStringEquivalence
[77] = "le";