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