1
2 /********************************************************************
3 * COPYRIGHT:
4 * Copyright (c) 1997-2006, International Business Machines Corporation and
5 * others. All Rights Reserved.
6 ********************************************************************/
7
8 #include "unicode/utypes.h"
9
10 #if !UCONFIG_NO_FORMATTING
11
12 #include "sdtfmtts.h"
13
14 #include "unicode/smpdtfmt.h"
15 #include "unicode/dtfmtsym.h"
16
17 // This is an API test, not a unit test. It doesn't test very many cases, and doesn't
18 // try to test the full functionality. It just calls each function in the class and
19 // verifies that it works on a basic level.
20
runIndexedTest(int32_t index,UBool exec,const char * & name,char *)21 void IntlTestSimpleDateFormatAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
22 {
23 if (exec) logln("TestSuite SimpleDateFormatAPI");
24 switch (index) {
25 case 0: name = "SimpleDateFormat API test";
26 if (exec) {
27 logln("SimpleDateFormat API test---"); logln("");
28 UErrorCode status = U_ZERO_ERROR;
29 Locale saveLocale;
30 Locale::setDefault(Locale::getEnglish(), status);
31 if(U_FAILURE(status)) {
32 errln("ERROR: Could not set default locale, test may not give correct results");
33 }
34 testAPI(/*par*/);
35 Locale::setDefault(saveLocale, status);
36 }
37 break;
38
39 default: name = ""; break;
40 }
41 }
42
43 /**
44 * Test various generic API methods of SimpleDateFormat for API coverage.
45 */
testAPI()46 void IntlTestSimpleDateFormatAPI::testAPI(/*char *par*/)
47 {
48 UErrorCode status = U_ZERO_ERROR;
49
50 // ======= Test constructors
51
52 logln("Testing SimpleDateFormat constructors");
53
54 SimpleDateFormat def(status);
55 if(U_FAILURE(status)) {
56 dataerrln("ERROR: Could not create SimpleDateFormat (default) - exitting");
57 return;
58 }
59
60 status = U_ZERO_ERROR;
61 const UnicodeString pattern("yyyy.MM.dd G 'at' hh:mm:ss z");
62 SimpleDateFormat pat(pattern, status);
63 if(U_FAILURE(status)) {
64 errln("ERROR: Could not create SimpleDateFormat (pattern)");
65 }
66
67 status = U_ZERO_ERROR;
68 SimpleDateFormat pat_fr(pattern, Locale::getFrench(), status);
69 if(U_FAILURE(status)) {
70 errln("ERROR: Could not create SimpleDateFormat (pattern French)");
71 }
72
73 status = U_ZERO_ERROR;
74 DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getFrench(), status);
75 if(U_FAILURE(status)) {
76 errln("ERROR: Could not create DateFormatSymbols (French)");
77 }
78
79 status = U_ZERO_ERROR;
80 SimpleDateFormat cust1(pattern, symbols, status);
81 if(U_FAILURE(status)) {
82 dataerrln("ERROR: Could not create SimpleDateFormat (pattern, symbols*) - exitting");
83 return;
84 }
85
86 status = U_ZERO_ERROR;
87 SimpleDateFormat cust2(pattern, *symbols, status);
88 if(U_FAILURE(status)) {
89 errln("ERROR: Could not create SimpleDateFormat (pattern, symbols)");
90 }
91
92 SimpleDateFormat copy(pat);
93
94 // ======= Test clone(), assignment, and equality
95
96 logln("Testing clone(), assignment and equality operators");
97
98 if( ! (copy == pat) || copy != pat) {
99 errln("ERROR: Copy constructor (or ==) failed");
100 }
101
102 copy = cust1;
103 if(copy != cust1) {
104 errln("ERROR: Assignment (or !=) failed");
105 }
106
107 Format *clone = def.clone();
108 if( ! (*clone == def) ) {
109 errln("ERROR: Clone() (or ==) failed");
110 }
111 delete clone;
112
113 // ======= Test various format() methods
114
115 logln("Testing various format() methods");
116
117 UDate d = 837039928046.0;
118 Formattable fD(d, Formattable::kIsDate);
119
120 UnicodeString res1, res2;
121 FieldPosition pos1(0), pos2(0);
122
123 res1 = def.format(d, res1, pos1);
124 logln( (UnicodeString) "" + d + " formatted to " + res1);
125
126 status = U_ZERO_ERROR;
127 res2 = cust1.format(fD, res2, pos2, status);
128 if(U_FAILURE(status)) {
129 errln("ERROR: format(Formattable [Date]) failed");
130 }
131 logln((UnicodeString) "" + fD.getDate() + " formatted to " + res2);
132
133 // ======= Test parse()
134
135 logln("Testing parse()");
136
137 UnicodeString text("02/03/76 2:50 AM, CST");
138 UDate result1, result2;
139 ParsePosition pos(0);
140 result1 = def.parse(text, pos);
141 logln(text + " parsed into " + result1);
142
143 status = U_ZERO_ERROR;
144 result2 = def.parse(text, status);
145 if(U_FAILURE(status)) {
146 errln("ERROR: parse() failed");
147 }
148 logln(text + " parsed into " + result2);
149
150 // ======= Test getters and setters
151
152 logln("Testing getters and setters");
153
154 const DateFormatSymbols *syms = pat.getDateFormatSymbols();
155 if(!syms) {
156 errln("Couldn't obtain DateFormatSymbols. Quitting test!");
157 return;
158 }
159 if(syms->getDynamicClassID() != DateFormatSymbols::getStaticClassID()) {
160 errln("ERROR: format->getDateFormatSymbols()->getDynamicClassID() != DateFormatSymbols::getStaticClassID()");
161 }
162 DateFormatSymbols *newSyms = new DateFormatSymbols(*syms);
163 def.adoptDateFormatSymbols(newSyms);
164 pat_fr.setDateFormatSymbols(*newSyms);
165 if( *(pat.getDateFormatSymbols()) != *(def.getDateFormatSymbols())) {
166 errln("ERROR: adopt or set DateFormatSymbols() failed");
167 }
168
169 status = U_ZERO_ERROR;
170 UDate startDate = pat.get2DigitYearStart(status);
171 if(U_FAILURE(status)) {
172 errln("ERROR: getTwoDigitStartDate() failed");
173 }
174
175 status = U_ZERO_ERROR;
176 pat_fr.set2DigitYearStart(startDate, status);
177 if(U_FAILURE(status)) {
178 errln("ERROR: setTwoDigitStartDate() failed");
179 }
180
181 // ======= Test DateFormatSymbols constructor
182 newSyms =new DateFormatSymbols("gregorian", status);
183 if(U_FAILURE(status)) {
184 errln("ERROR: new DateFormatSymbols() failed");
185 }
186 def.adoptDateFormatSymbols(newSyms);
187
188 // ======= Test applyPattern()
189
190 logln("Testing applyPattern()");
191
192 UnicodeString p1("yyyy.MM.dd G 'at' hh:mm:ss z");
193 logln("Applying pattern " + p1);
194 status = U_ZERO_ERROR;
195 pat.applyPattern(p1);
196
197 UnicodeString s2;
198 s2 = pat.toPattern(s2);
199 logln("Extracted pattern is " + s2);
200 if(s2 != p1) {
201 errln("ERROR: toPattern() result did not match pattern applied");
202 }
203
204 logln("Applying pattern " + p1);
205 status = U_ZERO_ERROR;
206 pat.applyLocalizedPattern(p1, status);
207 if(U_FAILURE(status)) {
208 errln("ERROR: applyPattern() failed with " + (int32_t) status);
209 }
210 UnicodeString s3;
211 status = U_ZERO_ERROR;
212 s3 = pat.toLocalizedPattern(s3, status);
213 if(U_FAILURE(status)) {
214 errln("ERROR: toLocalizedPattern() failed");
215 }
216 logln("Extracted pattern is " + s3);
217 if(s3 != p1) {
218 errln("ERROR: toLocalizedPattern() result did not match pattern applied");
219 }
220
221 // ======= Test getStaticClassID()
222
223 logln("Testing getStaticClassID()");
224
225 status = U_ZERO_ERROR;
226 DateFormat *test = new SimpleDateFormat(status);
227 if(U_FAILURE(status)) {
228 errln("ERROR: Couldn't create a SimpleDateFormat");
229 }
230
231 if(test->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) {
232 errln("ERROR: getDynamicClassID() didn't return the expected value");
233 }
234
235 delete test;
236 }
237
238 #endif /* #if !UCONFIG_NO_FORMATTING */
239