12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others. 22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ********************************************************************** 587255a3fc79cc94374b5b8adc76a86e251ac7d3eFredrik Roubert * Copyright (c) 2002-2016, International Business Machines 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Corporation and others. All Rights Reserved. 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ********************************************************************** 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Author: Alan Liu 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Created: December 18 2002 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Since: ICU 2.4 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ********************************************************************** 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.util; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Arrays; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Date; 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashSet; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.List; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Set; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 232d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport org.junit.Test; 242d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestUtil; 27578e467cc0b85f5a3f1b49bba673d654abb3dbd3roubertimport com.ibm.icu.dev.test.TestUtil.JavaVendor; 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.CurrencyData; 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CurrencyDisplayNames; 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CurrencyMetaInfo; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CurrencyMetaInfo.CurrencyFilter; 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CurrencyMetaInfo.CurrencyInfo; 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DateFormat; 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DecimalFormatSymbols; 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.SimpleDateFormat; 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.Currency; 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.GregorianCalendar; 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.TimeZone; 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @test 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @summary General test of Currency 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class CurrencyTest extends TestFmwk { 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test of basic API. 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 492d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 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 */ 1002d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestRegistration() { 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final Currency jpy = Currency.getInstance("JPY"); 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final Currency usd = Currency.getInstance(Locale.US); 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency.unregister(null); // should fail, coverage 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected unregister of null to throw exception"); 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: unregister of null failed as expected"); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (Currency.unregister("")) { // coverage 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("unregister before register erroneously succeeded"); 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale fu_FU = new ULocale("fu_FU"); 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object key1 = Currency.registerInstance(jpy, ULocale.US); 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object key2 = Currency.registerInstance(jpy, fu_FU); 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency nus = Currency.getInstance(Locale.US); 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!nus.equals(jpy)) { 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected " + jpy + " but got: " + nus); 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // converage, make sure default factory works 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency nus1 = Currency.getInstance(Locale.JAPAN); 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!nus1.equals(jpy)) { 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected " + jpy + " but got: " + nus1); 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale[] locales = Currency.getAvailableULocales(); 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean found = false; 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < locales.length; ++i) { 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (locales[i].equals(fu_FU)) { 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = true; 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!found) { 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("did not find locale" + fu_FU + " in currency locales"); 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!Currency.unregister(key1)) { 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("unable to unregister currency using key1"); 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!Currency.unregister(key2)) { 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("unable to unregister currency using key2"); 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency nus2 = Currency.getInstance(Locale.US); 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!nus2.equals(usd)) { 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("expected " + usd + " but got: " + nus2); 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert locales = Currency.getAvailableULocales(); 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = false; 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < locales.length; ++i) { 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (locales[i].equals(fu_FU)) { 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = true; 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (found) { 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("found locale" + fu_FU + " in currency locales after unregister"); 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1682d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale[] locs = Currency.getAvailableLocales(); 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = false; 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < locs.length; ++i) { 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (locs[i].equals(fu_FU)) { 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert found = true; 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (found) { 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("found locale" + fu_FU + " in currency locales after unregister"); 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test names. 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1852d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNames() { 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Do a basic check of getName() 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // USD { "US$", "US Dollar" } // 04/04/1792- 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale en = ULocale.ENGLISH; 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean[] isChoiceFormat = new boolean[1]; 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency usd = Currency.getInstance("USD"); 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Warning: HARD-CODED LOCALE DATA in this test. If it fails, CHECK 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // THE LOCALE DATA before diving into the code. 1942d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("USD.getName(SYMBOL_NAME)", 1952d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "$", 1962d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert usd.getName(en, Currency.SYMBOL_NAME, isChoiceFormat)); 1972d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("USD.getName(LONG_NAME)", 1982d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "US Dollar", 1992d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert usd.getName(en, Currency.LONG_NAME, isChoiceFormat)); 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO add more tests later 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2032d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 2042d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void testGetName_Locale_Int_String_BooleanArray() { 2052d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert Currency currency = Currency.getInstance(ULocale.CHINA); 2062d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert boolean[] isChoiceFormat = new boolean[1]; 2072d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert int nameStyle = Currency.LONG_NAME; 2082d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert String pluralCount = ""; 2092d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert String ulocaleName = 2102d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert currency.getName(ULocale.CANADA, nameStyle, pluralCount, isChoiceFormat); 2112d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("currency name mismatch", "Chinese Yuan", ulocaleName); 2122d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert String localeName = currency.getName(Locale.CANADA, nameStyle, pluralCount, isChoiceFormat); 2132d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("currency name mismatch", ulocaleName, localeName); 2142d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 2152d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2162d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCoverage() { 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency usd = Currency.getInstance("USD"); 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("USD.getSymbol()", 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$", 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert usd.getSymbol()); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2232d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // A real test of the CurrencyDisplayNames class. 2252d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyDisplayNames() { 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!CurrencyDisplayNames.hasData()) { 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("hasData() should return true."); 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2302d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // with substitute 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyDisplayNames cdn = CurrencyDisplayNames.getInstance(ULocale.GERMANY); 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_name", "US-Dollar", cdn.getName("USD")); 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_symbol", "$", cdn.getSymbol("USD")); 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_plural_other", "US-Dollar", cdn.getPluralName("USD", "other")); 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // unknown plural category, substitute "other" 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_plural_foo", "US-Dollar", cdn.getPluralName("USD", "foo")); 2382d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(ULocale.forLanguageTag("en-US")); 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_USD_name", "US Dollar", cdn.getName("USD")); 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_USD_symbol", "$", cdn.getSymbol("USD")); 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_USD_plural_one", "US dollar", cdn.getPluralName("USD", "one")); 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_USD_plural_other", "US dollars", cdn.getPluralName("USD", "other")); 2442d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_FOO_name", "FOO", cdn.getName("FOO")); 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_FOO_symbol", "FOO", cdn.getSymbol("FOO")); 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US_FOO_plural_other", "FOO", cdn.getPluralName("FOO", "other")); 2482d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("en-US bundle", "en", cdn.getULocale().toString()); 2502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(ULocale.forLanguageTag("zz-Gggg-YY")); 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("bundle from current locale", "en", cdn.getULocale().toString()); 2532d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // with no substitute 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(ULocale.GERMANY, true); 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("have currency data for Germany", cdn); 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // known currency, behavior unchanged 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_name", "US-Dollar", cdn.getName("USD")); 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_symbol", "$", cdn.getSymbol("USD")); 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_plural_other", "US-Dollar", cdn.getPluralName("USD", "other")); 2622d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // known currency but unknown plural category 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_USD_plural_foo", cdn.getPluralName("USD", "foo")); 2652d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // unknown currency, get null 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_name", cdn.getName("FOO")); 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_symbol", cdn.getSymbol("FOO")); 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_plural_other", cdn.getPluralName("FOO", "other")); 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_plural_foo", cdn.getPluralName("FOO", "foo")); 2712d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // unknown locale with no substitute 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(ULocale.forLanguageTag("zz-Gggg-YY"), true); 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String ln = ""; 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (cdn != null) { 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ln = " (" + cdn.getULocale().toString() + ")"; 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("no fallback from unknown locale" + ln , cdn); 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Locale version 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdn = CurrencyDisplayNames.getInstance(Locale.GERMANY, true); 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("have currency data for Germany (Java Locale)", cdn); 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("de_USD_name (Locale)", "US-Dollar", cdn.getName("USD")); 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNull("de_FOO_name (Locale)", cdn.getName("FOO")); 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2862d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Coverage-only test of CurrencyData 2882d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyData() { 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyData.DefaultInfo info_fallback = (CurrencyData.DefaultInfo)CurrencyData.DefaultInfo.getWithFallback(true); 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info_fallback == null) { 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("getWithFallback() returned null."); 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2952d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyData.DefaultInfo info_nofallback = (CurrencyData.DefaultInfo)CurrencyData.DefaultInfo.getWithFallback(false); 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info_nofallback == null) { 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("getWithFallback() returned null."); 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3012d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getName("isoCode").equals("isoCode") || info_nofallback.getName("isoCode") != null) { 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getName()."); 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3062d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getPluralName("isoCode", "type").equals("isoCode") || info_nofallback.getPluralName("isoCode", "type") != null) { 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getPluralName()."); 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3112d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getSymbol("isoCode").equals("isoCode") || info_nofallback.getSymbol("isoCode") != null) { 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getSymbol()."); 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3162d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.symbolMap().isEmpty()) { 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("symbolMap() should return empty map."); 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3212d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.nameMap().isEmpty()) { 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("nameMap() should return empty map."); 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3262d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getUnitPatterns().isEmpty() || info_nofallback.getUnitPatterns() != null) { 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getUnitPatterns()."); 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3312d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!info_fallback.getSpacingInfo().equals((CurrencyData.CurrencySpacingInfo.DEFAULT)) || 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert info_nofallback.getSpacingInfo() != null) { 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getSpacingInfo()."); 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3372d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info_fallback.getULocale() != ULocale.ROOT) { 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getLocale()."); 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3422d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info_fallback.getFormatInfo("isoCode") != null) { 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling getFormatInfo()."); 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3482d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // A real test of CurrencyMetaInfo. 3502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testCurrencyMetaInfoRanges() { 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo metainfo = CurrencyMetaInfo.getInstance(true); 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("have metainfo", metainfo); 3542d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyFilter filter = CurrencyFilter.onRegion("DE"); // must be capitalized 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert List<CurrencyInfo> currenciesInGermany = metainfo.currencyInfo(filter); 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("currencies: " + currenciesInGermany.size()); 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z"); 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.setTimeZone(TimeZone.getTimeZone("GMT")); 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date demLastDate = new Date(Long.MAX_VALUE); 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date eurFirstDate = new Date(Long.MIN_VALUE); 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (CurrencyInfo info : currenciesInGermany) { 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(info.toString()); 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("from: " + fmt.format(info.from)+ Long.toHexString(info.from)); 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(" to: " + fmt.format(info.to) + Long.toHexString(info.to)); 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info.code.equals("DEM")) { 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert demLastDate = new Date(info.to); 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (info.code.equals("EUR")) { 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert eurFirstDate = new Date(info.from); 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3722d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // the Euro and Deutschmark overlapped for several years 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("DEM available at last date", 2, metainfo.currencyInfo(filter.withDate(demLastDate)).size()); 3752d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // demLastDate + 1 millisecond is not the start of the last day, we consider it the next day, so... 3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date demLastDatePlus1ms = new Date(demLastDate.getTime() + 1); 3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("DEM not available after very start of last date", 1, metainfo.currencyInfo(filter.withDate(demLastDatePlus1ms)).size()); 3792d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // both available for start of euro 3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("EUR available on start of first date", 2, metainfo.currencyInfo(filter.withDate(eurFirstDate)).size()); 3822d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // but not one millisecond before the start of the first day 3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date eurFirstDateMinus1ms = new Date(eurFirstDate.getTime() - 1); 3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("EUR not avilable before very start of first date", 1, metainfo.currencyInfo(filter.withDate(eurFirstDateMinus1ms)).size()); 3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // end time is last millisecond of day 3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert GregorianCalendar cal = new GregorianCalendar(); 3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.setTimeZone(TimeZone.getTimeZone("GMT")); 3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.setTime(demLastDate); 3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("hour is 23", 23, cal.get(GregorianCalendar.HOUR_OF_DAY)); 3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("minute is 59", 59, cal.get(GregorianCalendar.MINUTE)); 3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("second is 59", 59, cal.get(GregorianCalendar.SECOND)); 3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("millisecond is 999", 999, cal.get(GregorianCalendar.MILLISECOND)); 3952d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // start time is first millisecond of day 3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.setTime(eurFirstDate); 3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("hour is 0", 0, cal.get(GregorianCalendar.HOUR_OF_DAY)); 3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("minute is 0", 0, cal.get(GregorianCalendar.MINUTE)); 4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("second is 0", 0, cal.get(GregorianCalendar.SECOND)); 4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("millisecond is 0", 0, cal.get(GregorianCalendar.MILLISECOND)); 4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4032d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4042d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testCurrencyMetaInfoRangesWithLongs() { 4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo metainfo = CurrencyMetaInfo.getInstance(true); 4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("have metainfo", metainfo); 4082d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyFilter filter = CurrencyFilter.onRegion("DE"); // must be capitalized 4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert List<CurrencyInfo> currenciesInGermany = metainfo.currencyInfo(filter); 4112d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert CurrencyFilter filter_br = CurrencyFilter.onRegion("BR"); // must be capitalized 4122d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert List<CurrencyInfo> currenciesInBrazil = metainfo.currencyInfo(filter_br); 4132d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert logln("currencies Germany: " + currenciesInGermany.size()); 4142d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert logln("currencies Brazil: " + currenciesInBrazil.size()); 4152d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert long demFirstDate = Long.MIN_VALUE; 4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long demLastDate = Long.MAX_VALUE; 4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long eurFirstDate = Long.MIN_VALUE; 4182d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert CurrencyInfo demInfo = null; 4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (CurrencyInfo info : currenciesInGermany) { 4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(info.toString()); 4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info.code.equals("DEM")) { 4222d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert demInfo = info; 4232d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert demFirstDate = info.from; 4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert demLastDate = info.to; 4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (info.code.equals("EUR")) { 4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert eurFirstDate = info.from; 4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // the Euro and Deutschmark overlapped for several years 4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("DEM available at last date", 2, metainfo.currencyInfo(filter.withDate(demLastDate)).size()); 4312d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // demLastDate + 1 millisecond is not the start of the last day, we consider it the next day, so... 4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long demLastDatePlus1ms = demLastDate + 1; 4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("DEM not available after very start of last date", 1, metainfo.currencyInfo(filter.withDate(demLastDatePlus1ms)).size()); 4352d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // both available for start of euro 4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("EUR available on start of first date", 2, metainfo.currencyInfo(filter.withDate(eurFirstDate)).size()); 4382d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // but not one millisecond before the start of the first day 4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long eurFirstDateMinus1ms = eurFirstDate - 1; 4412d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("EUR not avilable before very start of first date", 1, 4422d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert metainfo.currencyInfo(filter.withDate(eurFirstDateMinus1ms)).size()); 4432d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4442d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // Deutschmark available from first millisecond on 4452d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("Millisecond of DEM Big Bang", 1, 4462d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert metainfo.currencyInfo(CurrencyFilter.onDate(demFirstDate).withRegion("DE")).size()); 4472d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4482d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("From Deutschmark to Euro", 2, 4492d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert metainfo.currencyInfo(CurrencyFilter.onDateRange(demFirstDate, eurFirstDate).withRegion("DE")).size()); 4502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4512d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("all Tender for Brazil", 7, 4522d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert metainfo.currencyInfo(CurrencyFilter.onTender().withRegion("BR")).size()); 4532d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4542d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertTrue("No legal tender", demInfo.isTender()); 4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4562d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4572d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestWithTender() { 4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo metainfo = CurrencyMetaInfo.getInstance(); 4607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (metainfo == null) { 4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unable to get CurrencyMetaInfo instance."); 4627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyFilter filter = 4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyFilter.onRegion("CH"); 4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert List<String> currencies = metainfo.currencies(filter); 4677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("More than one currency for switzerland", currencies.size() > 1); 4687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals( 4697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "With tender", 4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Arrays.asList(new String[] {"CHF", "CHE", "CHW"}), 4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert metainfo.currencies(filter.withTender())); 4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4732d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Coverage-only test of the CurrencyMetaInfo class 4752d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyMetaInfo() { 4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo metainfo = CurrencyMetaInfo.getInstance(); 4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (metainfo == null) { 4797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unable to get CurrencyMetaInfo instance."); 4807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4822d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!CurrencyMetaInfo.hasData()) { 4847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("hasData() should note return false."); 4857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4872d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyFilter filter; 4897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyInfo info; 4907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyDigits digits; 4912d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { // CurrencyFilter 4937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert filter = CurrencyMetaInfo.CurrencyFilter.onCurrency("currency"); 4947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CurrencyMetaInfo.CurrencyFilter filter2 = CurrencyMetaInfo.CurrencyFilter.onCurrency("test"); 4957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter == null) { 4967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unable to create CurrencyFilter."); 4977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4992d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter.equals(new Object())) { 5017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("filter should not equal to Object"); 5027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5042d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter.equals(filter2)) { 5067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("filter should not equal filter2"); 5077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5092d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter.hashCode() == 0) { 5117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting filter hashcode"); 5127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5142d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (filter.toString() == null) { 5167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling toString()"); 5177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5202d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { // CurrencyInfo 5227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert info = new CurrencyMetaInfo.CurrencyInfo("region", "code", 0, 1, 1, false); 5237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info == null) { 5247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error creating CurrencyInfo."); 5257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5272d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (info.toString() == null) { 5297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling toString()"); 5307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5332d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { // CurrencyDigits 5357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert digits = metainfo.currencyDigits("isoCode"); 5367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (digits == null) { 5377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unable to get CurrencyDigits."); 5387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5402d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (digits.toString() == null) { 5427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error calling toString()"); 5437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 5447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5482d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 5497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyKeyword() { 5507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = new ULocale("th_TH@collation=traditional;currency=QQQ"); 5517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency currency = Currency.getInstance(locale); 5527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String result = currency.getCurrencyCode(); 5537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!"QQQ".equals(result)) { 5547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("got unexpected currency: " + result); 5557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5582d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 5597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestAvailableCurrencyCodes() { 5607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[][] tests = { 5617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AM", "1950-01-05" }, 5627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AM", "1969-12-31", "SUR" }, 5637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AM", "1991-12-26", "RUR" }, 5647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AM", "2000-12-23", "AMD" }, 5657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AD", "2000-12-23", "EUR", "ESP", "FRF", "ADP" }, 5667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AD", "1969-12-31", "ESP", "FRF", "ADP" }, 5677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AD", "1950-01-05", "ESP", "ADP" }, 5687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AD", "1900-01-17", "ESP" }, 5697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_UA", "1994-12-25" }, 5707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_QQ", "1969-12-31" }, 5717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "2000-12-23", "AOA" }, 5727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "1995-12-25", "AOR", "AON" }, 5737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "1990-12-26", "AON", "AOK" }, 5747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "1979-12-29", "AOK" }, 5757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_AO", "1969-12-31" }, 5767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo_DE@currency=DEM", "2000-12-23", "EUR", "DEM" }, 5777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "eo-DE-u-cu-dem", "2000-12-23", "EUR", "DEM" }, 5787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "en_US", null, "USD", "USN" }, 5797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "en_US_PREEURO", null, "USD", "USN" }, 5807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { "en_US_Q", null, "USD", "USN" }, 5817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 5822d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 5837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 5847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (String[] test : tests) { 5857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = new ULocale(test[0]); 5867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String timeString = test[1]; 5877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date date; 5887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (timeString == null) { 5897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert date = new Date(); 5907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert timeString = "today"; 5917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 5927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 5937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert date = fmt.parse(timeString); 5947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 5957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fail("could not parse date: " + timeString); 5967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 5977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] expected = null; 6007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (test.length > 2) { 6017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expected = new String[test.length - 2]; 6027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.arraycopy(test, 2, expected, 0, expected.length); 6037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] actual = Currency.getAvailableCurrencyCodes(locale, date); 6052d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 6067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Order is not important as of 4.4. We never documented that it was. 6077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<String> expectedSet = new HashSet<String>(); 6087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (expected != null) { 6097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectedSet.addAll(Arrays.asList(expected)); 6107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<String> actualSet = new HashSet<String>(); 6127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (actual != null) { 6137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert actualSet.addAll(Arrays.asList(actual)); 6147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(locale + " on " + timeString, expectedSet, actualSet); 6167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // With Java Locale 6187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Note: skip this test on Java 6 or older when keywords are available 619578e467cc0b85f5a3f1b49bba673d654abb3dbd3roubert if (locale.getKeywords() == null || TestUtil.getJavaVendor() == JavaVendor.Android || TestUtil.getJavaVersion() >= 7) { 6207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale javaloc = locale.toLocale(); 6217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] actualWithJavaLocale = Currency.getAvailableCurrencyCodes(javaloc, date); 6227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // should be exactly same with the ULocale version 6237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean same = true; 6247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (actual == null) { 6257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (actualWithJavaLocale != null) { 6267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert same = false; 6277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 6297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (actualWithJavaLocale == null || actual.length != actualWithJavaLocale.length) { 6307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert same = false; 6317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 6327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert same = true; 6337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < actual.length; i++) { 6347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!actual[i].equals(actualWithJavaLocale[i])) { 6357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert same = false; 6367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 6377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("getAvailableCurrencyCodes with ULocale vs Locale", same); 6427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6462d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 6477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestDeprecatedCurrencyFormat() { 6487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // bug 5952 6497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale locale = new Locale("sr", "QQ"); 6502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert DecimalFormatSymbols icuSymbols = new 6517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert com.ibm.icu.text.DecimalFormatSymbols(locale); 6527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String symbol = icuSymbols.getCurrencySymbol(); 6537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency currency = icuSymbols.getCurrency(); 6547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expectCur = null; 6557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expectSym = "\u00A4"; 6567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!symbol.toString().equals(expectSym) || currency != null) { 6577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("for " + locale + " expected " + expectSym+"/"+expectCur + " but got " + symbol+"/"+currency); 6587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 6597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("for " + locale + " expected " + expectSym+"/"+expectCur + " and got " + symbol+"/"+currency); 6607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6622d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 6632d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 6647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetKeywordValues(){ 6657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String[][] PREFERRED = { 6677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"root", }, 6687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"und", }, 6697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"und_ZZ", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XDR", "XPD", "XPT", "XSU", "XTS", "XUA", "XXX"}, 6707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"en_US", "USD", "USN"}, 6717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"en_029", }, 6727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"en_TH", "THB"}, 6737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"de", "EUR"}, 6747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"de_DE", "EUR"}, 6757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"de_ZZ", "XAG", "XAU", "XBA", "XBB", "XBC", "XBD", "XDR", "XPD", "XPT", "XSU", "XTS", "XUA", "XXX"}, 6767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"ar", "EGP"}, 6777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"ar_PS", "ILS", "JOD"}, 6787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"en@currency=CAD", "USD", "USN"}, 6797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"fr@currency=ZZZ", "EUR"}, 6807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"de_DE@currency=DEM", "EUR"}, 68187255a3fc79cc94374b5b8adc76a86e251ac7d3eFredrik Roubert {"en_US@rg=THZZZZ", "THB"}, 68287255a3fc79cc94374b5b8adc76a86e251ac7d3eFredrik Roubert {"de@rg=USZZZZ", "USD", "USN"}, 68387255a3fc79cc94374b5b8adc76a86e251ac7d3eFredrik Roubert {"en_US@currency=CAD;rg=THZZZZ", "THB"}, 6847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 6857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] ALL = Currency.getKeywordValuesForLocale("currency", ULocale.getDefault(), false); 6877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert HashSet ALLSET = new HashSet(); 6887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < ALL.length; i++) { 6897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ALLSET.add(ALL[i]); 6907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6912d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 6927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < PREFERRED.length; i++) { 6937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale loc = new ULocale(PREFERRED[i][0]); 6947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] expected = new String[PREFERRED[i].length - 1]; 6957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.arraycopy(PREFERRED[i], 1, expected, 0, expected.length); 6967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] pref = Currency.getKeywordValuesForLocale("currency", loc, true); 6977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(loc.toString(), expected, pref); 6987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] all = Currency.getKeywordValuesForLocale("currency", loc, false); 7002d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // The items in the two collections should match (ignore order, 7017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // behavior change from 4.3.3) 7027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<String> returnedSet = new HashSet<String>(); 7037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert returnedSet.addAll(Arrays.asList(all)); 7047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(loc.toString(), ALLSET, returnedSet); 7057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7082d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 7097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIsAvailable() { 7107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date d1995 = new Date(788918400000L); // 1995-01-01 00:00 GMT 7117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date d2000 = new Date(946684800000L); // 2000-01-01 00:00 GMT 7127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date d2005 = new Date(1104537600000L); // 2005-01-01 00:00 GMT 7137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD all time", Currency.isAvailable("USD", null, null)); 7157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD before 1995", Currency.isAvailable("USD", null, d1995)); 7167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD 1995-2005", Currency.isAvailable("USD", d1995, d2005)); 7177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD after 2005", Currency.isAvailable("USD", d2005, null)); 7187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("USD on 2005-01-01", Currency.isAvailable("USD", d2005, d2005)); 7197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("usd all time", Currency.isAvailable("usd", null, null)); 7217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM all time", Currency.isAvailable("DEM", null, null)); 7237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM before 1995", Currency.isAvailable("DEM", null, d1995)); 7247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM 1995-2000", Currency.isAvailable("DEM", d1995, d2000)); 7257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM 1995-2005", Currency.isAvailable("DEM", d1995, d2005)); 7267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse("DEM after 2005", Currency.isAvailable("DEM", d2005, null)); 7277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("DEM on 2000-01-01", Currency.isAvailable("DEM", d2000, d2000)); 7287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse("DEM on 2005-01-01", Currency.isAvailable("DEM", d2005, d2005)); 7297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("CHE all the time", Currency.isAvailable("CHE", null, null)); 7307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse("XXY unknown code", Currency.isAvailable("XXY", null, null)); 7327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse("USDOLLAR invalid code", Currency.isAvailable("USDOLLAR", null, null)); 7347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // illegal argument combination 7367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 7377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency.isAvailable("USD", d2005, d1995); 7387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Expected IllegalArgumentException, because lower range is after upper range"); 7397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IllegalArgumentException e) { 7407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("IllegalArgumentException, because lower range is after upper range"); 7417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 7457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test case for getAvailableCurrencies() 7467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 7472d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 7487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetAvailableCurrencies() { 7497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<Currency> avail1 = Currency.getAvailableCurrencies(); 7507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // returned set must be modifiable - add one more currency 7527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert avail1.add(Currency.getInstance("ZZZ")); // ZZZ is not defined by ISO 4217 7537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<Currency> avail2 = Currency.getAvailableCurrencies(); 7557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("avail1 does not contain all currencies in avail2", avail1.containsAll(avail2)); 7567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("avail1 must have one more currency", (avail1.size() - avail2.size() == 1)); 7577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 7607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test case for getNumericCode() 7617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 7622d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 7637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetNumericCode() { 7647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final Object[][] NUMCODE_TESTDATA = { 7657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"USD", 840}, 7667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"Usd", 840}, /* mixed casing */ 7677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"EUR", 978}, 7687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"JPY", 392}, 7697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"XFU", 0}, /* XFU: no numeric code */ 7707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"ZZZ", 0}, /* ZZZ: undefined ISO currency code */ 7717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 7727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Object[] data : NUMCODE_TESTDATA) { 7747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency cur = Currency.getInstance((String)data[0]); 7757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int numCode = cur.getNumericCode(); 7767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expected = ((Integer)data[1]).intValue(); 7777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (numCode != expected) { 7787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: getNumericCode returned " + numCode + " for " 7797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + cur.getCurrencyCode() + " - expected: " + expected); 7807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 7857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test case for getDisplayName() 7867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 7872d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 7887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetDisplayName() { 7897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String[][] DISPNAME_TESTDATA = { 7907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"USD", "US Dollar"}, 7917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"EUR", "Euro"}, 7927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"JPY", "Japanese Yen"}, 7937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 7947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale defLocale = Locale.getDefault(); 7967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale jaJP = new Locale("ja", "JP"); 7977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale root = new Locale(""); 7987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (String[] data : DISPNAME_TESTDATA) { 8007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency cur = Currency.getInstance(data[0]); 8017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("getDisplayName() for " + data[0], data[1], cur.getDisplayName()); 8027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("getDisplayName() for " + data[0] + " in locale " + defLocale, data[1], cur.getDisplayName(defLocale)); 8037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // ICU has localized display name for ja 8057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotEquals("getDisplayName() for " + data[0] + " in locale " + jaJP, data[1], cur.getDisplayName(jaJP)); 8067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // root locale does not have any localized display names, 8087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // so the currency code itself should be returned 8097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("getDisplayName() for " + data[0] + " in locale " + root, data[0], cur.getDisplayName(root)); 8107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8122d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8132d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 8147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyInfoCtor() { 8157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new CurrencyMetaInfo.CurrencyInfo("region", "code", 0, 0, 1); 8167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8172d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8182d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert /** 8192d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * Class CurrencyMetaInfo has methods which are overwritten by its derived classes. 8202d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * A derived class is defined here for the purpose of testing these methods. 8212d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * Since the creator of CurrencyMetaInfo is defined as 'protected', no instance of 8222d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * this class can be created directly. 8232d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert */ 8242d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public class TestCurrencyMetaInfo extends CurrencyMetaInfo { 8252d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 8262d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8272d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert final TestCurrencyMetaInfo tcurrMetaInfo = new TestCurrencyMetaInfo(); 8282d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8292d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert /* 8302d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * 8312d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * Test methods of base class CurrencyMetaInfo. ICU4J only creates subclasses, 8322d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * never an instance of the base class. 8332d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert */ 8342d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 8352d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void TestCurrMetaInfoBaseClass() { 8362d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert CurrencyFilter usFilter = CurrencyFilter.onRegion("US"); 8372d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8382d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("Empty list expected", 0, tcurrMetaInfo.currencyInfo(usFilter).size()); 8392d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("Empty list expected", 0, tcurrMetaInfo.currencies(usFilter).size()); 8402d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("Empty list expected", 0, tcurrMetaInfo.regions(usFilter).size()); 8412d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8422d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("Iso format for digits expected", 8432d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "CurrencyDigits(fractionDigits='2',roundingIncrement='0')", 8442d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert tcurrMetaInfo.currencyDigits("isoCode").toString()); 8452d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 8462d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8472d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert /** 8482d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * Test cases for rounding and fractions. 8492d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert */ 8502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 8512d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void testGetDefaultFractionDigits_CurrencyUsage() { 8522d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert Currency currency = Currency.getInstance(ULocale.CHINA); 8532d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert int cashFractionDigits = currency.getDefaultFractionDigits(Currency.CurrencyUsage.CASH); 8542d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("number of digits in fraction incorrect", 2, cashFractionDigits); 8552d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 8562d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8572d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 8582d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void testGetRoundingIncrement() { 8592d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert Currency currency = Currency.getInstance(ULocale.JAPAN); 8602d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // It appears as though this always returns 0 irrespective of the currency. 8612d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert double roundingIncrement = currency.getRoundingIncrement(); 8622d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("Rounding increment not zero", 0.0, roundingIncrement, 0.0); 8632d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 8642d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 8652d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void testGetRoundingIncrement_CurrencyUsage() { 8662d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert Currency currency = Currency.getInstance(ULocale.JAPAN); 8672d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // It appears as though this always returns 0 irrespective of the currency or usage. 8682d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert double roundingIncrement = currency.getRoundingIncrement(Currency.CurrencyUsage.CASH); 8692d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // TODO: replace the JUnit import with TestFmwk assertEquals. 8702d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("Rounding increment not zero", 0.0, roundingIncrement, 0.0); 8712d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 8722d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 8732d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 8742d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void TestCurrencyDataCtor() throws Exception { 8752d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert checkDefaultPrivateConstructor(CurrencyData.class); 8762d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 8777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 878