| OLD | NEW |
| (Empty) |
| 1 /************************************************************************ | |
| 2 * COPYRIGHT: | |
| 3 * Copyright (c) 1997-2015, International Business Machines Corporation | |
| 4 * and others. All Rights Reserved. | |
| 5 ************************************************************************/ | |
| 6 | |
| 7 #ifndef _NUMBERFORMATTEST_ | |
| 8 #define _NUMBERFORMATTEST_ | |
| 9 | |
| 10 #include "unicode/utypes.h" | |
| 11 | |
| 12 #if !UCONFIG_NO_FORMATTING | |
| 13 | |
| 14 #include "unicode/numfmt.h" | |
| 15 #include "unicode/decimfmt.h" | |
| 16 #include "caltztst.h" | |
| 17 | |
| 18 /** | |
| 19 * Expected field positions from field position iterator. Tests should | |
| 20 * stack allocate an array of these making sure that the last element is | |
| 21 * {0, -1, 0} (The sentinel element indicating end of iterator). Then test | |
| 22 * should call verifyFieldPositionIterator() passing both this array of | |
| 23 * expected results and the field position iterator from the format method. | |
| 24 */ | |
| 25 struct NumberFormatTest_Attributes { | |
| 26 int32_t id; | |
| 27 int32_t spos; | |
| 28 int32_t epos; | |
| 29 }; | |
| 30 | |
| 31 /** | |
| 32 * Performs various in-depth test on NumberFormat | |
| 33 **/ | |
| 34 class NumberFormatTest: public CalendarTimeZoneTest { | |
| 35 | |
| 36 // IntlTest override | |
| 37 void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par
); | |
| 38 public: | |
| 39 | |
| 40 /** | |
| 41 * Test APIs (to increase code coverage) | |
| 42 */ | |
| 43 void TestAPI(void); | |
| 44 | |
| 45 void TestCoverage(void); | |
| 46 | |
| 47 /** | |
| 48 * Test the handling of quotes | |
| 49 **/ | |
| 50 void TestQuotes(void); | |
| 51 /** | |
| 52 * Test patterns with exponential representation | |
| 53 **/ | |
| 54 void TestExponential(void); | |
| 55 /** | |
| 56 * Test handling of patterns with currency symbols | |
| 57 **/ | |
| 58 void TestCurrencySign(void); | |
| 59 /** | |
| 60 * Test different format patterns | |
| 61 **/ | |
| 62 void TestPatterns(void); | |
| 63 /** | |
| 64 * API coverage for DigitList | |
| 65 **/ | |
| 66 //void TestDigitList(void); | |
| 67 | |
| 68 /** | |
| 69 * Test localized currency patterns. | |
| 70 */ | |
| 71 void TestCurrency(void); | |
| 72 | |
| 73 /** | |
| 74 * Test the Currency object handling, new as of ICU 2.2. | |
| 75 */ | |
| 76 void TestCurrencyObject(void); | |
| 77 | |
| 78 void TestCurrencyPatterns(void); | |
| 79 | |
| 80 /** | |
| 81 * Do rudimentary testing of parsing. | |
| 82 */ | |
| 83 void TestParse(void); | |
| 84 /** | |
| 85 * Test proper rounding by the format method. | |
| 86 */ | |
| 87 void TestRounding487(void); | |
| 88 | |
| 89 // New tests for alphaWorks upgrade | |
| 90 void TestExponent(void); | |
| 91 | |
| 92 void TestScientific(void); | |
| 93 | |
| 94 void TestScientific2(void); | |
| 95 | |
| 96 void TestScientificGrouping(void); | |
| 97 | |
| 98 void TestInt64(void); | |
| 99 | |
| 100 void TestSurrogateSupport(void); | |
| 101 | |
| 102 /** | |
| 103 * Test the functioning of the secondary grouping value. | |
| 104 */ | |
| 105 void TestSecondaryGrouping(void); | |
| 106 | |
| 107 void TestWhiteSpaceParsing(void); | |
| 108 | |
| 109 void TestComplexCurrency(void); | |
| 110 | |
| 111 void TestPad(void); | |
| 112 void TestPatterns2(void); | |
| 113 | |
| 114 /** | |
| 115 * Test currency registration. | |
| 116 */ | |
| 117 void TestRegCurrency(void); | |
| 118 | |
| 119 void TestCurrencyNames(void); | |
| 120 | |
| 121 void TestCurrencyAmount(void); | |
| 122 | |
| 123 void TestCurrencyUnit(void); | |
| 124 | |
| 125 void TestSymbolsWithBadLocale(void); | |
| 126 | |
| 127 void TestAdoptDecimalFormatSymbols(void); | |
| 128 | |
| 129 void TestPerMill(void); | |
| 130 | |
| 131 void TestIllegalPatterns(void); | |
| 132 | |
| 133 void TestCases(void); | |
| 134 | |
| 135 void TestJB3832(void); | |
| 136 | |
| 137 void TestHost(void); | |
| 138 | |
| 139 void TestHostClone(void); | |
| 140 | |
| 141 void TestCurrencyFormat(void); | |
| 142 | |
| 143 /* Port of ICU4J rounding test. */ | |
| 144 void TestRounding(void); | |
| 145 | |
| 146 void TestRoundingPattern(void); | |
| 147 | |
| 148 void TestNonpositiveMultiplier(void); | |
| 149 | |
| 150 void TestNumberingSystems(); | |
| 151 | |
| 152 | |
| 153 void TestSpaceParsing(); | |
| 154 void TestMultiCurrencySign(); | |
| 155 void TestCurrencyFormatForMixParsing(); | |
| 156 void TestDecimalFormatCurrencyParse(); | |
| 157 void TestCurrencyIsoPluralFormat(); | |
| 158 void TestCurrencyParsing(); | |
| 159 void TestParseCurrencyInUCurr(); | |
| 160 void TestFormatAttributes(); | |
| 161 void TestFieldPositionIterator(); | |
| 162 | |
| 163 void TestLenientParse(); | |
| 164 | |
| 165 void TestDecimal(); | |
| 166 void TestCurrencyFractionDigits(); | |
| 167 | |
| 168 void TestExponentParse(); | |
| 169 void TestExplicitParents(); | |
| 170 void TestAvailableNumberingSystems(); | |
| 171 void Test9087(); | |
| 172 void TestFormatFastpaths(); | |
| 173 | |
| 174 void TestFormattableSize(); | |
| 175 | |
| 176 void TestUFormattable(); | |
| 177 | |
| 178 void TestEnumSet(); | |
| 179 | |
| 180 void TestSignificantDigits(); | |
| 181 void TestShowZero(); | |
| 182 | |
| 183 void TestCompatibleCurrencies(); | |
| 184 void TestBug9936(); | |
| 185 void TestParseNegativeWithFaLocale(); | |
| 186 void TestParseNegativeWithAlternateMinusSign(); | |
| 187 | |
| 188 void TestCustomCurrencySignAndSeparator(); | |
| 189 | |
| 190 void TestParseSignsAndMarks(); | |
| 191 void Test10419RoundingWith0FractionDigits(); | |
| 192 void Test10468ApplyPattern(); | |
| 193 void TestRoundingScientific10542(); | |
| 194 void TestZeroScientific10547(); | |
| 195 void TestAccountingCurrency(); | |
| 196 void TestEquality(); | |
| 197 | |
| 198 void TestCurrencyUsage(); | |
| 199 void TestNumberFormatTestTuple(); | |
| 200 void TestDataDriven(); | |
| 201 | |
| 202 void TestDoubleLimit11439(); | |
| 203 void TestFastPathConsistent11524(); | |
| 204 void TestGetAffixes(); | |
| 205 void TestToPatternScientific11648(); | |
| 206 void TestBenchmark(); | |
| 207 void TestCtorApplyPatternDifference(); | |
| 208 void TestFractionalDigitsForCurrency(); | |
| 209 void TestFormatCurrencyPlural(); | |
| 210 void Test11868(); | |
| 211 void Test10727_RoundingZero(); | |
| 212 void Test11376_getAndSetPositivePrefix(); | |
| 213 void Test11475_signRecognition(); | |
| 214 void Test11640_getAffixes(); | |
| 215 void Test11649_toPatternWithMultiCurrency(); | |
| 216 | |
| 217 private: | |
| 218 UBool testFormattableAsUFormattable(const char *file, int line, Formattable
&f); | |
| 219 | |
| 220 void expectParseCurrency(const NumberFormat &fmt, const UChar* currency, dou
ble amount, const char *text); | |
| 221 | |
| 222 static UBool equalValue(const Formattable& a, const Formattable& b); | |
| 223 | |
| 224 void expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t t
upleCount, | |
| 225 const UnicodeString& str); | |
| 226 | |
| 227 void expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t l
imit, | |
| 228 const UnicodeString& str); | |
| 229 | |
| 230 void expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& s
tr); | |
| 231 | |
| 232 void expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& s
tr); | |
| 233 | |
| 234 void expect2(NumberFormat& fmt, const Formattable& n, const char* str) { | |
| 235 expect2(fmt, n, UnicodeString(str, "")); | |
| 236 } | |
| 237 | |
| 238 void expect2(NumberFormat* fmt, const Formattable& n, const UnicodeString& s
tr, UErrorCode ec); | |
| 239 | |
| 240 void expect2(NumberFormat* fmt, const Formattable& n, const char* str, UErro
rCode ec) { | |
| 241 expect2(fmt, n, UnicodeString(str, ""), ec); | |
| 242 } | |
| 243 | |
| 244 void expect(NumberFormat& fmt, const UnicodeString& str, const Formattable&
n); | |
| 245 | |
| 246 void expect(NumberFormat& fmt, const char *str, const Formattable& n) { | |
| 247 expect(fmt, UnicodeString(str, ""), n); | |
| 248 } | |
| 249 | |
| 250 void expect(NumberFormat& fmt, const Formattable& n, | |
| 251 const UnicodeString& exp, UBool rt=TRUE); | |
| 252 | |
| 253 void expect(NumberFormat& fmt, const Formattable& n, | |
| 254 const char *exp, UBool rt=TRUE) { | |
| 255 expect(fmt, n, UnicodeString(exp, ""), rt); | |
| 256 } | |
| 257 | |
| 258 void expect(NumberFormat* fmt, const Formattable& n, | |
| 259 const UnicodeString& exp, UBool rt, UErrorCode errorCode); | |
| 260 | |
| 261 void expect(NumberFormat* fmt, const Formattable& n, | |
| 262 const char *exp, UBool rt, UErrorCode errorCode) { | |
| 263 expect(fmt, n, UnicodeString(exp, ""), rt, errorCode); | |
| 264 } | |
| 265 | |
| 266 void expect(NumberFormat* fmt, const Formattable& n, | |
| 267 const UnicodeString& exp, UErrorCode errorCode) { | |
| 268 expect(fmt, n, exp, TRUE, errorCode); | |
| 269 } | |
| 270 | |
| 271 void expect(NumberFormat* fmt, const Formattable& n, | |
| 272 const char *exp, UErrorCode errorCode) { | |
| 273 expect(fmt, n, UnicodeString(exp, ""), TRUE, errorCode); | |
| 274 } | |
| 275 | |
| 276 void expectCurrency(NumberFormat& nf, const Locale& locale, | |
| 277 double value, const UnicodeString& string); | |
| 278 | |
| 279 void expectPad(DecimalFormat& fmt, const UnicodeString& pat, | |
| 280 int32_t pos, int32_t width, UChar pad); | |
| 281 | |
| 282 void expectPad(DecimalFormat& fmt, const char *pat, | |
| 283 int32_t pos, int32_t width, UChar pad) { | |
| 284 expectPad(fmt, UnicodeString(pat, ""), pos, width, pad); | |
| 285 } | |
| 286 | |
| 287 void expectPad(DecimalFormat& fmt, const UnicodeString& pat, | |
| 288 int32_t pos, int32_t width, const UnicodeString& pad); | |
| 289 | |
| 290 void expectPad(DecimalFormat& fmt, const char *pat, | |
| 291 int32_t pos, int32_t width, const UnicodeString& pad) { | |
| 292 expectPad(fmt, UnicodeString(pat, ""), pos, width, pad); | |
| 293 } | |
| 294 | |
| 295 void expectPat(DecimalFormat& fmt, const UnicodeString& exp); | |
| 296 | |
| 297 void expectPat(DecimalFormat& fmt, const char *exp) { | |
| 298 expectPat(fmt, UnicodeString(exp, "")); | |
| 299 } | |
| 300 | |
| 301 void expectPad(DecimalFormat& fmt, const UnicodeString& pat, | |
| 302 int32_t pos); | |
| 303 | |
| 304 void expectPad(DecimalFormat& fmt, const char *pat, | |
| 305 int32_t pos) { | |
| 306 expectPad(fmt, pat, pos, 0, (UChar)0); | |
| 307 } | |
| 308 | |
| 309 void expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formatta
ble& n); | |
| 310 | |
| 311 void expect_rbnf(NumberFormat& fmt, const Formattable& n, | |
| 312 const UnicodeString& exp, UBool rt=TRUE); | |
| 313 | |
| 314 // internal utility routine | |
| 315 static UnicodeString& escape(UnicodeString& s); | |
| 316 | |
| 317 enum { ILLEGAL = -1 }; | |
| 318 | |
| 319 // internal subtest used by TestRounding487 | |
| 320 void roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, con
st char* expected); | |
| 321 | |
| 322 // internal rounding checking for TestRounding | |
| 323 void checkRounding(DecimalFormat* df, double base, int iterations, double in
crement); | |
| 324 | |
| 325 double checkRound(DecimalFormat* df, double iValue, double lastParsed); | |
| 326 | |
| 327 void verifyRounding( | |
| 328 DecimalFormat& format, | |
| 329 const double *values, | |
| 330 const char * const *expected, | |
| 331 const DecimalFormat::ERoundingMode *roundingModes, | |
| 332 const char * const *descriptions, | |
| 333 int32_t valueSize, | |
| 334 int32_t roundingModeSize); | |
| 335 | |
| 336 void verifyFieldPositionIterator( | |
| 337 NumberFormatTest_Attributes *expected, | |
| 338 FieldPositionIterator &iter); | |
| 339 | |
| 340 }; | |
| 341 | |
| 342 #endif /* #if !UCONFIG_NO_FORMATTING */ | |
| 343 | |
| 344 #endif // _NUMBERFORMATTEST_ | |
| OLD | NEW |