]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/util/CurrencyTest.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / 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 \r
14 import java.text.DateFormat;\r
15 import java.text.SimpleDateFormat;\r
16 import java.util.Arrays;\r
17 import java.util.Date;\r
18 import java.util.HashSet;\r
19 import java.util.Locale;\r
20 import java.util.Set;\r
21 \r
22 import com.ibm.icu.dev.test.TestFmwk;\r
23 import com.ibm.icu.text.DecimalFormatSymbols;\r
24 import com.ibm.icu.util.Currency;\r
25 import com.ibm.icu.util.ULocale;\r
26 \r
27 /**\r
28  * @test\r
29  * @summary General test of Currency\r
30  */\r
31 public class CurrencyTest extends TestFmwk {\r
32 \r
33     public static void main(String[] args) throws Exception {\r
34         new CurrencyTest().run(args);\r
35     }\r
36 \r
37     /**\r
38      * Test of basic API.\r
39      */\r
40     public void TestAPI() {\r
41         Currency usd = Currency.getInstance("USD");\r
42         /*int hash = */usd.hashCode();\r
43         Currency jpy = Currency.getInstance("JPY");\r
44         if (usd.equals(jpy)) {\r
45             errln("FAIL: USD == JPY");\r
46         }\r
47         if (usd.equals("abc")) {\r
48             errln("FAIL: USD == (String)");\r
49         }\r
50         if (usd.equals(null)) {\r
51             errln("FAIL: USD == (null)");\r
52         }\r
53         if (!usd.equals(usd)) {\r
54             errln("FAIL: USD != USD");\r
55         }\r
56 \r
57         try {\r
58             Currency nullCurrency = Currency.getInstance((String)null);\r
59             errln("FAIL: Expected getInstance(null) to throw "\r
60                     + "a NullPointerException, but returned " + nullCurrency);\r
61         } catch (NullPointerException npe) {\r
62             logln("PASS: getInstance(null) threw a NullPointerException");\r
63         }\r
64 \r
65         try {\r
66             Currency bogusCurrency = Currency.getInstance("BOGUS");\r
67             errln("FAIL: Expected getInstance(\"BOGUS\") to throw "\r
68                     + "an IllegalArgumentException, but returned " + bogusCurrency);\r
69         } catch (IllegalArgumentException iae) {\r
70             logln("PASS: getInstance(\"BOGUS\") threw an IllegalArgumentException");\r
71         }\r
72 \r
73         Locale[] avail = Currency.getAvailableLocales();\r
74         if(avail==null){\r
75             errln("FAIL: getAvailableLocales returned null");\r
76         }\r
77 \r
78         try {\r
79             usd.getName(ULocale.US, 5, new boolean[1]);\r
80             errln("expected getName with invalid type parameter to throw exception");\r
81         }\r
82         catch (Exception e) {\r
83             logln("PASS: getName failed as expected");\r
84         }\r
85     }\r
86 \r
87     /**\r
88      * Test registration.\r
89      */\r
90     public void TestRegistration() {\r
91         final Currency jpy = Currency.getInstance("JPY");\r
92         final Currency usd = Currency.getInstance(Locale.US);\r
93 \r
94     try {\r
95       Currency.unregister(null); // should fail, coverage\r
96       errln("expected unregister of null to throw exception");\r
97     }\r
98     catch (Exception e) {\r
99         logln("PASS: unregister of null failed as expected");\r
100     }\r
101 \r
102     if (Currency.unregister("")) { // coverage\r
103       errln("unregister before register erroneously succeeded");\r
104     }\r
105 \r
106         ULocale fu_FU = new ULocale("fu_FU");\r
107 \r
108         Object key1 = Currency.registerInstance(jpy, ULocale.US);\r
109         Object key2 = Currency.registerInstance(jpy, fu_FU);\r
110 \r
111         Currency nus = Currency.getInstance(Locale.US);\r
112         if (!nus.equals(jpy)) {\r
113             errln("expected " + jpy + " but got: " + nus);\r
114         }\r
115 \r
116         // converage, make sure default factory works\r
117         Currency nus1 = Currency.getInstance(Locale.JAPAN);\r
118         if (!nus1.equals(jpy)) {\r
119             errln("expected " + jpy + " but got: " + nus1);\r
120         }\r
121 \r
122         ULocale[] locales = Currency.getAvailableULocales();\r
123         boolean found = false;\r
124         for (int i = 0; i < locales.length; ++i) {\r
125             if (locales[i].equals(fu_FU)) {\r
126                 found = true;\r
127                 break;\r
128             }\r
129         }\r
130         if (!found) {\r
131             errln("did not find locale" + fu_FU + " in currency locales");\r
132         }\r
133 \r
134         if (!Currency.unregister(key1)) {\r
135             errln("unable to unregister currency using key1");\r
136         }\r
137         if (!Currency.unregister(key2)) {\r
138             errln("unable to unregister currency using key2");\r
139         }\r
140 \r
141         Currency nus2 = Currency.getInstance(Locale.US);\r
142         if (!nus2.equals(usd)) {\r
143             errln("expected " + usd + " but got: " + nus2);\r
144         }\r
145 \r
146         locales = Currency.getAvailableULocales();\r
147         found = false;\r
148         for (int i = 0; i < locales.length; ++i) {\r
149             if (locales[i].equals(fu_FU)) {\r
150                 found = true;\r
151                 break;\r
152             }\r
153         }\r
154         if (found) {\r
155             errln("found locale" + fu_FU + " in currency locales after unregister");\r
156         }\r
157     }\r
158 \r
159     /**\r
160      * Test names.\r
161      */\r
162     public void TestNames() {\r
163         // Do a basic check of getName()\r
164         // USD { "US$", "US Dollar"            } // 04/04/1792-\r
165         ULocale en = ULocale.ENGLISH;\r
166         boolean[] isChoiceFormat = new boolean[1];\r
167         Currency usd = Currency.getInstance("USD");\r
168         // Warning: HARD-CODED LOCALE DATA in this test.  If it fails, CHECK\r
169         // THE LOCALE DATA before diving into the code.\r
170         if (!noData()) {\r
171             assertEquals("USD.getName(SYMBOL_NAME)",\r
172                          "$",\r
173                          usd.getName(en, Currency.SYMBOL_NAME, isChoiceFormat));\r
174             assertEquals("USD.getName(LONG_NAME)",\r
175                          "US Dollar",\r
176                          usd.getName(en, Currency.LONG_NAME, isChoiceFormat));\r
177         }\r
178         // TODO add more tests later\r
179     }\r
180 \r
181     public void TestCoverage() {\r
182         Currency usd = Currency.getInstance("USD");\r
183         if (!noData()) {\r
184         assertEquals("USD.getSymbol()",\r
185                 "$",\r
186                 usd.getSymbol());\r
187         }\r
188         assertEquals("USD.getLocale()",\r
189                 ULocale.ROOT,\r
190                 usd.getLocale(null));\r
191     }\r
192 \r
193     public void TestCurrencyKeyword() {\r
194         ULocale locale = new ULocale("th_TH@collation=traditional;currency=QQQ");\r
195         Currency currency = Currency.getInstance(locale);\r
196         String result = currency.getCurrencyCode();\r
197         if (!"QQQ".equals(result)) {\r
198             errln("got unexpected currency: " + result);\r
199         }\r
200     }\r
201 \r
202     public void TestAvailableCurrencyCodes() {\r
203         String[][] tests = {\r
204             { "eo_AM", "1950-01-05" },\r
205             { "eo_AM", "1969-12-31", "SUR" },\r
206             { "eo_AM", "1991-12-26", "RUR" },\r
207             { "eo_AM", "2000-12-23", "AMD" },\r
208             { "eo_AD", "2000-12-23", "EUR", "ESP", "FRF", "ADP" },\r
209             { "eo_AD", "1969-12-31", "ESP", "FRF", "ADP" },\r
210             { "eo_AD", "1950-01-05", "ESP", "ADP" },\r
211             { "eo_AD", "1900-01-17", "ESP" },\r
212             { "eo_UA", "1994-12-25" },\r
213             { "eo_QQ", "1969-12-31" },\r
214             { "eo_AO", "2000-12-23", "AOA" },\r
215             { "eo_AO", "1995-12-25", "AOR", "AON" },\r
216             { "eo_AO", "1990-12-26", "AON", "AOK" },\r
217             { "eo_AO", "1979-12-29", "AOK" },\r
218             { "eo_AO", "1969-12-31" },\r
219             { "eo_DE@currency=DEM", "2000-12-23", "EUR", "DEM" },\r
220             { "en_US", null, "USD" },\r
221             { "en_US_PREEURO", null, "USD" },\r
222             { "en_US_Q", null, "USD" },\r
223         };\r
224         \r
225         DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd", Locale.US);\r
226         for (String[] test : tests) {\r
227             ULocale locale = new ULocale(test[0]);\r
228             String timeString = test[1];\r
229             Date date;\r
230             if (timeString == null) {\r
231                 date = new Date();\r
232                 timeString = "today";\r
233             } else {\r
234                 try {\r
235                     date = fmt.parse(timeString);\r
236                 } catch (Exception e) {\r
237                     fail("could not parse date: " + timeString);\r
238                     continue;\r
239                 }\r
240             }\r
241             String[] expected = null;\r
242             if (test.length > 2) {\r
243                 expected = new String[test.length - 2];\r
244                 System.arraycopy(test, 2, expected, 0, expected.length);\r
245             }\r
246             String[] actual = Currency.getAvailableCurrencyCodes(locale, date);\r
247             \r
248             // Order is not important as of 4.4.  We never documented that it was.\r
249             Set<String> expectedSet = new HashSet<String>();\r
250             if (expected != null) {\r
251                 expectedSet.addAll(Arrays.asList(expected));\r
252             }\r
253             Set<String> actualSet = new HashSet<String>();\r
254             if (actual != null) {\r
255                 actualSet.addAll(Arrays.asList(actual));\r
256             }\r
257             assertEquals(locale + " on " + timeString, expectedSet, actualSet);\r
258         }\r
259     }\r
260 \r
261     public void TestDeprecatedCurrencyFormat() {\r
262         // bug 5952\r
263         Locale locale = new Locale("sr", "QQ");\r
264         DecimalFormatSymbols icuSymbols = new \r
265         com.ibm.icu.text.DecimalFormatSymbols(locale);\r
266         String symbol = icuSymbols.getCurrencySymbol();\r
267         Currency currency = icuSymbols.getCurrency();\r
268         String expectCur = null;\r
269         String expectSym = "\u00A4";\r
270         if(!symbol.toString().equals(expectSym) || currency != null) {\r
271             errln("for " + locale + " expected " + expectSym+"/"+expectCur + " but got " + symbol+"/"+currency);\r
272         } else {\r
273             logln("for " + locale + " expected " + expectSym+"/"+expectCur + " and got " + symbol+"/"+currency);\r
274         }\r
275     }\r
276     \r
277     public void TestGetKeywordValues(){\r
278 \r
279         final String[][] PREFERRED = {\r
280             {"root",                 },\r
281             {"und",                  },\r
282             {"und_ZZ",               },\r
283             {"en_US",           "USD"},\r
284             {"en_029",               },\r
285             {"en_TH",           "THB"},\r
286             {"de",              "EUR"},\r
287             {"de_DE",           "EUR"},\r
288             {"de_ZZ",                },\r
289             {"ar",              "EGP"},\r
290             {"ar_PS",           "JOD", "ILS"},\r
291             {"en@currency=CAD",     "USD"},\r
292             {"fr@currency=ZZZ",     "EUR"},\r
293             {"de_DE@currency=DEM",  "EUR"},\r
294         };\r
295 \r
296         String[] ALL = Currency.getKeywordValuesForLocale("currency", ULocale.getDefault(), false);\r
297         HashSet ALLSET = new HashSet();\r
298         for (int i = 0; i < ALL.length; i++) {\r
299             ALLSET.add(ALL[i]);\r
300         }\r
301         \r
302         for (int i = 0; i < PREFERRED.length; i++) {\r
303             ULocale loc = new ULocale(PREFERRED[i][0]);\r
304             String[] expected = new String[PREFERRED[i].length - 1];\r
305             System.arraycopy(PREFERRED[i], 1, expected, 0, expected.length);\r
306             String[] pref = Currency.getKeywordValuesForLocale("currency", loc, true);\r
307             assertEquals(loc.toString(), expected, pref);\r
308 \r
309             String[] all = Currency.getKeywordValuesForLocale("currency", loc, false);\r
310             // The items in the two collections should match (ignore order, \r
311             // behavior change from 4.3.3)\r
312             Set<String> returnedSet = new HashSet<String>();\r
313             returnedSet.addAll(Arrays.asList(all));\r
314             assertEquals(loc.toString(), ALLSET, returnedSet);\r
315         }\r
316     }\r
317 }\r