]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/test/collator/CollationKanaTest.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / test / collator / CollationKanaTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2002-2008, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 \r
8 /** \r
9  * Port From:   ICU4C v2.1 : Collate/CollationKanaTest\r
10  * Source File: $ICU4CRoot/source/test/intltest/jacoll.cpp\r
11  **/\r
12  \r
13 package com.ibm.icu.dev.test.collator;\r
14  \r
15 import com.ibm.icu.dev.test.*;\r
16 import com.ibm.icu.text.*;\r
17 import com.ibm.icu.util.ULocale;\r
18 \r
19 import java.util.Locale;\r
20  \r
21 public class CollationKanaTest extends TestFmwk{\r
22     public static void main(String[] args) throws Exception{\r
23         new CollationKanaTest().run(args);\r
24     }\r
25 \r
26     private static char[][] testSourceCases = {\r
27         {0xff9E},\r
28         {0x3042},\r
29         {0x30A2},\r
30         {0x3042, 0x3042},\r
31         {0x30A2, 0x30FC},\r
32         {0x30A2, 0x30FC, 0x30C8}                               /*  6 */\r
33     };\r
34 \r
35     private static char[][] testTargetCases = {\r
36         {0xFF9F},\r
37         {0x30A2},\r
38         {0x3042, 0x3042},\r
39         {0x30A2, 0x30FC},\r
40         {0x30A2, 0x30FC, 0x30C8},\r
41         {0x3042, 0x3042, 0x3068}                              /*  6 */\r
42     };\r
43 \r
44     private static int[] results = {\r
45         -1,\r
46         0,   //Collator::LESS, /* Katakanas and Hiraganas are equal on tertiary level(ICU 2.0)*/\r
47         -1,\r
48         1, // Collator::LESS, /* Prolonged sound mark sorts BEFORE equivalent vowel (ICU 2.0)*/\r
49         -1,\r
50         -1,    //Collator::GREATER /* Prolonged sound mark sorts BEFORE equivalent vowel (ICU 2.0)*//*  6 */\r
51     };\r
52 \r
53     private static char[][] testBaseCases = {\r
54         {0x30AB},\r
55         {0x30AB, 0x30AD},\r
56         {0x30AD},\r
57         {0x30AD, 0x30AD}\r
58     };\r
59 \r
60     private static char[][] testPlainDakutenHandakutenCases = {\r
61         {0x30CF, 0x30AB},\r
62         {0x30D0, 0x30AB},\r
63         {0x30CF, 0x30AD},\r
64         {0x30D0, 0x30AD}\r
65     };\r
66 \r
67     private static char[][] testSmallLargeCases = {\r
68         {0x30C3, 0x30CF},\r
69         {0x30C4, 0x30CF},\r
70         {0x30C3, 0x30D0},\r
71         {0x30C4, 0x30D0}\r
72     };\r
73 \r
74     private static char[][] testKatakanaHiraganaCases = {\r
75         {0x3042, 0x30C3},\r
76         {0x30A2, 0x30C3},\r
77         {0x3042, 0x30C4},\r
78         {0x30A2, 0x30C4}\r
79     };\r
80 \r
81     private static char[][] testChooonKigooCases = {\r
82         /*0*/ {0x30AB, 0x30FC, 0x3042},\r
83         /*1*/ {0x30AB, 0x30FC, 0x30A2},\r
84         /*2*/ {0x30AB, 0x30A4, 0x3042},\r
85         /*3*/ {0x30AB, 0x30A4, 0x30A2},\r
86         /*6*/ {0x30AD, 0x30FC, 0x3042}, /* Prolonged sound mark sorts BEFORE equivalent vowel (ICU 2.0)*/\r
87         /*7*/ {0x30AD, 0x30FC, 0x30A2}, /* Prolonged sound mark sorts BEFORE equivalent vowel (ICU 2.0)*/\r
88         /*4*/ {0x30AD, 0x30A4, 0x3042},\r
89         /*5*/ {0x30AD, 0x30A4, 0x30A2}\r
90     };\r
91         \r
92     private Collator myCollation = null;\r
93     \r
94     public CollationKanaTest() {\r
95     }\r
96     protected void init()throws Exception{ \r
97         if(myCollation==null){\r
98             myCollation = Collator.getInstance(Locale.JAPANESE); \r
99         }\r
100     }\r
101     // performs test with strength TERIARY\r
102     public void TestTertiary() {\r
103         int i = 0;\r
104         myCollation.setStrength(Collator.TERTIARY);\r
105         \r
106         for (i = 0; i < 6; i++) {\r
107             doTest(testSourceCases[i], testTargetCases[i], results[i]);\r
108         }\r
109     }\r
110 \r
111     /* Testing base letters */\r
112     public void TestBase() {\r
113         int i;\r
114         myCollation.setStrength(Collator.PRIMARY);\r
115         for (i = 0; i < 3 ; i++) {\r
116             doTest(testBaseCases[i], testBaseCases[i + 1], -1);\r
117         }\r
118     }\r
119 \r
120     /* Testing plain, Daku-ten, Handaku-ten letters */\r
121     public void TestPlainDakutenHandakuten() {\r
122         int i;\r
123         myCollation.setStrength(Collator.SECONDARY);\r
124         for (i = 0; i < 3 ; i++) {\r
125             doTest(testPlainDakutenHandakutenCases[i], testPlainDakutenHandakutenCases[i + 1], -1);\r
126         }\r
127     }\r
128 \r
129     /* \r
130     * Test Small, Large letters\r
131     */\r
132     public void TestSmallLarge() {\r
133         int i;\r
134         myCollation.setStrength(Collator.TERTIARY);\r
135 \r
136         for (i = 0; i < 3 ; i++) {\r
137             doTest(testSmallLargeCases[i], testSmallLargeCases[i + 1], -1);\r
138         }\r
139     }\r
140 \r
141     /*\r
142     * Test Katakana, Hiragana letters\r
143     */\r
144     public void TestKatakanaHiragana() {\r
145         int i;\r
146         myCollation.setStrength(Collator.QUATERNARY);\r
147         for (i = 0; i < 3 ; i++) {\r
148             doTest(testKatakanaHiraganaCases[i], testKatakanaHiraganaCases[i + 1], -1);\r
149         }\r
150     }\r
151 \r
152     /*\r
153     * Test Choo-on kigoo\r
154     */\r
155     public void TestChooonKigoo() {\r
156         int i;\r
157         myCollation.setStrength(Collator.QUATERNARY);\r
158         for (i = 0; i < 7 ; i++) {\r
159             doTest(testChooonKigooCases[i], testChooonKigooCases[i + 1], -1);\r
160         }\r
161     }\r
162     \r
163     /*\r
164      * Test common Hiragana and Katakana characters (e.g. 0x3099) (ticket:6140)\r
165      */\r
166     public void TestCommonCharacters() {\r
167         char[] tmp1 = { 0x3058, 0x30B8 };\r
168         char[] tmp2 = { 0x3057, 0x3099, 0x30B7, 0x3099 };\r
169         CollationKey key1, key2;\r
170         int result;\r
171         String string1 = new String(tmp1);\r
172         String string2 = new String(tmp2);\r
173         RuleBasedCollator rb = (RuleBasedCollator)Collator.getInstance(ULocale.JAPAN);\r
174         rb.setHiraganaQuaternary(true);\r
175         rb.setStrength(Collator.QUATERNARY);\r
176         rb.setAlternateHandlingShifted(false);\r
177         \r
178         result = rb.compare(string1, string2);\r
179         \r
180         key1 = rb.getCollationKey(string1);\r
181         key2 = rb.getCollationKey(string2);\r
182         \r
183         if ( result != 0 || !key1.equals(key2)) {\r
184             errln("Failed Hiragana and Katakana common characters test. Expected results to be equal.");\r
185         }\r
186         \r
187     }\r
188     // main test routine, tests rules specific to "Kana" locale\r
189     private void doTest(char[] source, char[] target, int result){\r
190         \r
191         String s = new String(source);\r
192         String t = new String(target);\r
193         int compareResult = myCollation.compare(s, t);\r
194         CollationKey sortKey1, sortKey2;\r
195         sortKey1 = myCollation.getCollationKey(s);\r
196         sortKey2 = myCollation.getCollationKey(t);\r
197         int keyResult = sortKey1.compareTo(sortKey2);\r
198         reportCResult(s, t, sortKey1, sortKey2, compareResult, keyResult, compareResult, result);\r
199         \r
200     }\r
201     \r
202     private void reportCResult( String source, String target, CollationKey sourceKey, CollationKey targetKey,\r
203                                 int compareResult, int keyResult, int incResult, int expectedResult ){\r
204         if (expectedResult < -1 || expectedResult > 1) {\r
205             errln("***** invalid call to reportCResult ****");\r
206             return;\r
207         }\r
208 \r
209         boolean ok1 = (compareResult == expectedResult);\r
210         boolean ok2 = (keyResult == expectedResult);\r
211         boolean ok3 = (incResult == expectedResult);\r
212 \r
213         if (ok1 && ok2 && ok3 && !isVerbose()){\r
214             return;    \r
215         } else {\r
216             String msg1 = ok1? "Ok: compare(\"" : "FAIL: compare(\"";\r
217             String msg2 = "\", \"";\r
218             String msg3 = "\") returned ";\r
219             String msg4 = "; expected ";\r
220             \r
221             String sExpect = new String("");\r
222             String sResult = new String("");\r
223             sResult = appendCompareResult(compareResult, sResult);\r
224             sExpect = appendCompareResult(expectedResult, sExpect);\r
225             if (ok1) {\r
226                 logln(msg1 + source + msg2 + target + msg3 + sResult);\r
227             } else {\r
228                 errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);\r
229             }\r
230             \r
231             msg1 = ok2 ? "Ok: key(\"" : "FAIL: key(\"";\r
232             msg2 = "\").compareTo(key(\"";\r
233             msg3 = "\")) returned ";\r
234             sResult = appendCompareResult(keyResult, sResult);\r
235             if (ok2) {\r
236                 logln(msg1 + source + msg2 + target + msg3 + sResult);\r
237             } else {\r
238                 errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);\r
239                 msg1 = "  ";\r
240                 msg2 = " vs. ";\r
241                 errln(msg1 + prettify(sourceKey) + msg2 + prettify(targetKey));\r
242             }\r
243             \r
244             msg1 = ok3 ? "Ok: incCompare(\"" : "FAIL: incCompare(\"";\r
245             msg2 = "\", \"";\r
246             msg3 = "\") returned ";\r
247 \r
248             sResult = appendCompareResult(incResult, sResult);\r
249 \r
250             if (ok3) {\r
251                 logln(msg1 + source + msg2 + target + msg3 + sResult);\r
252             } else {\r
253                 errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);\r
254             }                \r
255         }\r
256     }\r
257     \r
258     private String appendCompareResult(int result, String target){\r
259         if (result == -1) {\r
260             target += "LESS";\r
261         } else if (result == 0) {\r
262             target += "EQUAL";\r
263         } else if (result == 1) {\r
264             target += "GREATER";\r
265         } else {\r
266             String huh = "?";\r
267             target += huh + result;\r
268         }\r
269         return target;\r
270     }\r
271     \r
272     String prettify(CollationKey sourceKey) {\r
273         int i;\r
274         byte[] bytes= sourceKey.toByteArray();\r
275         String target = "[";\r
276     \r
277         for (i = 0; i < bytes.length; i++) {\r
278             target += Integer.toHexString(bytes[i]);\r
279             target += " ";\r
280         }\r
281         target += "]";\r
282         return target;\r
283     }\r
284 }