OLD | NEW |
(Empty) | |
| 1 /*********************************************************************** |
| 2 * Copyright (c) 1997-2010, 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(failure(status, "new DateFormatSymbols")) return; |
| 163 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), *s
ymbols, status); |
| 164 if(failure(status, "new SimpleDateFormat")) return; |
| 165 UnicodeString format0; |
| 166 format0 = df->format(d, format0); |
| 167 UnicodeString localizedPattern0; |
| 168 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); |
| 169 failure(status, "df->toLocalizedPattern"); |
| 170 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // c
hange value of field |
| 171 UnicodeString format1; |
| 172 format1 = df->format(d, format1); |
| 173 if (format0 != format1) { |
| 174 errln(UnicodeString("Formats are different. format0: ") + format0 |
| 175 + UnicodeString("; format1: ") + format1); |
| 176 } |
| 177 UnicodeString localizedPattern1; |
| 178 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); |
| 179 failure(status, "df->toLocalizedPattern"); |
| 180 if (localizedPattern0 != localizedPattern1) { |
| 181 errln(UnicodeString("Pattern has been changed. localizedPattern0: ")
+ localizedPattern0 |
| 182 + UnicodeString("; localizedPattern1: ") + localizedPattern1); |
| 183 } |
| 184 delete symbols; |
| 185 delete df; |
| 186 } |
| 187 /* |
| 188 * Test void SimpleDateFormat::setDateFormatSymbols ( const DateFormatSymbo
ls & newFormatSymbols ) |
| 189 * Modifying the original DateFormatSymbols should not change the SimpleDate
Format's behavior. |
| 190 */ |
| 191 { |
| 192 UErrorCode status = U_ZERO_ERROR; |
| 193 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), stat
us); |
| 194 if(failure(status, "new DateFormatSymbols")) return; |
| 195 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), st
atus); |
| 196 if(failure(status, "new SimpleDateFormat")) return; |
| 197 df->setDateFormatSymbols(*symbols); |
| 198 UnicodeString format0; |
| 199 format0 = df->format(d, format0); |
| 200 UnicodeString localizedPattern0; |
| 201 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); |
| 202 failure(status, "df->toLocalizedPattern"); |
| 203 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // c
hange value of field |
| 204 UnicodeString format1; |
| 205 format1 = df->format(d, format1); |
| 206 if (format0 != format1) { |
| 207 errln(UnicodeString("Formats are different. format0: ") + format0 |
| 208 + UnicodeString("; format1: ") + format1); |
| 209 } |
| 210 UnicodeString localizedPattern1; |
| 211 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); |
| 212 failure(status, "df->toLocalizedPattern"); |
| 213 if (localizedPattern0 != localizedPattern1) { |
| 214 errln(UnicodeString("Pattern has been changed. localizedPattern0: ")
+ localizedPattern0 |
| 215 + UnicodeString("; localizedPattern1: ") + localizedPattern1); |
| 216 } |
| 217 delete symbols; |
| 218 delete df; |
| 219 |
| 220 } |
| 221 //Test the pointer version of the constructor (and the adoptDateFormatSymbol
s method) |
| 222 { |
| 223 UErrorCode status = U_ZERO_ERROR; |
| 224 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), stat
us); |
| 225 if(failure(status, "new DateFormatSymbols")) return; |
| 226 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), sy
mbols, status); |
| 227 if(failure(status, "new SimpleDateFormat")) return; |
| 228 UnicodeString format0; |
| 229 format0 = df->format(d, format0); |
| 230 UnicodeString localizedPattern0; |
| 231 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); |
| 232 failure(status, "df->toLocalizedPattern"); |
| 233 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // c
hange value of field |
| 234 UnicodeString format1; |
| 235 format1 = df->format(d, format1); |
| 236 if (format0 != format1) { |
| 237 errln(UnicodeString("Formats are different. format0: ") + format0 |
| 238 + UnicodeString("; format1: ") + format1); |
| 239 } |
| 240 UnicodeString localizedPattern1; |
| 241 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); |
| 242 failure(status, "df->toLocalizedPattern"); |
| 243 if (localizedPattern0 == localizedPattern1) { |
| 244 errln(UnicodeString("Pattern should have been changed. localizedPatt
ern0: ") + localizedPattern0 |
| 245 + UnicodeString("; localizedPattern1: ") + localizedPattern1); |
| 246 } |
| 247 //delete symbols; the caller is no longer responsible for deleting the s
ymbols |
| 248 delete df; |
| 249 } |
| 250 // |
| 251 { |
| 252 UErrorCode status = U_ZERO_ERROR; |
| 253 DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), stat
us); |
| 254 failure(status, "new DateFormatSymbols"); |
| 255 SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), st
atus); |
| 256 if(failure(status, "new SimpleDateFormat")) return; |
| 257 df-> adoptDateFormatSymbols(symbols); |
| 258 UnicodeString format0; |
| 259 format0 = df->format(d, format0); |
| 260 UnicodeString localizedPattern0; |
| 261 localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); |
| 262 failure(status, "df->toLocalizedPattern"); |
| 263 symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // c
hange value of field |
| 264 UnicodeString format1; |
| 265 format1 = df->format(d, format1); |
| 266 if (format0 != format1) { |
| 267 errln(UnicodeString("Formats are different. format0: ") + format0 |
| 268 + UnicodeString("; format1: ") + format1); |
| 269 } |
| 270 UnicodeString localizedPattern1; |
| 271 localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); |
| 272 failure(status, "df->toLocalizedPattern"); |
| 273 if (localizedPattern0 == localizedPattern1) { |
| 274 errln(UnicodeString("Pattern should have been changed. localizedPatt
ern0: ") + localizedPattern0 |
| 275 + UnicodeString("; localizedPattern1: ") + localizedPattern1); |
| 276 } |
| 277 //delete symbols; the caller is no longer responsible for deleting the s
ymbols |
| 278 delete df; |
| 279 } |
| 280 } |
| 281 |
| 282 /* |
| 283 * @test @(#)bug4117335.java 1.1 3/5/98 |
| 284 * |
| 285 * @bug 4117335 |
| 286 */ |
| 287 void |
| 288 DateFormatMiscTests::test4117335() |
| 289 { |
| 290 //UnicodeString bc = "\u7d00\u5143\u524d"; |
| 291 UChar bcC [] = { |
| 292 0x7D00, |
| 293 0x5143, |
| 294 0x524D |
| 295 }; |
| 296 UnicodeString bc(bcC, 3, 3); |
| 297 |
| 298 //UnicodeString ad = "\u897f\u66a6"; |
| 299 UChar adC [] = { |
| 300 0x897F, |
| 301 0x66A6 |
| 302 }; |
| 303 UnicodeString ad(adC, 2, 2); |
| 304 |
| 305 //UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642"; |
| 306 UChar jstLongC [] = { |
| 307 0x65e5, |
| 308 0x672c, |
| 309 0x6a19, |
| 310 0x6e96, |
| 311 0x6642 |
| 312 }; |
| 313 UChar jdtLongC [] = {0x65E5, 0x672C, 0x590F, 0x6642, 0x9593}; |
| 314 |
| 315 UnicodeString jstLong(jstLongC, 5, 5); |
| 316 |
| 317 UnicodeString jstShort = "JST"; |
| 318 |
| 319 UnicodeString tzID = "Asia/Tokyo"; |
| 320 |
| 321 UnicodeString jdtLong(jdtLongC, 5, 5); |
| 322 |
| 323 UnicodeString jdtShort = "JDT"; |
| 324 UErrorCode status = U_ZERO_ERROR; |
| 325 DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), statu
s); |
| 326 if(U_FAILURE(status)) { |
| 327 errcheckln(status, "Failure creating DateFormatSymbols, %s", u_errorName(s
tatus)); |
| 328 delete symbols; |
| 329 return; |
| 330 } |
| 331 failure(status, "new DateFormatSymbols"); |
| 332 int32_t eraCount = 0; |
| 333 const UnicodeString *eras = symbols->getEraNames(eraCount); |
| 334 |
| 335 logln(UnicodeString("BC = ") + eras[0]); |
| 336 if (eras[0] != bc) { |
| 337 errln("*** Should have been " + bc); |
| 338 //throw new Exception("Error in BC"); |
| 339 } |
| 340 |
| 341 logln(UnicodeString("AD = ") + eras[1]); |
| 342 if (eras[1] != ad) { |
| 343 errln("*** Should have been " + ad); |
| 344 //throw new Exception("Error in AD"); |
| 345 } |
| 346 |
| 347 int32_t rowCount, colCount; |
| 348 const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount); |
| 349 //don't hard code the index .. compute it. |
| 350 int32_t index = -1; |
| 351 for (int32_t i = 0; i < rowCount; ++i) { |
| 352 if (tzID == (zones[i][0])) { |
| 353 index = i; |
| 354 break; |
| 355 } |
| 356 } |
| 357 logln(UnicodeString("Long zone name = ") + zones[index][1]); |
| 358 if (zones[index][1] != jstLong) { |
| 359 errln("*** Should have been " + prettify(jstLong)+ " but it is: " + pret
tify(zones[index][1])); |
| 360 //throw new Exception("Error in long TZ name"); |
| 361 } |
| 362 logln(UnicodeString("Short zone name = ") + zones[index][2]); |
| 363 if (zones[index][2] != jstShort) { |
| 364 errln("*** Should have been " + prettify(jstShort) + " but it is: " + pr
ettify(zones[index][2])); |
| 365 //throw new Exception("Error in short TZ name"); |
| 366 } |
| 367 logln(UnicodeString("Long zone name = ") + zones[index][3]); |
| 368 if (zones[index][3] != jdtLong) { |
| 369 errln("*** Should have been " + prettify(jstLong) + " but it is: " + pre
ttify(zones[index][3])); |
| 370 //throw new Exception("Error in long TZ name"); |
| 371 } |
| 372 logln(UnicodeString("SHORT zone name = ") + zones[index][4]); |
| 373 if (zones[index][4] != jdtShort) { |
| 374 errln("*** Should have been " + prettify(jstShort)+ " but it is: " + pre
ttify(zones[index][4])); |
| 375 //throw new Exception("Error in short TZ name"); |
| 376 } |
| 377 delete symbols; |
| 378 |
| 379 } |
| 380 |
| 381 #endif /* #if !UCONFIG_NO_FORMATTING */ |
OLD | NEW |