blob: 0f4180052fe194afd2730b76315cc56f296a23cd [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.harmony.luni.tests.java.util;
import java.util.Currency;
import java.util.Locale;
public class CurrencyTest extends junit.framework.TestCase {
private static Locale defaultLocale = Locale.getDefault();
/**
* @tests java.util.Currency#getInstance(java.lang.String)
*/
public void test_getInstanceLjava_lang_String() {
// see test_getInstanceLjava_util_Locale() tests
}
/**
* @tests java.util.Currency#getInstance(java.util.Locale)
*/
public void test_getInstanceLjava_util_Locale() {
/*
* the behaviour in all these three cases should be the same since this
* method ignores language and variant component of the locale.
*/
Currency c0 = Currency.getInstance("CAD");
Currency c1 = Currency.getInstance(new Locale("en", "CA"));
assertTrue(
"Currency.getInstance(new Locale(\"en\",\"CA\")) isn't equal to Currency.getInstance(\"CAD\")",
c1 == c0);
Currency c2 = Currency.getInstance(new Locale("fr", "CA"));
assertTrue(
"Currency.getInstance(new Locale(\"fr\",\"CA\")) isn't equal to Currency.getInstance(\"CAD\")",
c2 == c0);
Currency c3 = Currency.getInstance(new Locale("", "CA"));
assertTrue(
"Currency.getInstance(new Locale(\"\",\"CA\")) isn't equal to Currency.getInstance(\"CAD\")",
c3 == c0);
c0 = Currency.getInstance("JPY");
c1 = Currency.getInstance(new Locale("ja", "JP"));
assertTrue(
"Currency.getInstance(new Locale(\"ja\",\"JP\")) isn't equal to Currency.getInstance(\"JPY\")",
c1 == c0);
c2 = Currency.getInstance(new Locale("", "JP"));
assertTrue(
"Currency.getInstance(new Locale(\"\",\"JP\")) isn't equal to Currency.getInstance(\"JPY\")",
c2 == c0);
c3 = Currency.getInstance(new Locale("bogus", "JP"));
assertTrue(
"Currency.getInstance(new Locale(\"bogus\",\"JP\")) isn't equal to Currency.getInstance(\"JPY\")",
c3 == c0);
Locale localeGu = new Locale("gu", "IN");
Currency cGu = Currency.getInstance(localeGu);
Locale localeKn = new Locale("kn", "IN");
Currency cKn = Currency.getInstance(localeKn);
assertTrue("Currency.getInstance(Locale_" + localeGu.toString() + "))"
+ "isn't equal to " + "Currency.getInstance(Locale_"
+ localeKn.toString() + "))", cGu == cKn);
// some territories do not have currencies, like Antarctica(AQ)
Locale loc = new Locale("", "AQ");
Currency curr = Currency.getInstance(loc);
assertNull(curr);
try {
Currency.getInstance((Locale) null);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
Currency.getInstance(new Locale("ABC","DEF"));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
// unsupported/legacy iso3 countries
// RI does not support them.
loc = new Locale("", "ZR");
Currency.getInstance(loc);
loc = new Locale("", "ZAR");
Currency.getInstance(loc);
// loc = new Locale("", "FX");
// Currency.getInstance(loc);
// loc = new Locale("", "FXX");
// Currency.getInstance(loc);
}
/**
* @tests java.util.Currency#getSymbol()
*/
public void test_getSymbol() {
Currency currK = Currency.getInstance("KRW");
Currency currI = Currency.getInstance("INR");
Currency currUS = Currency.getInstance("USD");
Locale.setDefault(Locale.US);
assertEquals("currK.getSymbol()", "\u20a9", currK.getSymbol());
// Some non-bug differences below because of CLDR data.
assertEquals("currI.getSymbol()", "Rs", currI
.getSymbol());
assertEquals("currUS.getSymbol()", "$", currUS.getSymbol());
Locale.setDefault(new Locale("ko", "KR"));
assertEquals("currK.getSymbol()", "\u20a9", currK.getSymbol());
assertEquals("currI.getSymbol()", "Rs", currI
.getSymbol());
assertEquals("currUS.getSymbol()", "US$", currUS.getSymbol());
// test what happens if this is an invalid locale,
// one with Korean country but an India language
// this method should return the currency codes in that case
Locale.setDefault(new Locale("kr", "KR"));
assertEquals("currK.getSymbol()", "\u20a9", currK.getSymbol());
assertEquals("currI.getSymbol()", "Rs", currI
.getSymbol());
assertEquals("currUS.getSymbol()", "US$", currUS.getSymbol());
}
/**
* @tests java.util.Currency#getSymbol(java.util.Locale)
*/
public void test_getSymbolLjava_util_Locale() {
Locale.setDefault(Locale.US);
Currency currE = Currency.getInstance("EUR");
// Some non-bug differences below because of CLDR data.
assertEquals("\u20ac", currE.getSymbol(Locale.JAPAN));
assertEquals("EUR", currE.getSymbol(Locale.JAPANESE));
assertEquals("\u20ac", currE.getSymbol(new Locale("", "FR")));
assertEquals("\u20ac", currE.getSymbol(Locale.FRANCE));
assertEquals("EUR", currE.getSymbol(Locale.FRENCH));
Currency currJ = Currency.getInstance("JPY");
assertEquals("\uffe5", currJ.getSymbol(Locale.JAPAN));
assertEquals("JPY", currJ.getSymbol(Locale.JAPANESE));
assertEquals("\u00a5JP", currJ.getSymbol(Locale.FRANCE));
assertEquals("JPY", currJ.getSymbol(Locale.FRENCH));
Currency currUS = Currency.getInstance("USD");
assertEquals("$", currUS.getSymbol(Locale.JAPAN));
Locale.setDefault(new Locale("ja", "JP"));
assertEquals("JP\u00a5", currJ.getSymbol(new Locale("", "JP")));
assertEquals("US$", currUS.getSymbol(new Locale("", "JP")));
Locale.setDefault(Locale.US);
assertEquals("JP\u00a5", currJ.getSymbol(new Locale("", "JP")));
assertEquals("US$", currUS.getSymbol(new Locale("", "JP")));
assertEquals("USD", currUS.getSymbol(Locale.JAPANESE));
assertEquals("$US", currUS.getSymbol(Locale.FRANCE));
assertEquals("USD", currUS.getSymbol(Locale.FRENCH));
assertEquals("$US", currUS.getSymbol(new Locale("fr", "FR")));
assertEquals("US$", currUS.getSymbol(new Locale("", "FR"))); // default
// locale
assertEquals("$", currUS.getSymbol(Locale.US));
assertEquals("USD", currUS.getSymbol(Locale.ENGLISH));
assertEquals("$", currUS.getSymbol(new Locale("en", "US")));
assertEquals("US$", currUS.getSymbol(new Locale("", "US")));
Currency currCA = Currency.getInstance("CAD");
assertEquals("CA$", currCA.getSymbol(Locale.JAPAN));
assertEquals("CAD", currCA.getSymbol(Locale.JAPANESE));
assertEquals("$CA", currCA.getSymbol(Locale.FRANCE));
assertEquals("CAD", currCA.getSymbol(Locale.FRENCH));
assertEquals("CA$", currCA.getSymbol(Locale.US));
assertEquals("CAD", currCA.getSymbol(Locale.ENGLISH));
assertEquals("CA$", currCA.getSymbol(new Locale("es", "US")));
assertEquals("CA$", currCA.getSymbol(new Locale("en", "US")));
assertEquals("$", currCA.getSymbol(Locale.CANADA));
assertEquals("$", currCA.getSymbol(Locale.CANADA_FRENCH));
assertEquals("$", currCA.getSymbol(new Locale("en", "CA")));
assertEquals("$", currCA.getSymbol(new Locale("fr", "CA")));
assertEquals("CA$", currCA.getSymbol(new Locale("", "CA")));
// tests what happens with improper locales, i.e. countries without the
// given language
assertEquals("currUS.getSymbol(new Locale(\"ar\", \"US\"))", "US$",
currUS.getSymbol(new Locale("ar", "US")));
assertEquals("currUS.getSymbol(new Locale(\"ar\", \"CA\"))", "US$",
currUS.getSymbol(new Locale("ar", "CA")));
assertEquals("currCA.getSymbol(new Locale(\"ar\", \"US\"))", "CA$",
currCA.getSymbol(new Locale("ar", "US")));
assertEquals("currCA.getSymbol(new Locale(\"ar\", \"CA\"))", "CA$",
currCA.getSymbol(new Locale("ar", "CA")));
assertEquals("currJ.getSymbol(new Locale(\"ja\", \"US\"))", "\uffe5",
currJ.getSymbol(new Locale("ja", "US")));
assertEquals("currUS.getSymbol(new Locale(\"ja\", \"US\"))", "$",
currUS.getSymbol(new Locale("ja", "US")));
// cross testing between USD and JPY when locale is JAPANESE JAPAN
// set default locale to Locale_ja_JP
Locale.setDefault(new Locale("ja", "JP"));
Currency currJ2 = Currency.getInstance("JPY");
Currency currUS2 = Currency.getInstance("USD");
// the real JAPAN locale
assertEquals("\uffe5", currJ2.getSymbol(new Locale("ja", "JP")));
// no language
assertEquals("JP\u00a5", currJ2.getSymbol(new Locale("", "JP")));
// no country
assertEquals("JPY", currJ2.getSymbol(new Locale("ja", "")));
// no language
assertEquals("JP\u00a5", currJ2.getSymbol(new Locale("", "US")));
// no country
assertEquals("JPY", currJ2.getSymbol(new Locale("en", "")));
// bogus Locales , when default locale is Locale_ja_JP
assertEquals("JP\u00a5", currJ2.getSymbol(new Locale("ar", "JP")));
assertEquals("JP\u00a5", currJ2.getSymbol(new Locale("ar", "US")));
assertEquals("\uffe5", currJ2.getSymbol(new Locale("ja", "AE")));
assertEquals("\u00a5", currJ2.getSymbol(new Locale("en", "AE")));
assertEquals("currJ.getSymbol(new Locale(\"ja\", \"US\"))", "\uffe5",
currJ.getSymbol(new Locale("ja", "US")));
// the real US locale
assertEquals("$", currUS2.getSymbol(new Locale("en", "US")));
// no country
assertEquals("USD", currUS2.getSymbol(new Locale("ja", "")));
// no language
assertEquals("US$", currUS2.getSymbol(new Locale("", "JP")));
// no language
assertEquals("US$", currUS2.getSymbol(new Locale("", "US")));
// no country
assertEquals("USD", currUS2.getSymbol(new Locale("en", "")));
// bogus Locales , when default locale is Locale_ja_JP
assertEquals("US$", currUS2.getSymbol(new Locale("ar", "JP")));
assertEquals("US$", currUS2.getSymbol(new Locale("ar", "US")));
assertEquals("$", currUS2.getSymbol(new Locale("ja", "AE")));
assertEquals("$", currUS2.getSymbol(new Locale("en", "AE")));
assertEquals("currUS.getSymbol(new Locale(\"ja\", \"US\"))", "$",
currUS.getSymbol(new Locale("ja", "US")));
Locale.setDefault(Locale.US);
// euro tests
Currency currDKK = Currency.getInstance("DKK");
assertEquals("\u20ac", currE.getSymbol(new Locale("da", "DK")));
assertEquals("kr", currDKK.getSymbol(new Locale("da", "DK")));
assertEquals("EUR", currE.getSymbol(new Locale("da", "")));
assertEquals("DKK", currDKK.getSymbol(new Locale("da", "")));
assertEquals("\u20ac", currE.getSymbol(new Locale("", "DK")));
assertEquals("Dkr", currDKK.getSymbol(new Locale("", "DK")));
Locale.setDefault(new Locale("da", "DK"));
assertEquals("\u20ac", currE.getSymbol(new Locale("da", "DK")));
assertEquals("kr", currDKK.getSymbol(new Locale("da", "DK")));
assertEquals("EUR", currE.getSymbol(new Locale("da", "")));
assertEquals("DKK", currDKK.getSymbol(new Locale("da", "")));
assertEquals("\u20ac", currE.getSymbol(new Locale("", "DK")));
assertEquals("Dkr", currDKK.getSymbol(new Locale("", "DK")));
assertEquals("\u20ac", currE.getSymbol(new Locale("ar", "AE")));
assertEquals("Dkr", currDKK.getSymbol(new Locale("ar", "AE")));
}
/**
* @tests java.util.Currency#getDefaultFractionDigits()
*/
public void test_getDefaultFractionDigits() {
Currency c1 = Currency.getInstance("EUR");
c1.getDefaultFractionDigits();
assertEquals(" Currency.getInstance(\"" + c1
+ "\") returned incorrect number of digits. ", 2, c1
.getDefaultFractionDigits());
Currency c2 = Currency.getInstance("JPY");
c2.getDefaultFractionDigits();
assertEquals(" Currency.getInstance(\"" + c2
+ "\") returned incorrect number of digits. ", 0, c2
.getDefaultFractionDigits());
Currency c3 = Currency.getInstance("XBD");
// A non-bug differences below because of CLDR data.
c3.getDefaultFractionDigits();
assertEquals(" Currency.getInstance(\"" + c3
+ "\") returned incorrect number of digits. ", 2, c3
.getDefaultFractionDigits());
}
protected void setUp() {
Locale.setDefault(defaultLocale);
}
protected void tearDown() {
}
/**
* Helper method to display Currency info
*
* @param c
*/
private void printCurrency(Currency c) {
System.out.println();
System.out.println(c.getCurrencyCode());
System.out.println(c.getSymbol());
System.out.println(c.getDefaultFractionDigits());
}
/**
* helper method to display Locale info
*/
private static void printLocale(Locale loc) {
System.out.println();
System.out.println(loc.getDisplayName());
System.out.println(loc.getCountry());
System.out.println(loc.getLanguage());
System.out.println(loc.getDisplayCountry());
System.out.println(loc.getDisplayLanguage());
System.out.println(loc.getDisplayName());
System.out.println(loc.getISO3Country());
System.out.println(loc.getISO3Language());
}
}