OLD | NEW |
(Empty) | |
| 1 /******************************************************************** |
| 2 * COPYRIGHT: |
| 3 * Copyright (c) 1997-2010, International Business Machines Corporation and |
| 4 * others. All Rights Reserved. |
| 5 ********************************************************************/ |
| 6 |
| 7 #include "unicode/utypes.h" |
| 8 |
| 9 #if !UCONFIG_NO_FORMATTING |
| 10 |
| 11 #include "unicode/dcfmtsym.h" |
| 12 #include "unicode/decimfmt.h" |
| 13 #include "unicode/unum.h" |
| 14 #include "tsdcfmsy.h" |
| 15 |
| 16 void IntlTestDecimalFormatSymbols::runIndexedTest( int32_t index, UBool exec, co
nst char* &name, char* /*par*/ ) |
| 17 { |
| 18 if (exec) logln("TestSuite DecimalFormatSymbols"); |
| 19 switch (index) { |
| 20 case 0: name = "DecimalFormatSymbols test"; |
| 21 if (exec) { |
| 22 logln("DecimalFormatSymbols test---"); logln(""); |
| 23 testSymbols(/*par*/); |
| 24 } |
| 25 break; |
| 26 |
| 27 default: name = ""; break; |
| 28 } |
| 29 } |
| 30 |
| 31 /** |
| 32 * Test the API of DecimalFormatSymbols; primarily a simple get/set set. |
| 33 */ |
| 34 void IntlTestDecimalFormatSymbols::testSymbols(/* char *par */) |
| 35 { |
| 36 UErrorCode status = U_ZERO_ERROR; |
| 37 |
| 38 DecimalFormatSymbols fr(Locale::getFrench(), status); |
| 39 if(U_FAILURE(status)) { |
| 40 errcheckln(status, "ERROR: Couldn't create French DecimalFormatSymbols -
%s", u_errorName(status)); |
| 41 return; |
| 42 } |
| 43 |
| 44 status = U_ZERO_ERROR; |
| 45 DecimalFormatSymbols en(Locale::getEnglish(), status); |
| 46 if(U_FAILURE(status)) { |
| 47 errcheckln(status, "ERROR: Couldn't create English DecimalFormatSymbols
- %s", u_errorName(status)); |
| 48 return; |
| 49 } |
| 50 |
| 51 if(en == fr || ! (en != fr) ) { |
| 52 errln("ERROR: English DecimalFormatSymbols equal to French"); |
| 53 } |
| 54 |
| 55 // just do some VERY basic tests to make sure that get/set work |
| 56 |
| 57 UnicodeString zero = en.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol); |
| 58 fr.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero); |
| 59 if(fr.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol) != en.getSymbol(Deci
malFormatSymbols::kZeroDigitSymbol)) { |
| 60 errln("ERROR: get/set ZeroDigit failed"); |
| 61 } |
| 62 |
| 63 UnicodeString group = en.getSymbol(DecimalFormatSymbols::kGroupingSeparatorS
ymbol); |
| 64 fr.setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, group); |
| 65 if(fr.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol) != en.getSym
bol(DecimalFormatSymbols::kGroupingSeparatorSymbol)) { |
| 66 errln("ERROR: get/set GroupingSeparator failed"); |
| 67 } |
| 68 |
| 69 UnicodeString decimal = en.getSymbol(DecimalFormatSymbols::kDecimalSeparator
Symbol); |
| 70 fr.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, decimal); |
| 71 if(fr.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol) != en.getSymb
ol(DecimalFormatSymbols::kDecimalSeparatorSymbol)) { |
| 72 errln("ERROR: get/set DecimalSeparator failed"); |
| 73 } |
| 74 |
| 75 UnicodeString perMill = en.getSymbol(DecimalFormatSymbols::kPerMillSymbol); |
| 76 fr.setSymbol(DecimalFormatSymbols::kPerMillSymbol, perMill); |
| 77 if(fr.getSymbol(DecimalFormatSymbols::kPerMillSymbol) != en.getSymbol(Decima
lFormatSymbols::kPerMillSymbol)) { |
| 78 errln("ERROR: get/set PerMill failed"); |
| 79 } |
| 80 |
| 81 UnicodeString percent = en.getSymbol(DecimalFormatSymbols::kPercentSymbol); |
| 82 fr.setSymbol(DecimalFormatSymbols::kPercentSymbol, percent); |
| 83 if(fr.getSymbol(DecimalFormatSymbols::kPercentSymbol) != en.getSymbol(Decima
lFormatSymbols::kPercentSymbol)) { |
| 84 errln("ERROR: get/set Percent failed"); |
| 85 } |
| 86 |
| 87 UnicodeString digit(en.getSymbol(DecimalFormatSymbols::kDigitSymbol)); |
| 88 fr.setSymbol(DecimalFormatSymbols::kDigitSymbol, digit); |
| 89 if(fr.getSymbol(DecimalFormatSymbols::kDigitSymbol) != en.getSymbol(DecimalF
ormatSymbols::kDigitSymbol)) { |
| 90 errln("ERROR: get/set Percent failed"); |
| 91 } |
| 92 |
| 93 UnicodeString patternSeparator = en.getSymbol(DecimalFormatSymbols::kPattern
SeparatorSymbol); |
| 94 fr.setSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol, patternSeparator
); |
| 95 if(fr.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol) != en.getSymb
ol(DecimalFormatSymbols::kPatternSeparatorSymbol)) { |
| 96 errln("ERROR: get/set PatternSeparator failed"); |
| 97 } |
| 98 |
| 99 UnicodeString infinity(en.getSymbol(DecimalFormatSymbols::kInfinitySymbol)); |
| 100 fr.setSymbol(DecimalFormatSymbols::kInfinitySymbol, infinity); |
| 101 UnicodeString infinity2(fr.getSymbol(DecimalFormatSymbols::kInfinitySymbol))
; |
| 102 if(infinity != infinity2) { |
| 103 errln("ERROR: get/set Infinity failed"); |
| 104 } |
| 105 |
| 106 UnicodeString nan(en.getSymbol(DecimalFormatSymbols::kNaNSymbol)); |
| 107 fr.setSymbol(DecimalFormatSymbols::kNaNSymbol, nan); |
| 108 UnicodeString nan2(fr.getSymbol(DecimalFormatSymbols::kNaNSymbol)); |
| 109 if(nan != nan2) { |
| 110 errln("ERROR: get/set NaN failed"); |
| 111 } |
| 112 |
| 113 UnicodeString minusSign = en.getSymbol(DecimalFormatSymbols::kMinusSignSymbo
l); |
| 114 fr.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, minusSign); |
| 115 if(fr.getSymbol(DecimalFormatSymbols::kMinusSignSymbol) != en.getSymbol(Deci
malFormatSymbols::kMinusSignSymbol)) { |
| 116 errln("ERROR: get/set MinusSign failed"); |
| 117 } |
| 118 |
| 119 UnicodeString exponential(en.getSymbol(DecimalFormatSymbols::kExponentialSym
bol)); |
| 120 fr.setSymbol(DecimalFormatSymbols::kExponentialSymbol, exponential); |
| 121 if(fr.getSymbol(DecimalFormatSymbols::kExponentialSymbol) != en.getSymbol(De
cimalFormatSymbols::kExponentialSymbol)) { |
| 122 errln("ERROR: get/set Exponential failed"); |
| 123 } |
| 124 |
| 125 // Test get currency spacing before the currency. |
| 126 status = U_ZERO_ERROR; |
| 127 for (int32_t i = 0; i < (int32_t)DecimalFormatSymbols::kCurrencySpacingCount
; i++) { |
| 128 UnicodeString enCurrencyPattern = en.getPatternForCurrencySpacing( |
| 129 (DecimalFormatSymbols::ECurrencySpacing)i, TRUE, status); |
| 130 if(U_FAILURE(status)) { |
| 131 errln("Error: cannot get CurrencyMatch for locale:en"); |
| 132 status = U_ZERO_ERROR; |
| 133 } |
| 134 UnicodeString frCurrencyPattern = fr.getPatternForCurrencySpacing( |
| 135 (DecimalFormatSymbols::ECurrencySpacing)i, TRUE, status); |
| 136 if(U_FAILURE(status)) { |
| 137 errln("Error: cannot get CurrencyMatch for locale:fr"); |
| 138 } |
| 139 if (enCurrencyPattern != frCurrencyPattern) { |
| 140 errln("ERROR: get CurrencySpacing failed"); |
| 141 } |
| 142 } |
| 143 // Test get currencySpacing after the currency. |
| 144 status = U_ZERO_ERROR; |
| 145 for (int32_t i = 0; i < DecimalFormatSymbols::kCurrencySpacingCount; i++) { |
| 146 UnicodeString enCurrencyPattern = en.getPatternForCurrencySpacing( |
| 147 (DecimalFormatSymbols::ECurrencySpacing)i, FALSE, status); |
| 148 if(U_FAILURE(status)) { |
| 149 errln("Error: cannot get CurrencyMatch for locale:en"); |
| 150 status = U_ZERO_ERROR; |
| 151 } |
| 152 UnicodeString frCurrencyPattern = fr.getPatternForCurrencySpacing( |
| 153 (DecimalFormatSymbols::ECurrencySpacing)i, FALSE, status); |
| 154 if(U_FAILURE(status)) { |
| 155 errln("Error: cannot get CurrencyMatch for locale:fr"); |
| 156 } |
| 157 if (enCurrencyPattern != frCurrencyPattern) { |
| 158 errln("ERROR: get CurrencySpacing failed"); |
| 159 } |
| 160 } |
| 161 // Test set curerncySpacing APIs |
| 162 status = U_ZERO_ERROR; |
| 163 UnicodeString dash = UnicodeString("-"); |
| 164 en.setPatternForCurrencySpacing(DecimalFormatSymbols::kInsert, TRUE, dash); |
| 165 UnicodeString enCurrencyInsert = en.getPatternForCurrencySpacing( |
| 166 DecimalFormatSymbols::kInsert, TRUE, status); |
| 167 if (dash != enCurrencyInsert) { |
| 168 errln("Error: Failed to setCurrencyInsert for locale:en"); |
| 169 } |
| 170 |
| 171 status = U_ZERO_ERROR; |
| 172 DecimalFormatSymbols foo(status); |
| 173 |
| 174 DecimalFormatSymbols bar(foo); |
| 175 |
| 176 en = fr; |
| 177 |
| 178 if(en != fr || foo != bar) { |
| 179 errln("ERROR: Copy Constructor or Assignment failed"); |
| 180 } |
| 181 |
| 182 // test get/setSymbol() |
| 183 if((int) UNUM_FORMAT_SYMBOL_COUNT != (int) DecimalFormatSymbols::kFormatSymb
olCount) { |
| 184 errln("unum.h and decimfmt.h have inconsistent numbers of format symbols
!"); |
| 185 return; |
| 186 } |
| 187 |
| 188 int i; |
| 189 for(i = 0; i < (int)DecimalFormatSymbols::kFormatSymbolCount; ++i) { |
| 190 foo.setSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i, UnicodeStrin
g((UChar32)(0x10330 + i))); |
| 191 } |
| 192 for(i = 0; i < (int)DecimalFormatSymbols::kFormatSymbolCount; ++i) { |
| 193 if(foo.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i) != Unicod
eString((UChar32)(0x10330 + i))) { |
| 194 errln("get/setSymbol did not roundtrip, got " + |
| 195 foo.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i) + |
| 196 ", expected " + |
| 197 UnicodeString((UChar32)(0x10330 + i))); |
| 198 } |
| 199 } |
| 200 |
| 201 DecimalFormatSymbols sym(Locale::getUS(), status); |
| 202 |
| 203 UnicodeString customDecSeperator("S"); |
| 204 Verify(34.5, (UnicodeString)"00.00", sym, (UnicodeString)"34.50"); |
| 205 sym.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, customDecSepera
tor); |
| 206 Verify(34.5, (UnicodeString)"00.00", sym, (UnicodeString)"34S50"); |
| 207 sym.setSymbol(DecimalFormatSymbols::kPercentSymbol, (UnicodeString)"P"); |
| 208 Verify(34.5, (UnicodeString)"00 %", sym, (UnicodeString)"3450 P"); |
| 209 sym.setSymbol(DecimalFormatSymbols::kCurrencySymbol, (UnicodeString)"D"); |
| 210 Verify(34.5, CharsToUnicodeString("\\u00a4##.##"), sym, (UnicodeString)"D34.
5"); |
| 211 sym.setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, (UnicodeString
)"|"); |
| 212 Verify(3456.5, (UnicodeString)"0,000.##", sym, (UnicodeString)"3|456S5"); |
| 213 |
| 214 } |
| 215 |
| 216 void IntlTestDecimalFormatSymbols::Verify(double value, const UnicodeString& pat
tern, DecimalFormatSymbols sym, const UnicodeString& expected){ |
| 217 UErrorCode status = U_ZERO_ERROR; |
| 218 DecimalFormat *df = new DecimalFormat(pattern, sym, status); |
| 219 if(U_FAILURE(status)){ |
| 220 errln("ERROR: construction of decimal format failed"); |
| 221 } |
| 222 UnicodeString buffer; |
| 223 FieldPosition pos(FieldPosition::DONT_CARE); |
| 224 buffer = df->format(value, buffer, pos); |
| 225 if(buffer != expected){ |
| 226 errln((UnicodeString)"ERROR: format failed after setSymbols()\n Expected
" + |
| 227 expected + ", Got " + buffer); |
| 228 } |
| 229 delete df; |
| 230 } |
| 231 |
| 232 #endif /* #if !UCONFIG_NO_FORMATTING */ |
OLD | NEW |