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