Home | History | Annotate | Download | only in intltest
      1 /************************************************************************
      2  * COPYRIGHT:
      3  * Copyright (c) 1997-2014, 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     void Test10419RoundingWith0FractionDigits();
    179     void Test10468ApplyPattern();
    180     void TestRoundingScientific10542();
    181     void TestZeroScientific10547();
    182     void TestAccountingCurrency();
    183     void TestEquality();
    184 
    185  private:
    186     UBool testFormattableAsUFormattable(const char *file, int line, Formattable &f);
    187 
    188     void expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text);
    189 
    190     static UBool equalValue(const Formattable& a, const Formattable& b);
    191 
    192     void expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
    193                          const UnicodeString& str);
    194 
    195     void expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
    196                         const UnicodeString& str);
    197 
    198     void expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
    199 
    200     void expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
    201 
    202     void expect2(NumberFormat& fmt, const Formattable& n, const char* str) {
    203         expect2(fmt, n, UnicodeString(str, ""));
    204     }
    205 
    206     void expect2(NumberFormat* fmt, const Formattable& n, const UnicodeString& str, UErrorCode ec);
    207 
    208     void expect2(NumberFormat* fmt, const Formattable& n, const char* str, UErrorCode ec) {
    209         expect2(fmt, n, UnicodeString(str, ""), ec);
    210     }
    211 
    212     void expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
    213 
    214     void expect(NumberFormat& fmt, const char *str, const Formattable& n) {
    215         expect(fmt, UnicodeString(str, ""), n);
    216     }
    217 
    218     void expect(NumberFormat& fmt, const Formattable& n,
    219                 const UnicodeString& exp, UBool rt=TRUE);
    220 
    221     void expect(NumberFormat& fmt, const Formattable& n,
    222                 const char *exp, UBool rt=TRUE) {
    223         expect(fmt, n, UnicodeString(exp, ""), rt);
    224     }
    225 
    226     void expect(NumberFormat* fmt, const Formattable& n,
    227                 const UnicodeString& exp, UBool rt, UErrorCode errorCode);
    228 
    229     void expect(NumberFormat* fmt, const Formattable& n,
    230                 const char *exp, UBool rt, UErrorCode errorCode) {
    231         expect(fmt, n, UnicodeString(exp, ""), rt, errorCode);
    232     }
    233 
    234     void expect(NumberFormat* fmt, const Formattable& n,
    235                 const UnicodeString& exp, UErrorCode errorCode) {
    236         expect(fmt, n, exp, TRUE, errorCode);
    237     }
    238 
    239     void expect(NumberFormat* fmt, const Formattable& n,
    240                 const char *exp, UErrorCode errorCode) {
    241         expect(fmt, n, UnicodeString(exp, ""), TRUE, errorCode);
    242     }
    243 
    244     void expectCurrency(NumberFormat& nf, const Locale& locale,
    245                         double value, const UnicodeString& string);
    246 
    247     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
    248                    int32_t pos, int32_t width, UChar pad);
    249 
    250     void expectPad(DecimalFormat& fmt, const char *pat,
    251                    int32_t pos, int32_t width, UChar pad) {
    252         expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
    253     }
    254 
    255     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
    256                    int32_t pos, int32_t width, const UnicodeString& pad);
    257 
    258     void expectPad(DecimalFormat& fmt, const char *pat,
    259                    int32_t pos, int32_t width, const UnicodeString& pad) {
    260         expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
    261     }
    262 
    263     void expectPat(DecimalFormat& fmt, const UnicodeString& exp);
    264 
    265     void expectPat(DecimalFormat& fmt, const char *exp) {
    266         expectPat(fmt, UnicodeString(exp, ""));
    267     }
    268 
    269     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
    270                    int32_t pos);
    271 
    272     void expectPad(DecimalFormat& fmt, const char *pat,
    273                    int32_t pos) {
    274         expectPad(fmt, pat, pos, 0, (UChar)0);
    275     }
    276 
    277     void expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
    278 
    279     void expect_rbnf(NumberFormat& fmt, const Formattable& n,
    280                 const UnicodeString& exp, UBool rt=TRUE);
    281 
    282     // internal utility routine
    283     static UnicodeString& escape(UnicodeString& s);
    284 
    285     enum { ILLEGAL = -1 };
    286 
    287     // internal subtest used by TestRounding487
    288     void roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected);
    289 
    290     // internal rounding checking for TestRounding
    291     void checkRounding(DecimalFormat* df, double base, int iterations, double increment);
    292 
    293     double checkRound(DecimalFormat* df, double iValue, double lastParsed);
    294 
    295     void verifyRounding(
    296         DecimalFormat& format,
    297         const double *values,
    298         const char * const *expected,
    299         const DecimalFormat::ERoundingMode *roundingModes,
    300         const char * const *descriptions,
    301         int32_t valueSize,
    302         int32_t roundingModeSize);
    303 
    304 };
    305 
    306 #endif /* #if !UCONFIG_NO_FORMATTING */
    307 
    308 #endif // _NUMBERFORMATTEST_
    309