17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2008-2012, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.localespi; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.lang.reflect.Method; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Collections; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Currency; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashSet; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Set; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert@SuppressWarnings("unchecked") 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class CurrencyNameTest extends TestFmwk { 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) throws Exception { 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new CurrencyNameTest().run(args); 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final Set<Currency> AVAILABLE_CURRENCIES; 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final Method GETDISPLAYNAME_METHOD; 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static { 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Method mGetDisplayName = null; 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Set<Currency> currencies = null; 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert mGetDisplayName = Currency.class.getMethod("getDisplayName", new Class[] {Locale.class}); 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Method mGetAvailableCurrencies = Currency.class.getMethod("getAvailableCurrencies", (Class[]) null); 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert currencies = (Set<Currency>)mGetAvailableCurrencies.invoke(null, (Object[]) null); 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // fall through 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (currencies == null) { 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Make a set of unique currencies 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert currencies = new HashSet<Currency>(); 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Locale l : Locale.getAvailableLocales()) { 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (l.getCountry().length() == 0) { 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Currency currency = Currency.getInstance(l); 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (currency != null) { 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert currencies.add(currency); 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IllegalArgumentException iae) { 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // ignore 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert GETDISPLAYNAME_METHOD = mGetDisplayName; 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert AVAILABLE_CURRENCIES = Collections.unmodifiableSet(currencies); 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencySymbols() { 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Currency currency : AVAILABLE_CURRENCIES) { 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String currencyCode = currency.getCurrencyCode(); 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert com.ibm.icu.util.Currency currencyIcu = com.ibm.icu.util.Currency.getInstance(currencyCode); 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Locale loc : Locale.getAvailableLocales()) { 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (TestUtil.isProblematicIBMLocale(loc)) { 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Skipped " + loc); 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String curSymbol = currency.getSymbol(loc); 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String curSymbolIcu = currencyIcu.getSymbol(loc); 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (curSymbolIcu.equals(currencyCode)) { 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // No data in ICU 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!curSymbol.equals(currencyCode)) { 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("INFO: JDK has currency symbol " + curSymbol + " for locale " + 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert loc + ", but ICU does not"); 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (TestUtil.isICUExtendedLocale(loc)) { 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!curSymbol.equals(curSymbolIcu)) { 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: Currency symbol for " + currencyCode + " by ICU is " + curSymbolIcu 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ", but got " + curSymbol + " in locale " + loc); 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!curSymbol.equals(curSymbolIcu)) { 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("INFO: Currency symbol for " + currencyCode + " by ICU is " + curSymbolIcu 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ", but " + curSymbol + " by JDK in locale " + loc); 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Try explicit ICU locale (xx_yy_ICU) 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale locIcu = TestUtil.toICUExtendedLocale(loc); 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert curSymbol = currency.getSymbol(locIcu); 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!curSymbol.equals(curSymbolIcu)) { 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: Currency symbol for " + currencyCode + " by ICU is " + curSymbolIcu 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ", but got " + curSymbol + " in locale " + locIcu); 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCurrencyDisplayNames() { 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (GETDISPLAYNAME_METHOD == null) { 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("INFO: Currency#getDisplayName(String,Locale) is not available."); 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Currency currency : AVAILABLE_CURRENCIES) { 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String currencyCode = currency.getCurrencyCode(); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert com.ibm.icu.util.Currency currencyIcu = com.ibm.icu.util.Currency.getInstance(currencyCode); 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Locale loc : Locale.getAvailableLocales()) { 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (TestUtil.isProblematicIBMLocale(loc)) { 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Skipped " + loc); 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String curName = null; 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert curName = (String)GETDISPLAYNAME_METHOD.invoke(currency, new Object[] {loc}); 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: JDK Currency#getDisplayName(\"" + currency + "\", \"" + loc + "\") throws exception: " + e.getMessage()); 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String curNameIcu = currencyIcu.getDisplayName(loc); 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (curNameIcu.equals(currencyCode)) { 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // No data in ICU 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!curName.equals(currencyCode)) { 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("INFO: JDK has currency display name " + curName + " for locale " + 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert loc + ", but ICU does not"); 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (TestUtil.isICUExtendedLocale(loc)) { 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!curName.equals(curNameIcu)) { 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: Currency display name for " + currencyCode + " by ICU is " + curNameIcu 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ", but got " + curName + " in locale " + loc); 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!curName.equals(curNameIcu)) { 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("INFO: Currency display name for " + currencyCode + " by ICU is " + curNameIcu 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ", but " + curName + " by JDK in locale " + loc); 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Try explicit ICU locale (xx_yy_ICU) 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale locIcu = TestUtil.toICUExtendedLocale(loc); 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert curName = (String)GETDISPLAYNAME_METHOD.invoke(currency, new Object[] {locIcu}); 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: JDK Currency#getDisplayName(\"" + currency + "\", \"" + locIcu + "\") throws exception: " + e.getMessage()); 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!curName.equals(curNameIcu)) { 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: Currency display name for " + currencyCode + " by ICU is " + curNameIcu 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ", but got " + curName + " in locale " + locIcu); 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 165