| 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 |