]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/tests/localespi/src/com/ibm/icu/dev/test/localespi/DecimalFormatSymbolsTest.java
Clean up imports.
[Dictionary.git] / jars / icu4j-52_1 / main / tests / localespi / src / com / ibm / icu / dev / test / localespi / DecimalFormatSymbolsTest.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 2008-2012, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7 package com.ibm.icu.dev.test.localespi;
8
9 import java.text.DecimalFormatSymbols;
10 import java.util.Currency;
11 import java.util.Locale;
12
13 import com.ibm.icu.dev.test.TestFmwk;
14 import com.ibm.icu.util.ULocale;
15
16 public class DecimalFormatSymbolsTest extends TestFmwk {
17     public static void main(String[] args) throws Exception {
18         new DecimalFormatSymbolsTest().run(args);
19     }
20
21     /*
22      * Check if getInstance returns the ICU implementation.
23      */
24     public void TestGetInstance() {
25         for (Locale loc : DecimalFormatSymbols.getAvailableLocales()) {
26             if (TestUtil.isProblematicIBMLocale(loc)) {
27                 logln("Skipped " + loc);
28                 continue;
29             }
30
31             DecimalFormatSymbols decfs = DecimalFormatSymbols.getInstance(loc);
32
33             boolean isIcuImpl = (decfs instanceof com.ibm.icu.impl.jdkadapter.DecimalFormatSymbolsICU);
34
35             if (TestUtil.isICUExtendedLocale(loc)) {
36                 if (!isIcuImpl) {
37                     errln("FAIL: getInstance returned JDK DecimalFormatSymbols for locale " + loc);
38                 }
39             } else {
40                 if (isIcuImpl) {
41                     logln("INFO: getInstance returned ICU DecimalFormatSymbols for locale " + loc);
42                 }
43                 Locale iculoc = TestUtil.toICUExtendedLocale(loc);
44                 DecimalFormatSymbols decfsIcu = DecimalFormatSymbols.getInstance(iculoc);
45                 if (isIcuImpl) {
46                     if (!decfs.equals(decfsIcu)) {
47                         errln("FAIL: getInstance returned ICU DecimalFormatSymbols for locale " + loc
48                                 + ", but different from the one for locale " + iculoc);
49                     }
50                 } else {
51                     if (!(decfsIcu instanceof com.ibm.icu.impl.jdkadapter.DecimalFormatSymbolsICU)) {
52                         errln("FAIL: getInstance returned JDK DecimalFormatSymbols for locale " + iculoc);
53                     }
54                 }
55             }
56         }
57     }
58
59     /*
60      * Testing the contents of DecimalFormatSymbols between ICU instance and its
61      * equivalent created via the Locale SPI framework.
62      */
63     public void TestICUEquivalent() {
64         Locale[] TEST_LOCALES = {
65                 new Locale("en", "US"),
66                 new Locale("pt", "BR"),
67                 new Locale("ko", "KR"),
68         };
69
70         for (Locale loc : TEST_LOCALES) {
71             Locale iculoc = TestUtil.toICUExtendedLocale(loc);
72             DecimalFormatSymbols jdkDecfs = DecimalFormatSymbols.getInstance(iculoc);
73             com.ibm.icu.text.DecimalFormatSymbols icuDecfs = com.ibm.icu.text.DecimalFormatSymbols.getInstance(loc);
74
75             Currency jdkCur = jdkDecfs.getCurrency();
76             com.ibm.icu.util.Currency icuCur = icuDecfs.getCurrency();
77             if ((jdkCur != null && icuCur == null)
78                     || (jdkCur == null && icuCur != null)
79                     || !jdkCur.getCurrencyCode().equals(icuCur.getCurrencyCode())) {
80                 errln("FAIL: Different results returned by getCurrency for locale " + loc);
81             }
82
83             checkEquivalence(jdkDecfs.getCurrencySymbol(), icuDecfs.getCurrencySymbol(), loc, "getCurrencySymbol");
84             checkEquivalence(jdkDecfs.getDecimalSeparator(), icuDecfs.getDecimalSeparator(), loc, "getDecimalSeparator");
85             checkEquivalence(jdkDecfs.getDigit(), icuDecfs.getDigit(), loc, "getDigit");
86             checkEquivalence(jdkDecfs.getExponentSeparator(), icuDecfs.getExponentSeparator(), loc, "getExponentSeparator");
87             checkEquivalence(jdkDecfs.getGroupingSeparator(), icuDecfs.getGroupingSeparator(), loc, "getGroupingSeparator");
88             checkEquivalence(jdkDecfs.getInfinity(), icuDecfs.getInfinity(), loc, "getInfinity");
89             checkEquivalence(jdkDecfs.getInternationalCurrencySymbol(), icuDecfs.getInternationalCurrencySymbol(), loc, "getInternationalCurrencySymbol");
90             checkEquivalence(jdkDecfs.getMinusSign(), icuDecfs.getMinusSign(), loc, "getMinusSign");
91             checkEquivalence(jdkDecfs.getMonetaryDecimalSeparator(), icuDecfs.getMonetaryDecimalSeparator(), loc, "getMonetaryDecimalSeparator");
92             checkEquivalence(jdkDecfs.getNaN(), icuDecfs.getNaN(), loc, "getNaN");
93             checkEquivalence(jdkDecfs.getPatternSeparator(), icuDecfs.getPatternSeparator(), loc, "getPatternSeparator");
94             checkEquivalence(jdkDecfs.getPercent(), icuDecfs.getPercent(), loc, "getPercent");
95             checkEquivalence(jdkDecfs.getPerMill(), icuDecfs.getPerMill(), loc, "getPerMill");
96             checkEquivalence(jdkDecfs.getZeroDigit(), icuDecfs.getZeroDigit(), loc, "getZeroDigit");
97         }
98     }
99
100     private void checkEquivalence(Object jo, Object io, Locale loc, String method) {
101         if (!jo.equals(io)) {
102             errln("FAIL: Different results returned by " + method + " for locale "
103                     + loc + " (jdk=" + jo + ",icu=" + io + ")");
104         }
105     }
106
107     /*
108      * Testing setters
109      */
110     public void TestSetSymbols() {
111         // ICU's JDK DecimalFormatSymbols implementation for de_DE locale
112         DecimalFormatSymbols decfs = DecimalFormatSymbols.getInstance(TestUtil.toICUExtendedLocale(new Locale("de", "DE")));
113
114         // en_US is supported by JDK, so this is the JDK's own DecimalFormatSymbols
115         Locale loc = new Locale("en", "US");
116         DecimalFormatSymbols decfsEnUS = DecimalFormatSymbols.getInstance(loc);
117
118         // Copying over all symbols
119         decfs.setCurrency(decfsEnUS.getCurrency());
120
121         decfs.setCurrencySymbol(decfsEnUS.getCurrencySymbol());
122         decfs.setDecimalSeparator(decfsEnUS.getDecimalSeparator());
123         decfs.setDigit(decfsEnUS.getDigit());
124         decfs.setExponentSeparator(decfsEnUS.getExponentSeparator());
125         decfs.setGroupingSeparator(decfsEnUS.getGroupingSeparator());
126         decfs.setInfinity(decfsEnUS.getInfinity());
127         decfs.setInternationalCurrencySymbol(decfsEnUS.getInternationalCurrencySymbol());
128         decfs.setMinusSign(decfsEnUS.getMinusSign());
129         decfs.setMonetaryDecimalSeparator(decfsEnUS.getMonetaryDecimalSeparator());
130         decfs.setNaN(decfsEnUS.getNaN());
131         decfs.setPatternSeparator(decfsEnUS.getPatternSeparator());
132         decfs.setPercent(decfsEnUS.getPercent());
133         decfs.setPerMill(decfsEnUS.getPerMill());
134         decfs.setZeroDigit(decfsEnUS.getZeroDigit());
135
136         // Check
137         Currency cur = decfs.getCurrency();
138         Currency curEnUS = decfsEnUS.getCurrency();
139         if ((cur != null && curEnUS == null)
140                 || (cur == null && curEnUS != null)
141                 || !cur.equals(curEnUS)) {
142             errln("FAIL: Different results returned by getCurrency");
143         }
144
145         checkEquivalence(decfs.getCurrencySymbol(), decfsEnUS.getCurrencySymbol(), loc, "getCurrencySymbol");
146         checkEquivalence(decfs.getDecimalSeparator(), decfsEnUS.getDecimalSeparator(), loc, "getDecimalSeparator");
147         checkEquivalence(decfs.getDigit(), decfsEnUS.getDigit(), loc, "getDigit");
148         checkEquivalence(decfs.getExponentSeparator(), decfsEnUS.getExponentSeparator(), loc, "getExponentSeparator");
149         checkEquivalence(decfs.getGroupingSeparator(), decfsEnUS.getGroupingSeparator(), loc, "getGroupingSeparator");
150         checkEquivalence(decfs.getInfinity(), decfsEnUS.getInfinity(), loc, "getInfinity");
151         checkEquivalence(decfs.getInternationalCurrencySymbol(), decfsEnUS.getInternationalCurrencySymbol(), loc, "getInternationalCurrencySymbol");
152         checkEquivalence(decfs.getMinusSign(), decfsEnUS.getMinusSign(), loc, "getMinusSign");
153         checkEquivalence(decfs.getMonetaryDecimalSeparator(), decfsEnUS.getMonetaryDecimalSeparator(), loc, "getMonetaryDecimalSeparator");
154         checkEquivalence(decfs.getNaN(), decfsEnUS.getNaN(), loc, "getNaN");
155         checkEquivalence(decfs.getPatternSeparator(), decfsEnUS.getPatternSeparator(), loc, "getPatternSeparator");
156         checkEquivalence(decfs.getPercent(), decfsEnUS.getPercent(), loc, "getPercent");
157         checkEquivalence(decfs.getPerMill(), decfsEnUS.getPerMill(), loc, "getPerMill");
158         checkEquivalence(decfs.getZeroDigit(), decfsEnUS.getZeroDigit(), loc, "getZeroDigit");
159     }
160
161     public void TestKeywords() {
162         // ICU provider variant is appended
163         ULocale uloc0 = new ULocale("en_US_" + TestUtil.ICU_VARIANT + "@numbers=Arab;currency=EUR");
164         Locale loc = uloc0.toLocale();
165         // On Java 7+, locale extension is preserved
166         ULocale uloc = ULocale.forLocale(loc);
167         String nsType = uloc.getKeywordValue("numbers");
168         if (nsType == null) {
169             // Java 6 - skip this test
170             return;
171         }
172
173         DecimalFormatSymbols jdkDecfs = DecimalFormatSymbols.getInstance(loc);
174         com.ibm.icu.text.DecimalFormatSymbols icuDecfs = com.ibm.icu.text.DecimalFormatSymbols.getInstance(uloc);
175         // Check digit 0
176         if (jdkDecfs.getDigit() != icuDecfs.getDigit()) {
177             errln("FAIL: Different decimal digit - via JDK: " + jdkDecfs.getDigit() + ", with ICU: " + icuDecfs.getDigit());
178         }
179
180         String jdkCurrencyCode = jdkDecfs.getCurrency().getCurrencyCode();
181         String icuCurrencyCode = icuDecfs.getCurrency().getCurrencyCode();
182         if (!jdkCurrencyCode.equals(icuCurrencyCode)) {
183             errln("FAIL: Different currency code - via JDK: " + jdkCurrencyCode + ", with ICU: " + icuCurrencyCode);
184         }
185     }
186 }