1/********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1997-2009, 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 DataeFormat 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     *  "Test written by Wally Wedel and emailed to me."
27     *  Test handling of timezone offsets
28     **/
29    virtual void TestWallyWedel(void);
30    /**
31     * Test operator==
32     */
33    virtual void TestEquals(void);
34    /**
35     * Test the parsing of 2-digit years.
36     */
37    virtual void TestTwoDigitYearDSTParse(void);
38
39public: // package
40    // internal utility routine (genrates escape sequences for characters)
41    static UnicodeString& escape(UnicodeString& s);
42
43public:
44    /**
45     * Verify that returned field position indices are correct.
46     */
47    void TestFieldPosition(void);
48
49    void TestGeneral();
50
51public: // package
52    // internal utility function
53    static void getFieldText(DateFormat* df, int32_t field, UDate date, UnicodeString& str);
54
55public:
56    /**
57     * Verify that strings which contain incomplete specifications are parsed
58     * correctly.  In some instances, this means not being parsed at all, and
59     * returning an appropriate error.
60     */
61    virtual void TestPartialParse994(void);
62
63public: // package
64    // internal test subroutine, used by TestPartialParse994
65    virtual void tryPat994(SimpleDateFormat* format, const char* pat, const char* str, UDate expected);
66
67public:
68    /**
69     * Verify the behavior of patterns in which digits for different fields run together
70     * without intervening separators.
71     */
72    virtual void TestRunTogetherPattern985(void);
73    /**
74     * Verify the behavior of patterns in which digits for different fields run together
75     * without intervening separators.
76     */
77    virtual void TestRunTogetherPattern917(void);
78
79public: // package
80    // internal test subroutine, used by TestRunTogetherPattern917
81    virtual void testIt917(SimpleDateFormat* fmt, UnicodeString& str, UDate expected);
82
83public:
84    /**
85     * Verify the handling of Czech June and July, which have the unique attribute that
86     * one is a proper prefix substring of the other.
87     */
88    virtual void TestCzechMonths459(void);
89    /**
90     * Test the handling of 'D' in patterns.
91     */
92    virtual void TestLetterDPattern212(void);
93    /**
94     * Test the day of year pattern.
95     */
96    virtual void TestDayOfYearPattern195(void);
97
98public: // package
99    // interl test subroutine, used by TestDayOfYearPattern195
100    virtual void tryPattern(SimpleDateFormat& sdf, UDate d, const char* pattern, UDate expected);
101
102public:
103    /**
104     * Test the handling of single quotes in patterns.
105     */
106    virtual void TestQuotePattern161(void);
107    /**
108     * Verify the correct behavior when handling invalid input strings.
109     */
110    virtual void TestBadInput135(void);
111
112public:
113    /**
114     * Verify the correct behavior when parsing an array of inputs against an
115     * array of patterns, with known results.  The results are encoded after
116     * the input strings in each row.
117     */
118    virtual void TestBadInput135a(void);
119    /**
120     * Test the parsing of two-digit years.
121     */
122    virtual void TestTwoDigitYear(void);
123
124public: // package
125    // internal test subroutine, used by TestTwoDigitYear
126    virtual void parse2DigitYear(DateFormat& fmt, const char* str, UDate expected);
127
128public:
129    /**
130     * Test the formatting of time zones.
131     */
132    virtual void TestDateFormatZone061(void);
133    /**
134     * Further test the formatting of time zones.
135     */
136    virtual void TestDateFormatZone146(void);
137
138    void TestTimeZoneStringsAPI(void);
139
140    void TestGMTParsing(void);
141
142public: // package
143    /**
144     * Test the formatting of dates in different locales.
145     */
146    virtual void TestLocaleDateFormat(void);
147
148    virtual void TestDateFormatCalendar(void);
149
150    virtual void TestSpaceParsing(void);
151
152    void TestExactCountFormat(void);
153
154    void TestWhiteSpaceParsing(void);
155
156    void TestInvalidPattern(void);
157
158    void TestGreekMay(void);
159
160    void TestGenericTime(void);
161
162    void TestGenericTimeZoneOrder(void);
163
164    void Test6338(void);
165
166    void Test6726(void);
167
168    void Test6880(void);
169
170public:
171    /**
172     * Test host-specific formatting.
173     */
174    void TestHost(void);
175
176public:
177    /**
178     * Test patterns added in CLDR 1.4
179     */
180    void TestEras(void);
181
182    void TestNarrowNames(void);
183
184    void TestStandAloneDays(void);
185
186    void TestStandAloneMonths(void);
187
188    void TestQuarters(void);
189
190    void TestZTimeZoneParsing(void);
191
192    void TestRelativeClone(void);
193
194    void TestHostClone(void);
195
196    void TestTimeZoneDisplayName(void);
197
198    void TestRoundtripWithCalendar(void);
199
200public:
201    /***
202     * Test Relative Dates
203     */
204     void TestRelative(void);
205/*   void TestRelativeError(void);
206     void TestRelativeOther(void);
207*/
208
209 private:
210      void TestRelative(int daysdelta,
211                                  const Locale& loc,
212                                  const char *expectChars);
213
214 private:
215    void expectParse(const char** data, int32_t data_length,
216                     const Locale& locale);
217
218    void expect(const char** data, int32_t data_length,
219                const Locale& loc);
220
221    void expectFormat(const char **data, int32_t data_length,
222                      const Locale &locale);
223};
224
225#endif /* #if !UCONFIG_NO_FORMATTING */
226
227#endif // _DATEFORMATTEST_
228//eof
229