]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/test/util/CurrencyTest.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / test / util / CurrencyTest.java
1 /*\r
2  **********************************************************************\r
3  * Copyright (c) 2002-2009, International Business Machines\r
4  * Corporation and others.  All Rights Reserved.\r
5  **********************************************************************\r
6  * Author: Alan Liu\r
7  * Created: December 18 2002\r
8  * Since: ICU 2.4\r
9  **********************************************************************\r
10  */\r
11 \r
12 package com.ibm.icu.dev.test.util;\r
13 import java.util.Date;\r
14 import java.util.HashSet;\r
15 import java.util.Locale;\r
16 \r
17 import com.ibm.icu.dev.test.TestFmwk;\r
18 import com.ibm.icu.impl.Utility;\r
19 import com.ibm.icu.text.DecimalFormatSymbols;\r
20 import com.ibm.icu.util.Currency;\r
21 import com.ibm.icu.util.ULocale;\r
22 \r
23 /**\r
24  * @test\r
25  * @summary General test of Currency\r
26  */\r
27 public class CurrencyTest extends TestFmwk {\r
28 \r
29     public static void main(String[] args) throws Exception {\r
30         new CurrencyTest().run(args);\r
31     }\r
32 \r
33     /**\r
34      * Test of basic API.\r
35      */\r
36     public void TestAPI() {\r
37         Currency usd = Currency.getInstance("USD");\r
38         /*int hash = */usd.hashCode();\r
39         Currency jpy = Currency.getInstance("JPY");\r
40         if (usd.equals(jpy)) {\r
41             errln("FAIL: USD == JPY");\r
42         }\r
43         if (usd.equals("abc")) {\r
44             errln("FAIL: USD == (String)");\r
45         }\r
46         if (usd.equals(null)) {\r
47             errln("FAIL: USD == (null)");\r
48         }\r
49         if (!usd.equals(usd)) {\r
50             errln("FAIL: USD != USD");\r
51         }\r
52 \r
53         try {\r
54             Currency nullCurrency = Currency.getInstance((String)null);\r
55             errln("FAIL: Expected getInstance(null) to throw "\r
56                     + "a NullPointerException, but returned " + nullCurrency);\r
57         } catch (NullPointerException npe) {\r
58             logln("PASS: getInstance(null) threw a NullPointerException");\r
59         }\r
60 \r
61         try {\r
62             Currency bogusCurrency = Currency.getInstance("BOGUS");\r
63             errln("FAIL: Expected getInstance(\"BOGUS\") to throw "\r
64                     + "an IllegalArgumentException, but returned " + bogusCurrency);\r
65         } catch (IllegalArgumentException iae) {\r
66             logln("PASS: getInstance(\"BOGUS\") threw an IllegalArgumentException");\r
67         }\r
68 \r
69         Locale[] avail = Currency.getAvailableLocales();\r
70         if(avail==null){\r
71             errln("FAIL: getAvailableLocales returned null");\r
72         }\r
73 \r
74         try {\r
75             usd.getName(ULocale.US, 5, new boolean[1]);\r
76             errln("expected getName with invalid type parameter to throw exception");\r
77         }\r
78         catch (Exception e) {\r
79             logln("PASS: getName failed as expected");\r
80         }\r
81     }\r
82 \r
83     /**\r
84      * Test registration.\r
85      */\r
86     public void TestRegistration() {\r
87         final Currency jpy = Currency.getInstance("JPY");\r
88         final Currency usd = Currency.getInstance(Locale.US);\r
89 \r
90     try {\r
91       Currency.unregister(null); // should fail, coverage\r
92       errln("expected unregister of null to throw exception");\r
93     }\r
94     catch (Exception e) {\r
95         logln("PASS: unregister of null failed as expected");\r
96     }\r
97 \r
98     if (Currency.unregister("")) { // coverage\r
99       errln("unregister before register erroneously succeeded");\r
100     }\r
101 \r
102         ULocale fu_FU = new ULocale("fu_FU");\r
103 \r
104         Object key1 = Currency.registerInstance(jpy, ULocale.US);\r
105         Object key2 = Currency.registerInstance(jpy, fu_FU);\r
106 \r
107         Currency nus = Currency.getInstance(Locale.US);\r
108         if (!nus.equals(jpy)) {\r
109             errln("expected " + jpy + " but got: " + nus);\r
110         }\r
111 \r
112         // converage, make sure default factory works\r
113         Currency nus1 = Currency.getInstance(Locale.JAPAN);\r
114         if (!nus1.equals(jpy)) {\r
115             errln("expected " + jpy + " but got: " + nus1);\r
116         }\r
117 \r
118         ULocale[] locales = Currency.getAvailableULocales();\r
119         boolean found = false;\r
120         for (int i = 0; i < locales.length; ++i) {\r
121             if (locales[i].equals(fu_FU)) {\r
122                 found = true;\r
123                 break;\r
124             }\r
125         }\r
126         if (!found) {\r
127             errln("did not find locale" + fu_FU + " in currency locales");\r
128         }\r
129 \r
130         if (!Currency.unregister(key1)) {\r
131             errln("unable to unregister currency using key1");\r
132         }\r
133         if (!Currency.unregister(key2)) {\r
134             errln("unable to unregister currency using key2");\r
135         }\r
136 \r
137         Currency nus2 = Currency.getInstance(Locale.US);\r
138         if (!nus2.equals(usd)) {\r
139             errln("expected " + usd + " but got: " + nus2);\r
140         }\r
141 \r
142         locales = Currency.getAvailableULocales();\r
143         found = false;\r
144         for (int i = 0; i < locales.length; ++i) {\r
145             if (locales[i].equals(fu_FU)) {\r
146                 found = true;\r
147                 break;\r
148             }\r
149         }\r
150         if (found) {\r
151             errln("found locale" + fu_FU + " in currency locales after unregister");\r
152         }\r
153     }\r
154 \r
155     /**\r
156      * Test names.\r
157      */\r
158     public void TestNames() {\r
159         // Do a basic check of getName()\r
160         // USD { "US$", "US Dollar"            } // 04/04/1792-\r
161         ULocale en = ULocale.ENGLISH;\r
162         boolean[] isChoiceFormat = new boolean[1];\r
163         Currency usd = Currency.getInstance("USD");\r
164         // Warning: HARD-CODED LOCALE DATA in this test.  If it fails, CHECK\r
165         // THE LOCALE DATA before diving into the code.\r
166         if (!noData()) {\r
167             assertEquals("USD.getName(SYMBOL_NAME)",\r
168                          "$",\r
169                          usd.getName(en, Currency.SYMBOL_NAME, isChoiceFormat));\r
170             assertEquals("USD.getName(LONG_NAME)",\r
171                          "US Dollar",\r
172                          usd.getName(en, Currency.LONG_NAME, isChoiceFormat));\r
173         }\r
174         // TODO add more tests later\r
175     }\r
176 \r
177     public void TestCoverage() {\r
178         Currency usd = Currency.getInstance("USD");\r
179         if (!noData()) {\r
180         assertEquals("USD.getSymbol()",\r
181                 "$",\r
182                 usd.getSymbol());\r
183         }\r
184         assertEquals("USD.getLocale()",\r
185                 ULocale.ROOT,\r
186                 usd.getLocale(null));\r
187     }\r
188 \r
189     public void TestCurrencyKeyword() {\r
190         ULocale locale = new ULocale("th_TH@collation=traditional;currency=QQQ");\r
191         Currency currency = Currency.getInstance(locale);\r
192         String result = currency.getCurrencyCode();\r
193         if (!"QQQ".equals(result)) {\r
194             errln("got unexpected currency: " + result);\r
195         }\r
196     }\r
197 \r
198     public void TestAvailableCurrencyCodes()\r
199     {\r
200         // local Variables\r
201         String[] currency;\r
202 \r
203         // Cycle through historical currencies \r
204         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AM"), new Date(-630720000000L)); // pre 1961\r
205         if (currency != null)\r
206         {\r
207             errln("FAIL: didn't return null for eo_AM");\r
208         }\r
209 \r
210         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AM"), new Date(0L)); // 1970\r
211         if (currency.length != 1)\r
212         {\r
213             errln("FAIL: didn't return 1 for eo_AM returned: " + currency.length);\r
214         }\r
215         if (!"SUR".equals(currency[0]))\r
216         {\r
217             errln("didn't return SUR for eo_AM returned: " + currency[0]);\r
218         }\r
219 \r
220         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AM"), new Date(693792000000L)); // 1992\r
221         if (currency.length != 1)\r
222         {\r
223             errln("FAIL: didn't return 1 for eo_AM returned: " + currency.length);\r
224         }\r
225         if (!"RUR".equals(currency[0]))\r
226         {\r
227             errln("didn't return RUR for eo_AM returned: " + currency[0]);\r
228         }\r
229 \r
230         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AM"), new Date(977616000000L)); // post 1993\r
231         if (currency.length != 1)\r
232         {\r
233             errln("FAIL: didn't return 1 for eo_AM returned: " + currency.length);\r
234         }\r
235         if (!"AMD".equals(currency[0]))\r
236         {\r
237             errln("didn't return AMD for eo_AM returned: " + currency[0]);\r
238         }\r
239 \r
240         // Locale AD has multiple currencies at once\r
241         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AD"), new Date(977616000000L)); // 2001\r
242         if (currency.length != 4)\r
243         {\r
244             errln("FAIL: didn't return 4 for eo_AD returned: " + currency.length);\r
245         }\r
246         if (!"EUR".equals(currency[0]))\r
247         {\r
248             errln("didn't return EUR for eo_AD returned: " + currency[0]);\r
249         }\r
250         if (!"ESP".equals(currency[1]))\r
251         {\r
252             errln("didn't return ESP for eo_AD returned: " + currency[1]);\r
253         }\r
254         if (!"FRF".equals(currency[2]))\r
255         {\r
256             errln("didn't return FRF for eo_AD returned: " + currency[2]);\r
257         }\r
258         if (!"ADP".equals(currency[3]))\r
259         {\r
260             errln("didn't return ADP for eo_AD returned: " + currency[3]);\r
261         }\r
262 \r
263         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AD"), new Date(0L)); // 1970\r
264         if (currency.length != 3)\r
265         {\r
266             errln("FAIL: didn't return 3 for eo_AD returned: " + currency.length);\r
267         }\r
268         if (!"ESP".equals(currency[0]))\r
269         {\r
270             errln("didn't return ESP for eo_AD returned: " + currency[0]);\r
271         }\r
272         if (!"FRF".equals(currency[1]))\r
273         {\r
274             errln("didn't return FRF for eo_AD returned: " + currency[1]);\r
275         }\r
276         if (!"ADP".equals(currency[2]))\r
277         {\r
278             errln("didn't return ADP for eo_AD returned: " + currency[2]);\r
279         }\r
280 \r
281         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AD"), new Date(-630720000000L)); // 1950\r
282         if (currency.length != 2)\r
283         {\r
284             errln("FAIL: didn't return 2 for eo_AD returned: " + currency.length);\r
285         }\r
286         if (!"ESP".equals(currency[0]))\r
287         {\r
288             errln("didn't return ESP for eo_AD returned: " + currency[0]);\r
289         }\r
290         if (!"ADP".equals(currency[1]))\r
291         {\r
292             errln("didn't return ADP for eo_AD returned: " + currency[1]);\r
293         }\r
294 \r
295         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AD"), new Date(-2207520000000L)); // 1900\r
296         if (currency.length != 1)\r
297         {\r
298             errln("FAIL: didn't return 1 for eo_AD returned: " + currency.length);\r
299         }\r
300         if (!"ESP".equals(currency[0]))\r
301         {\r
302             errln("didn't return ESP for eo_AD returned: " + currency[0]);\r
303         }\r
304 \r
305         // Locale UA has gap between years 1994 - 1996\r
306         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_UA"), new Date(788400000000L));\r
307         if (currency != null)\r
308         {\r
309             errln("FAIL: didn't return null for eo_UA");\r
310         }\r
311 \r
312         // Test for bogus locale\r
313         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_QQ"), new Date(0L));\r
314         if (currency != null)\r
315         {\r
316             errln("FAIL: didn't return null for eo_QQ");\r
317         }\r
318 \r
319         // Cycle through historical currencies\r
320         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AO"), new Date(977616000000L)); // 2001\r
321         if (currency.length != 1)\r
322         {\r
323             errln("FAIL: didn't return 1 for eo_AO returned: " + currency.length);\r
324         }\r
325         if (!"AOA".equals(currency[0]))\r
326         {\r
327             errln("didn't return AOA for eo_AO returned: " + currency[0]);\r
328         }\r
329 \r
330         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AO"), new Date(819936000000L)); // 1996\r
331         if (currency.length != 2)\r
332         {\r
333             errln("FAIL: didn't return 2 for eo_AO returned: " + currency.length);\r
334         }\r
335         if (!"AOR".equals(currency[0]))\r
336         {\r
337             errln("didn't return AOR for eo_AO returned: " + currency[0]);\r
338         }\r
339         if (!"AON".equals(currency[1]))\r
340         {\r
341             errln("didn't return AON for eo_AO returned: " + currency[1]);\r
342         }\r
343 \r
344         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AO"), new Date(662256000000L)); // \r
345         if (currency.length != 2)\r
346         {\r
347             errln("FAIL: didn't return 2 for eo_AO returned: " + currency.length);\r
348         }\r
349         if (!"AON".equals(currency[0]))\r
350         {\r
351             errln("didn't return AON for eo_AO returned: " + currency[0]);\r
352         }\r
353         if (!"AOK".equals(currency[1]))\r
354         {\r
355             errln("didn't return AOK for eo_AO returned: " + currency[1]);\r
356         }\r
357 \r
358         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AO"), new Date(315360000000L)); // 1980\r
359         if (currency.length != 1)\r
360         {\r
361             errln("FAIL: didn't return 1 for eo_AO returned: " + currency.length);\r
362         }\r
363         if (!"AOK".equals(currency[0]))\r
364         {\r
365             errln("didn't return AOK for eo_AO returned: " + currency[0]);\r
366         }\r
367 \r
368         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_AO"), new Date(0L)); // 1970\r
369         if (currency != null)\r
370         {\r
371             errln("FAIL: didn't return null for eo_AO");\r
372         }\r
373 \r
374         // Test with currency keyword override\r
375         currency = Currency.getAvailableCurrencyCodes(new ULocale("eo_DE@currency=DEM"), new Date(977616000000L)); // 2001\r
376         if (currency.length != 2)\r
377         {\r
378             errln("FAIL: didn't return 2 for eo_DE@currency=DEM returned: " + currency.length);\r
379         }\r
380         if (!"EUR".equals(currency[0]))\r
381         {\r
382             errln("didn't return EUR for eo_DE@currency=DEM returned: " + currency[0]);\r
383         }\r
384         if (!"DEM".equals(currency[1]))\r
385         {\r
386             errln("didn't return DEM for eo_DE@currency=DEM returned: " + currency[1]);\r
387         }\r
388 \r
389         // Test Euro Support\r
390         currency = Currency.getAvailableCurrencyCodes(new ULocale("en_US"), new Date(System.currentTimeMillis()));\r
391         if (!"USD".equals(currency[0]))\r
392         {\r
393             errln("didn't return USD for en_US returned: " + currency[0]);\r
394         }\r
395 \r
396         currency = Currency.getAvailableCurrencyCodes(new ULocale("en_US_PREEURO"), new Date(System.currentTimeMillis()));\r
397         if (!"USD".equals(currency[0]))\r
398         {\r
399             errln("didn't return USD for en_US_PREEURO returned: " + currency[0]);\r
400         }\r
401 \r
402         currency = Currency.getAvailableCurrencyCodes(new ULocale("en_US_Q"), new Date(System.currentTimeMillis()));\r
403         if (!"USD".equals(currency[0]))\r
404         {\r
405             errln("didn't return USD for en_US_Q returned: " + currency[0]);\r
406         }\r
407 \r
408     }\r
409 \r
410     public void TestDeprecatedCurrencyFormat() {\r
411         // bug 5952\r
412         Locale locale = new Locale("sr", "QQ");\r
413         DecimalFormatSymbols icuSymbols = new \r
414         com.ibm.icu.text.DecimalFormatSymbols(locale);\r
415         String symbol = icuSymbols.getCurrencySymbol();\r
416         Currency currency = icuSymbols.getCurrency();\r
417         String expectCur = null;\r
418         String expectSym = "\u00A4";\r
419         if(!symbol.toString().equals(expectSym) || currency != null) {\r
420             errln("for " + locale + " expected " + expectSym+"/"+expectCur + " but got " + symbol+"/"+currency);\r
421         } else {\r
422             logln("for " + locale + " expected " + expectSym+"/"+expectCur + " and got " + symbol+"/"+currency);\r
423         }\r
424     }\r
425     \r
426     public void TestGetKeywordValues(){\r
427 \r
428         final String[][] PREFERRED = {\r
429             {"root",            "USD"},\r
430             {"und",             "USD"},\r
431             {"und_ZZ",          "USD"},\r
432             {"en_US",           "USD"},\r
433             {"en_029",          "USD"},\r
434             {"en_TH",           "THB"},\r
435             {"de",              "EUR"},\r
436             {"de_DE",           "EUR"},\r
437             {"ar",              "EGP"},\r
438             {"ar_PS",           "JOD", "ILS"},\r
439             {"en@currency=CAD",     "USD"},\r
440             {"fr@currency=ZZZ",     "EUR"},\r
441             {"de_DE@currency=DEM",  "EUR"},\r
442         };\r
443 \r
444         String[] ALL = Currency.getKeywordValuesForLocale("currency", ULocale.getDefault(), false);\r
445         HashSet ALLSET = new HashSet();\r
446         for (int i = 0; i < ALL.length; i++) {\r
447             ALLSET.add(ALL[i]);\r
448         }\r
449 \r
450         for (int i = 0; i < PREFERRED.length; i++) {\r
451             ULocale loc = new ULocale(PREFERRED[i][0]);\r
452             String[] expected = new String[PREFERRED[i].length - 1];\r
453             System.arraycopy(PREFERRED[i], 1, expected, 0, expected.length);\r
454 \r
455             String[] pref = Currency.getKeywordValuesForLocale("currency", loc, true);\r
456             boolean matchPref = false;\r
457             if (pref.length == expected.length) {\r
458                 matchPref = true;\r
459                 for (int j = 0; j < pref.length; j++) {\r
460                     if (!pref[j].equals(expected[j])) {\r
461                         matchPref = false;\r
462                     }\r
463                 }\r
464             }\r
465             if (!matchPref) {\r
466                 errln("FAIL: Preferred values for locale " + loc \r
467                         + " got:" + Utility.arrayToString(pref) + " expected:" + Utility.arrayToString(expected));\r
468             }\r
469 \r
470             String[] all = Currency.getKeywordValuesForLocale("currency", loc, false);\r
471             boolean matchAll = false;\r
472             if (all.length == ALLSET.size()) {\r
473                 matchAll = true;\r
474                 for (int j = 0; j < all.length; j++) {\r
475                     if (!ALLSET.contains(all[j])) {\r
476                         matchAll = false;\r
477                         break;\r
478                     }\r
479                 }\r
480             }\r
481             if (!matchAll) {\r
482                 errln("FAIL: All values for locale " + loc\r
483                         + " got:" + Utility.arrayToString(all)); \r
484             }\r
485         }\r
486     }\r
487 }\r