1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html#License
3/*****************************************************************************************
4 *
5 *   Copyright (C) 1996-2016, International Business Machines
6 *   Corporation and others.  All Rights Reserved.
7 **/
8
9/**
10 * Port From:   JDK 1.4b1 : java.text.Format.IntlTestDecimalFormatSymbols
11 * Source File: java/text/format/IntlTestDecimalFormatSymbols.java
12 **/
13
14/*
15    @test 1.4 98/03/06
16    @summary test International Decimal Format Symbols
17*/
18
19
20package com.ibm.icu.dev.test.format;
21
22import java.util.Arrays;
23import java.util.Locale;
24
25import org.junit.Test;
26
27import com.ibm.icu.text.DecimalFormatSymbols;
28import com.ibm.icu.util.Currency;
29import com.ibm.icu.util.ULocale;
30
31public class IntlTestDecimalFormatSymbols extends com.ibm.icu.dev.test.TestFmwk
32{
33    // Test the API of DecimalFormatSymbols; primarily a simple get/set set.
34    @Test
35    public void TestSymbols()
36    {
37        DecimalFormatSymbols fr = new DecimalFormatSymbols(Locale.FRENCH);
38
39        DecimalFormatSymbols en = new DecimalFormatSymbols(Locale.ENGLISH);
40
41        if(en.equals(fr)) {
42            errln("ERROR: English DecimalFormatSymbols equal to French");
43        }
44
45        // just do some VERY basic tests to make sure that get/set work
46
47        if(!en.getLocale().equals(Locale.ENGLISH)) {
48            errln("ERROR: getLocale failed");
49        }
50        if(!en.getULocale().equals(ULocale.ENGLISH)) {
51            errln("ERROR: getULocale failed");
52        }
53
54        if(!en.getLocale().equals(Locale.ENGLISH)) {
55            errln("ERROR: getLocale failed");
56        }
57        if(!en.getULocale().equals(ULocale.ENGLISH)) {
58            errln("ERROR: getULocale failed");
59        }
60
61        char zero = en.getZeroDigit();
62        fr.setZeroDigit(zero);
63        if(fr.getZeroDigit() != en.getZeroDigit()) {
64            errln("ERROR: get/set ZeroDigit failed");
65        }
66
67        String[] digits = en.getDigitStrings();
68        fr.setDigitStrings(digits);
69        if (!Arrays.equals(fr.getDigitStrings(), en.getDigitStrings())) {
70            errln("ERROR: get/set DigitStrings failed");
71        }
72
73        char sigDigit = en.getSignificantDigit();
74        fr.setSignificantDigit(sigDigit);
75        if(fr.getSignificantDigit() != en.getSignificantDigit()) {
76            errln("ERROR: get/set SignificantDigit failed");
77        }
78
79        Currency currency = Currency.getInstance("USD");
80        fr.setCurrency(currency);
81        if (!fr.getCurrency().equals(currency)){
82            errln("ERROR: get/set Currency failed");
83        }
84
85        char group = en.getGroupingSeparator();
86        fr.setGroupingSeparator(group);
87        if(fr.getGroupingSeparator() != en.getGroupingSeparator()) {
88            errln("ERROR: get/set GroupingSeparator failed");
89        }
90
91        String groupStr = en.getGroupingSeparatorString();
92        fr.setGroupingSeparatorString(groupStr);
93        if (!fr.getGroupingSeparatorString().equals(en.getGroupingSeparatorString())) {
94            errln("ERROR: get/set GroupingSeparatorString failed");
95        }
96
97        char decimal = en.getDecimalSeparator();
98        fr.setDecimalSeparator(decimal);
99        if(fr.getDecimalSeparator() != en.getDecimalSeparator()) {
100            errln("ERROR: get/set DecimalSeparator failed");
101        }
102
103        String decimalStr = en.getDecimalSeparatorString();
104        fr.setDecimalSeparatorString(decimalStr);
105        if (!fr.getDecimalSeparatorString().equals(en.getDecimalSeparatorString())) {
106            errln("ERROR: get/set DecimalSeparatorString failed");
107        }
108
109        char monetaryGroup = en.getMonetaryGroupingSeparator();
110        fr.setMonetaryGroupingSeparator(monetaryGroup);
111        if(fr.getMonetaryGroupingSeparator() != en.getMonetaryGroupingSeparator()) {
112            errln("ERROR: get/set MonetaryGroupingSeparator failed");
113        }
114
115        String monetaryGroupStr = en.getMonetaryGroupingSeparatorString();
116        fr.setMonetaryGroupingSeparatorString(monetaryGroupStr);
117        if (!fr.getMonetaryGroupingSeparatorString().equals(en.getMonetaryGroupingSeparatorString())){
118            errln("ERROR: get/set MonetaryGroupingSeparatorString failed");
119        }
120
121        char monetaryDecimal = en.getMonetaryDecimalSeparator();
122        fr.setMonetaryDecimalSeparator(monetaryDecimal);
123        if(fr.getMonetaryDecimalSeparator() != en.getMonetaryDecimalSeparator()) {
124            errln("ERROR: get/set MonetaryDecimalSeparator failed");
125        }
126
127        String monetaryDecimalStr = en.getMonetaryDecimalSeparatorString();
128        fr.setMonetaryDecimalSeparatorString(monetaryDecimalStr);
129        if (!fr.getMonetaryDecimalSeparatorString().equals(en.getMonetaryDecimalSeparatorString())) {
130            errln("ERROR: get/set MonetaryDecimalSeparatorString failed");
131        }
132
133        char perMill = en.getPerMill();
134        fr.setPerMill(perMill);
135        if(fr.getPerMill() != en.getPerMill()) {
136            errln("ERROR: get/set PerMill failed");
137        }
138
139        String perMillStr = en.getPerMillString();
140        fr.setPerMillString(perMillStr);
141        if (!fr.getPerMillString().equals(en.getPerMillString())) {
142            errln("ERROR: get/set PerMillString failed");
143        }
144
145        char percent = en.getPercent();
146        fr.setPercent(percent);
147        if(fr.getPercent() != en.getPercent()) {
148            errln("ERROR: get/set Percent failed");
149        }
150
151        String percentStr = en.getPercentString();
152        fr.setPercentString(percentStr);
153        if (!fr.getPercentString().equals(en.getPercentString())) {
154            errln("ERROR: get/set PercentString failed");
155        }
156
157        char digit = en.getDigit();
158        fr.setDigit(digit);
159        if(fr.getDigit() != en.getDigit()) {
160            errln("ERROR: get/set Digit failed");
161        }
162
163        char patternSeparator = en.getPatternSeparator();
164        fr.setPatternSeparator(patternSeparator);
165        if(fr.getPatternSeparator() != en.getPatternSeparator()) {
166            errln("ERROR: get/set PatternSeparator failed");
167        }
168
169        String infinity = en.getInfinity();
170        fr.setInfinity(infinity);
171        String infinity2 = fr.getInfinity();
172        if(! infinity.equals(infinity2)) {
173            errln("ERROR: get/set Infinity failed");
174        }
175
176        String nan = en.getNaN();
177        fr.setNaN(nan);
178        String nan2 = fr.getNaN();
179        if(! nan.equals(nan2)) {
180            errln("ERROR: get/set NaN failed");
181        }
182
183        char minusSign = en.getMinusSign();
184        fr.setMinusSign(minusSign);
185        if(fr.getMinusSign() != en.getMinusSign()) {
186            errln("ERROR: get/set MinusSign failed");
187        }
188
189        String minusSignStr = en.getMinusSignString();
190        fr.setMinusSignString(minusSignStr);
191        if (!fr.getMinusSignString().equals(en.getMinusSignString())) {
192            errln("ERROR: get/set MinusSignString failed");
193        }
194
195        char plusSign = en.getPlusSign();
196        fr.setPlusSign(plusSign);
197        if(fr.getPlusSign() != en.getPlusSign()) {
198            errln("ERROR: get/set PlusSign failed");
199        }
200
201        String plusSignStr = en.getPlusSignString();
202        fr.setPlusSignString(plusSignStr);
203        if (!fr.getPlusSignString().equals(en.getPlusSignString())) {
204            errln("ERROR: get/set PlusSignString failed");
205        }
206
207        char padEscape = en.getPadEscape();
208        fr.setPadEscape(padEscape);
209        if(fr.getPadEscape() != en.getPadEscape()) {
210            errln("ERROR: get/set PadEscape failed");
211        }
212
213        String exponential = en.getExponentSeparator();
214        fr.setExponentSeparator(exponential);
215        if(fr.getExponentSeparator() != en.getExponentSeparator()) {
216            errln("ERROR: get/set Exponential failed");
217        }
218
219        String exponentMultiplicationSign = en.getExponentMultiplicationSign();
220        fr.setExponentMultiplicationSign(exponentMultiplicationSign);
221        if(fr.getExponentMultiplicationSign() != en.getExponentMultiplicationSign()) {
222            errln("ERROR: get/set ExponentMultiplicationSign failed");
223        }
224
225        // Test CurrencySpacing.
226        // In CLDR 1.7, only root.txt has CurrencySpacing data. This data might
227        // be different between en and fr in the future.
228        for (int i = DecimalFormatSymbols.CURRENCY_SPC_CURRENCY_MATCH; i <= DecimalFormatSymbols.CURRENCY_SPC_INSERT; i++) {
229            if (en.getPatternForCurrencySpacing(i, true) !=
230                fr.getPatternForCurrencySpacing(i, true)) {
231                errln("ERROR: get currency spacing item:"+ i+" before the currency");
232                if (en.getPatternForCurrencySpacing(i, false) !=
233                    fr.getPatternForCurrencySpacing(i, false)) {
234                    errln("ERROR: get currency spacing item:" + i + " after currency");
235                }
236            }
237        }
238
239        String dash = "-";
240        en.setPatternForCurrencySpacing(DecimalFormatSymbols.CURRENCY_SPC_INSERT, true, dash);
241        if (dash != en.getPatternForCurrencySpacing(DecimalFormatSymbols.CURRENCY_SPC_INSERT, true)) {
242            errln("ERROR: set currency spacing pattern for before currency.");
243        }
244
245        //DecimalFormatSymbols foo = new DecimalFormatSymbols(); //The variable is never used
246
247        en = (DecimalFormatSymbols) fr.clone();
248
249        if(! en.equals(fr)) {
250            errln("ERROR: Clone failed");
251        }
252    }
253
254    @Test
255    public void testCoverage() {
256        DecimalFormatSymbols df = new DecimalFormatSymbols();
257        DecimalFormatSymbols df2 = (DecimalFormatSymbols)df.clone();
258        if (!df.equals(df2) || df.hashCode() != df2.hashCode()) {
259            errln("decimal format symbols clone, equals, or hashCode failed");
260        }
261    }
262
263    @Test
264    public void testDigitSymbols() {
265        final char defZero = '0';
266        final char[] defDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
267        final String[] defDigitStrings = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
268        final String[] osmanyaDigitStrings = {
269            "\uD801\uDCA0", "\uD801\uDCA1", "\uD801\uDCA2", "\uD801\uDCA3", "\uD801\uDCA4",
270            "\uD801\uDCA5", "\uD801\uDCA6", "\uD801\uDCA7", "\uD801\uDCA8", "\uD801\uDCA9"
271        };
272
273        DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.ENGLISH);
274
275        symbols.setDigitStrings(osmanyaDigitStrings);
276        if (!Arrays.equals(symbols.getDigitStrings(), osmanyaDigitStrings)) {
277            errln("ERROR: Osmanya digits (supplementary) should be set");
278        }
279        if (defZero != symbols.getZeroDigit()) {
280            errln("ERROR: Zero digit should be 0");
281        }
282        if (!Arrays.equals(symbols.getDigits(), defDigits)) {
283            errln("ERROR: Char digits should be Latin digits");
284        }
285
286        // Reset digits to Latin
287        symbols.setZeroDigit(defZero);
288        if (!Arrays.equals(symbols.getDigitStrings(), defDigitStrings)) {
289            errln("ERROR: Latin digits should be set" + symbols.getDigitStrings()[0]);
290        }
291    }
292}
293