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