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 (c) 1997-2013, International Business Machines
      5  * Corporation and others. All Rights Reserved.
      6  ********************************************************************/
      7 
      8 #include "unicode/utypes.h"
      9 
     10 #if !UCONFIG_NO_FORMATTING
     11 
     12 #include "tsdtfmsy.h"
     13 
     14 #include "unicode/dtfmtsym.h"
     15 
     16 
     17 //--------------------------------------------------------------------
     18 // Time bomb - allows temporary behavior that expires at a given
     19 //             release
     20 //--------------------------------------------------------------------
     21 
     22 void IntlTestDateFormatSymbols::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
     23 {
     24     if (exec) logln("TestSuite DateFormatSymbols");
     25     switch (index) {
     26         TESTCASE(0,TestSymbols);
     27         TESTCASE(1,TestGetMonths);
     28         TESTCASE(2,TestGetMonths2);
     29         TESTCASE(3,TestGetWeekdays2);
     30         TESTCASE(4,TestGetEraNames);
     31         TESTCASE(5,TestGetSetSpecificItems);
     32         default: name = ""; break;
     33     }
     34 }
     35 
     36 /**
     37  * Test getMonths.
     38  */
     39 void IntlTestDateFormatSymbols::TestGetMonths()
     40 {
     41     UErrorCode  status = U_ZERO_ERROR;
     42     int32_t cnt;
     43     const UnicodeString* month;
     44     DateFormatSymbols *symbol;
     45 
     46     symbol=new DateFormatSymbols(Locale::getDefault(), status);
     47 
     48     month=symbol->getMonths(cnt);
     49 
     50     logln((UnicodeString)"size = " + cnt);
     51 
     52     for (int32_t i=0; i<cnt; ++i)
     53     {
     54         logln(month[i]);
     55     }
     56 
     57     delete symbol;
     58 }
     59 
     60 void IntlTestDateFormatSymbols::TestGetMonths2()
     61 {
     62     UErrorCode  status = U_ZERO_ERROR;
     63     DateFormatSymbols *symbol;
     64 
     65     symbol=new DateFormatSymbols(Locale::getDefault(), status);
     66 
     67     DateFormatSymbols::DtContextType context[] = {DateFormatSymbols::STANDALONE, DateFormatSymbols::FORMAT};
     68     DateFormatSymbols::DtWidthType width[] = {DateFormatSymbols::WIDE, DateFormatSymbols::ABBREVIATED, DateFormatSymbols::NARROW};
     69 
     70     for (int32_t i = 0; i < 2; i++) {
     71         for (int32_t j = 0; j < 3; j++) {
     72             int32_t cnt;
     73             const UnicodeString * month = symbol->getMonths(cnt,context[i],width[j]);
     74 
     75             logln((UnicodeString)"size = " + cnt);
     76 
     77             for (int32_t k = 0; k < cnt; k++) {
     78                 logln(month[k]);
     79             }
     80         }
     81     }
     82     delete symbol;
     83 }
     84 
     85 void IntlTestDateFormatSymbols::TestGetWeekdays2()
     86 {
     87     UErrorCode  status = U_ZERO_ERROR;
     88     DateFormatSymbols *symbol;
     89 
     90     symbol=new DateFormatSymbols(Locale::getDefault(), status);
     91 
     92     DateFormatSymbols::DtContextType context[] = {DateFormatSymbols::STANDALONE, DateFormatSymbols::FORMAT};
     93     DateFormatSymbols::DtWidthType width[] = {DateFormatSymbols::WIDE, DateFormatSymbols::ABBREVIATED, DateFormatSymbols::NARROW};
     94 
     95     for (int32_t i = 0; i < 2; i++) {
     96         for (int32_t j = 0; j < 3; j++) {
     97             int32_t cnt;
     98             const UnicodeString * wd = symbol->getWeekdays(cnt,context[i],width[j]);
     99 
    100             logln((UnicodeString)"size = " + cnt);
    101 
    102             for (int32_t k = 0; k < cnt; k++) {
    103                 logln(wd[k]);
    104             }
    105         }
    106     }
    107     delete symbol;
    108 }
    109 
    110 
    111 void IntlTestDateFormatSymbols::TestGetEraNames()
    112 {
    113     UErrorCode  status = U_ZERO_ERROR;
    114     int32_t cnt;
    115     const UnicodeString* name;
    116     DateFormatSymbols *symbol;
    117 
    118     symbol=new DateFormatSymbols(Locale::getDefault(), status);
    119 
    120     name=symbol->getEraNames(cnt);
    121 
    122     logln((UnicodeString)"size = " + cnt);
    123 
    124     for (int32_t i=0; i<cnt; ++i)
    125     {
    126         logln(name[i]);
    127     }
    128 
    129     delete symbol;
    130 }
    131 
    132 UBool IntlTestDateFormatSymbols::UnicodeStringsArePrefixes(int32_t count, int32_t prefixLen, const UnicodeString *prefixArray, const UnicodeString *baseArray)
    133 {
    134     int32_t i;
    135     for (i = 0; i < count; i++) {
    136         if (baseArray[i].compare(0, prefixLen, prefixArray[i]) != 0) {
    137             errln("ERROR: Mismatch example: expect prefix \"" + prefixArray[i] + "\" of base \"" + baseArray[i] + "\".");
    138             return FALSE;
    139         }
    140     }
    141     return TRUE;
    142 }
    143 
    144 void IntlTestDateFormatSymbols::TestGetSetSpecificItems()
    145 {
    146     UErrorCode  status = U_ZERO_ERROR;
    147     DateFormatSymbols *symbol=new DateFormatSymbols(Locale::getEnglish(), status);
    148     if(U_FAILURE(status)) {
    149         dataerrln("ERROR: Couldn't create English DateFormatSymbols " + (UnicodeString)u_errorName(status));
    150         return;
    151     }
    152     int32_t cntFmtAbbrev, cntFmtShort, cntStdAloneShort;
    153     const UnicodeString * wdFmtAbbrev     = symbol->getWeekdays(cntFmtAbbrev,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED);
    154     const UnicodeString * wdFmtShort      = symbol->getWeekdays(cntFmtShort,DateFormatSymbols::FORMAT,DateFormatSymbols::SHORT);
    155     const UnicodeString * wdStdAloneShort = symbol->getWeekdays(cntStdAloneShort,DateFormatSymbols::STANDALONE,DateFormatSymbols::SHORT);
    156     // Expect that English short names are prefixes of abbreviated names
    157     if (cntFmtShort != cntFmtAbbrev || !UnicodeStringsArePrefixes(cntFmtAbbrev, 2, wdFmtShort, wdFmtAbbrev)) {
    158         errln("ERROR: English format short weekday names don't match prefixes of format abbreviated names");
    159     }
    160     if (cntStdAloneShort != cntFmtAbbrev || !UnicodeStringsArePrefixes(cntFmtAbbrev, 2, wdStdAloneShort, wdFmtAbbrev)) {
    161         errln("ERROR: English standalone short weekday names don't match prefixes of format abbreviated names");
    162     }
    163 
    164     delete symbol;
    165 }
    166 
    167 /**
    168  * Test the API of DateFormatSymbols; primarily a simple get/set set.
    169  */
    170 void IntlTestDateFormatSymbols::TestSymbols(/* char *par */)
    171 {
    172     UErrorCode status = U_ZERO_ERROR;
    173 
    174     DateFormatSymbols fr(Locale::getFrench(), status);
    175     if(U_FAILURE(status)) {
    176         dataerrln("ERROR: Couldn't create French DateFormatSymbols " + (UnicodeString)u_errorName(status));
    177         return;
    178     }
    179 
    180     status = U_ZERO_ERROR;
    181     DateFormatSymbols fr2(Locale::getFrench(), status);
    182     if(U_FAILURE(status)) {
    183         errcheckln(status, "ERROR: Couldn't create French DateFormatSymbols " + (UnicodeString)u_errorName(status));
    184         return;
    185     }
    186 
    187     status = U_ZERO_ERROR;
    188     DateFormatSymbols en(Locale::getEnglish(), status);
    189     if(U_FAILURE(status)) {
    190         errcheckln(status, "ERROR: Couldn't create English DateFormatSymbols " + (UnicodeString)u_errorName(status));
    191         return;
    192     }
    193 
    194     if(en == fr || ! (en != fr) ) {
    195         errln("ERROR: English DateFormatSymbols equal to French");
    196     }
    197 
    198     // just do some VERY basic tests to make sure that get/set work
    199 
    200     int32_t count = 0;
    201     const UnicodeString *eras = en.getEras(count);
    202     if(count == 0) {
    203       errln("ERROR: 0 english eras.. exiting..\n");
    204       return;
    205     }
    206     int32_t eraNamesCount = 0;
    207     const UnicodeString *eraNames = en.getEraNames(eraNamesCount);
    208     if(eraNamesCount == 0) {
    209       errln("ERROR: 0 english eraNames\n");
    210     } else if ( eraNames[0].length() <= eras[0].length() ) {
    211       // At least for English we know a wide eraName should be longer than an abbrev era
    212       errln("ERROR: english eraNames[0] not longer than eras[0]\n");
    213     }
    214     int32_t narrowErasCount = 0;
    215     const UnicodeString *narrowEras = en.getNarrowEras(narrowErasCount);
    216     if(narrowErasCount == 0) {
    217       errln("ERROR: 0 english narrowEras\n");
    218     } else if ( narrowEras[0].length() >= eras[0].length() ) {
    219       // At least for English we know a narrowEra should be shorter than an abbrev era
    220       errln("ERROR: english narrowEras[0] not shorter than eras[0]\n");
    221     }
    222 
    223     fr.setEras(eras, count);
    224     if( *en.getEras(count) != *fr.getEras(count)) {
    225       errln("ERROR: setEras() failed");
    226     }
    227 
    228     const UnicodeString *months = en.getMonths(count);
    229     fr.setMonths(months, count);
    230     if( *en.getMonths(count) != *fr.getMonths(count)) {
    231         errln("ERROR: setMonths() failed");
    232     }
    233 
    234     const UnicodeString *shortMonths = en.getShortMonths(count);
    235     fr.setShortMonths(shortMonths, count);
    236     if( *en.getShortMonths(count) != *fr.getShortMonths(count)) {
    237         errln("ERROR: setShortMonths() failed");
    238     }
    239 
    240     const UnicodeString *wideMonths = en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE);
    241     fr2.setMonths(wideMonths, count, DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE);
    242     if( *en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE) !=
    243         *fr2.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE )) {
    244         errln("ERROR: setMonths(FORMAT,WIDE) failed");
    245     }
    246 
    247     const UnicodeString *abbrMonths = en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED);
    248     fr2.setMonths(abbrMonths, count, DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED);
    249     if( *en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED) !=
    250         *fr2.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED )) {
    251         errln("ERROR: setMonths(FORMAT,ABBREVIATED) failed");
    252     }
    253 
    254     const UnicodeString *narrowMonths = en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW);
    255     fr.setMonths(narrowMonths, count, DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW);
    256     if( *en.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW) !=
    257         *fr.getMonths(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW )) {
    258         errln("ERROR: setMonths(FORMAT,NARROW) failed");
    259     }
    260 
    261     const UnicodeString *standaloneWideMonths = en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE);
    262     fr.setMonths(standaloneWideMonths, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE);
    263     if( *en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE) !=
    264         *fr.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE )) {
    265         errln("ERROR: setMonths(STANDALONE,WIDE) failed");
    266     }
    267 
    268     const UnicodeString *standaloneShortMonths = en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED);
    269     fr.setMonths(standaloneShortMonths, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED);
    270     if( *en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED) !=
    271         *fr.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED )) {
    272         errln("ERROR: setMonths(STANDALONE,ABBREVIATED) failed");
    273     }
    274 
    275     const UnicodeString *standaloneNarrowMonths = en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW);
    276     fr.setMonths(standaloneNarrowMonths, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW);
    277     if( *en.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW) !=
    278         *fr.getMonths(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW )) {
    279         errln("ERROR: setMonths(STANDALONE,NARROW) failed");
    280     }
    281 
    282     const UnicodeString *weekdays = en.getWeekdays(count);
    283     fr.setWeekdays(weekdays, count);
    284     if( *en.getWeekdays(count) != *fr.getWeekdays(count)) {
    285         errln("ERROR: setWeekdays() failed");
    286     }
    287 
    288     const UnicodeString *shortWeekdays = en.getShortWeekdays(count);
    289     fr.setShortWeekdays(shortWeekdays, count);
    290     if( *en.getShortWeekdays(count) != *fr.getShortWeekdays(count)) {
    291         errln("ERROR: setShortWeekdays() failed");
    292     }
    293 
    294     const UnicodeString *wideWeekdays = en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE);
    295     fr2.setWeekdays(wideWeekdays, count, DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE);
    296     if( *en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE) !=
    297         *fr2.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::WIDE )) {
    298         errln("ERROR: setWeekdays(FORMAT,WIDE) failed");
    299     }
    300 
    301     const UnicodeString *abbrWeekdays = en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED);
    302     fr2.setWeekdays(abbrWeekdays, count, DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED);
    303     if( *en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED) !=
    304         *fr2.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED )) {
    305         errln("ERROR: setWeekdays(FORMAT,ABBREVIATED) failed");
    306     }
    307 
    308     const UnicodeString *narrowWeekdays = en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW);
    309     fr.setWeekdays(narrowWeekdays, count, DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW);
    310     if( *en.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW) !=
    311         *fr.getWeekdays(count,DateFormatSymbols::FORMAT,DateFormatSymbols::NARROW )) {
    312         errln("ERROR: setWeekdays(FORMAT,NARROW) failed");
    313     }
    314 
    315     const UnicodeString *standaloneWideWeekdays = en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE);
    316     fr.setWeekdays(standaloneWideWeekdays, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE);
    317     if( *en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE) !=
    318         *fr.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::WIDE )) {
    319         errln("ERROR: setWeekdays(STANDALONE,WIDE) failed");
    320     }
    321 
    322     const UnicodeString *standaloneShortWeekdays = en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED);
    323     fr.setWeekdays(standaloneShortWeekdays, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED);
    324     if( *en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED) !=
    325         *fr.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::ABBREVIATED )) {
    326         errln("ERROR: setWeekdays(STANDALONE,ABBREVIATED) failed");
    327     }
    328 
    329     const UnicodeString *standaloneNarrowWeekdays = en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW);
    330     fr.setWeekdays(standaloneNarrowWeekdays, count, DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW);
    331     if( *en.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW) !=
    332         *fr.getWeekdays(count,DateFormatSymbols::STANDALONE,DateFormatSymbols::NARROW )) {
    333         errln("ERROR: setWeekdays(STANDALONE,NARROW) failed");
    334     }
    335 
    336     const UnicodeString *wideQuarters = en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE);
    337     fr2.setQuarters(wideQuarters, count, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE);
    338     if( *en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE) !=
    339         *fr2.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE )) {
    340         errln("ERROR: setQuarters(FORMAT, WIDE) failed");
    341     }
    342 
    343     const UnicodeString *abbrQuarters = en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED);
    344     fr2.setQuarters(abbrQuarters, count, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED);
    345     if( *en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED) !=
    346         *fr2.getQuarters(count,DateFormatSymbols::FORMAT ,DateFormatSymbols::ABBREVIATED )) {
    347         errln("ERROR: setQuarters(FORMAT, ABBREVIATED) failed");
    348     }
    349 
    350     const UnicodeString *standaloneWideQuarters = en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE);
    351     fr.setQuarters(standaloneWideQuarters, count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE);
    352     if( *en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE) !=
    353         *fr.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE )) {
    354         errln("ERROR: setQuarters(STANDALONE, WIDE) failed");
    355     }
    356 
    357     const UnicodeString *standaloneShortQuarters = en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED);
    358     fr.setQuarters(standaloneShortQuarters, count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED);
    359     if( *en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED) !=
    360         *fr.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED )) {
    361         errln("ERROR: setQuarters(STANDALONE, ABBREVIATED) failed");
    362     }
    363 
    364     const UnicodeString *ampms = en.getAmPmStrings(count);
    365     fr.setAmPmStrings(ampms, count);
    366     if( *en.getAmPmStrings(count) != *fr.getAmPmStrings(count)) {
    367         errln("ERROR: setAmPmStrings() failed");
    368     }
    369 
    370     int32_t rowCount = 0, columnCount = 0;
    371     const UnicodeString **strings = en.getZoneStrings(rowCount, columnCount);
    372     fr.setZoneStrings(strings, rowCount, columnCount);
    373     const UnicodeString **strings1 = fr.getZoneStrings(rowCount, columnCount);
    374     for(int32_t i = 0; i < rowCount; i++) {
    375        for(int32_t j = 0; j < columnCount; j++) {
    376             if( strings[i][j] != strings1[i][j] ) {
    377                 errln("ERROR: setZoneStrings() failed");
    378             }
    379         }
    380     }
    381 
    382     UnicodeString localPattern, pat1, pat2;
    383     localPattern = en.getLocalPatternChars(localPattern);
    384     fr.setLocalPatternChars(localPattern);
    385     if( en.getLocalPatternChars(pat1) != fr.getLocalPatternChars(pat2)) {
    386         errln("ERROR: setLocalPatternChars() failed");
    387     }
    388 
    389 
    390     status = U_ZERO_ERROR;
    391     DateFormatSymbols foo(status);
    392     DateFormatSymbols bar(foo);
    393 
    394     en = fr;
    395 
    396     if(en != fr) {
    397         errln("ERROR: Assignment operator failed");
    398     }
    399     if(foo != bar) {
    400         errln("ERROR: Copy Constructor failed");
    401     }
    402 }
    403 
    404 #endif /* #if !UCONFIG_NO_FORMATTING */
    405