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-2016, International Business Machines Corporation
      5  * and others. All Rights Reserved.
      6  ***********************************************************************/
      7 
      8 #ifndef __CalendarTest__
      9 #define __CalendarTest__
     10 
     11 #include "unicode/utypes.h"
     12 
     13 #if !UCONFIG_NO_FORMATTING
     14 
     15 #include "unicode/calendar.h"
     16 #include "unicode/smpdtfmt.h"
     17 #include "caltztst.h"
     18 
     19 class CalendarTest: public CalendarTimeZoneTest {
     20 public:
     21     // IntlTest override
     22     void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
     23 public:
     24     /**
     25      * This test confirms the correct behavior of add when incrementing
     26      * through subsequent days.
     27      */
     28     virtual void TestRog(void);
     29     /**
     30      * Test the handling of the day of the week, checking for correctness and
     31      * for correct minimum and maximum values.
     32      */
     33     virtual void TestDOW943(void);
     34     /**
     35      * test subroutine use by TestDOW943
     36      */
     37     void dowTest(UBool lenient);
     38     /**
     39      * Confirm that cloned Calendar objects do not inadvertently share substructures.
     40      */
     41     virtual void TestClonesUnique908(void);
     42     /**
     43      * Confirm that the Gregorian cutoff value works as advertised.
     44      */
     45     virtual void TestGregorianChange768(void);
     46     /**
     47      * Confirm the functioning of the field disambiguation algorithm.
     48      */
     49     virtual void TestDisambiguation765(void);
     50     /**
     51      * Test various API methods for API completeness.
     52      */
     53     virtual void TestGenericAPI(void); // New to C++ -- needs to be back ported to Java
     54 
     55     virtual void TestWOY(void);
     56 
     57     virtual void TestDebug(void);
     58 
     59 public: // package
     60     /**
     61      * test subroutine used by TestDisambiguation765
     62      */
     63     virtual void verify765(const UnicodeString& msg, Calendar* c, int32_t year, int32_t month, int32_t day);
     64     /**
     65      * test subroutine used by TestDisambiguation765
     66      */
     67     virtual void verify765(const UnicodeString& msg/*, IllegalArgumentException e*/, UErrorCode status);
     68 
     69 public:
     70     /**
     71      * Confirm that the offset between local time and GMT behaves as expected.
     72      */
     73     virtual void TestGMTvsLocal4064654(void);
     74 
     75 public: // package
     76     /**
     77      * test subroutine used by TestGMTvsLocal4064654
     78      */
     79     virtual void test4064654(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn, int32_t sc);
     80 
     81 public:
     82     /**
     83      * The operations of adding and setting should not exhibit pathological
     84      * dependence on the order of operations.  This test checks for this.
     85      */
     86     virtual void TestAddSetOrder621(void);
     87     /**
     88      * Confirm that adding to various fields works.
     89      */
     90     virtual void TestAdd520(void);
     91     /**
     92      * Execute and test adding and rolling in GregorianCalendar extensively.
     93      */
     94     virtual void TestAddRollExtensive(void);
     95 
     96 public: // package
     97     // internal utility routine for checking date
     98     virtual void check520(Calendar* c,
     99                             int32_t y, int32_t m, int32_t d,
    100                             int32_t hr, int32_t min, int32_t sec,
    101                             int32_t ms, UCalendarDateFields field);
    102 
    103     virtual void check520(Calendar* c,
    104                             int32_t y, int32_t m, int32_t d);
    105 
    106 public:
    107     /**
    108      * Test that setting of fields works.  In particular, make sure that all instances
    109      * of GregorianCalendar don't share a static instance of the fields array.
    110      */
    111     virtual void TestFieldSet4781(void);
    112 /*    virtual void TestSerialize337();
    113 
    114 public: // package
    115     static UnicodeString& PREFIX;
    116     static UnicodeString& POSTFIX;
    117     static UnicodeString& FILENAME;
    118 */
    119 public:
    120     /**
    121      * Verify that the seconds of a Calendar can be zeroed out through the
    122      * expected sequence of operations.
    123      */
    124     virtual void TestSecondsZero121(void);
    125     /**
    126      * Verify that a specific sequence of adding and setting works as expected;
    127      * it should not vary depending on when and whether the get method is
    128      * called.
    129      */
    130     virtual void TestAddSetGet0610(void);
    131 
    132 public: // package
    133     // internal routine for checking date
    134     static UnicodeString value(Calendar* calendar);
    135 
    136 public:
    137     /**
    138      * Verify that various fields on a known date are set correctly.
    139      */
    140     virtual void TestFields060(void);
    141 
    142 public: // package
    143     static int32_t EXPECTED_FIELDS[];
    144     static const int32_t EXPECTED_FIELDS_length;
    145 
    146 public:
    147     /**
    148      * Verify that various fields on a known date are set correctly.  In this
    149      * case, the start of the epoch (January 1 1970).
    150      */
    151     virtual void TestEpochStartFields(void);
    152 
    153 public: // package
    154     static int32_t EPOCH_FIELDS[];
    155 
    156 public:
    157     /**
    158      * Test that the days of the week progress properly when add is called repeatedly
    159      * for increments of 24 days.
    160      */
    161     virtual void TestDOWProgression(void);
    162     /**
    163      * Test newly added fields - DOW_LOCAL and YEAR_WOY
    164      */
    165     virtual void TestDOW_LOCALandYEAR_WOY(void);
    166     // test subroutine used by TestDOW_LOCALandYEAR_WOY
    167     virtual void doYEAR_WOYLoop(Calendar *cal,
    168         SimpleDateFormat *sdf, int32_t times, UErrorCode& status);
    169     // test subroutine used by TestDOW_LOCALandYEAR_WOY
    170     virtual void loop_addroll(Calendar *cal, /*SimpleDateFormat *sdf, */
    171         int times, UCalendarDateFields field, UCalendarDateFields field2,
    172         UErrorCode& errorCode);
    173 
    174     void TestYWOY(void);
    175     void TestJD(void);
    176 
    177     void yearAddTest(Calendar& cal, UErrorCode& status);
    178 
    179 public: // package
    180     // test subroutine use by TestDOWProgression
    181     virtual void marchByDelta(Calendar* cal, int32_t delta);
    182 
    183  public:
    184     // for other tests' use
    185     static UnicodeString fieldName(UCalendarDateFields f);
    186     static UnicodeString calToStr(const Calendar & cal);
    187 
    188     // List of non-installed locales with interesting calendars
    189 
    190     /**
    191      * @return the count of 'other' locales to test
    192      */
    193     static int32_t testLocaleCount();
    194 
    195     /**
    196      * @param i index of 'other' locale to return
    197      * @return locale ID
    198      */
    199     static const char* testLocaleID(int32_t i);
    200 
    201     /**
    202      * Clone the specified calendar, and determine its earliest supported date
    203      * by setting the extended year to the minimum value.
    204      * @param cal Calendar (will be cloned)
    205      * @param isGregorian output: returns 'TRUE' if the calendar's class is GregorianCalendar
    206      * @param status error code
    207      */
    208     static UDate minDateOfCalendar(const Calendar& cal, UBool &isGregorian, UErrorCode& status);
    209 
    210     /**
    211      * Construct a calendar of the specified locale, and determine its earliest supported date
    212      * by setting the extended year to the minimum value.
    213      * @param locale locale of calendar to check
    214      * @param isGregorian output: returns 'TRUE' if the calendar's class is GregorianCalendar
    215      * @param status error code
    216      */
    217     static UDate minDateOfCalendar(const Locale& locale, UBool &isGregorian, UErrorCode& status);
    218 
    219   // internal - for other test use
    220  public:
    221     void Test6703(void);
    222     void Test3785(void);
    223     void Test1624(void);
    224     void TestIslamicUmAlQura(void);
    225     void TestIslamicTabularDates(void);
    226 
    227     /**
    228      * Test the time stamp array recalculation during heavy Calendar usage
    229      */
    230     void TestTimeStamp(void);
    231     /**
    232      * Test the ISO8601 calendar type
    233      */
    234     void TestISO8601(void);
    235 
    236     /**
    237      * Test cases for [set|get][Repeated|Skipped]WallTimeOption
    238      */
    239     void TestAmbiguousWallTimeAPIs(void);
    240     void TestRepeatedWallTime(void);
    241     void TestSkippedWallTime(void);
    242 
    243     void TestCloneLocale(void);
    244 
    245     void TestHebrewMonthValidation(void);
    246 
    247     /*
    248      * utility methods for TestIslamicUmAlQura
    249      */
    250     void setAndTestCalendar(Calendar* cal, int32_t initMonth, int32_t initDay, int32_t initYear, UErrorCode& status);
    251     void setAndTestWholeYear(Calendar* cal, int32_t startYear, UErrorCode& status);
    252 
    253     void TestWeekData(void);
    254 
    255     void TestAddAcrossZoneTransition(void);
    256 
    257     void TestChineseCalendarMapping(void);
    258 };
    259 
    260 #endif /* #if !UCONFIG_NO_FORMATTING */
    261 
    262 #endif // __CalendarTest__
    263