Home | History | Annotate | Download | only in intltest
      1 /************************************************************************
      2  * COPYRIGHT:
      3  * Copyright (c) 1997-2010, 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 TestNonpositiveMultiplier(void);
    134 
    135     void TestNumberingSystems();
    136 
    137 
    138     void TestSpaceParsing();
    139     void TestMultiCurrencySign();
    140     void TestCurrencyFormatForMixParsing();
    141     void TestDecimalFormatCurrencyParse();
    142     void TestCurrencyIsoPluralFormat();
    143     void TestCurrencyParsing();
    144     void TestParseCurrencyInUCurr();
    145     void TestFormatAttributes();
    146     void TestFieldPositionIterator();
    147 
    148     void TestDecimal();
    149     void TestCurrencyFractionDigits();
    150 
    151     void TestExponentParse();
    152 
    153  private:
    154 
    155     static UBool equalValue(const Formattable& a, const Formattable& b);
    156 
    157     void expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
    158                          const UnicodeString& str);
    159 
    160     void expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
    161                         const UnicodeString& str);
    162 
    163     void expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
    164 
    165     void expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
    166 
    167     void expect2(NumberFormat& fmt, const Formattable& n, const char* str) {
    168         expect2(fmt, n, UnicodeString(str, ""));
    169     }
    170 
    171     void expect2(NumberFormat* fmt, const Formattable& n, const UnicodeString& str, UErrorCode ec);
    172 
    173     void expect2(NumberFormat* fmt, const Formattable& n, const char* str, UErrorCode ec) {
    174         expect2(fmt, n, UnicodeString(str, ""), ec);
    175     }
    176 
    177     void expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
    178 
    179     void expect(NumberFormat& fmt, const char *str, const Formattable& n) {
    180         expect(fmt, UnicodeString(str, ""), n);
    181     }
    182 
    183     void expect(NumberFormat& fmt, const Formattable& n,
    184                 const UnicodeString& exp, UBool rt=TRUE);
    185 
    186     void expect(NumberFormat& fmt, const Formattable& n,
    187                 const char *exp, UBool rt=TRUE) {
    188         expect(fmt, n, UnicodeString(exp, ""), rt);
    189     }
    190 
    191     void expect(NumberFormat* fmt, const Formattable& n,
    192                 const UnicodeString& exp, UErrorCode);
    193 
    194     void expect(NumberFormat* fmt, const Formattable& n,
    195                 const char *exp, UErrorCode errorCode) {
    196         expect(fmt, n, UnicodeString(exp, ""), errorCode);
    197     }
    198 
    199     void expectCurrency(NumberFormat& nf, const Locale& locale,
    200                         double value, const UnicodeString& string);
    201 
    202     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
    203                    int32_t pos, int32_t width, UChar pad);
    204 
    205     void expectPad(DecimalFormat& fmt, const char *pat,
    206                    int32_t pos, int32_t width, UChar pad) {
    207         expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
    208     }
    209 
    210     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
    211                    int32_t pos, int32_t width, const UnicodeString& pad);
    212 
    213     void expectPad(DecimalFormat& fmt, const char *pat,
    214                    int32_t pos, int32_t width, const UnicodeString& pad) {
    215         expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
    216     }
    217 
    218     void expectPat(DecimalFormat& fmt, const UnicodeString& exp);
    219 
    220     void expectPat(DecimalFormat& fmt, const char *exp) {
    221         expectPat(fmt, UnicodeString(exp, ""));
    222     }
    223 
    224     void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
    225                    int32_t pos);
    226 
    227     void expectPad(DecimalFormat& fmt, const char *pat,
    228                    int32_t pos) {
    229         expectPad(fmt, pat, pos, 0, (UChar)0);
    230     }
    231 
    232     void expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
    233 
    234     void expect_rbnf(NumberFormat& fmt, const Formattable& n,
    235                 const UnicodeString& exp, UBool rt=TRUE);
    236 
    237     // internal utility routine
    238     static UnicodeString& escape(UnicodeString& s);
    239 
    240     enum { ILLEGAL = -1 };
    241 
    242     // internal subtest used by TestRounding487
    243     void roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected);
    244 
    245     // internal rounding checking for TestRounding
    246     void checkRounding(DecimalFormat* df, double base, int iterations, double increment);
    247 
    248     double checkRound(DecimalFormat* df, double iValue, double lastParsed);
    249 };
    250 
    251 #endif /* #if !UCONFIG_NO_FORMATTING */
    252 
    253 #endif // _NUMBERFORMATTEST_
    254