OLD | NEW |
| (Empty) |
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 "---"); log
ln((UnicodeString)""); test(); } break; | |
28 | |
29 void | |
30 DateFormatMiscTests::runIndexedTest( int32_t index, UBool exec, const char* &nam
e, 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)"yyy
y", 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 DateF
ormatSymbols | |
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(), stat
us); | |
162 if (U_FAILURE(status)) { | |
163 dataerrln("Unable to create DateFormatSymbols - %s", u_errorName(sta
tus)); | |
164 return; | |
165 } | |
166 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), *s
ymbols, 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")); // c
hange 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 DateFormatSymbo
ls & newFormatSymbols ) | |
192 * Modifying the original DateFormatSymbols should not change the SimpleDate
Format's behavior. | |
193 */ | |
194 { | |
195 UErrorCode status = U_ZERO_ERROR; | |
196 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), stat
us); | |
197 if(failure(status, "new DateFormatSymbols")) return; | |
198 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), st
atus); | |
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")); // c
hange 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 adoptDateFormatSymbol
s method) | |
225 { | |
226 UErrorCode status = U_ZERO_ERROR; | |
227 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), stat
us); | |
228 if(failure(status, "new DateFormatSymbols")) return; | |
229 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), sy
mbols, 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")); // c
hange 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. localizedPatt
ern0: ") + localizedPattern0 | |
248 + UnicodeString("; localizedPattern1: ") + localizedPattern1); | |
249 } | |
250 //delete symbols; the caller is no longer responsible for deleting the s
ymbols | |
251 delete df; | |
252 } | |
253 // | |
254 { | |
255 UErrorCode status = U_ZERO_ERROR; | |
256 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), stat
us); | |
257 failure(status, "new DateFormatSymbols"); | |
258 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), st
atus); | |
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")); // c
hange 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. localizedPatt
ern0: ") + localizedPattern0 | |
278 + UnicodeString("; localizedPattern1: ") + localizedPattern1); | |
279 } | |
280 //delete symbols; the caller is no longer responsible for deleting the s
ymbols | |
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(), statu
s); | |
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: " + pret
tify(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: " + pre
ttify(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: " + p
rettify(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 */ | |
OLD | NEW |