Home | History | Annotate | Download | only in intltest
      1 //  2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /********************************************************************
      4  * COPYRIGHT:
      5  * Copyright (c) 1997-2010, International Business Machines Corporation and
      6  * others. All Rights Reserved.
      7  ********************************************************************/
      8 
      9 #include "unicode/utypes.h"
     10 
     11 #if !UCONFIG_NO_FORMATTING
     12 
     13 #include "pptest.h"
     14 
     15 #include "unicode/numfmt.h"
     16 #include "unicode/decimfmt.h"
     17 
     18 // *****************************************************************************
     19 // class ParsePositionTest
     20 // *****************************************************************************
     21 
     22 #define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break;
     23 
     24 void ParsePositionTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
     25 {
     26     // if (exec) logln((UnicodeString)"TestSuite ParsePositionTest");
     27     switch (index) {
     28         CASE(0, TestParsePosition)
     29         CASE(1, TestFieldPosition)
     30         CASE(2, TestFieldPosition_example)
     31         CASE(3, Test4109023)
     32 
     33         default: name = ""; break;
     34     }
     35 }
     36 
     37 UBool
     38 ParsePositionTest::failure(UErrorCode status, const char* msg, UBool possibleDataError)
     39 {
     40     if(U_FAILURE(status)) {
     41         if (possibleDataError) {
     42             dataerrln(UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status));
     43         } else {
     44             errln(UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status));
     45         }
     46         return TRUE;
     47     }
     48 
     49     return FALSE;
     50 }
     51 
     52 void ParsePositionTest::TestParsePosition()
     53 {
     54     ParsePosition pp1(0);
     55     if (pp1.getIndex() == 0) {
     56         logln("PP constructor() tested.");
     57     }else{
     58         errln("*** PP getIndex or constructor() result");
     59     }
     60 
     61     {
     62         int to = 5;
     63         ParsePosition pp2( to );
     64         if (pp2.getIndex() == 5) {
     65             logln("PP getIndex and constructor(int32_t) tested.");
     66         }else{
     67             errln("*** PP getIndex or constructor(int32_t) result");
     68         }
     69         pp2.setIndex( 3 );
     70         if (pp2.getIndex() == 3) {
     71             logln("PP setIndex tested.");
     72         }else{
     73             errln("*** PP getIndex or setIndex result");
     74         }
     75     }
     76 
     77     ParsePosition pp2(3), pp3(5);
     78     //pp2 = new ParsePosition( 3 );
     79     //pp3 = new ParsePosition( 5 );
     80     ParsePosition pp4(5);
     81     if ( pp2 != pp3) {
     82         logln("PP not equals tested.");
     83     }else{
     84         errln("*** PP not equals fails");
     85     }
     86     if (pp3 == pp4) {
     87         logln("PP equals tested.");
     88     }else{
     89         errln(UnicodeString("*** PP equals fails (") + pp3.getIndex() + " != " + pp4.getIndex() + ")");
     90     }
     91 
     92     ParsePosition pp5;
     93     pp5 = pp4;
     94     if (pp4 == pp5) {
     95         logln("PP operator= tested.");
     96     }else{
     97         errln("*** PP operator= operator== or operator != result");
     98     }
     99 
    100     ParsePosition *ppp = pp5.clone();
    101     if(ppp == &pp5 || *ppp != pp5) {
    102         errln("ParsePosition.clone() failed");
    103     }
    104     delete ppp;
    105 }
    106 
    107 void ParsePositionTest::TestFieldPosition()
    108 {
    109     FieldPosition fp( 7 );
    110 
    111     if (fp.getField() == 7) {
    112         logln("FP constructor(int) and getField tested.");
    113     }else{
    114         errln("*** FP constructor(int) or getField");
    115     }
    116 
    117     FieldPosition fpc(fp);
    118     if (fpc.getField() == 7) {
    119         logln("FP Constructor(FP&) passed");
    120     } else {
    121         errln("*** FP Constructor(FP&)");
    122     }
    123 
    124     FieldPosition fph( 3 );
    125     if ( fph.getField() != 3)
    126         errln("*** FP getField or heap constr.");
    127 
    128     UBool err1 = FALSE;
    129     UBool err2 = FALSE;
    130     UBool err3 = FALSE;
    131 //        for (long i = -50; i < 50; i++ ) {
    132 //            fp.setField( i+8 );
    133 //            fp.setBeginIndex( i+6 );
    134 //            fp.setEndIndex( i+7 );
    135 //            if (fp.getField() != i+8)  err1 = TRUE;
    136 //            if (fp.getBeginIndex() != i+6) err2 = TRUE;
    137 //            if (fp.getEndIndex() != i+7) err3 = TRUE;
    138 //        }
    139     if (!err1) {
    140         logln("FP setField and getField tested.");
    141     }else{
    142         errln("*** FP setField or getField");
    143     }
    144     if (!err2) {
    145         logln("FP setBeginIndex and getBeginIndex tested.");
    146     }else{
    147         errln("*** FP setBeginIndex or getBeginIndex");
    148     }
    149     if (!err3) {
    150         logln("FP setEndIndex and getEndIndex tested.");
    151     }else{
    152         errln("*** FP setEndIndex or getEndIndex");
    153     }
    154 
    155     logln("");
    156 
    157     FieldPosition *pfp = fp.clone();
    158     if(pfp == &fp || *pfp != fp) {
    159         errln("FieldPosition.clone() failed");
    160     }
    161     delete pfp;
    162 }
    163 
    164 void ParsePositionTest::TestFieldPosition_example()
    165 {
    166     //***** no error detection yet !!!!!!!
    167     //***** this test is for compiler checks and visual verification only.
    168     double doubleNum[] = {
    169         123456789.0,
    170         -12345678.9,
    171         1234567.89,
    172         -123456.789,
    173         12345.6789,
    174         -1234.56789,
    175         123.456789,
    176         -12.3456789,
    177         1.23456789};
    178     int dNumSize = 9;
    179 
    180     UErrorCode status = U_ZERO_ERROR;
    181     NumberFormat *nf = NumberFormat::createInstance(status);
    182     if (failure(status, "NumberFormat::createInstance", TRUE)){
    183         delete nf;
    184         return;
    185     };
    186 
    187     DecimalFormat *fmt = dynamic_cast<DecimalFormat *>(nf);
    188     if(fmt == NULL) {
    189         errln("NumberFormat::createInstance returned unexpected class type");
    190         return;
    191     }
    192     fmt->setDecimalSeparatorAlwaysShown(TRUE);
    193 
    194     const int tempLen = 20;
    195     UnicodeString temp;
    196 
    197     for (int i=0; i < dNumSize; i++) {
    198         temp.remove();
    199         //temp = new StringBuffer(); // Get new buffer
    200 
    201         FieldPosition pos(NumberFormat::INTEGER_FIELD);
    202         UnicodeString buf;// = new StringBuffer();
    203         //char fmtText[tempLen];
    204         //ToCharString(fmt->format(doubleNum[i], buf, pos), fmtText);
    205         UnicodeString res;
    206         res = fmt->format(doubleNum[i], buf, pos);
    207         int tempOffset = (tempLen <= (tempLen - pos.getEndIndex())) ?
    208             tempLen : (tempLen - pos.getEndIndex());
    209         for (int j=0; j<tempOffset; j++)
    210             temp += UnicodeString("="/*'='*/); // initialize
    211         logln("FP " + temp + res);
    212     }
    213 
    214     logln("");
    215     delete nf;
    216 }
    217 
    218 /* @bug 4109023
    219  * Need to override ParsePosition.equals and FieldPosition.equals.
    220  */
    221 void ParsePositionTest::Test4109023()
    222 {
    223     ParsePosition p(3);
    224     ParsePosition p2(3);
    225     if (p != p2)
    226         errln("Error : ParsePosition.equals() failed");
    227     FieldPosition fp(2);
    228     FieldPosition fp2(2);
    229     if (fp != fp2)
    230         errln("Error : FieldPosition.equals() failed");
    231 }
    232 
    233 #endif /* #if !UCONFIG_NO_FORMATTING */
    234