1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*********************************************************************** 2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 1997-2011, International Business Machines Corporation 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved. 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ***********************************************************************/ 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "miscdtfm.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/format.h" 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/locid.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/msgfmt.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/numfmt.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/choicfmt.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class DateFormatMiscTests 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break; 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // if (exec) logln((UnicodeString)"TestSuite DateFormatMiscTests"); 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(0, test4097450) 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(1, test4099975) 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(2, test4117335) 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::failure(UErrorCode status, const char* msg) 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status)); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4097450 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::test4097450() 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Date parse requiring 4 digit year. 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dstring [] = { 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("97"), 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("1997"), 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("97"), 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("1997"), 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("01"), 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("2001"), 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("01"), 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("2001"), 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("1"), 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("1"), 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("11"), 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("11"), 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("111"), 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("111") 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dformat [] = { 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yy"), 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yy"), 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yyyy"), 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yyyy"), 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yy"), 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yy"), 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yyyy"), 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yyyy"), 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yy"), 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yyyy"), 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yy"), 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yyyy"), 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yy"), 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("yyyy") 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* UBool dresult [] = { 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TRUE, 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE, 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FALSE 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru };*/ 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *formatter; 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *resultFormatter = new SimpleDateFormat((UnicodeString)"yyyy", status); 11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 11750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status)); 11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Format\tSource\tResult"); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("-------\t-------\t-------"); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int i = 0; i < 14/*dstring.length*/; i++) 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log(dformat[i] + "\t" + dstring[i] + "\t"); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru formatter = new SimpleDateFormat(dformat[i], status); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new SimpleDateFormat")) return; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(FieldPosition::DONT_CARE); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(resultFormatter->format(formatter->parse(dstring[i], status), str, pos)); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "resultFormatter->format"); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if ( !dresult[i] ) System.out.print(" <-- error!"); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*} 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch (ParseException exception) { 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if ( dresult[i] ) System.out.print(" <-- error!"); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru System.out.print("exception --> " + exception); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete formatter; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete resultFormatter; 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4099975 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::test4099975() 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test Constructor SimpleDateFormat::SimpleDateFormat (const UnicodeString & pattern, 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * const DateFormatSymbols & formatData, UErrorCode & status ) 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The DateFormatSymbols object is NOT adopted; Modifying the original DateFormatSymbols 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * should not change the SimpleDateFormat's behavior. 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = Calendar::getNow(); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); 16283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if (U_FAILURE(status)) { 16383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius dataerrln("Unable to create DateFormatSymbols - %s", u_errorName(status)); 16483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius return; 16583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), *symbols, status); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new SimpleDateFormat")) return; 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format0; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format0 = df->format(d, format0); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString localizedPattern0; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "df->toLocalizedPattern"); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format1; 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format1 = df->format(d, format1); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (format0 != format1) { 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Formats are different. format0: ") + format0 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("; format1: ") + format1); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString localizedPattern1; 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "df->toLocalizedPattern"); 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (localizedPattern0 != localizedPattern1) { 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("; localizedPattern1: ") + localizedPattern1); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete symbols; 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete df; 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test void SimpleDateFormat::setDateFormatSymbols ( const DateFormatSymbols & newFormatSymbols ) 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Modifying the original DateFormatSymbols should not change the SimpleDateFormat's behavior. 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new DateFormatSymbols")) return; 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new SimpleDateFormat")) return; 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->setDateFormatSymbols(*symbols); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format0; 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format0 = df->format(d, format0); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString localizedPattern0; 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "df->toLocalizedPattern"); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format1; 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format1 = df->format(d, format1); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (format0 != format1) { 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Formats are different. format0: ") + format0 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("; format1: ") + format1); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString localizedPattern1; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "df->toLocalizedPattern"); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (localizedPattern0 != localizedPattern1) { 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("; localizedPattern1: ") + localizedPattern1); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete symbols; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete df; 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Test the pointer version of the constructor (and the adoptDateFormatSymbols method) 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new DateFormatSymbols")) return; 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), symbols, status); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new SimpleDateFormat")) return; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format0; 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format0 = df->format(d, format0); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString localizedPattern0; 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "df->toLocalizedPattern"); 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format1; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format1 = df->format(d, format1); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (format0 != format1) { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Formats are different. format0: ") + format0 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("; format1: ") + format1); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString localizedPattern1; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "df->toLocalizedPattern"); 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (localizedPattern0 == localizedPattern1) { 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("; localizedPattern1: ") + localizedPattern1); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //delete symbols; the caller is no longer responsible for deleting the symbols 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete df; 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new DateFormatSymbols"); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new SimpleDateFormat")) return; 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df-> adoptDateFormatSymbols(symbols); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format0; 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format0 = df->format(d, format0); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString localizedPattern0; 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "df->toLocalizedPattern"); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format1; 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format1 = df->format(d, format1); 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (format0 != format1) { 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Formats are different. format0: ") + format0 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("; format1: ") + format1); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString localizedPattern1; 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "df->toLocalizedPattern"); 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (localizedPattern0 == localizedPattern1) { 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString("; localizedPattern1: ") + localizedPattern1); 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //delete symbols; the caller is no longer responsible for deleting the symbols 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete df; 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @test @(#)bug4117335.java 1.1 3/5/98 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4117335 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatMiscTests::test4117335() 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //UnicodeString bc = "\u7d00\u5143\u524d"; 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar bcC [] = { 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x7D00, 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x5143, 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x524D 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString bc(bcC, 3, 3); 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //UnicodeString ad = "\u897f\u66a6"; 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar adC [] = { 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x897F, 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x66A6 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString ad(adC, 2, 2); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642"; 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar jstLongC [] = { 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x65e5, 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x672c, 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x6a19, 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x6e96, 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x6642 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar jdtLongC [] = {0x65E5, 0x672C, 0x590F, 0x6642, 0x9593}; 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString jstLong(jstLongC, 5, 5); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 320b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// UnicodeString jstShort = "JST"; 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString tzID = "Asia/Tokyo"; 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString jdtLong(jdtLongC, 5, 5); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 326b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// UnicodeString jdtShort = "JDT"; 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), status); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 33083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius dataerrln("Failure creating DateFormatSymbols, %s", u_errorName(status)); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete symbols; 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new DateFormatSymbols"); 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t eraCount = 0; 33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UnicodeString *eras = symbols->getEraNames(eraCount); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("BC = ") + eras[0]); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (eras[0] != bc) { 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("*** Should have been " + bc); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //throw new Exception("Error in BC"); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("AD = ") + eras[1]); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (eras[1] != ad) { 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("*** Should have been " + ad); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //throw new Exception("Error in AD"); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t rowCount, colCount; 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //don't hard code the index .. compute it. 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t index = -1; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < rowCount; ++i) { 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tzID == (zones[i][0])) { 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index = i; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Long zone name = ") + zones[index][1]); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (zones[index][1] != jstLong) { 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("*** Should have been " + prettify(jstLong)+ " but it is: " + prettify(zones[index][1])); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //throw new Exception("Error in long TZ name"); 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 365b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// logln(UnicodeString("Short zone name = ") + zones[index][2]); 366b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// if (zones[index][2] != jstShort) { 367b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// errln("*** Should have been " + prettify(jstShort) + " but it is: " + prettify(zones[index][2])); 368b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// //throw new Exception("Error in short TZ name"); 369b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// } 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Long zone name = ") + zones[index][3]); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (zones[index][3] != jdtLong) { 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("*** Should have been " + prettify(jstLong) + " but it is: " + prettify(zones[index][3])); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //throw new Exception("Error in long TZ name"); 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 375b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// logln(UnicodeString("SHORT zone name = ") + zones[index][4]); 376b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// if (zones[index][4] != jdtShort) { 377b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// errln("*** Should have been " + prettify(jstShort)+ " but it is: " + prettify(zones[index][4])); 378b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// //throw new Exception("Error in short TZ name"); 379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// } 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete symbols; 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 385