17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ********************************************************************** 3578e467cc0b85f5a3f1b49bba673d654abb3dbd3roubert * Copyright (c) 2002-2015, International Business Machines 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Corporation and others. All Rights Reserved. 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ********************************************************************** 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Author: Alan Liu 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Created: December 18 2002 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Since: ICU 2.4 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ********************************************************************** 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.util; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Arrays; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Date; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashSet; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.List; 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Set; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestUtil; 23578e467cc0b85f5a3f1b49bba673d654abb3dbd3roubertimport com.ibm.icu.dev.test.TestUtil.JavaVendor; 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.CurrencyData; 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CurrencyDisplayNames; 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CurrencyMetaInfo; 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CurrencyMetaInfo.CurrencyFilter; 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CurrencyMetaInfo.CurrencyInfo; 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DateFormat; 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DecimalFormatSymbols; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.SimpleDateFormat; 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.Currency; 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.GregorianCalendar; 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.TimeZone; 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @test 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @summary General test of Currency 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class CurrencyTest extends TestFmwk { 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) throws Exception { 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new CurrencyTest().run(args); 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test of basic API. 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestAPI() { 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency usd = Currency.getInstance("USD"); 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*int hash = */usd.hashCode(); 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency jpy = Currency.getInstance("JPY"); 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (usd.equals(jpy)) { 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: USD == JPY"); 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (usd.equals("abc")) { 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: USD == (String)"); 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (usd.equals(null)) { 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: USD == (null)"); 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!usd.equals(usd)) { 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: USD != USD"); 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency nullCurrency = Currency.getInstance((String)null); 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: Expected getInstance(null) to throw " 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "a NullPointerException, but returned " + nullCurrency); 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (NullPointerException npe) { 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: getInstance(null) threw a NullPointerException"); 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency bogusCurrency = Currency.getInstance("BOGUS"); 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: Expected getInstance(\"BOGUS\") to throw " 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "an IllegalArgumentException, but returned " + bogusCurrency); 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IllegalArgumentException iae) { 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: getInstance(\"BOGUS\") threw an IllegalArgumentException"); 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale[] avail = Currency.getAvailableLocales(); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(avail==null){ 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: getAvailableLocales returned null"); 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert usd.getName(ULocale.US, 5, new boolean[1]); 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected getName with invalid type parameter to throw exception"); 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: getName failed as expected"); 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test registration. 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestRegistration() { 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final Currency jpy = Currency.getInstance("JPY"); 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final Currency usd = Currency.getInstance(Locale.US); 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency.unregister(null); // should fail, coverage 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected unregister of null to throw exception"); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: unregister of null failed as expected"); 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (Currency.unregister("")) { // coverage 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("unregister before register erroneously succeeded"); 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale fu_FU = new ULocale("fu_FU"); 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object key1 = Currency.registerInstance(jpy, ULocale.US); 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object key2 = Currency.registerInstance(jpy, fu_FU); 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency nus = Currency.getInstance(Locale.US); 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!nus.equals(jpy)) { 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected " + jpy + " but got: " + nus); 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // converage, make sure default factory works 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency nus1 = Currency.getInstance(Locale.JAPAN); 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!nus1.equals(jpy)) { 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected " + jpy + " but got: " + nus1); 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale[] locales = Currency.getAvailableULocales(); 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean found = false; 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < locales.length; ++i) { 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (locales[i].equals(fu_FU)) { 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = true; 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!found) { 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("did not find locale" + fu_FU + " in currency locales"); 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!Currency.unregister(key1)) { 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("unable to unregister currency using key1"); 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!Currency.unregister(key2)) { 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("unable to unregister currency using key2"); 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency nus2 = Currency.getInstance(Locale.US); 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!nus2.equals(usd)) { 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected " + usd + " but got: " + nus2); 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert locales = Currency.getAvailableULocales(); 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = false; 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < locales.length; ++i) { 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (locales[i].equals(fu_FU)) { 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = true; 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (found) { 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("found locale" + fu_FU + " in currency locales after unregister"); 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale[] locs = Currency.getAvailableLocales(); 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = false; 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < locs.length; ++i) { 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (locs[i].equals(fu_FU)) { 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = true; 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (found) { 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("found locale" + fu_FU + " in currency locales after unregister"); 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test names. 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNames() { 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Do a basic check of getName() 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // USD { "US$", "US Dollar" } // 04/04/1792- 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale en = ULocale.ENGLISH; 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean[] isChoiceFormat = new boolean[1]; 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency usd = Currency.getInstance("USD"); 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Warning: HARD-CODED LOCALE DATA in this test. If it fails, CHECK 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // THE LOCALE DATA before diving into the code. 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!noData()) { 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("USD.getName(SYMBOL_NAME)", 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$", 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert usd.getName(en, Currency.SYMBOL_NAME, isChoiceFormat)); 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("USD.getName(LONG_NAME)", 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "US Dollar", 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert usd.getName(en, Currency.LONG_NAME, isChoiceFormat)); 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO add more tests later 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCoverage() { 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency usd = Currency.getInstance("USD"); 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!noData()) { 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("USD.getSymbol()", 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$", 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert usd.getSymbol()); 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // A real test of the CurrencyDisplayNames class. 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyDisplayNames() { 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!CurrencyDisplayNames.hasData()) { 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("hasData() should return true."); 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // with substitute 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyDisplayNames cdn = CurrencyDisplayNames.getInstance(ULocale.GERMANY); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_name", "US-Dollar", cdn.getName("USD")); 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_symbol", "$", cdn.getSymbol("USD")); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_plural_other", "US-Dollar", cdn.getPluralName("USD", "other")); 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // unknown plural category, substitute "other" 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_plural_foo", "US-Dollar", cdn.getPluralName("USD", "foo")); 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(ULocale.forLanguageTag("en-US")); 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_USD_name", "US Dollar", cdn.getName("USD")); 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_USD_symbol", "$", cdn.getSymbol("USD")); 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_USD_plural_one", "US dollar", cdn.getPluralName("USD", "one")); 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_USD_plural_other", "US dollars", cdn.getPluralName("USD", "other")); 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_FOO_name", "FOO", cdn.getName("FOO")); 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_FOO_symbol", "FOO", cdn.getSymbol("FOO")); 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_FOO_plural_other", "FOO", cdn.getPluralName("FOO", "other")); 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US bundle", "en", cdn.getULocale().toString()); 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(ULocale.forLanguageTag("zz-Gggg-YY")); 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("bundle from current locale", "en", cdn.getULocale().toString()); 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // with no substitute 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(ULocale.GERMANY, true); 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("have currency data for Germany", cdn); 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // known currency, behavior unchanged 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_name", "US-Dollar", cdn.getName("USD")); 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_symbol", "$", cdn.getSymbol("USD")); 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_plural_other", "US-Dollar", cdn.getPluralName("USD", "other")); 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // known currency but unknown plural category 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_USD_plural_foo", cdn.getPluralName("USD", "foo")); 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // unknown currency, get null 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_name", cdn.getName("FOO")); 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_symbol", cdn.getSymbol("FOO")); 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_plural_other", cdn.getPluralName("FOO", "other")); 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_plural_foo", cdn.getPluralName("FOO", "foo")); 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // unknown locale with no substitute 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(ULocale.forLanguageTag("zz-Gggg-YY"), true); 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String ln = ""; 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (cdn != null) { 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ln = " (" + cdn.getULocale().toString() + ")"; 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("no fallback from unknown locale" + ln , cdn); 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Locale version 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(Locale.GERMANY, true); 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("have currency data for Germany (Java Locale)", cdn); 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_name (Locale)", "US-Dollar", cdn.getName("USD")); 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_name (Locale)", cdn.getName("FOO")); 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Coverage-only test of CurrencyData 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyData() { 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyData.DefaultInfo info_fallback = (CurrencyData.DefaultInfo)CurrencyData.DefaultInfo.getWithFallback(true); 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info_fallback == null) { 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("getWithFallback() returned null."); 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyData.DefaultInfo info_nofallback = (CurrencyData.DefaultInfo)CurrencyData.DefaultInfo.getWithFallback(false); 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info_nofallback == null) { 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("getWithFallback() returned null."); 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getName("isoCode").equals("isoCode") || info_nofallback.getName("isoCode") != null) { 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getName()."); 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getPluralName("isoCode", "type").equals("isoCode") || info_nofallback.getPluralName("isoCode", "type") != null) { 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getPluralName()."); 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getSymbol("isoCode").equals("isoCode") || info_nofallback.getSymbol("isoCode") != null) { 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getSymbol()."); 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.symbolMap().isEmpty()) { 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("symbolMap() should return empty map."); 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.nameMap().isEmpty()) { 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("nameMap() should return empty map."); 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getUnitPatterns().isEmpty() || info_nofallback.getUnitPatterns() != null) { 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getUnitPatterns()."); 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getSpacingInfo().equals((CurrencyData.CurrencySpacingInfo.DEFAULT)) || 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert info_nofallback.getSpacingInfo() != null) { 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getSpacingInfo()."); 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info_fallback.getULocale() != ULocale.ROOT) { 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getLocale()."); 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info_fallback.getFormatInfo("isoCode") != null) { 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getFormatInfo()."); 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // A real test of CurrencyMetaInfo. 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testCurrencyMetaInfoRanges() { 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo metainfo = CurrencyMetaInfo.getInstance(true); 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("have metainfo", metainfo); 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyFilter filter = CurrencyFilter.onRegion("DE"); // must be capitalized 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert List<CurrencyInfo> currenciesInGermany = metainfo.currencyInfo(filter); 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("currencies: " + currenciesInGermany.size()); 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z"); 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setTimeZone(TimeZone.getTimeZone("GMT")); 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date demLastDate = new Date(Long.MAX_VALUE); 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date eurFirstDate = new Date(Long.MIN_VALUE); 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (CurrencyInfo info : currenciesInGermany) { 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(info.toString()); 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("from: " + fmt.format(info.from)+ Long.toHexString(info.from)); 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(" to: " + fmt.format(info.to) + Long.toHexString(info.to)); 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info.code.equals("DEM")) { 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert demLastDate = new Date(info.to); 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (info.code.equals("EUR")) { 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert eurFirstDate = new Date(info.from); 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // the Euro and Deutschmark overlapped for several years 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("DEM available at last date", 2, metainfo.currencyInfo(filter.withDate(demLastDate)).size()); 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // demLastDate + 1 millisecond is not the start of the last day, we consider it the next day, so... 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date demLastDatePlus1ms = new Date(demLastDate.getTime() + 1); 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("DEM not available after very start of last date", 1, metainfo.currencyInfo(filter.withDate(demLastDatePlus1ms)).size()); 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // both available for start of euro 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("EUR available on start of first date", 2, metainfo.currencyInfo(filter.withDate(eurFirstDate)).size()); 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // but not one millisecond before the start of the first day 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date eurFirstDateMinus1ms = new Date(eurFirstDate.getTime() - 1); 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("EUR not avilable before very start of first date", 1, metainfo.currencyInfo(filter.withDate(eurFirstDateMinus1ms)).size()); 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // end time is last millisecond of day 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert GregorianCalendar cal = new GregorianCalendar(); 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.setTimeZone(TimeZone.getTimeZone("GMT")); 3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.setTime(demLastDate); 3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("hour is 23", 23, cal.get(GregorianCalendar.HOUR_OF_DAY)); 3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("minute is 59", 59, cal.get(GregorianCalendar.MINUTE)); 3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("second is 59", 59, cal.get(GregorianCalendar.SECOND)); 3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("millisecond is 999", 999, cal.get(GregorianCalendar.MILLISECOND)); 3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // start time is first millisecond of day 3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.setTime(eurFirstDate); 3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("hour is 0", 0, cal.get(GregorianCalendar.HOUR_OF_DAY)); 3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("minute is 0", 0, cal.get(GregorianCalendar.MINUTE)); 3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("second is 0", 0, cal.get(GregorianCalendar.SECOND)); 3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("millisecond is 0", 0, cal.get(GregorianCalendar.MILLISECOND)); 3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testCurrencyMetaInfoRangesWithLongs() { 3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo metainfo = CurrencyMetaInfo.getInstance(true); 3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("have metainfo", metainfo); 3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyFilter filter = CurrencyFilter.onRegion("DE"); // must be capitalized 3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert List<CurrencyInfo> currenciesInGermany = metainfo.currencyInfo(filter); 3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("currencies: " + currenciesInGermany.size()); 3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long demLastDate = Long.MAX_VALUE; 3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long eurFirstDate = Long.MIN_VALUE; 3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (CurrencyInfo info : currenciesInGermany) { 3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(info.toString()); 4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info.code.equals("DEM")) { 4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert demLastDate = info.to; 4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (info.code.equals("EUR")) { 4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert eurFirstDate = info.from; 4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // the Euro and Deutschmark overlapped for several years 4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("DEM available at last date", 2, metainfo.currencyInfo(filter.withDate(demLastDate)).size()); 4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // demLastDate + 1 millisecond is not the start of the last day, we consider it the next day, so... 4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long demLastDatePlus1ms = demLastDate + 1; 4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("DEM not available after very start of last date", 1, metainfo.currencyInfo(filter.withDate(demLastDatePlus1ms)).size()); 4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // both available for start of euro 4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("EUR available on start of first date", 2, metainfo.currencyInfo(filter.withDate(eurFirstDate)).size()); 4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // but not one millisecond before the start of the first day 4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long eurFirstDateMinus1ms = eurFirstDate - 1; 4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("EUR not avilable before very start of first date", 1, metainfo.currencyInfo(filter.withDate(eurFirstDateMinus1ms)).size()); 4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestWithTender() { 4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo metainfo = CurrencyMetaInfo.getInstance(); 4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (metainfo == null) { 4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unable to get CurrencyMetaInfo instance."); 4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyFilter filter = 4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyFilter.onRegion("CH"); 4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert List<String> currencies = metainfo.currencies(filter); 4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("More than one currency for switzerland", currencies.size() > 1); 4317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals( 4327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "With tender", 4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Arrays.asList(new String[] {"CHF", "CHE", "CHW"}), 4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert metainfo.currencies(filter.withTender())); 4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Coverage-only test of the CurrencyMetaInfo class 4387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyMetaInfo() { 4397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo metainfo = CurrencyMetaInfo.getInstance(); 4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (metainfo == null) { 4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unable to get CurrencyMetaInfo instance."); 4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!CurrencyMetaInfo.hasData()) { 4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("hasData() should note return false."); 4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyFilter filter; 4517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyInfo info; 4527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyDigits digits; 4537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { // CurrencyFilter 4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert filter = CurrencyMetaInfo.CurrencyFilter.onCurrency("currency"); 4567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyFilter filter2 = CurrencyMetaInfo.CurrencyFilter.onCurrency("test"); 4577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter == null) { 4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unable to create CurrencyFilter."); 4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter.equals(new Object())) { 4637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("filter should not equal to Object"); 4647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter.equals(filter2)) { 4687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("filter should not equal filter2"); 4697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter.hashCode() == 0) { 4737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting filter hashcode"); 4747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter.toString() == null) { 4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling toString()"); 4797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { // CurrencyInfo 4847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert info = new CurrencyMetaInfo.CurrencyInfo("region", "code", 0, 1, 1, false); 4857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info == null) { 4867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error creating CurrencyInfo."); 4877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info.toString() == null) { 4917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling toString()"); 4927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { // CurrencyDigits 4977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert digits = metainfo.currencyDigits("isoCode"); 4987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (digits == null) { 4997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unable to get CurrencyDigits."); 5007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (digits.toString() == null) { 5047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling toString()"); 5057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyKeyword() { 5117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = new ULocale("th_TH@collation=traditional;currency=QQQ"); 5127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency currency = Currency.getInstance(locale); 5137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String result = currency.getCurrencyCode(); 5147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!"QQQ".equals(result)) { 5157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("got unexpected currency: " + result); 5167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestAvailableCurrencyCodes() { 5207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[][] tests = { 5217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AM", "1950-01-05" }, 5227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AM", "1969-12-31", "SUR" }, 5237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AM", "1991-12-26", "RUR" }, 5247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AM", "2000-12-23", "AMD" }, 5257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AD", "2000-12-23", "EUR", "ESP", "FRF", "ADP" }, 5267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AD", "1969-12-31", "ESP", "FRF", "ADP" }, 5277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AD", "1950-01-05", "ESP", "ADP" }, 5287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AD", "1900-01-17", "ESP" }, 5297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_UA", "1994-12-25" }, 5307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_QQ", "1969-12-31" }, 5317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "2000-12-23", "AOA" }, 5327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "1995-12-25", "AOR", "AON" }, 5337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "1990-12-26", "AON", "AOK" }, 5347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "1979-12-29", "AOK" }, 5357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "1969-12-31" }, 5367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_DE@currency=DEM", "2000-12-23", "EUR", "DEM" }, 5377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo-DE-u-cu-dem", "2000-12-23", "EUR", "DEM" }, 5387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "en_US", null, "USD", "USN" }, 5397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "en_US_PREEURO", null, "USD", "USN" }, 5407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "en_US_Q", null, "USD", "USN" }, 5417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 5427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 5447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (String[] test : tests) { 5457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = new ULocale(test[0]); 5467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String timeString = test[1]; 5477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date date; 5487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (timeString == null) { 5497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert date = new Date(); 5507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert timeString = "today"; 5517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 5527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 5537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert date = fmt.parse(timeString); 5547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 5557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fail("could not parse date: " + timeString); 5567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 5577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] expected = null; 5607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (test.length > 2) { 5617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expected = new String[test.length - 2]; 5627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.arraycopy(test, 2, expected, 0, expected.length); 5637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] actual = Currency.getAvailableCurrencyCodes(locale, date); 5657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Order is not important as of 4.4. We never documented that it was. 5677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<String> expectedSet = new HashSet<String>(); 5687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (expected != null) { 5697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectedSet.addAll(Arrays.asList(expected)); 5707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<String> actualSet = new HashSet<String>(); 5727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (actual != null) { 5737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert actualSet.addAll(Arrays.asList(actual)); 5747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(locale + " on " + timeString, expectedSet, actualSet); 5767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // With Java Locale 5787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Note: skip this test on Java 6 or older when keywords are available 579578e467cc0b85f5a3f1b49bba673d654abb3dbd3roubert if (locale.getKeywords() == null || TestUtil.getJavaVendor() == JavaVendor.Android || TestUtil.getJavaVersion() >= 7) { 5807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale javaloc = locale.toLocale(); 5817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] actualWithJavaLocale = Currency.getAvailableCurrencyCodes(javaloc, date); 5827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // should be exactly same with the ULocale version 5837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean same = true; 5847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (actual == null) { 5857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (actualWithJavaLocale != null) { 5867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert same = false; 5877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 5897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (actualWithJavaLocale == null || actual.length != actualWithJavaLocale.length) { 5907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert same = false; 5917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 5927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert same = true; 5937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < actual.length; i++) { 5947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!actual[i].equals(actualWithJavaLocale[i])) { 5957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert same = false; 5967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 5977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("getAvailableCurrencyCodes with ULocale vs Locale", same); 6027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestDeprecatedCurrencyFormat() { 6077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // bug 5952 6087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale locale = new Locale("sr", "QQ"); 6097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormatSymbols icuSymbols = new 6107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert com.ibm.icu.text.DecimalFormatSymbols(locale); 6117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String symbol = icuSymbols.getCurrencySymbol(); 6127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency currency = icuSymbols.getCurrency(); 6137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expectCur = null; 6147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expectSym = "\u00A4"; 6157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!symbol.toString().equals(expectSym) || currency != null) { 6167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("for " + locale + " expected " + expectSym+"/"+expectCur + " but got " + symbol+"/"+currency); 6177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 6187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("for " + locale + " expected " + expectSym+"/"+expectCur + " and got " + symbol+"/"+currency); 6197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetKeywordValues(){ 6237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String[][] PREFERRED = { 6257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"root", }, 6267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"und", }, 6277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"und_ZZ", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XDR", "XPD", "XPT", "XSU", "XTS", "XUA", "XXX"}, 6287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"en_US", "USD", "USN"}, 6297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"en_029", }, 6307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"en_TH", "THB"}, 6317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"de", "EUR"}, 6327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"de_DE", "EUR"}, 6337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"de_ZZ", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XDR", "XPD", "XPT", "XSU", "XTS", "XUA", "XXX"}, 6347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"ar", "EGP"}, 6357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"ar_PS", "ILS", "JOD"}, 6367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"en@currency=CAD", "USD", "USN"}, 6377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"fr@currency=ZZZ", "EUR"}, 6387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"de_DE@currency=DEM", "EUR"}, 6397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 6407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] ALL = Currency.getKeywordValuesForLocale("currency", ULocale.getDefault(), false); 6427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert HashSet ALLSET = new HashSet(); 6437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < ALL.length; i++) { 6447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ALLSET.add(ALL[i]); 6457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < PREFERRED.length; i++) { 6487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale loc = new ULocale(PREFERRED[i][0]); 6497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] expected = new String[PREFERRED[i].length - 1]; 6507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.arraycopy(PREFERRED[i], 1, expected, 0, expected.length); 6517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] pref = Currency.getKeywordValuesForLocale("currency", loc, true); 6527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(loc.toString(), expected, pref); 6537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] all = Currency.getKeywordValuesForLocale("currency", loc, false); 6557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The items in the two collections should match (ignore order, 6567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // behavior change from 4.3.3) 6577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<String> returnedSet = new HashSet<String>(); 6587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert returnedSet.addAll(Arrays.asList(all)); 6597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(loc.toString(), ALLSET, returnedSet); 6607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIsAvailable() { 6647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date d1995 = new Date(788918400000L); // 1995-01-01 00:00 GMT 6657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date d2000 = new Date(946684800000L); // 2000-01-01 00:00 GMT 6667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date d2005 = new Date(1104537600000L); // 2005-01-01 00:00 GMT 6677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD all time", Currency.isAvailable("USD", null, null)); 6697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD before 1995", Currency.isAvailable("USD", null, d1995)); 6707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD 1995-2005", Currency.isAvailable("USD", d1995, d2005)); 6717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD after 2005", Currency.isAvailable("USD", d2005, null)); 6727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD on 2005-01-01", Currency.isAvailable("USD", d2005, d2005)); 6737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("usd all time", Currency.isAvailable("usd", null, null)); 6757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM all time", Currency.isAvailable("DEM", null, null)); 6777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM before 1995", Currency.isAvailable("DEM", null, d1995)); 6787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM 1995-2000", Currency.isAvailable("DEM", d1995, d2000)); 6797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM 1995-2005", Currency.isAvailable("DEM", d1995, d2005)); 6807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse("DEM after 2005", Currency.isAvailable("DEM", d2005, null)); 6817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM on 2000-01-01", Currency.isAvailable("DEM", d2000, d2000)); 6827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse("DEM on 2005-01-01", Currency.isAvailable("DEM", d2005, d2005)); 6837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("CHE all the time", Currency.isAvailable("CHE", null, null)); 6847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse("XXY unknown code", Currency.isAvailable("XXY", null, null)); 6867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse("USDOLLAR invalid code", Currency.isAvailable("USDOLLAR", null, null)); 6887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // illegal argument combination 6907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 6917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency.isAvailable("USD", d2005, d1995); 6927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Expected IllegalArgumentException, because lower range is after upper range"); 6937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IllegalArgumentException e) { 6947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("IllegalArgumentException, because lower range is after upper range"); 6957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 6997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test case for getAvailableCurrencies() 7007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 7017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetAvailableCurrencies() { 7027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<Currency> avail1 = Currency.getAvailableCurrencies(); 7037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // returned set must be modifiable - add one more currency 7057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert avail1.add(Currency.getInstance("ZZZ")); // ZZZ is not defined by ISO 4217 7067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<Currency> avail2 = Currency.getAvailableCurrencies(); 7087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("avail1 does not contain all currencies in avail2", avail1.containsAll(avail2)); 7097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("avail1 must have one more currency", (avail1.size() - avail2.size() == 1)); 7107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 7137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test case for getNumericCode() 7147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 7157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetNumericCode() { 7167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final Object[][] NUMCODE_TESTDATA = { 7177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"USD", 840}, 7187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"Usd", 840}, /* mixed casing */ 7197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"EUR", 978}, 7207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"JPY", 392}, 7217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"XFU", 0}, /* XFU: no numeric code */ 7227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"ZZZ", 0}, /* ZZZ: undefined ISO currency code */ 7237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 7247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Object[] data : NUMCODE_TESTDATA) { 7267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency cur = Currency.getInstance((String)data[0]); 7277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int numCode = cur.getNumericCode(); 7287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expected = ((Integer)data[1]).intValue(); 7297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (numCode != expected) { 7307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: getNumericCode returned " + numCode + " for " 7317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + cur.getCurrencyCode() + " - expected: " + expected); 7327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 7377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test case for getDisplayName() 7387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 7397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetDisplayName() { 7407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String[][] DISPNAME_TESTDATA = { 7417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"USD", "US Dollar"}, 7427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"EUR", "Euro"}, 7437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"JPY", "Japanese Yen"}, 7447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 7457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale defLocale = Locale.getDefault(); 7477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale jaJP = new Locale("ja", "JP"); 7487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale root = new Locale(""); 7497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (String[] data : DISPNAME_TESTDATA) { 7517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency cur = Currency.getInstance(data[0]); 7527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("getDisplayName() for " + data[0], data[1], cur.getDisplayName()); 7537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("getDisplayName() for " + data[0] + " in locale " + defLocale, data[1], cur.getDisplayName(defLocale)); 7547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // ICU has localized display name for ja 7567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotEquals("getDisplayName() for " + data[0] + " in locale " + jaJP, data[1], cur.getDisplayName(jaJP)); 7577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // root locale does not have any localized display names, 7597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // so the currency code itself should be returned 7607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("getDisplayName() for " + data[0] + " in locale " + root, data[0], cur.getDisplayName(root)); 7617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyInfoCtor() { 7657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new CurrencyMetaInfo.CurrencyInfo("region", "code", 0, 0, 1); 7667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 768