]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/intltest/miscdtfm.cpp
ICU-400.42.tar.gz
[apple/icu.git] / icuSources / test / intltest / miscdtfm.cpp
CommitLineData
374ca955 1/***********************************************************************
46f4442e 2 * Copyright (c) 1997-2007, International Business Machines Corporation
374ca955
A
3 * and others. All Rights Reserved.
4 ***********************************************************************/
b75a7d8f
A
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
29void
30DateFormatMiscTests::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
42UBool
43DateFormatMiscTests::failure(UErrorCode status, const char* msg)
44{
45 if(U_FAILURE(status)) {
46 errln(UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status));
47 return TRUE;
48 }
49
50 return FALSE;
51}
52
53/*
54 * @bug 4097450
55 */
56void
57DateFormatMiscTests::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 failure(status, "new SimpleDateFormat");
117
118 logln("Format\tSource\tResult");
119 logln("-------\t-------\t-------");
120 for (int i = 0; i < 14/*dstring.length*/; i++)
121 {
122 log(dformat[i] + "\t" + dstring[i] + "\t");
123 formatter = new SimpleDateFormat(dformat[i], status);
73c04bcf 124 if(failure(status, "new SimpleDateFormat")) return;
b75a7d8f
A
125 //try {
126 UnicodeString str;
127 FieldPosition pos(FieldPosition::DONT_CARE);
128 logln(resultFormatter->format(formatter->parse(dstring[i], status), str, pos));
129 failure(status, "resultFormatter->format");
130 //if ( !dresult[i] ) System.out.print(" <-- error!");
131 /*}
132 catch (ParseException exception) {
133 //if ( dresult[i] ) System.out.print(" <-- error!");
134 System.out.print("exception --> " + exception);
135 }*/
136 delete formatter;
137 logln();
138 }
139
140 delete resultFormatter;
141}
142
143/*
144 * @bug 4099975
145 */
146void
147DateFormatMiscTests::test4099975()
148{
149 /**
150 * Test Constructor SimpleDateFormat::SimpleDateFormat (const UnicodeString & pattern,
151 * const DateFormatSymbols & formatData, UErrorCode & status )
152 * The DateFormatSymbols object is NOT adopted; Modifying the original DateFormatSymbols
153 * should not change the SimpleDateFormat's behavior.
154 */
155 UDate d = Calendar::getNow();
156 {
157 UErrorCode status = U_ZERO_ERROR;
158 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
73c04bcf 159 if(failure(status, "new DateFormatSymbols")) return;
b75a7d8f 160 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), *symbols, status);
73c04bcf 161 if(failure(status, "new SimpleDateFormat")) return;
b75a7d8f
A
162 UnicodeString format0;
163 format0 = df->format(d, format0);
164 UnicodeString localizedPattern0;
165 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
166 failure(status, "df->toLocalizedPattern");
167 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
168 UnicodeString format1;
169 format1 = df->format(d, format1);
170 if (format0 != format1) {
171 errln(UnicodeString("Formats are different. format0: ") + format0
172 + UnicodeString("; format1: ") + format1);
173 }
174 UnicodeString localizedPattern1;
175 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
176 failure(status, "df->toLocalizedPattern");
177 if (localizedPattern0 != localizedPattern1) {
178 errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0
179 + UnicodeString("; localizedPattern1: ") + localizedPattern1);
180 }
181 delete symbols;
182 delete df;
183 }
184 /*
185 * Test void SimpleDateFormat::setDateFormatSymbols ( const DateFormatSymbols & newFormatSymbols )
186 * Modifying the original DateFormatSymbols should not change the SimpleDateFormat's behavior.
187 */
188 {
189 UErrorCode status = U_ZERO_ERROR;
190 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
73c04bcf 191 if(failure(status, "new DateFormatSymbols")) return;
b75a7d8f 192 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status);
73c04bcf 193 if(failure(status, "new SimpleDateFormat")) return;
b75a7d8f
A
194 df->setDateFormatSymbols(*symbols);
195 UnicodeString format0;
196 format0 = df->format(d, format0);
197 UnicodeString localizedPattern0;
198 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
199 failure(status, "df->toLocalizedPattern");
200 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
201 UnicodeString format1;
202 format1 = df->format(d, format1);
203 if (format0 != format1) {
204 errln(UnicodeString("Formats are different. format0: ") + format0
205 + UnicodeString("; format1: ") + format1);
206 }
207 UnicodeString localizedPattern1;
208 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
209 failure(status, "df->toLocalizedPattern");
210 if (localizedPattern0 != localizedPattern1) {
211 errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0
212 + UnicodeString("; localizedPattern1: ") + localizedPattern1);
213 }
214 delete symbols;
215 delete df;
216
217 }
218 //Test the pointer version of the constructor (and the adoptDateFormatSymbols method)
219 {
220 UErrorCode status = U_ZERO_ERROR;
221 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
73c04bcf 222 if(failure(status, "new DateFormatSymbols")) return;
b75a7d8f 223 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), symbols, status);
73c04bcf 224 if(failure(status, "new SimpleDateFormat")) return;
b75a7d8f
A
225 UnicodeString format0;
226 format0 = df->format(d, format0);
227 UnicodeString localizedPattern0;
228 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
229 failure(status, "df->toLocalizedPattern");
230 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
231 UnicodeString format1;
232 format1 = df->format(d, format1);
233 if (format0 != format1) {
234 errln(UnicodeString("Formats are different. format0: ") + format0
235 + UnicodeString("; format1: ") + format1);
236 }
237 UnicodeString localizedPattern1;
238 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
239 failure(status, "df->toLocalizedPattern");
240 if (localizedPattern0 == localizedPattern1) {
241 errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0
242 + UnicodeString("; localizedPattern1: ") + localizedPattern1);
243 }
244 //delete symbols; the caller is no longer responsible for deleting the symbols
245 delete df;
246 }
247 //
248 {
249 UErrorCode status = U_ZERO_ERROR;
250 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status);
251 failure(status, "new DateFormatSymbols");
252 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status);
73c04bcf 253 if(failure(status, "new SimpleDateFormat")) return;
b75a7d8f
A
254 df-> adoptDateFormatSymbols(symbols);
255 UnicodeString format0;
256 format0 = df->format(d, format0);
257 UnicodeString localizedPattern0;
258 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status);
259 failure(status, "df->toLocalizedPattern");
260 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
261 UnicodeString format1;
262 format1 = df->format(d, format1);
263 if (format0 != format1) {
264 errln(UnicodeString("Formats are different. format0: ") + format0
265 + UnicodeString("; format1: ") + format1);
266 }
267 UnicodeString localizedPattern1;
268 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status);
269 failure(status, "df->toLocalizedPattern");
270 if (localizedPattern0 == localizedPattern1) {
271 errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0
272 + UnicodeString("; localizedPattern1: ") + localizedPattern1);
273 }
274 //delete symbols; the caller is no longer responsible for deleting the symbols
275 delete df;
276 }
277}
278
279/*
280 * @test @(#)bug4117335.java 1.1 3/5/98
281 *
282 * @bug 4117335
283 */
284void
285DateFormatMiscTests::test4117335()
286{
287 //UnicodeString bc = "\u7d00\u5143\u524d";
288 UChar bcC [] = {
289 0x7D00,
290 0x5143,
291 0x524D
292 };
293 UnicodeString bc(bcC, 3, 3);
294
295 //UnicodeString ad = "\u897f\u66a6";
296 UChar adC [] = {
297 0x897F,
298 0x66A6
299 };
300 UnicodeString ad(adC, 2, 2);
301
302 //UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642";
303 UChar jstLongC [] = {
304 0x65e5,
305 0x672c,
306 0x6a19,
307 0x6e96,
308 0x6642
309 };
73c04bcf
A
310 UChar jdtLongC [] = {0x65E5, 0x672C, 0x590F, 0x6642, 0x9593};
311
b75a7d8f
A
312 UnicodeString jstLong(jstLongC, 5, 5);
313
314 UnicodeString jstShort = "JST";
b75a7d8f 315
73c04bcf
A
316 UnicodeString tzID = "Asia/Tokyo";
317
318 UnicodeString jdtLong(jdtLongC, 5, 5);
319
320 UnicodeString jdtShort = "JDT";
b75a7d8f
A
321 UErrorCode status = U_ZERO_ERROR;
322 DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), status);
323 if(U_FAILURE(status)) {
324 errln("Failure creating DateFormatSymbols, %s", u_errorName(status));
325 delete symbols;
326 return;
327 }
328 failure(status, "new DateFormatSymbols");
329 int32_t eraCount = 0;
330 const UnicodeString *eras = symbols->getEras(eraCount);
331
332 logln(UnicodeString("BC = ") + eras[0]);
333 if (eras[0] != bc) {
334 errln("*** Should have been " + bc);
335 //throw new Exception("Error in BC");
336 }
337
338 logln(UnicodeString("AD = ") + eras[1]);
339 if (eras[1] != ad) {
340 errln("*** Should have been " + ad);
341 //throw new Exception("Error in AD");
342 }
343
344 int32_t rowCount, colCount;
345 const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount);
73c04bcf
A
346 //don't hard code the index .. compute it.
347 int32_t index = -1;
348 for (int32_t i = 0; i < rowCount; ++i) {
349 if (tzID == (zones[i][0])) {
350 index = i;
351 break;
352 }
353 }
354 logln(UnicodeString("Long zone name = ") + zones[index][1]);
355 if (zones[index][1] != jstLong) {
356 errln("*** Should have been " + prettify(jstLong)+ " but it is: " + prettify(zones[index][1]));
b75a7d8f
A
357 //throw new Exception("Error in long TZ name");
358 }
73c04bcf
A
359 logln(UnicodeString("Short zone name = ") + zones[index][2]);
360 if (zones[index][2] != jstShort) {
361 errln("*** Should have been " + prettify(jstShort) + " but it is: " + prettify(zones[index][2]));
b75a7d8f
A
362 //throw new Exception("Error in short TZ name");
363 }
73c04bcf
A
364 logln(UnicodeString("Long zone name = ") + zones[index][3]);
365 if (zones[index][3] != jdtLong) {
366 errln("*** Should have been " + prettify(jstLong) + " but it is: " + prettify(zones[index][3]));
b75a7d8f
A
367 //throw new Exception("Error in long TZ name");
368 }
73c04bcf
A
369 logln(UnicodeString("SHORT zone name = ") + zones[index][4]);
370 if (zones[index][4] != jdtShort) {
371 errln("*** Should have been " + prettify(jstShort)+ " but it is: " + prettify(zones[index][4]));
b75a7d8f
A
372 //throw new Exception("Error in short TZ name");
373 }
374 delete symbols;
375
376}
377
378#endif /* #if !UCONFIG_NO_FORMATTING */