1 /************************************************************************
3 * Copyright (c) 1997-2013, International Business Machines Corporation
4 * and others. All Rights Reserved.
5 ************************************************************************/
7 #ifndef _NUMBERFORMATTEST_
8 #define _NUMBERFORMATTEST_
10 #include "unicode/utypes.h"
12 #if !UCONFIG_NO_FORMATTING
14 #include "unicode/numfmt.h"
15 #include "unicode/decimfmt.h"
19 * Performs various in-depth test on NumberFormat
21 class NumberFormatTest: public CalendarTimeZoneTest {
24 void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
28 * Test APIs (to increase code coverage)
32 void TestCoverage(void);
35 * Test the handling of quotes
37 void TestQuotes(void);
39 * Test patterns with exponential representation
41 void TestExponential(void);
43 * Test handling of patterns with currency symbols
45 void TestCurrencySign(void);
47 * Test different format patterns
49 void TestPatterns(void);
51 * API coverage for DigitList
53 //void TestDigitList(void);
56 * Test localized currency patterns.
58 void TestCurrency(void);
61 * Test the Currency object handling, new as of ICU 2.2.
63 void TestCurrencyObject(void);
65 void TestCurrencyPatterns(void);
68 * Do rudimentary testing of parsing.
72 * Test proper rounding by the format method.
74 void TestRounding487(void);
76 // New tests for alphaWorks upgrade
77 void TestExponent(void);
79 void TestScientific(void);
81 void TestScientific2(void);
83 void TestScientificGrouping(void);
87 void TestSurrogateSupport(void);
90 * Test the functioning of the secondary grouping value.
92 void TestSecondaryGrouping(void);
94 void TestWhiteSpaceParsing(void);
96 void TestComplexCurrency(void);
99 void TestPatterns2(void);
102 * Test currency registration.
104 void TestRegCurrency(void);
106 void TestCurrencyNames(void);
108 void TestCurrencyAmount(void);
110 void TestCurrencyUnit(void);
112 void TestSymbolsWithBadLocale(void);
114 void TestAdoptDecimalFormatSymbols(void);
116 void TestPerMill(void);
118 void TestIllegalPatterns(void);
120 void TestCases(void);
122 void TestJB3832(void);
126 void TestHostClone(void);
128 void TestCurrencyFormat(void);
130 /* Port of ICU4J rounding test. */
131 void TestRounding(void);
133 void TestRoundingPattern(void);
135 void TestNonpositiveMultiplier(void);
137 void TestNumberingSystems();
140 void TestSpaceParsing();
141 void TestMultiCurrencySign();
142 void TestCurrencyFormatForMixParsing();
143 void TestDecimalFormatCurrencyParse();
144 void TestCurrencyIsoPluralFormat();
145 void TestCurrencyParsing();
146 void TestParseCurrencyInUCurr();
147 void TestFormatAttributes();
148 void TestFieldPositionIterator();
150 void TestLenientParse();
153 void TestCurrencyFractionDigits();
155 void TestExponentParse();
156 void TestExplicitParents();
157 void TestAvailableNumberingSystems();
159 void TestFormatFastpaths();
161 void TestFormattableSize();
163 void TestUFormattable();
167 void TestSignificantDigits();
170 void TestCompatibleCurrencies();
172 void TestParseNegativeWithFaLocale();
173 void TestParseNegativeWithAlternateMinusSign();
175 void TestCustomCurrencySignAndSeparator();
177 void TestParseSignsAndMarks();
180 UBool testFormattableAsUFormattable(const char *file, int line, Formattable &f);
182 void expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text);
184 static UBool equalValue(const Formattable& a, const Formattable& b);
186 void expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
187 const UnicodeString& str);
189 void expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
190 const UnicodeString& str);
192 void expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
194 void expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
196 void expect2(NumberFormat& fmt, const Formattable& n, const char* str) {
197 expect2(fmt, n, UnicodeString(str, ""));
200 void expect2(NumberFormat* fmt, const Formattable& n, const UnicodeString& str, UErrorCode ec);
202 void expect2(NumberFormat* fmt, const Formattable& n, const char* str, UErrorCode ec) {
203 expect2(fmt, n, UnicodeString(str, ""), ec);
206 void expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
208 void expect(NumberFormat& fmt, const char *str, const Formattable& n) {
209 expect(fmt, UnicodeString(str, ""), n);
212 void expect(NumberFormat& fmt, const Formattable& n,
213 const UnicodeString& exp, UBool rt=TRUE);
215 void expect(NumberFormat& fmt, const Formattable& n,
216 const char *exp, UBool rt=TRUE) {
217 expect(fmt, n, UnicodeString(exp, ""), rt);
220 void expect(NumberFormat* fmt, const Formattable& n,
221 const UnicodeString& exp, UErrorCode);
223 void expect(NumberFormat* fmt, const Formattable& n,
224 const char *exp, UErrorCode errorCode) {
225 expect(fmt, n, UnicodeString(exp, ""), errorCode);
228 void expectCurrency(NumberFormat& nf, const Locale& locale,
229 double value, const UnicodeString& string);
231 void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
232 int32_t pos, int32_t width, UChar pad);
234 void expectPad(DecimalFormat& fmt, const char *pat,
235 int32_t pos, int32_t width, UChar pad) {
236 expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
239 void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
240 int32_t pos, int32_t width, const UnicodeString& pad);
242 void expectPad(DecimalFormat& fmt, const char *pat,
243 int32_t pos, int32_t width, const UnicodeString& pad) {
244 expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
247 void expectPat(DecimalFormat& fmt, const UnicodeString& exp);
249 void expectPat(DecimalFormat& fmt, const char *exp) {
250 expectPat(fmt, UnicodeString(exp, ""));
253 void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
256 void expectPad(DecimalFormat& fmt, const char *pat,
258 expectPad(fmt, pat, pos, 0, (UChar)0);
261 void expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
263 void expect_rbnf(NumberFormat& fmt, const Formattable& n,
264 const UnicodeString& exp, UBool rt=TRUE);
266 // internal utility routine
267 static UnicodeString& escape(UnicodeString& s);
269 enum { ILLEGAL = -1 };
271 // internal subtest used by TestRounding487
272 void roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected);
274 // internal rounding checking for TestRounding
275 void checkRounding(DecimalFormat* df, double base, int iterations, double increment);
277 double checkRound(DecimalFormat* df, double iValue, double lastParsed);
280 #endif /* #if !UCONFIG_NO_FORMATTING */
282 #endif // _NUMBERFORMATTEST_