blob: 8b5d8dc0d1471ab8d3ba9edd8ef60f9c70986f46 [file] [log] [blame]
/*
**********************************************************************
* Copyright (c) 2002-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Author: Alan Liu
* Created: December 18 2002
* Since: ICU 2.4
**********************************************************************
*/
package com.ibm.icu.dev.test.util;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.text.DecimalFormatSymbols;
import com.ibm.icu.util.*;
import java.util.Locale;
import java.util.Date;
/**
* @test
* @summary General test of Currency
*/
public class CurrencyTest extends TestFmwk {
public static void main(String[] args) throws Exception {
new CurrencyTest().run(args);
}
/**
* Test of basic API.
*/
public void TestAPI() {
Currency usd = Currency.getInstance("USD");
/*int hash = */usd.hashCode();
Currency jpy = Currency.getInstance("JPY");
if (usd.equals(jpy)) {
errln("FAIL: USD == JPY");
}
if (usd.equals("abc")) {
errln("FAIL: USD == (String)");
}
if (usd.equals(null)) {
errln("FAIL: USD == (null)");
}
if (!usd.equals(usd)) {
errln("FAIL: USD != USD");
}
Locale[] avail = Currency.getAvailableLocales();
if(avail==null){
errln("FAIL: getAvailableLocales returned null");
}
try {
usd.getName(ULocale.US, 5, new boolean[1]);
errln("expected getName with invalid type parameter to throw exception");
}
catch (Exception e) {
logln("PASS: getName failed as expected");
}
}
/**
* Test registration.
*/
public void TestRegistration() {
final Currency jpy = Currency.getInstance("JPY");
final Currency usd = Currency.getInstance(Locale.US);
try {
Currency.unregister(null); // should fail, coverage
errln("expected unregister of null to throw exception");
}
catch (Exception e) {
logln("PASS: unregister of null failed as expected");
}
if (Currency.unregister("")) { // coverage
errln("unregister before register erroneously succeeded");
}
ULocale fu_FU = new ULocale("fu_FU");
Object key1 = Currency.registerInstance(jpy, ULocale.US);
Object key2 = Currency.registerInstance(jpy, fu_FU);
Currency nus = Currency.getInstance(Locale.US);
if (!nus.equals(jpy)) {
errln("expected " + jpy + " but got: " + nus);
}
// converage, make sure default factory works
Currency nus1 = Currency.getInstance(Locale.JAPAN);
if (!nus1.equals(jpy)) {
errln("expected " + jpy + " but got: " + nus1);
}
ULocale[] locales = Currency.getAvailableULocales();
boolean found = false;
for (int i = 0; i < locales.length; ++i) {
if (locales[i].equals(fu_FU)) {
found = true;
break;
}
}
if (!found) {
errln("did not find locale" + fu_FU + " in currency locales");
}
if (!Currency.unregister(key1)) {
errln("unable to unregister currency using key1");
}
if (!Currency.unregister(key2)) {
errln("unable to unregister currency using key2");
}
Currency nus2 = Currency.getInstance(Locale.US);
if (!nus2.equals(usd)) {
errln("expected " + usd + " but got: " + nus2);
}
locales = Currency.getAvailableULocales();
found = false;
for (int i = 0; i < locales.length; ++i) {
if (locales[i].equals(fu_FU)) {
found = true;
break;
}
}
if (found) {
errln("found locale" + fu_FU + " in currency locales after unregister");
}
}
/**
* Test names.
*/
public void TestNames() {
// Do a basic check of getName()
// USD { "US$", "US Dollar" } // 04/04/1792-
ULocale en = ULocale.ENGLISH;
boolean[] isChoiceFormat = new boolean[1];
Currency usd = Currency.getInstance("USD");
// Warning: HARD-CODED LOCALE DATA in this test. If it fails, CHECK
// THE LOCALE DATA before diving into the code.
if (!noData()) {
assertEquals("USD.getName(SYMBOL_NAME)",
"$",
usd.getName(en, Currency.SYMBOL_NAME, isChoiceFormat));
assertEquals("USD.getName(LONG_NAME)",
"US Dollar",
usd.getName(en, Currency.LONG_NAME, isChoiceFormat));
}
// TODO add more tests later
}
public void TestCoverage() {
Currency usd = Currency.getInstance("USD");
if (!noData()) {
assertEquals("USD.getSymbol()",
"$",
usd.getSymbol());
}
assertEquals("USD.getLocale()",
ULocale.ROOT,
usd.getLocale(null));
}
public void TestCurrencyKeyword() {
ULocale locale = new ULocale("th_TH@collation=traditional;currency=QQQ");
Currency currency = Currency.getInstance(locale);
String result = currency.getCurrencyCode();
if (!"QQQ".equals(result)) {
errln("got unexpected currency: " + result);
}
}
public void TestCurrencyByDate()
{
// local Variables
Date date;
ULocale locale;
Currency currency;
String result;
// Cycle through historical currencies
currency = Currency.getInstance(new ULocale("eo_AM"), new Date(-630720000000L));
result = currency.getCurrencyCode();
if (!"AMD".equals(result))
{
errln("didn't return AMD for eo_AM returned: " + result);
}
currency = Currency.getInstance(new ULocale("eo_AM"), new Date(0L));
result = currency.getCurrencyCode();
if (!"SUR".equals(result))
{
errln("didn't return SUR for eo_AM returned: " + result);
}
currency = Currency.getInstance(new ULocale("eo_AM"), new Date(693792000000L));
result = currency.getCurrencyCode();
if (!"RUR".equals(result))
{
errln("didn't return RUR for eo_AM returned: " + result);
}
currency = Currency.getInstance(new ULocale("eo_AM"), new Date(977616000000L));
result = currency.getCurrencyCode();
if (!"AMD".equals(result))
{
errln("didn't return AMD for eo_AM returned: " + result);
}
// Locale AD has multiple currencies at once
currency = Currency.getInstance(new ULocale("eo_AD"), new Date(977616000000L));
result = currency.getCurrencyCode();
if (!"EUR".equals(result))
{
errln("didn't return EUR for eo_AD returned: " + result);
}
currency = Currency.getInstance(new ULocale("eo_AD"), new Date(0L));
result = currency.getCurrencyCode();
if (!"ESP".equals(result))
{
errln("didn't return ESP for eo_AD returned: " + result);
}
// Locale UA has gap between years 1994 - 1996
currency = Currency.getInstance(new ULocale("eo_UA"), new Date(788400000000L));
result = currency.getCurrencyCode();
if (!"UAH".equals(result))
{
errln("didn't return UAH for eo_UA returned: " + result);
}
// Cycle through historical currencies
currency = Currency.getInstance(new ULocale("eo_AO"), new Date(977616000000L));
result = currency.getCurrencyCode();
if (!"AOA".equals(result))
{
errln("didn't return AOA for eo_AO returned: " + result);
}
currency = Currency.getInstance(new ULocale("eo_AO"), new Date(819936000000L));
result = currency.getCurrencyCode();
if (!"AOR".equals(result))
{
errln("didn't return AOR for eo_AO returned: " + result);
}
currency = Currency.getInstance(new ULocale("eo_AO"), new Date(662256000000L));
result = currency.getCurrencyCode();
if (!"AON".equals(result))
{
errln("didn't return AON for eo_AO returned: " + result);
}
currency = Currency.getInstance(new ULocale("eo_AO"), new Date(315360000000L));
result = currency.getCurrencyCode();
if (!"AOK".equals(result))
{
errln("didn't return AOK for eo_AO returned: " + result);
}
currency = Currency.getInstance(new ULocale("eo_AO"), new Date(0L));
result = currency.getCurrencyCode();
if (!"AOA".equals(result))
{
errln("didn't return AOA for eo_AO returned: " + result);
}
// Test EURO support
currency = Currency.getInstance(new ULocale("en_US"), new Date(System.currentTimeMillis()));
result = currency.getCurrencyCode();
if (!"USD".equals(result))
{
errln("didn't return USD for en_US returned: " + result);
}
currency = Currency.getInstance(new ULocale("en_US_PREEURO"), new Date(System.currentTimeMillis()));
result = currency.getCurrencyCode();
if (!"USD".equals(result))
{
errln("didn't return USD for en_US_PREEURO returned: " + result);
}
currency = Currency.getInstance(new ULocale("en_US_Q"), new Date(System.currentTimeMillis()));
result = currency.getCurrencyCode();
if (!"USD".equals(result))
{
errln("didn't return USD for en_US_Q returned: " + result);
}
// non-existant locale
currency = Currency.getInstance(new ULocale("en_QQ"), new Date(System.currentTimeMillis()));
if (currency != null)
{
errln("didn't return NULL for en_QQ");
}
}
public void TestDeprecatedCurrencyFormat() {
// bug 5952
Locale locale = new Locale("sr", "QQ");
DecimalFormatSymbols icuSymbols = new
com.ibm.icu.text.DecimalFormatSymbols(locale);
String symbol = icuSymbols.getCurrencySymbol();
Currency currency = icuSymbols.getCurrency();
String expectCur = null;
String expectSym = "\u00A4";
if(!symbol.toString().equals(expectSym) || currency != null) {
errln("for " + locale + " expected " + expectSym+"/"+expectCur + " but got " + symbol+"/"+currency);
} else {
logln("for " + locale + " expected " + expectSym+"/"+expectCur + " and got " + symbol+"/"+currency);
}
}
}