OLD | NEW |
1 /* | 1 /* |
2 ******************************************************************************* | 2 ******************************************************************************* |
3 * Copyright (C) 2014, International Business Machines Corporation and * | 3 * Copyright (C) 2014-2015, International Business Machines Corporation and
* |
4 * others. All Rights Reserved. * | 4 * others. All Rights Reserved. * |
5 ******************************************************************************* | 5 ******************************************************************************* |
6 * | 6 * |
7 * File numfmtspectest.cpp | 7 * File numfmtspectest.cpp |
8 * | 8 * |
9 ******************************************************************************* | 9 ******************************************************************************* |
10 */ | 10 */ |
11 #include <stdio.h> | 11 #include <stdio.h> |
12 #include <stdlib.h> | 12 #include <stdlib.h> |
13 | 13 |
(...skipping 15 matching lines...) Expand all Loading... |
29 } | 29 } |
30 } | 30 } |
31 } | 31 } |
32 | 32 |
33 static NumberFormat *nfWithPattern(const char *pattern) { | 33 static NumberFormat *nfWithPattern(const char *pattern) { |
34 UnicodeString upattern(pattern, -1, US_INV); | 34 UnicodeString upattern(pattern, -1, US_INV); |
35 upattern = upattern.unescape(); | 35 upattern = upattern.unescape(); |
36 UErrorCode status = U_ZERO_ERROR; | 36 UErrorCode status = U_ZERO_ERROR; |
37 DecimalFormat *result = new DecimalFormat( | 37 DecimalFormat *result = new DecimalFormat( |
38 upattern, new DecimalFormatSymbols("fr", status), status); | 38 upattern, new DecimalFormatSymbols("fr", status), status); |
39 U_ASSERT(status == U_ZERO_ERROR); | 39 if (U_FAILURE(status)) { |
| 40 return NULL; |
| 41 } |
| 42 |
40 return result; | 43 return result; |
41 } | 44 } |
42 | 45 |
43 static UnicodeString format(double d, const NumberFormat &fmt) { | 46 static UnicodeString format(double d, const NumberFormat &fmt) { |
44 UnicodeString result; | 47 UnicodeString result; |
45 fmt.format(d, result); | 48 fmt.format(d, result); |
46 fixNonBreakingSpace(result); | 49 fixNonBreakingSpace(result); |
47 return result; | 50 return result; |
48 } | 51 } |
49 | 52 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 assertPatternFr("1235", 1234.567, "0", TRUE); | 92 assertPatternFr("1235", 1234.567, "0", TRUE); |
90 assertPatternFr("1 234,567", 1234.567, "#,##0.###", TRUE); | 93 assertPatternFr("1 234,567", 1234.567, "#,##0.###", TRUE); |
91 assertPatternFr("1234,567", 1234.567, "###0.#####", TRUE); | 94 assertPatternFr("1234,567", 1234.567, "###0.#####", TRUE); |
92 assertPatternFr("1234,5670", 1234.567, "###0.0000#", TRUE); | 95 assertPatternFr("1234,5670", 1234.567, "###0.0000#", TRUE); |
93 assertPatternFr("01234,5670", 1234.567, "00000.0000", TRUE); | 96 assertPatternFr("01234,5670", 1234.567, "00000.0000", TRUE); |
94 assertPatternFr("1 234,57 \\u20ac", 1234.567, "#,##0.00 \\u00a4", TRUE); | 97 assertPatternFr("1 234,57 \\u20ac", 1234.567, "#,##0.00 \\u00a4", TRUE); |
95 } | 98 } |
96 | 99 |
97 void NumberFormatSpecificationTest::TestNfSetters() { | 100 void NumberFormatSpecificationTest::TestNfSetters() { |
98 LocalPointer<NumberFormat> nf(nfWithPattern("#,##0.##")); | 101 LocalPointer<NumberFormat> nf(nfWithPattern("#,##0.##")); |
| 102 if (nf == NULL) { |
| 103 dataerrln("Error creating NumberFormat"); |
| 104 return; |
| 105 } |
99 nf->setMaximumIntegerDigits(5); | 106 nf->setMaximumIntegerDigits(5); |
100 nf->setMinimumIntegerDigits(4); | 107 nf->setMinimumIntegerDigits(4); |
101 assertEquals("", "34 567,89", format(1234567.89, *nf), TRUE); | 108 assertEquals("", "34 567,89", format(1234567.89, *nf), TRUE); |
102 assertEquals("", "0 034,56", format(34.56, *nf), TRUE); | 109 assertEquals("", "0 034,56", format(34.56, *nf), TRUE); |
103 } | 110 } |
104 | 111 |
105 void NumberFormatSpecificationTest::TestRounding() { | 112 void NumberFormatSpecificationTest::TestRounding() { |
106 assertPatternFr("1,0", 1.25, "0.5", TRUE); | 113 assertPatternFr("1,0", 1.25, "0.5", TRUE); |
107 assertPatternFr("2,0", 1.75, "0.5", TRUE); | 114 assertPatternFr("2,0", 1.75, "0.5", TRUE); |
108 assertPatternFr("-1,0", -1.25, "0.5", TRUE); | 115 assertPatternFr("-1,0", -1.25, "0.5", TRUE); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 assertPatternFr("EUR *433,00", 433.0, "\\u00a4\\u00a4 **####0.00"); | 187 assertPatternFr("EUR *433,00", 433.0, "\\u00a4\\u00a4 **####0.00"); |
181 assertPatternFr("EUR *433,00", 433.0, "\\u00a4\\u00a4 **#######0"); | 188 assertPatternFr("EUR *433,00", 433.0, "\\u00a4\\u00a4 **#######0"); |
182 } | 189 } |
183 { | 190 { |
184 UnicodeString upattern("\\u00a4\\u00a4 **#######0", -1, US_INV); | 191 UnicodeString upattern("\\u00a4\\u00a4 **#######0", -1, US_INV); |
185 upattern = upattern.unescape(); | 192 upattern = upattern.unescape(); |
186 UErrorCode status = U_ZERO_ERROR; | 193 UErrorCode status = U_ZERO_ERROR; |
187 UnicodeString result; | 194 UnicodeString result; |
188 DecimalFormat fmt( | 195 DecimalFormat fmt( |
189 upattern, new DecimalFormatSymbols("fr", status), status); | 196 upattern, new DecimalFormatSymbols("fr", status), status); |
190 fmt.setCurrency(kJPY); | 197 if (U_FAILURE(status)) { |
191 fmt.format(433.22, result); | 198 dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); |
192 assertSuccess("", status); | 199 } else { |
193 assertEquals("", "JPY ****433", result, TRUE); | 200 fmt.setCurrency(kJPY); |
| 201 fmt.format(433.22, result); |
| 202 assertSuccess("", status); |
| 203 assertEquals("", "JPY ****433", result, TRUE); |
| 204 } |
194 } | 205 } |
195 { | 206 { |
196 UnicodeString upattern( | 207 UnicodeString upattern( |
197 "\\u00a4\\u00a4 **#######0;\\u00a4\\u00a4 (#)", -1, US_INV); | 208 "\\u00a4\\u00a4 **#######0;\\u00a4\\u00a4 (#)", -1, US_INV); |
198 upattern = upattern.unescape(); | 209 upattern = upattern.unescape(); |
199 UErrorCode status = U_ZERO_ERROR; | 210 UErrorCode status = U_ZERO_ERROR; |
200 UnicodeString result; | 211 UnicodeString result; |
201 DecimalFormat fmt( | 212 DecimalFormat fmt( |
202 upattern, | 213 upattern, |
203 new DecimalFormatSymbols("en_US", status), | 214 new DecimalFormatSymbols("en_US", status), |
204 status); | 215 status); |
205 fmt.format(-433.22, result); | 216 if (U_FAILURE(status)) { |
206 assertSuccess("", status); | 217 dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); |
207 assertEquals("", "USD (433.22)", result, TRUE); | 218 } else { |
| 219 fmt.format(-433.22, result); |
| 220 assertSuccess("", status); |
| 221 assertEquals("", "USD (433.22)", result, TRUE); |
| 222 } |
208 } | 223 } |
209 const char *paddedSciPattern = "QU**00.#####E0"; | 224 const char *paddedSciPattern = "QU**00.#####E0"; |
210 assertPatternFr("QU***43,3E-1", 4.33, paddedSciPattern, TRUE); | 225 assertPatternFr("QU***43,3E-1", 4.33, paddedSciPattern, TRUE); |
211 { | 226 { |
212 UErrorCode status = U_ZERO_ERROR; | 227 UErrorCode status = U_ZERO_ERROR; |
213 DecimalFormatSymbols *sym = new DecimalFormatSymbols("fr", status); | 228 DecimalFormatSymbols *sym = new DecimalFormatSymbols("fr", status); |
214 sym->setSymbol(DecimalFormatSymbols::kExponentialSymbol, "EE"); | 229 sym->setSymbol(DecimalFormatSymbols::kExponentialSymbol, "EE"); |
215 DecimalFormat fmt( | 230 DecimalFormat fmt( |
216 paddedSciPattern, | 231 paddedSciPattern, |
217 sym, | 232 sym, |
218 status); | 233 status); |
219 UnicodeString result; | 234 if (U_FAILURE(status)) { |
220 fmt.format(4.33, result); | 235 dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); |
221 assertSuccess("", status); | 236 } else { |
222 assertEquals("", "QU**43,3EE-1", result, TRUE); | 237 UnicodeString result; |
| 238 fmt.format(4.33, result); |
| 239 assertSuccess("", status); |
| 240 assertEquals("", "QU**43,3EE-1", result, TRUE); |
| 241 } |
223 } | 242 } |
224 // padding cannot work as intended with scientific notation. | 243 // padding cannot work as intended with scientific notation. |
225 assertPatternFr("QU**43,32E-1", 4.332, paddedSciPattern, TRUE); | 244 assertPatternFr("QU**43,32E-1", 4.332, paddedSciPattern, TRUE); |
226 } | 245 } |
227 | 246 |
228 void NumberFormatSpecificationTest::assertPatternFr( | 247 void NumberFormatSpecificationTest::assertPatternFr( |
229 const char *expected, | 248 const char *expected, |
230 double x, | 249 double x, |
231 const char *pattern, | 250 const char *pattern, |
232 UBool possibleDataError) { | 251 UBool possibleDataError) { |
233 UnicodeString upattern(pattern, -1, US_INV); | 252 UnicodeString upattern(pattern, -1, US_INV); |
234 UnicodeString uexpected(expected, -1, US_INV); | 253 UnicodeString uexpected(expected, -1, US_INV); |
235 upattern = upattern.unescape(); | 254 upattern = upattern.unescape(); |
236 uexpected = uexpected.unescape(); | 255 uexpected = uexpected.unescape(); |
237 UErrorCode status = U_ZERO_ERROR; | 256 UErrorCode status = U_ZERO_ERROR; |
238 UnicodeString result; | 257 UnicodeString result; |
239 DecimalFormat fmt( | 258 DecimalFormat fmt( |
240 upattern, new DecimalFormatSymbols("fr_FR", status), status); | 259 upattern, new DecimalFormatSymbols("fr_FR", status), status); |
| 260 if (U_FAILURE(status)) { |
| 261 dataerrln("Error creating DecimalFormatSymbols - %s", u_errorName(status
)); |
| 262 return; |
| 263 } |
241 fmt.format(x, result); | 264 fmt.format(x, result); |
242 fixNonBreakingSpace(result); | 265 fixNonBreakingSpace(result); |
243 assertSuccess("", status); | 266 assertSuccess("", status); |
244 assertEquals("", uexpected, result, possibleDataError); | 267 assertEquals("", uexpected, result, possibleDataError); |
245 } | 268 } |
246 | 269 |
247 extern IntlTest *createNumberFormatSpecificationTest() { | 270 extern IntlTest *createNumberFormatSpecificationTest() { |
248 return new NumberFormatSpecificationTest(); | 271 return new NumberFormatSpecificationTest(); |
249 } | 272 } |
250 | 273 |
251 #endif | 274 #endif |
OLD | NEW |