1 /***********************************************************************
3 * Copyright (c) 1997-2004, International Business Machines Corporation
4 * and others. All Rights Reserved.
5 ***********************************************************************/
7 #include "unicode/utypes.h"
9 #if !UCONFIG_NO_FORMATTING
13 #include "unicode/format.h"
14 #include "unicode/decimfmt.h"
15 #include "unicode/datefmt.h"
16 #include "unicode/smpdtfmt.h"
17 #include "unicode/dtfmtsym.h"
18 #include "unicode/locid.h"
19 #include "unicode/msgfmt.h"
20 #include "unicode/numfmt.h"
21 #include "unicode/choicfmt.h"
22 #include "unicode/gregocal.h"
24 // *****************************************************************************
25 // class DateFormatMiscTests
26 // *****************************************************************************
28 #define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break;
31 DateFormatMiscTests::runIndexedTest( int32_t index
, UBool exec
, const char* &name
, char* /*par*/ )
33 // if (exec) logln((UnicodeString)"TestSuite DateFormatMiscTests");
39 default: name
= ""; break;
44 DateFormatMiscTests::failure(UErrorCode status
, const char* msg
)
46 if(U_FAILURE(status
)) {
47 errln(UnicodeString("FAIL: ") + msg
+ " failed, error " + u_errorName(status
));
58 DateFormatMiscTests::test4097450()
61 // Date parse requiring 4 digit year.
63 UnicodeString dstring
[] = {
65 UnicodeString("1997"),
67 UnicodeString("1997"),
69 UnicodeString("2001"),
71 UnicodeString("2001"),
80 UnicodeString dformat
[] = {
83 UnicodeString("yyyy"),
84 UnicodeString("yyyy"),
87 UnicodeString("yyyy"),
88 UnicodeString("yyyy"),
90 UnicodeString("yyyy"),
92 UnicodeString("yyyy"),
97 /* UBool dresult [] = {
114 UErrorCode status
= U_ZERO_ERROR
;
115 SimpleDateFormat
*formatter
;
116 SimpleDateFormat
*resultFormatter
= new SimpleDateFormat((UnicodeString
)"yyyy", status
);
117 failure(status
, "new SimpleDateFormat");
119 logln("Format\tSource\tResult");
120 logln("-------\t-------\t-------");
121 for (int i
= 0; i
< 14/*dstring.length*/; i
++)
123 log(dformat
[i
] + "\t" + dstring
[i
] + "\t");
124 formatter
= new SimpleDateFormat(dformat
[i
], status
);
125 failure(status
, "new SimpleDateFormat");
128 FieldPosition
pos(FieldPosition::DONT_CARE
);
129 logln(resultFormatter
->format(formatter
->parse(dstring
[i
], status
), str
, pos
));
130 failure(status
, "resultFormatter->format");
131 //if ( !dresult[i] ) System.out.print(" <-- error!");
133 catch (ParseException exception) {
134 //if ( dresult[i] ) System.out.print(" <-- error!");
135 System.out.print("exception --> " + exception);
141 delete resultFormatter
;
148 DateFormatMiscTests::test4099975()
151 * Test Constructor SimpleDateFormat::SimpleDateFormat (const UnicodeString & pattern,
152 * const DateFormatSymbols & formatData, UErrorCode & status )
153 * The DateFormatSymbols object is NOT adopted; Modifying the original DateFormatSymbols
154 * should not change the SimpleDateFormat's behavior.
156 UDate d
= Calendar::getNow();
158 UErrorCode status
= U_ZERO_ERROR
;
159 DateFormatSymbols
* symbols
= new DateFormatSymbols(Locale::getUS(), status
);
160 failure(status
, "new DateFormatSymbols");
161 SimpleDateFormat
*df
= new SimpleDateFormat(UnicodeString("E hh:mm"), *symbols
, status
);
162 failure(status
, "new SimpleDateFormat");
163 UnicodeString format0
;
164 format0
= df
->format(d
, format0
);
165 UnicodeString localizedPattern0
;
166 localizedPattern0
= df
->toLocalizedPattern(localizedPattern0
, status
);
167 failure(status
, "df->toLocalizedPattern");
168 symbols
->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
169 UnicodeString format1
;
170 format1
= df
->format(d
, format1
);
171 if (format0
!= format1
) {
172 errln(UnicodeString("Formats are different. format0: ") + format0
173 + UnicodeString("; format1: ") + format1
);
175 UnicodeString localizedPattern1
;
176 localizedPattern1
= df
->toLocalizedPattern(localizedPattern1
, status
);
177 failure(status
, "df->toLocalizedPattern");
178 if (localizedPattern0
!= localizedPattern1
) {
179 errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0
180 + UnicodeString("; localizedPattern1: ") + localizedPattern1
);
186 * Test void SimpleDateFormat::setDateFormatSymbols ( const DateFormatSymbols & newFormatSymbols )
187 * Modifying the original DateFormatSymbols should not change the SimpleDateFormat's behavior.
190 UErrorCode status
= U_ZERO_ERROR
;
191 DateFormatSymbols
* symbols
= new DateFormatSymbols(Locale::getUS(), status
);
192 failure(status
, "new DateFormatSymbols");
193 SimpleDateFormat
*df
= new SimpleDateFormat(UnicodeString("E hh:mm"), status
);
194 failure(status
, "new SimpleDateFormat");
195 df
->setDateFormatSymbols(*symbols
);
196 UnicodeString format0
;
197 format0
= df
->format(d
, format0
);
198 UnicodeString localizedPattern0
;
199 localizedPattern0
= df
->toLocalizedPattern(localizedPattern0
, status
);
200 failure(status
, "df->toLocalizedPattern");
201 symbols
->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
202 UnicodeString format1
;
203 format1
= df
->format(d
, format1
);
204 if (format0
!= format1
) {
205 errln(UnicodeString("Formats are different. format0: ") + format0
206 + UnicodeString("; format1: ") + format1
);
208 UnicodeString localizedPattern1
;
209 localizedPattern1
= df
->toLocalizedPattern(localizedPattern1
, status
);
210 failure(status
, "df->toLocalizedPattern");
211 if (localizedPattern0
!= localizedPattern1
) {
212 errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0
213 + UnicodeString("; localizedPattern1: ") + localizedPattern1
);
219 //Test the pointer version of the constructor (and the adoptDateFormatSymbols method)
221 UErrorCode status
= U_ZERO_ERROR
;
222 DateFormatSymbols
* symbols
= new DateFormatSymbols(Locale::getUS(), status
);
223 failure(status
, "new DateFormatSymbols");
224 SimpleDateFormat
*df
= new SimpleDateFormat(UnicodeString("E hh:mm"), symbols
, status
);
225 failure(status
, "new SimpleDateFormat");
226 UnicodeString format0
;
227 format0
= df
->format(d
, format0
);
228 UnicodeString localizedPattern0
;
229 localizedPattern0
= df
->toLocalizedPattern(localizedPattern0
, status
);
230 failure(status
, "df->toLocalizedPattern");
231 symbols
->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
232 UnicodeString format1
;
233 format1
= df
->format(d
, format1
);
234 if (format0
!= format1
) {
235 errln(UnicodeString("Formats are different. format0: ") + format0
236 + UnicodeString("; format1: ") + format1
);
238 UnicodeString localizedPattern1
;
239 localizedPattern1
= df
->toLocalizedPattern(localizedPattern1
, status
);
240 failure(status
, "df->toLocalizedPattern");
241 if (localizedPattern0
== localizedPattern1
) {
242 errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0
243 + UnicodeString("; localizedPattern1: ") + localizedPattern1
);
245 //delete symbols; the caller is no longer responsible for deleting the symbols
250 UErrorCode status
= U_ZERO_ERROR
;
251 DateFormatSymbols
* symbols
= new DateFormatSymbols(Locale::getUS(), status
);
252 failure(status
, "new DateFormatSymbols");
253 SimpleDateFormat
*df
= new SimpleDateFormat(UnicodeString("E hh:mm"), status
);
254 failure(status
, "new SimpleDateFormat");
255 df
-> adoptDateFormatSymbols(symbols
);
256 UnicodeString format0
;
257 format0
= df
->format(d
, format0
);
258 UnicodeString localizedPattern0
;
259 localizedPattern0
= df
->toLocalizedPattern(localizedPattern0
, status
);
260 failure(status
, "df->toLocalizedPattern");
261 symbols
->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field
262 UnicodeString format1
;
263 format1
= df
->format(d
, format1
);
264 if (format0
!= format1
) {
265 errln(UnicodeString("Formats are different. format0: ") + format0
266 + UnicodeString("; format1: ") + format1
);
268 UnicodeString localizedPattern1
;
269 localizedPattern1
= df
->toLocalizedPattern(localizedPattern1
, status
);
270 failure(status
, "df->toLocalizedPattern");
271 if (localizedPattern0
== localizedPattern1
) {
272 errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0
273 + UnicodeString("; localizedPattern1: ") + localizedPattern1
);
275 //delete symbols; the caller is no longer responsible for deleting the symbols
281 * @test @(#)bug4117335.java 1.1 3/5/98
286 DateFormatMiscTests::test4117335()
288 //UnicodeString bc = "\u7d00\u5143\u524d";
294 UnicodeString
bc(bcC
, 3, 3);
296 //UnicodeString ad = "\u897f\u66a6";
301 UnicodeString
ad(adC
, 2, 2);
303 //UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642";
304 UChar jstLongC
[] = {
311 UnicodeString
jstLong(jstLongC
, 5, 5);
313 UnicodeString jstShort
= "JST";
316 UErrorCode status
= U_ZERO_ERROR
;
317 DateFormatSymbols
*symbols
= new DateFormatSymbols(Locale::getJapan(), status
);
318 if(U_FAILURE(status
)) {
319 errln("Failure creating DateFormatSymbols, %s", u_errorName(status
));
323 failure(status
, "new DateFormatSymbols");
324 int32_t eraCount
= 0;
325 const UnicodeString
*eras
= symbols
->getEras(eraCount
);
327 logln(UnicodeString("BC = ") + eras
[0]);
329 errln("*** Should have been " + bc
);
330 //throw new Exception("Error in BC");
333 logln(UnicodeString("AD = ") + eras
[1]);
335 errln("*** Should have been " + ad
);
336 //throw new Exception("Error in AD");
339 int32_t rowCount
, colCount
;
340 const UnicodeString
**zones
= symbols
->getZoneStrings(rowCount
, colCount
);
341 logln(UnicodeString("Long zone name = ") + zones
[rowCount
-3][1]);
342 if (zones
[rowCount
-3][1] != jstLong
) {
343 errln("*** Should have been " + prettify(jstLong
));
344 //throw new Exception("Error in long TZ name");
346 logln(UnicodeString("Short zone name = ") + zones
[rowCount
-3][2]);
347 if (zones
[rowCount
-3][2] != jstShort
) {
348 errln("*** Should have been " + jstShort
);
349 //throw new Exception("Error in short TZ name");
351 logln(UnicodeString("Long zone name = ") + zones
[rowCount
-3][3]);
352 if (zones
[rowCount
-3][3] != jstLong
) {
353 errln("*** Should have been " + jstLong
);
354 //throw new Exception("Error in long TZ name");
356 logln(UnicodeString("SHORT zone name = ") + zones
[rowCount
-3][4]);
357 if (zones
[rowCount
-3][4] != jstShort
) {
358 errln("*** Should have been " + jstShort
);
359 //throw new Exception("Error in short TZ name");
365 #endif /* #if !UCONFIG_NO_FORMATTING */