Imported Upstream version 58.1
[platform/upstream/icu.git] / source / test / intltest / dtfmttst.h
1 // Copyright (C) 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-2016, International Business Machines Corporation and
6  * others. All Rights Reserved.
7  ********************************************************************/
8
9 #ifndef _DATEFORMATTEST_
10 #define _DATEFORMATTEST_
11
12 #include "unicode/utypes.h"
13
14 #if !UCONFIG_NO_FORMATTING
15
16 #include "unicode/datefmt.h"
17 #include "unicode/smpdtfmt.h"
18 #include "caltztst.h"
19
20 /**
21  * Performs many different tests for DateFormat and SimpleDateFormat
22  **/
23 class DateFormatTest: public CalendarTimeZoneTest {
24     // IntlTest override
25     void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
26 public:
27     /**
28      * Verify that patterns have the correct values and could produce
29      * the DateFormat instances that contain the correct localized patterns.
30      */
31     void TestPatterns();
32     /**
33      *  "Test written by Wally Wedel and emailed to me."
34      *  Test handling of timezone offsets
35      **/
36     virtual void TestWallyWedel(void);
37     /**
38      * Test operator==
39      */
40     virtual void TestEquals(void);
41     /**
42      * Test the parsing of 2-digit years.
43      */
44     virtual void TestTwoDigitYearDSTParse(void);
45
46 public: // package
47     // internal utility routine (genrates escape sequences for characters)
48     static UnicodeString& escape(UnicodeString& s);
49
50 public:
51     /**
52      * Verify that returned field position indices are correct.
53      */
54     void TestFieldPosition(void);
55
56     void TestGeneral();
57
58 public: // package
59     // internal utility function
60     static void getFieldText(DateFormat* df, int32_t field, UDate date, UnicodeString& str);
61
62 public:
63     /**
64      * Verify that strings which contain incomplete specifications are parsed
65      * correctly.  In some instances, this means not being parsed at all, and
66      * returning an appropriate error.
67      */
68     virtual void TestPartialParse994(void);
69
70 public: // package
71     // internal test subroutine, used by TestPartialParse994
72     virtual void tryPat994(SimpleDateFormat* format, const char* pat, const char* str, UDate expected);
73
74 public:
75     /**
76      * Verify the behavior of patterns in which digits for different fields run together
77      * without intervening separators.
78      */
79     virtual void TestRunTogetherPattern985(void);
80     /**
81      * Verify the behavior of patterns in which digits for different fields run together
82      * without intervening separators.
83      */
84     virtual void TestRunTogetherPattern917(void);
85
86 public: // package
87     // internal test subroutine, used by TestRunTogetherPattern917
88     virtual void testIt917(SimpleDateFormat* fmt, UnicodeString& str, UDate expected);
89
90 public:
91     /**
92      * Verify the handling of Czech June and July, which have the unique attribute that
93      * one is a proper prefix substring of the other.
94      */
95     virtual void TestCzechMonths459(void);
96     /**
97      * Test the handling of 'D' in patterns.
98      */
99     virtual void TestLetterDPattern212(void);
100     /**
101      * Test the day of year pattern.
102      */
103     virtual void TestDayOfYearPattern195(void);
104
105 public: // package
106     // interl test subroutine, used by TestDayOfYearPattern195
107     virtual void tryPattern(SimpleDateFormat& sdf, UDate d, const char* pattern, UDate expected);
108
109 public:
110     /**
111      * Test the handling of single quotes in patterns.
112      */
113     virtual void TestQuotePattern161(void);
114     /**
115      * Verify the correct behavior when handling invalid input strings.
116      */
117     virtual void TestBadInput135(void);
118
119 public:
120     /**
121      * Verify the correct behavior when parsing an array of inputs against an
122      * array of patterns, with known results.  The results are encoded after
123      * the input strings in each row.
124      */
125     virtual void TestBadInput135a(void);
126     /**
127      * Test the parsing of two-digit years.
128      */
129     virtual void TestTwoDigitYear(void);
130
131 public: // package
132     // internal test subroutine, used by TestTwoDigitYear
133     virtual void parse2DigitYear(DateFormat& fmt, const char* str, UDate expected);
134
135 public:
136     /**
137      * Test the formatting of time zones.
138      */
139     virtual void TestDateFormatZone061(void);
140     /**
141      * Further test the formatting of time zones.
142      */
143     virtual void TestDateFormatZone146(void);
144
145     void TestTimeZoneStringsAPI(void);
146
147     void TestGMTParsing(void);
148
149 public: // package
150     /**
151      * Test the formatting of dates in different locales.
152      */
153     virtual void TestLocaleDateFormat(void);
154
155     virtual void TestFormattingLocaleTimeSeparator(void);
156
157     virtual void TestDateFormatCalendar(void);
158
159     virtual void TestSpaceParsing(void);
160
161     void TestExactCountFormat(void);
162
163     void TestWhiteSpaceParsing(void);
164
165     void TestInvalidPattern(void);
166
167     void TestGreekMay(void);
168
169     void TestGenericTime(void);
170
171     void TestGenericTimeZoneOrder(void);
172
173     void Test6338(void);
174
175     void Test6726(void);
176
177     void Test6880(void);
178
179     void TestISOEra(void);
180
181     void TestFormalChineseDate(void);
182
183     void TestStandAloneGMTParse(void);
184
185     void TestParsePosition(void);
186
187     void TestMonthPatterns(void);
188
189     void TestContext(void);
190
191     void TestNonGregoFmtParse(void);
192
193     void TestFormatsWithNumberSystems(void);
194
195 public:
196     /**
197      * Test host-specific formatting.
198      */
199     void TestHost(void);
200
201 public:
202     /**
203      * Test patterns added in CLDR 1.4, CLDR 23
204      */
205     void TestEras(void);
206
207     void TestNarrowNames(void);
208
209     void TestShortDays(void);
210
211     void TestStandAloneDays(void);
212
213     void TestStandAloneMonths(void);
214
215     void TestQuarters(void);
216
217     void TestZTimeZoneParsing(void);
218
219     void TestRelativeClone(void);
220
221     void TestHostClone(void);
222
223     void TestHebrewClone(void);
224
225     void TestDateFormatSymbolsClone(void);
226
227     void TestTimeZoneDisplayName(void);
228
229     void TestRoundtripWithCalendar(void);
230
231 public:
232     /***
233      * Test Relative Dates
234      */
235      void TestRelative(void);
236 /*   void TestRelativeError(void);
237      void TestRelativeOther(void);
238 */
239
240     void TestDotAndAtLeniency();
241
242     void TestDateFormatLeniency();
243
244     void TestParseMultiPatternMatch();
245
246     void TestParseLeniencyAPIs();
247
248     // test override NumberFormat
249     void TestNumberFormatOverride();
250     void TestCreateInstanceForSkeleton();
251     void TestCreateInstanceForSkeletonDefault();
252     void TestCreateInstanceForSkeletonWithCalendar();
253     void TestDFSCreateForLocaleNonGregorianLocale();
254     void TestDFSCreateForLocaleWithCalendarInLocale();
255     void TestChangeCalendar();
256
257     void TestPatternFromSkeleton();
258
259     void TestAmPmMidnightNoon();
260     void TestFlexibleDayPeriod();
261     void TestDayPeriodWithLocales();
262     void TestMinuteSecondFieldsInOddPlaces();
263     void TestDayPeriodParsing();
264
265 private:
266     UBool showParse(DateFormat &format, const UnicodeString &formattedString);
267
268 public:
269     /**
270      * Test parsing a number as a string
271      */
272     void TestNumberAsStringParsing(void);
273
274  private:
275       void TestRelative(int daysdelta,
276                                   const Locale& loc,
277                                   const char *expectChars);
278
279  private:
280     void expectParse(const char** data, int32_t data_length,
281                      const Locale& locale);
282
283     void expect(const char** data, int32_t data_length,
284                 const Locale& loc);
285
286     void expectFormat(const char **data, int32_t data_length,
287                       const Locale &locale);
288
289 };
290
291 #endif /* #if !UCONFIG_NO_FORMATTING */
292
293 #endif // _DATEFORMATTEST_
294 //eof