]> git.saurik.com Git - apple/icu.git/blob - icuSources/test/intltest/miscdtfm.cpp
ICU-531.31.tar.gz
[apple/icu.git] / icuSources / test / intltest / miscdtfm.cpp
1 /***********************************************************************
2 * Copyright (c) 1997-2011, International Business Machines Corporation
3 * and others. All Rights Reserved.
4 ***********************************************************************/
5
6 #include "unicode/utypes.h"
7
8 #if !UCONFIG_NO_FORMATTING
9
10 #include "miscdtfm.h"
11
12 #include "unicode/format.h"
13 #include "unicode/decimfmt.h"
14 #include "unicode/datefmt.h"
15 #include "unicode/smpdtfmt.h"
16 #include "unicode/dtfmtsym.h"
17 #include "unicode/locid.h"
18 #include "unicode/msgfmt.h"
19 #include "unicode/numfmt.h"
20 #include "unicode/choicfmt.h"
21 #include "unicode/gregocal.h"
22
23 // *****************************************************************************
24 // class DateFormatMiscTests
25 // *****************************************************************************
26
27 #define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break;
28
29 void
30 DateFormatMiscTests::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
31 {
32 // if (exec) logln((UnicodeString)"TestSuite DateFormatMiscTests");
33 switch (index) {
34 CASE(0, test4097450)
35 CASE(1, test4099975)
36 CASE(2, test4117335)
37
38 default: name = ""; break;
39 }
40 }
41
42 UBool
43 DateFormatMiscTests::failure(UErrorCode status, const char* msg)
44 {
45 if(U_FAILURE(status)) {
46 errcheckln(status, UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status));
47 return TRUE;
48 }
49
50 return FALSE;
51 }
52
53 /*
54 * @bug 4097450
55 */
56 void
57 DateFormatMiscTests::test4097450()
58 {
59 //
60 // Date parse requiring 4 digit year.
61 //
62 UnicodeString dstring [] = {
63 UnicodeString("97"),
64 UnicodeString("1997"),
65 UnicodeString("97"),
66 UnicodeString("1997"),
67 UnicodeString("01"),
68 UnicodeString("2001"),
69 UnicodeString("01"),
70 UnicodeString("2001"),
71 UnicodeString("1"),
72 UnicodeString("1"),
73 UnicodeString("11"),
74 UnicodeString("11"),
75 UnicodeString("111"),
76 UnicodeString("111")
77 };
78
79 UnicodeString dformat [] = {
80 UnicodeString("yy"),
81 UnicodeString("yy"),
82 UnicodeString("yyyy"),
83 UnicodeString("yyyy"),
84 UnicodeString("yy"),
85 UnicodeString("yy"),
86 UnicodeString("yyyy"),
87 UnicodeString("yyyy"),
88 UnicodeString("yy"),
89 UnicodeString("yyyy"),
90 UnicodeString("yy"),
91 UnicodeString("yyyy"),
92 UnicodeString("yy"),
93 UnicodeString("yyyy")
94 };
95
96 /* UBool dresult [] = {
97 TRUE,
98 FALSE,
99 FALSE,
100 TRUE,
101 TRUE,
102 FALSE,
103 FALSE,
104 TRUE,
105 FALSE,
106 FALSE,
107 TRUE,
108 FALSE,
109 FALSE,
110 FALSE
111 };*/
112
113 UErrorCode status = U_ZERO_ERROR;
114 SimpleDateFormat *formatter;
115 SimpleDateFormat *resultFormatter = new SimpleDateFormat((UnicodeString)"yyyy", status);
116 if (U_FAILURE(status)) {
117 dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
118 return;
119 }
120
121 logln("Format\tSource\tResult");
122 logln("-------\t-------\t-------");
123 for (int i = 0; i < 14/*dstring.length*/; i++)
124 {
125 log(dformat[i] + "\t" + dstring[i] + "\t");
126 formatter = new SimpleDateFormat(dformat[i], status);
127 if(failure(status, "new SimpleDateFormat")) return;
128 //try {
129 UnicodeString str;
130 FieldPosition pos(FieldPosition::DONT_CARE);
131 logln(resultFormatter->format(formatter->parse(dstring[i], status), str, pos));
132 failure(status, "resultFormatter->format");
133 //if ( !dresult[i] ) System.out.print(" <-- error!");
134 /*}
135 catch (ParseException exception) {
136 //if ( dresult[i] ) System.out.print(" <-- error!");
137 System.out.print("exception --> " + exception);
138 }*/
139 delete formatter;
140 logln();
141 }
142
143 delete resultFormatter;
144 }
145
146 /*
147 * @bug 4099975
148 */
149 void
150 DateFormatMiscTests::test4099975()
151 {
152 /**
153 * Test Constructor SimpleDateFormat::SimpleDateFormat (const UnicodeString & pattern,
154 * const DateFormatSymbols & formatData, UErrorCode & status )
155 * The DateFormatSymbols object is NOT adopted; Modifying the original DateFormatSymbols
156 * should not change the SimpleDateFormat's behavior.
157 */
158 UDate d = Calendar::getNow();
159 {
160 UErrorCode status = U_ZERO_ERROR;
161 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
162 if (U_FAILURE(status)) {
163 dataerrln("Unable to create DateFormatSymbols - %s", u_errorName(status));
164 return;
165 }
166 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), *symbols, status);
167 if(failure(status, "new SimpleDateFormat")) return;
168 UnicodeString format0;
169 format0 = df->format(d, format0);
170 UnicodeString localizedPattern0;
171 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
172 failure(status, "df->toLocalizedPattern");
173 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
174 UnicodeString format1;
175 format1 = df->format(d, format1);
176 if (format0 != format1) {
177 errln(UnicodeString("Formats are different. format0: ") + format0
178 + UnicodeString("; format1: ") + format1);
179 }
180 UnicodeString localizedPattern1;
181 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
182 failure(status, "df->toLocalizedPattern");
183 if (localizedPattern0 != localizedPattern1) {
184 errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0
185 + UnicodeString("; localizedPattern1: ") + localizedPattern1);
186 }
187 delete symbols;
188 delete df;
189 }
190 /*
191 * Test void SimpleDateFormat::setDateFormatSymbols ( const DateFormatSymbols & newFormatSymbols )
192 * Modifying the original DateFormatSymbols should not change the SimpleDateFormat's behavior.
193 */
194 {
195 UErrorCode status = U_ZERO_ERROR;
196 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
197 if(failure(status, "new DateFormatSymbols")) return;
198 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status);
199 if(failure(status, "new SimpleDateFormat")) return;
200 df->setDateFormatSymbols(*symbols);
201 UnicodeString format0;
202 format0 = df->format(d, format0);
203 UnicodeString localizedPattern0;
204 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
205 failure(status, "df->toLocalizedPattern");
206 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
207 UnicodeString format1;
208 format1 = df->format(d, format1);
209 if (format0 != format1) {
210 errln(UnicodeString("Formats are different. format0: ") + format0
211 + UnicodeString("; format1: ") + format1);
212 }
213 UnicodeString localizedPattern1;
214 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
215 failure(status, "df->toLocalizedPattern");
216 if (localizedPattern0 != localizedPattern1) {
217 errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0
218 + UnicodeString("; localizedPattern1: ") + localizedPattern1);
219 }
220 delete symbols;
221 delete df;
222
223 }
224 //Test the pointer version of the constructor (and the adoptDateFormatSymbols method)
225 {
226 UErrorCode status = U_ZERO_ERROR;
227 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
228 if(failure(status, "new DateFormatSymbols")) return;
229 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), symbols, status);
230 if(failure(status, "new SimpleDateFormat")) return;
231 UnicodeString format0;
232 format0 = df->format(d, format0);
233 UnicodeString localizedPattern0;
234 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
235 failure(status, "df->toLocalizedPattern");
236 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
237 UnicodeString format1;
238 format1 = df->format(d, format1);
239 if (format0 != format1) {
240 errln(UnicodeString("Formats are different. format0: ") + format0
241 + UnicodeString("; format1: ") + format1);
242 }
243 UnicodeString localizedPattern1;
244 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
245 failure(status, "df->toLocalizedPattern");
246 if (localizedPattern0 == localizedPattern1) {
247 errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0
248 + UnicodeString("; localizedPattern1: ") + localizedPattern1);
249 }
250 //delete symbols; the caller is no longer responsible for deleting the symbols
251 delete df;
252 }
253 //
254 {
255 UErrorCode status = U_ZERO_ERROR;
256 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
257 failure(status, "new DateFormatSymbols");
258 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status);
259 if(failure(status, "new SimpleDateFormat")) return;
260 df-> adoptDateFormatSymbols(symbols);
261 UnicodeString format0;
262 format0 = df->format(d, format0);
263 UnicodeString localizedPattern0;
264 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
265 failure(status, "df->toLocalizedPattern");
266 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
267 UnicodeString format1;
268 format1 = df->format(d, format1);
269 if (format0 != format1) {
270 errln(UnicodeString("Formats are different. format0: ") + format0
271 + UnicodeString("; format1: ") + format1);
272 }
273 UnicodeString localizedPattern1;
274 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
275 failure(status, "df->toLocalizedPattern");
276 if (localizedPattern0 == localizedPattern1) {
277 errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0
278 + UnicodeString("; localizedPattern1: ") + localizedPattern1);
279 }
280 //delete symbols; the caller is no longer responsible for deleting the symbols
281 delete df;
282 }
283 }
284
285 /*
286 * @test @(#)bug4117335.java 1.1 3/5/98
287 *
288 * @bug 4117335
289 */
290 void
291 DateFormatMiscTests::test4117335()
292 {
293 //UnicodeString bc = "\u7d00\u5143\u524d";
294 UChar bcC [] = {
295 0x7D00,
296 0x5143,
297 0x524D
298 };
299 UnicodeString bc(bcC, 3, 3);
300
301 //UnicodeString ad = "\u897f\u66a6";
302 UChar adC [] = {
303 0x897F,
304 0x66A6
305 };
306 UnicodeString ad(adC, 2, 2);
307
308 //UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642";
309 UChar jstLongC [] = {
310 0x65e5,
311 0x672c,
312 0x6a19,
313 0x6e96,
314 0x6642
315 };
316 UChar jdtLongC [] = {0x65E5, 0x672C, 0x590F, 0x6642, 0x9593};
317
318 UnicodeString jstLong(jstLongC, 5, 5);
319
320 // UnicodeString jstShort = "JST";
321
322 UnicodeString tzID = "Asia/Tokyo";
323
324 UnicodeString jdtLong(jdtLongC, 5, 5);
325
326 // UnicodeString jdtShort = "JDT";
327 UErrorCode status = U_ZERO_ERROR;
328 DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), status);
329 if(U_FAILURE(status)) {
330 dataerrln("Failure creating DateFormatSymbols, %s", u_errorName(status));
331 delete symbols;
332 return;
333 }
334 failure(status, "new DateFormatSymbols");
335 int32_t eraCount = 0;
336 const UnicodeString *eras = symbols->getEraNames(eraCount);
337
338 logln(UnicodeString("BC = ") + eras[0]);
339 if (eras[0] != bc) {
340 errln("*** Should have been " + bc);
341 //throw new Exception("Error in BC");
342 }
343
344 logln(UnicodeString("AD = ") + eras[1]);
345 if (eras[1] != ad) {
346 errln("*** Should have been " + ad);
347 //throw new Exception("Error in AD");
348 }
349
350 int32_t rowCount, colCount;
351 const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount);
352 //don't hard code the index .. compute it.
353 int32_t index = -1;
354 for (int32_t i = 0; i < rowCount; ++i) {
355 if (tzID == (zones[i][0])) {
356 index = i;
357 break;
358 }
359 }
360 logln(UnicodeString("Long zone name = ") + zones[index][1]);
361 if (zones[index][1] != jstLong) {
362 errln("*** Should have been " + prettify(jstLong)+ " but it is: " + prettify(zones[index][1]));
363 //throw new Exception("Error in long TZ name");
364 }
365 // logln(UnicodeString("Short zone name = ") + zones[index][2]);
366 // if (zones[index][2] != jstShort) {
367 // errln("*** Should have been " + prettify(jstShort) + " but it is: " + prettify(zones[index][2]));
368 // //throw new Exception("Error in short TZ name");
369 // }
370 logln(UnicodeString("Long zone name = ") + zones[index][3]);
371 if (zones[index][3] != jdtLong) {
372 errln("*** Should have been " + prettify(jstLong) + " but it is: " + prettify(zones[index][3]));
373 //throw new Exception("Error in long TZ name");
374 }
375 // logln(UnicodeString("SHORT zone name = ") + zones[index][4]);
376 // if (zones[index][4] != jdtShort) {
377 // errln("*** Should have been " + prettify(jstShort)+ " but it is: " + prettify(zones[index][4]));
378 // //throw new Exception("Error in short TZ name");
379 // }
380 delete symbols;
381
382 }
383
384 #endif /* #if !UCONFIG_NO_FORMATTING */