Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / icu / source / test / intltest / numfmtst.h
1 /************************************************************************
2  * COPYRIGHT:
3  * Copyright (c) 1997-2013, 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  * Performs various in-depth test on NumberFormat
20  **/
21 class NumberFormatTest: public CalendarTimeZoneTest {
22
23     // IntlTest override
24     void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
25  public:
26
27     /**
28      * Test APIs (to increase code coverage)
29      */
30     void TestAPI(void);
31
32     void TestCoverage(void);
33
34     /**
35      * Test the handling of quotes
36      **/
37     void TestQuotes(void);
38     /**
39      * Test patterns with exponential representation
40      **/
41     void TestExponential(void);
42     /**
43      * Test handling of patterns with currency symbols
44      **/
45     void TestCurrencySign(void);
46     /**
47      * Test different format patterns
48      **/
49     void TestPatterns(void);
50     /**
51      * API coverage for DigitList
52      **/
53     //void TestDigitList(void);
54
55     /**
56      * Test localized currency patterns.
57      */
58     void TestCurrency(void);
59
60     /**
61      * Test the Currency object handling, new as of ICU 2.2.
62      */
63     void TestCurrencyObject(void);
64
65     void TestCurrencyPatterns(void);
66
67     /**
68      * Do rudimentary testing of parsing.
69      */
70     void TestParse(void);
71     /**
72      * Test proper rounding by the format method.
73      */
74     void TestRounding487(void);
75
76     // New tests for alphaWorks upgrade
77     void TestExponent(void);
78
79     void TestScientific(void);
80
81     void TestScientific2(void);
82
83     void TestScientificGrouping(void);
84
85     void TestInt64(void);
86
87     void TestSurrogateSupport(void);
88
89     /**
90      * Test the functioning of the secondary grouping value.
91      */
92     void TestSecondaryGrouping(void);
93
94     void TestWhiteSpaceParsing(void);
95
96     void TestComplexCurrency(void);
97
98     void TestPad(void);
99     void TestPatterns2(void);
100
101     /**
102      * Test currency registration.
103      */
104     void TestRegCurrency(void);
105
106     void TestCurrencyNames(void);
107
108     void TestCurrencyAmount(void);
109
110     void TestCurrencyUnit(void);
111
112     void TestSymbolsWithBadLocale(void);
113
114     void TestAdoptDecimalFormatSymbols(void);
115
116     void TestPerMill(void);
117
118     void TestIllegalPatterns(void);
119
120     void TestCases(void);
121
122     void TestJB3832(void);
123
124     void TestHost(void);
125
126     void TestHostClone(void);
127
128     void TestCurrencyFormat(void);
129
130     /* Port of ICU4J rounding test. */
131     void TestRounding(void);
132
133     void TestRoundingPattern(void);
134
135     void TestNonpositiveMultiplier(void);
136
137     void TestNumberingSystems();
138
139
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();
149
150     void TestLenientParse();
151
152     void TestDecimal();
153     void TestCurrencyFractionDigits();
154
155     void TestExponentParse();
156     void TestExplicitParents();
157     void TestAvailableNumberingSystems();
158     void Test9087();
159     void TestFormatFastpaths();
160
161     void TestFormattableSize();
162
163     void TestUFormattable();
164
165     void TestEnumSet();
166
167     void TestSignificantDigits();
168     void TestShowZero();
169
170     void TestCompatibleCurrencies();
171     void TestBug9936();
172     void TestParseNegativeWithFaLocale();
173     void TestParseNegativeWithAlternateMinusSign();
174
175     void TestCustomCurrencySignAndSeparator();
176
177     void TestParseSignsAndMarks();
178
179  private:
180     UBool testFormattableAsUFormattable(const char *file, int line, Formattable &f);
181
182     void expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text);
183
184     static UBool equalValue(const Formattable& a, const Formattable& b);
185
186     void expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
187                          const UnicodeString& str);
188
189     void expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
190                         const UnicodeString& str);
191
192     void expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
193
194     void expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
195
196     void expect2(NumberFormat& fmt, const Formattable& n, const char* str) {
197         expect2(fmt, n, UnicodeString(str, ""));
198     }
199
200     void expect2(NumberFormat* fmt, const Formattable& n, const UnicodeString& str, UErrorCode ec);
201
202     void expect2(NumberFormat* fmt, const Formattable& n, const char* str, UErrorCode ec) {
203         expect2(fmt, n, UnicodeString(str, ""), ec);
204     }
205
206     void expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
207
208     void expect(NumberFormat& fmt, const char *str, const Formattable& n) {
209         expect(fmt, UnicodeString(str, ""), n);
210     }
211
212     void expect(NumberFormat& fmt, const Formattable& n,
213                 const UnicodeString& exp, UBool rt=TRUE);
214
215     void expect(NumberFormat& fmt, const Formattable& n,
216                 const char *exp, UBool rt=TRUE) {
217         expect(fmt, n, UnicodeString(exp, ""), rt);
218     }
219
220     void expect(NumberFormat* fmt, const Formattable& n,
221                 const UnicodeString& exp, UErrorCode);
222
223     void expect(NumberFormat* fmt, const Formattable& n,
224                 const char *exp, UErrorCode errorCode) {
225         expect(fmt, n, UnicodeString(exp, ""), errorCode);
226     }
227
228     void expectCurrency(NumberFormat& nf, const Locale& locale,
229                         double value, const UnicodeString& string);
230
231     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
232                    int32_t pos, int32_t width, UChar pad);
233
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);
237     }
238
239     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
240                    int32_t pos, int32_t width, const UnicodeString& pad);
241
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);
245     }
246
247     void expectPat(DecimalFormat& fmt, const UnicodeString& exp);
248
249     void expectPat(DecimalFormat& fmt, const char *exp) {
250         expectPat(fmt, UnicodeString(exp, ""));
251     }
252
253     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
254                    int32_t pos);
255
256     void expectPad(DecimalFormat& fmt, const char *pat,
257                    int32_t pos) {
258         expectPad(fmt, pat, pos, 0, (UChar)0);
259     }
260
261     void expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
262
263     void expect_rbnf(NumberFormat& fmt, const Formattable& n,
264                 const UnicodeString& exp, UBool rt=TRUE);
265
266     // internal utility routine
267     static UnicodeString& escape(UnicodeString& s);
268
269     enum { ILLEGAL = -1 };
270
271     // internal subtest used by TestRounding487
272     void roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected);
273
274     // internal rounding checking for TestRounding
275     void checkRounding(DecimalFormat* df, double base, int iterations, double increment);
276
277     double checkRound(DecimalFormat* df, double iValue, double lastParsed);
278 };
279
280 #endif /* #if !UCONFIG_NO_FORMATTING */
281
282 #endif // _NUMBERFORMATTEST_