001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.harmony.luni.tests.java.util;
019:
020: import java.util.Currency;
021: import java.util.Locale;
022:
023: public class CurrencyTest extends junit.framework.TestCase {
024:
025: private static Locale defaultLocale = Locale.getDefault();
026:
027: /**
028: * @tests java.util.Currency#getInstance(java.lang.String)
029: */
030: public void test_getInstanceLjava_lang_String() {
031: // see test_getInstanceLjava_util_Locale() tests
032: }
033:
034: /**
035: * @tests java.util.Currency#getInstance(java.util.Locale)
036: */
037: public void test_getInstanceLjava_util_Locale() {
038: /*
039: * the behaviour in all these three cases should be the same since this
040: * method ignores language and variant component of the locale.
041: */
042: Currency c0 = Currency.getInstance("CAD");
043: Currency c1 = Currency.getInstance(new Locale("en", "CA"));
044: assertTrue(
045: "Currency.getInstance(new Locale(\"en\",\"CA\")) isn't equal to Currency.getInstance(\"CAD\")",
046: c1 == c0);
047: Currency c2 = Currency.getInstance(new Locale("fr", "CA"));
048: assertTrue(
049: "Currency.getInstance(new Locale(\"fr\",\"CA\")) isn't equal to Currency.getInstance(\"CAD\")",
050: c2 == c0);
051: Currency c3 = Currency.getInstance(new Locale("", "CA"));
052: assertTrue(
053: "Currency.getInstance(new Locale(\"\",\"CA\")) isn't equal to Currency.getInstance(\"CAD\")",
054: c3 == c0);
055:
056: c0 = Currency.getInstance("JPY");
057: c1 = Currency.getInstance(new Locale("ja", "JP"));
058: assertTrue(
059: "Currency.getInstance(new Locale(\"ja\",\"JP\")) isn't equal to Currency.getInstance(\"JPY\")",
060: c1 == c0);
061: c2 = Currency.getInstance(new Locale("", "JP"));
062: assertTrue(
063: "Currency.getInstance(new Locale(\"\",\"JP\")) isn't equal to Currency.getInstance(\"JPY\")",
064: c2 == c0);
065: c3 = Currency.getInstance(new Locale("bogus", "JP"));
066: assertTrue(
067: "Currency.getInstance(new Locale(\"bogus\",\"JP\")) isn't equal to Currency.getInstance(\"JPY\")",
068: c3 == c0);
069:
070: Locale localeGu = new Locale("gu", "IN");
071: Currency cGu = Currency.getInstance(localeGu);
072: Locale localeKn = new Locale("kn", "IN");
073: Currency cKn = Currency.getInstance(localeKn);
074: assertTrue("Currency.getInstance(Locale_" + localeGu.toString()
075: + "))" + "isn't equal to "
076: + "Currency.getInstance(Locale_" + localeKn.toString()
077: + "))", cGu == cKn);
078:
079: // some territories do not have currencies, like Antarctica(AQ)
080: Locale loc = new Locale("", "AQ");
081: Currency curr = Currency.getInstance(loc);
082: assertNull(curr);
083:
084: try {
085: Currency.getInstance((Locale) null);
086: fail("should throw NullPointerException");
087: } catch (NullPointerException e) {
088: // expected
089: }
090:
091: try {
092: Currency.getInstance(new Locale("ABC", "DEF"));
093: fail("should throw IllegalArgumentException");
094: } catch (IllegalArgumentException e) {
095: // expected
096: }
097:
098: // unsupported/legacy iso3 countries
099: // RI does not support them.
100: loc = new Locale("", "ZR");
101: Currency.getInstance(loc);
102:
103: loc = new Locale("", "ZAR");
104: Currency.getInstance(loc);
105:
106: loc = new Locale("", "FX");
107: Currency.getInstance(loc);
108:
109: loc = new Locale("", "FXX");
110: Currency.getInstance(loc);
111: }
112:
113: /**
114: * @tests java.util.Currency#getSymbol()
115: */
116: public void test_getSymbol() {
117:
118: Currency currK = Currency.getInstance("KRW");
119: Currency currI = Currency.getInstance("INR");
120: Currency currUS = Currency.getInstance("USD");
121:
122: Locale.setDefault(Locale.US);
123: assertEquals("currK.getSymbol()", "KRW", currK.getSymbol());
124: // Some non-bug differences below because of CLDR data.
125: assertEquals("currI.getSymbol()", "0#Rs.|1#Re.|1<Rs.", currI
126: .getSymbol());
127: assertEquals("currUS.getSymbol()", "$", currUS.getSymbol());
128:
129: Locale.setDefault(new Locale("ko", "KR"));
130: assertEquals("currK.getSymbol()", "\uffe6", currK.getSymbol());
131: assertEquals("currI.getSymbol()", "0#Rs.|1#Re.|1<Rs.", currI
132: .getSymbol());
133: assertEquals("currUS.getSymbol()", "US$", currUS.getSymbol());
134:
135: // test what happens if this is an invalid locale,
136: // one with Korean country but an India language
137: // this method should return the currency codes in that case
138: Locale.setDefault(new Locale("kr", "KR"));
139: assertEquals("currK.getSymbol()", "KRW", currK.getSymbol());
140: assertEquals("currI.getSymbol()", "0#Rs.|1#Re.|1<Rs.", currI
141: .getSymbol());
142: assertEquals("currUS.getSymbol()", "US$", currUS.getSymbol());
143: }
144:
145: /**
146: * @tests java.util.Currency#getSymbol(java.util.Locale)
147: */
148: public void test_getSymbolLjava_util_Locale() {
149: Locale.setDefault(Locale.US);
150: Currency currE = Currency.getInstance("EUR");
151: // Some non-bug differences below because of CLDR data.
152: assertEquals("\u20ac", currE.getSymbol(Locale.JAPAN));
153: assertEquals("EUR", currE.getSymbol(Locale.JAPANESE));
154: assertEquals("\u20ac", currE.getSymbol(new Locale("", "FR")));
155: assertEquals("\u20ac", currE.getSymbol(Locale.FRANCE));
156: assertEquals("EUR", currE.getSymbol(Locale.FRENCH));
157:
158: Currency currJ = Currency.getInstance("JPY");
159: assertEquals("\uffe5", currJ.getSymbol(Locale.JAPAN));
160: assertEquals("JPY", currJ.getSymbol(Locale.JAPANESE));
161: assertEquals("\u00a5JP", currJ.getSymbol(Locale.FRANCE));
162: assertEquals("JPY", currJ.getSymbol(Locale.FRENCH));
163:
164: Currency currUS = Currency.getInstance("USD");
165: assertEquals("US$", currUS.getSymbol(Locale.JAPAN));
166:
167: Locale.setDefault(new Locale("ja", "JP"));
168: assertEquals("JP\u00a5", currJ.getSymbol(new Locale("", "JP")));
169: assertEquals("US$", currUS.getSymbol(new Locale("", "JP")));
170:
171: Locale.setDefault(Locale.US);
172: assertEquals("JP\u00a5", currJ.getSymbol(new Locale("", "JP")));
173: assertEquals("US$", currUS.getSymbol(new Locale("", "JP")));
174:
175: assertEquals("USD", currUS.getSymbol(Locale.JAPANESE));
176: assertEquals("$US", currUS.getSymbol(Locale.FRANCE));
177: assertEquals("USD", currUS.getSymbol(Locale.FRENCH));
178: assertEquals("$US", currUS.getSymbol(new Locale("fr", "FR")));
179: assertEquals("US$", currUS.getSymbol(new Locale("", "FR"))); // default
180: // locale
181:
182: assertEquals("$", currUS.getSymbol(Locale.US));
183: assertEquals("USD", currUS.getSymbol(Locale.ENGLISH));
184:
185: assertEquals("$", currUS.getSymbol(new Locale("en", "US")));
186: assertEquals("US$", currUS.getSymbol(new Locale("", "US")));
187:
188: Currency currCA = Currency.getInstance("CAD");
189: assertEquals("CAD", currCA.getSymbol(Locale.JAPAN));
190: assertEquals("CAD", currCA.getSymbol(Locale.JAPANESE));
191: assertEquals("$Ca", currCA.getSymbol(Locale.FRANCE));
192: assertEquals("CAD", currCA.getSymbol(Locale.FRENCH));
193: assertEquals("Can$", currCA.getSymbol(Locale.US));
194: assertEquals("CAD", currCA.getSymbol(Locale.ENGLISH));
195: assertEquals("Can$", currCA.getSymbol(new Locale("es", "US")));
196: assertEquals("Can$", currCA.getSymbol(new Locale("en", "US")));
197:
198: assertEquals("$", currCA.getSymbol(Locale.CANADA));
199: assertEquals("$", currCA.getSymbol(Locale.CANADA_FRENCH));
200: assertEquals("$", currCA.getSymbol(new Locale("en", "CA")));
201: assertEquals("$", currCA.getSymbol(new Locale("fr", "CA")));
202: assertEquals("CAD", currCA.getSymbol(new Locale("", "CA")));
203:
204: // tests what happens with improper locales, i.e. countries without the
205: // given language
206: assertEquals("currUS.getSymbol(new Locale(\"ar\", \"US\"))",
207: "US$", currUS.getSymbol(new Locale("ar", "US")));
208: assertEquals("currUS.getSymbol(new Locale(\"ar\", \"CA\"))",
209: "US$", currUS.getSymbol(new Locale("ar", "CA")));
210: assertEquals("currCA.getSymbol(new Locale(\"ar\", \"US\"))",
211: "CAD", currCA.getSymbol(new Locale("ar", "US")));
212: assertEquals("currCA.getSymbol(new Locale(\"ar\", \"CA\"))",
213: "CAD", currCA.getSymbol(new Locale("ar", "CA")));
214: assertEquals("currJ.getSymbol(new Locale(\"ja\", \"US\"))",
215: "\uffe5", currJ.getSymbol(new Locale("ja", "US")));
216: assertEquals("currUS.getSymbol(new Locale(\"ja\", \"US\"))",
217: "US$", currUS.getSymbol(new Locale("ja", "US")));
218:
219: // cross testing between USD and JPY when locale is JAPANESE JAPAN
220:
221: // set default locale to Locale_ja_JP
222: Locale.setDefault(new Locale("ja", "JP"));
223:
224: Currency currJ2 = Currency.getInstance("JPY");
225: Currency currUS2 = Currency.getInstance("USD");
226:
227: // the real JAPAN locale
228: assertEquals("\uffe5", currJ2.getSymbol(new Locale("ja", "JP")));
229:
230: // no language
231: assertEquals("JP\u00a5", currJ2.getSymbol(new Locale("", "JP")));
232:
233: // no country
234: assertEquals("JPY", currJ2.getSymbol(new Locale("ja", "")));
235:
236: // no language
237: assertEquals("JP\u00a5", currJ2.getSymbol(new Locale("", "US")));
238:
239: // no country
240: assertEquals("JPY", currJ2.getSymbol(new Locale("en", "")));
241:
242: // bogus Locales , when default locale is Locale_ja_JP
243: assertEquals("JP\u00a5", currJ2
244: .getSymbol(new Locale("ar", "JP")));
245: assertEquals("JP\u00a5", currJ2
246: .getSymbol(new Locale("ar", "US")));
247: assertEquals("\uffe5", currJ2.getSymbol(new Locale("ja", "AE")));
248: assertEquals("\u00a5", currJ2.getSymbol(new Locale("en", "AE")));
249: assertEquals("currJ.getSymbol(new Locale(\"ja\", \"US\"))",
250: "\uffe5", currJ.getSymbol(new Locale("ja", "US")));
251:
252: // the real US locale
253: assertEquals("$", currUS2.getSymbol(new Locale("en", "US")));
254:
255: // no country
256: assertEquals("USD", currUS2.getSymbol(new Locale("ja", "")));
257:
258: // no language
259: assertEquals("US$", currUS2.getSymbol(new Locale("", "JP")));
260:
261: // no language
262: assertEquals("US$", currUS2.getSymbol(new Locale("", "US")));
263:
264: // no country
265: assertEquals("USD", currUS2.getSymbol(new Locale("en", "")));
266:
267: // bogus Locales , when default locale is Locale_ja_JP
268: assertEquals("US$", currUS2.getSymbol(new Locale("ar", "JP")));
269: assertEquals("US$", currUS2.getSymbol(new Locale("ar", "US")));
270: assertEquals("US$", currUS2.getSymbol(new Locale("ja", "AE")));
271: assertEquals("$", currUS2.getSymbol(new Locale("en", "AE")));
272: assertEquals("currUS.getSymbol(new Locale(\"ja\", \"US\"))",
273: "US$", currUS.getSymbol(new Locale("ja", "US")));
274:
275: Locale.setDefault(Locale.US);
276:
277: // euro tests
278: Currency currDKK = Currency.getInstance("DKK");
279: assertEquals("\u20ac", currE.getSymbol(new Locale("da", "DK")));
280: assertEquals("kr", currDKK.getSymbol(new Locale("da", "DK")));
281:
282: assertEquals("EUR", currE.getSymbol(new Locale("da", "")));
283: assertEquals("DKK", currDKK.getSymbol(new Locale("da", "")));
284:
285: assertEquals("\u20ac", currE.getSymbol(new Locale("", "DK")));
286: assertEquals("DKK", currDKK.getSymbol(new Locale("", "DK")));
287:
288: Locale.setDefault(new Locale("da", "DK"));
289: assertEquals("\u20ac", currE.getSymbol(new Locale("da", "DK")));
290: assertEquals("kr", currDKK.getSymbol(new Locale("da", "DK")));
291:
292: assertEquals("EUR", currE.getSymbol(new Locale("da", "")));
293: assertEquals("DKK", currDKK.getSymbol(new Locale("da", "")));
294:
295: assertEquals("\u20ac", currE.getSymbol(new Locale("", "DK")));
296: assertEquals("DKK", currDKK.getSymbol(new Locale("", "DK")));
297:
298: assertEquals("\u20ac", currE.getSymbol(new Locale("ar", "AE")));
299: assertEquals("DKK", currDKK.getSymbol(new Locale("ar", "AE")));
300: }
301:
302: /**
303: * @tests java.util.Currency#getDefaultFractionDigits()
304: */
305: public void test_getDefaultFractionDigits() {
306: Currency c1 = Currency.getInstance("EUR");
307: c1.getDefaultFractionDigits();
308: assertEquals(" Currency.getInstance(\"" + c1
309: + "\") returned incorrect number of digits. ", 2, c1
310: .getDefaultFractionDigits());
311:
312: Currency c2 = Currency.getInstance("JPY");
313: c2.getDefaultFractionDigits();
314: assertEquals(" Currency.getInstance(\"" + c2
315: + "\") returned incorrect number of digits. ", 0, c2
316: .getDefaultFractionDigits());
317:
318: Currency c3 = Currency.getInstance("XBD");
319: // A non-bug differences below because of CLDR data.
320: c3.getDefaultFractionDigits();
321: assertEquals(" Currency.getInstance(\"" + c3
322: + "\") returned incorrect number of digits. ", 2, c3
323: .getDefaultFractionDigits());
324:
325: }
326:
327: protected void setUp() {
328: Locale.setDefault(defaultLocale);
329: }
330:
331: protected void tearDown() {
332: }
333:
334: /**
335: * Helper method to display Currency info
336: *
337: * @param c
338: */
339: private void printCurrency(Currency c) {
340: System.out.println();
341: System.out.println(c.getCurrencyCode());
342: System.out.println(c.getSymbol());
343: System.out.println(c.getDefaultFractionDigits());
344: }
345:
346: /**
347: * helper method to display Locale info
348: */
349: private static void printLocale(Locale loc) {
350: System.out.println();
351: System.out.println(loc.getDisplayName());
352: System.out.println(loc.getCountry());
353: System.out.println(loc.getLanguage());
354: System.out.println(loc.getDisplayCountry());
355: System.out.println(loc.getDisplayLanguage());
356: System.out.println(loc.getDisplayName());
357: System.out.println(loc.getISO3Country());
358: System.out.println(loc.getISO3Language());
359: }
360: }
|