]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/test/translit/CompoundTransliteratorTest.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / test / translit / CompoundTransliteratorTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1996-2007, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.dev.test.translit;\r
8 import com.ibm.icu.text.*;\r
9 import com.ibm.icu.dev.test.*;\r
10 import com.ibm.icu.impl.Utility;\r
11 \r
12 \r
13 \r
14 /**\r
15  * @test\r
16  * @summary General test of CompoundTransliterator\r
17  */\r
18 public class CompoundTransliteratorTest extends TestFmwk {\r
19 \r
20     public static void main(String[] args) throws Exception {\r
21         new CompoundTransliteratorTest().run(args);\r
22     }\r
23 \r
24     public void TestConstruction(){\r
25         logln("Testing the construction of the compound Transliterator");\r
26         String names[]={"Greek-Latin", "Latin-Devanagari", "Devanagari-Latin", "Latin-Greek"};\r
27 \r
28         try {\r
29             Transliterator.getInstance(names[0]);\r
30             Transliterator.getInstance(names[1]);\r
31             Transliterator.getInstance(names[2]);\r
32             Transliterator.getInstance(names[3]);\r
33         }catch(IllegalArgumentException ex) {\r
34             errln("FAIL: Transliterator construction failed" + ex.getMessage());\r
35             throw ex;\r
36         }\r
37   \r
38         final String IDs[]={\r
39             names[0], \r
40             names[0]+";"+names[3], \r
41             names[3]+";"+names[1]+";"+names[2], \r
42             names[0]+";"+names[1]+";"+names[2]+";"+names[3] \r
43         };\r
44 \r
45    \r
46         for(int i=0; i<4; i++){\r
47             try{\r
48                 Transliterator.getInstance(IDs[i]);\r
49             }catch(IllegalArgumentException ex1) {\r
50                 errln("FAIL: construction using CompoundTransliterator(String ID) failed for " + IDs[i]);\r
51                 throw ex1;\r
52             }\r
53 \r
54             try{\r
55                 Transliterator.getInstance(IDs[i], Transliterator.FORWARD);\r
56             }catch(IllegalArgumentException ex2) {\r
57                 errln("FAIL: construction using CompoundTransliterator(String ID, int direction=FORWARD) failed for " + IDs[i]);\r
58                 throw ex2;\r
59             }\r
60 \r
61             try{\r
62                 Transliterator.getInstance(IDs[i], Transliterator.REVERSE);\r
63             }catch(IllegalArgumentException ex3) {\r
64                 errln("FAIL: construction using CompoundTransliterator(String ID, int direction=REVERSE) failed for " + IDs[i]);\r
65                 throw ex3;\r
66             }\r
67 \r
68 //            try{\r
69 //                CompoundTransliterator cpdtrans=new CompoundTransliterator(IDs[i], Transliterator.FORWARD, null);\r
70 //                cpdtrans = null;\r
71 //            }catch(IllegalArgumentException ex4) {\r
72 //                errln("FAIL: construction using CompoundTransliterator(String ID, int direction=FORWARD," +\r
73 //                        "UnicodeFilter adoptedFilter=0) failed for " + IDs[i]);\r
74 //                throw ex4;\r
75 //            }\r
76 //  \r
77 //       \r
78 //            try{\r
79 //                CompoundTransliterator cpdtrans2=new CompoundTransliterator(transarray[i], null);\r
80 //                cpdtrans2 = null;\r
81 //            }catch(IllegalArgumentException ex5) {\r
82 //                errln("FAIL: Construction using CompoundTransliterator(Transliterator transliterators[]," +\r
83 //                       "UnicodeFilter adoptedFilter = 0)  failed");\r
84 //                throw ex5;\r
85 //            }\r
86 \r
87             \r
88         }\r
89    \r
90     }\r
91  \r
92     public void TestGetTransliterator(){\r
93         logln("Testing the getTransliterator() API of CompoundTransliterator");\r
94         String ID="Latin-Greek;Greek-Latin;Latin-Devanagari;Devanagari-Latin;Latin-Cyrillic;Cyrillic-Latin;Any-Hex;Hex-Any";\r
95         Transliterator ct1=null;\r
96         try{\r
97             //ct1=new CompoundTransliterator(ID);\r
98             ct1 = Transliterator.getInstance(ID);\r
99         }catch(IllegalArgumentException iae) {\r
100             errln("CompoundTransliterator construction failed for ID=" + ID);\r
101             throw iae;\r
102         }\r
103         //int count=ct1.getCount();\r
104         Transliterator elems[] = ct1.getElements();\r
105         int count = elems.length;\r
106         String array[]=split(ID, ';');\r
107         if (count != array.length) {\r
108             errln("Error: getCount() failed. Expected:" + array.length + " got:" + count);\r
109         }\r
110         for(int i=0; i < count; i++){\r
111             //String child= ct1.getTransliterator(i).getID();\r
112             String child = elems[i].getID();\r
113             if(!child.equals(array[i])){\r
114                 errln("Error getTransliterator() failed: Expected->" + array[i] + " Got->" + child);\r
115             }else {\r
116                 logln("OK: getTransliterator() passed: Expected->" + array[i] + " Got->" + child);\r
117             }\r
118         }\r
119 \r
120         \r
121     }\r
122  \r
123        \r
124     public void TestTransliterate(){\r
125         logln("Testing the handleTransliterate() API of CompoundTransliterator");\r
126         Transliterator ct1=null;\r
127         try{\r
128             ct1=Transliterator.getInstance("Any-Hex;Hex-Any");\r
129         }catch(IllegalArgumentException iae){\r
130             errln("FAIL: construction using CompoundTransliterator(String ID) failed for " + "Any-Hex;Hex-Any");\r
131             throw iae;\r
132         }\r
133     \r
134         String s="abcabc";\r
135         expect(ct1, s, s);\r
136         Transliterator.Position index = new Transliterator.Position();\r
137         ReplaceableString rsource2=new ReplaceableString(s);\r
138         String expectedResult=s;\r
139         ct1.transliterate(rsource2, index);\r
140         ct1.finishTransliteration(rsource2, index);\r
141         String result=rsource2.toString();\r
142         expectAux(ct1.getID() + ":ReplaceableString, index(0,0,0,0)", s + "->" + rsource2, result.equals(expectedResult), expectedResult);\r
143      \r
144         Transliterator.Position index2 = new Transliterator.Position(1,3,2,3);\r
145         ReplaceableString rsource3=new ReplaceableString(s);\r
146         ct1.transliterate(rsource3, index2); \r
147         ct1.finishTransliteration(rsource3, index2);\r
148         result=rsource3.toString();\r
149         expectAux(ct1.getID() + ":String, index2(1,2,2,3)", s + "->" + rsource3, result.equals(expectedResult), expectedResult);\r
150 \r
151        \r
152         String Data[]={\r
153              //ID, input string, transliterated string\r
154              "Any-Hex;Hex-Any;Any-Hex",     "hello",  "\\u0068\\u0065\\u006C\\u006C\\u006F", \r
155              "Any-Hex;Hex-Any",                 "hello! How are you?",  "hello! How are you?",\r
156              "Devanagari-Latin;Latin-Devanagari",       "\u092D\u0948'\u0930'\u0935",  "\u092D\u0948\u0930\u0935", // quotes lost\r
157              "Latin-Cyrillic;Cyrillic-Latin",           "a'b'k'd'e'f'g'h'i'j'Shch'shch'zh'h", "a'b'k'd'e'f'g'h'i'j'Shch'shch'zh'h",\r
158              "Latin-Greek;Greek-Latin",                 "ABGabgAKLMN", "ABGabgAKLMN",\r
159              //"Latin-Arabic;Arabic-Latin",               "Ad'r'a'b'i'k'dh'dd'gh", "Adrabikdhddgh",\r
160              "Hiragana-Katakana",                       "\u3041\u308f\u3099\u306e\u304b\u3092\u3099", \r
161                                                                  "\u30A1\u30f7\u30ce\u30ab\u30fa",  \r
162              "Hiragana-Katakana;Katakana-Hiragana",     "\u3041\u308f\u3099\u306e\u304b\u3051", \r
163                                                                  "\u3041\u308f\u3099\u306e\u304b\u3051",\r
164              "Katakana-Hiragana;Hiragana-Katakana",     "\u30A1\u30f7\u30ce\u30f5\u30f6", \r
165                                                                  "\u30A1\u30f7\u30ce\u30ab\u30b1",  \r
166              "Latin-Katakana;Katakana-Latin",                   "vavivuvevohuzizuzoninunasesuzezu", \r
167                                                                  "vavivuvevohuzizuzoninunasesuzezu",  \r
168         };\r
169         Transliterator ct2=null;\r
170         for(int i=0; i<Data.length; i+=3){\r
171             try{\r
172                 ct2=Transliterator.getInstance(Data[i+0]);\r
173             }catch(IllegalArgumentException iae2){\r
174                 errln("FAIL: CompoundTransliterator construction failed for " + Data[i+0]);\r
175                 throw iae2;\r
176             }\r
177         expect(ct2, Data[i+1], Data[i+2]);\r
178         }\r
179    \r
180     }\r
181  \r
182 \r
183     //======================================================================\r
184     // Support methods\r
185     //======================================================================\r
186 \r
187      /**\r
188      * Splits a string,\r
189     */\r
190     private static String[] split(String s, char divider) {\r
191       \r
192     // see how many there are\r
193         int count = 1;\r
194     for (int i = 0; i < s.length(); ++i) {\r
195        if (s.charAt(i) == divider) ++count;\r
196     }\r
197         \r
198     // make an array with them\r
199     String[] result = new String[count];\r
200     int last = 0;\r
201     int current = 0;\r
202     int i;\r
203     for (i = 0; i < s.length(); ++i) {\r
204         if (s.charAt(i) == divider) {\r
205             result[current++] = s.substring(last,i);\r
206             last = i+1;\r
207         }\r
208     }\r
209     result[current++] = s.substring(last,i);\r
210     return result;\r
211     }\r
212 \r
213     private void expect(Transliterator t, String source, String expectedResult) {\r
214         String result = t.transliterate(source);\r
215         expectAux(t.getID() + ":String", source, result, expectedResult);\r
216 \r
217         ReplaceableString rsource = new ReplaceableString(source);\r
218         t.transliterate(rsource);\r
219         result = rsource.toString();\r
220         expectAux(t.getID() + ":Replaceable", source, result, expectedResult);\r
221 \r
222         // Test keyboard (incremental) transliteration -- this result\r
223         // must be the same after we finalize (see below).\r
224         rsource.replace(0, rsource.length(), "");\r
225         Transliterator.Position index = new Transliterator.Position();\r
226         StringBuffer log = new StringBuffer();\r
227 \r
228         for (int i=0; i<source.length(); ++i) {\r
229             if (i != 0) {\r
230                 log.append(" + ");\r
231             }\r
232             log.append(source.charAt(i)).append(" -> ");\r
233             t.transliterate(rsource, index,\r
234                             String.valueOf(source.charAt(i)));\r
235             // Append the string buffer with a vertical bar '|' where\r
236             // the committed index is.\r
237             String s = rsource.toString();\r
238             log.append(s.substring(0, index.start)).\r
239                 append('|').\r
240                 append(s.substring(index.start));\r
241         }\r
242         \r
243         // As a final step in keyboard transliteration, we must call\r
244         // transliterate to finish off any pending partial matches that\r
245         // were waiting for more input.\r
246         t.finishTransliteration(rsource, index);\r
247         result = rsource.toString();\r
248         log.append(" => ").append(rsource.toString());\r
249         expectAux(t.getID() + ":Keyboard", log.toString(),\r
250                  result.equals(expectedResult),\r
251                  expectedResult);\r
252 \r
253     }\r
254     private void expectAux(String tag, String source,\r
255                   String result, String expectedResult) {\r
256         expectAux(tag, source + " -> " + result,\r
257                  result.equals(expectedResult),\r
258                  expectedResult);\r
259     }\r
260 \r
261     private void expectAux(String tag, String summary, boolean pass, String expectedResult) {\r
262         if (pass) {\r
263             logln("(" + tag + ") " + Utility.escape(summary));\r
264         } else {\r
265             errln("FAIL: (" + tag+ ") "\r
266                 + Utility.escape(summary)\r
267                 + ", expected " + Utility.escape(expectedResult));\r
268         }\r
269     }  \r
270 }\r
271 \r