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