1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "dtfmrgts.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/timezone.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/simpletz.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/resbund.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class DateFormatRegressionTest 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break; 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatRegressionTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // if (exec) logln((UnicodeString)"TestSuite DateFormatRegressionTest"); 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(0,Test4029195) 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(1,Test4052408) 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(2,Test4056591) 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(3,Test4059917) 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(4,Test4060212) 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(5,Test4061287) 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(6,Test4065240) 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(7,Test4071441) 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(8,Test4073003) 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(9,Test4089106) 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(10,Test4100302) 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(11,Test4101483) 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(12,Test4103340) 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(13,Test4103341) 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(14,Test4104136) 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(15,Test4104522) 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(16,Test4106807) 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(17,Test4108407) 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(18,Test4134203) 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(19,Test4151631) 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(20,Test4151706) 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(21,Test4162071) 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(22,Test4182066) 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(23,Test4210209) 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(24,Test714) 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(25,Test1684) 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(26,Test5554) 58103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CASE(27,Test9237) 59103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CASE(28,TestParsing) 60fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CASE(29,TestT10334) 61fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CASE(30,TestT10619) 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4029195 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4029195(void) 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate today = Calendar::getNow(); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "today: " + today); 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdf = (SimpleDateFormat*) DateFormat::createDateInstance(); 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (failure(status, "SimpleDateFormat::createDateInstance")) { 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(sdf == NULL){ 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling DateFormat::createDateTimeInstance"); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = sdf->toPattern(pat); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("pattern: " + pat); 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString fmtd; 89fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(FieldPosition::DONT_CARE); 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmtd = sdf->format(today, fmtd, pos); 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("today: " + fmtd); 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->applyPattern("G yyyy DDD"); 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString todayS; 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru todayS = sdf->format(today, todayS, pos); 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("today: " + todayS); 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru today = sdf->parse(todayS, status); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "sdf->parse"); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"today date: " + today); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*} catch(Exception e) { 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Error reparsing date: " + e.getMessage()); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rt; 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rt = sdf->format(sdf->parse(todayS, status), rt, pos); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "sdf->parse"); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("round trip: " + rt); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rt != todayS) 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Want " + todayS + " Got " + rt); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*} 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch (ParseException e) { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + e); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4052408 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4052408(void) 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *fmt = DateFormat::createDateTimeInstance(DateFormat::SHORT, 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat::SHORT, Locale::getUS()); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fmt == NULL) { 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling DateFormat::createDateTimeInstance"); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate dt = date(97, UCAL_MAY, 3, 8, 55); 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = fmt->format(dt, str); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(str != "5/3/97, 8:55 AM") 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Test broken; Want 5/3/97 8:55 AM Got " + str); 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expected[] = { 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"ERA_FIELD", 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "97", //"YEAR_FIELD", 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "5", //"MONTH_FIELD", 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "3", //"DATE_FIELD", 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"HOUR_OF_DAY1_FIELD", 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"HOUR_OF_DAY0_FIELD", 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "55", //"MINUTE_FIELD", 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"SECOND_FIELD", 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"MILLISECOND_FIELD", 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"DAY_OF_WEEK_FIELD", 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"DAY_OF_YEAR_FIELD", 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"DAY_OF_WEEK_IN_MONTH_FIELD", 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"WEEK_OF_YEAR_FIELD", 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"WEEK_OF_MONTH_FIELD", 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "AM", //"AM_PM_FIELD", 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "8", //"HOUR1_FIELD", 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "", //"HOUR0_FIELD", 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "" //"TIMEZONE_FIELD" 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Hashtable expected;// = new Hashtable(); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //expected.put(new LongKey(DateFormat.MONTH_FIELD), "5"); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //expected.put(new LongKey(DateFormat.DATE_FIELD), "3"); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //expected.put(new LongKey(DateFormat.YEAR_FIELD), "97"); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //expected.put(new LongKey(DateFormat.HOUR1_FIELD), "8"); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //expected.put(new LongKey(DateFormat.MINUTE_FIELD), "55"); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //expected.put(new LongKey(DateFormat.AM_PM_FIELD), "AM"); 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //StringBuffer buf = new StringBuffer(); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString fieldNames[] = { 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "ERA_FIELD", 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "YEAR_FIELD", 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "MONTH_FIELD", 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "DATE_FIELD", 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "HOUR_OF_DAY1_FIELD", 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "HOUR_OF_DAY0_FIELD", 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "MINUTE_FIELD", 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "SECOND_FIELD", 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "MILLISECOND_FIELD", 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "DAY_OF_WEEK_FIELD", 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "DAY_OF_YEAR_FIELD", 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "DAY_OF_WEEK_IN_MONTH_FIELD", 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "WEEK_OF_YEAR_FIELD", 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "WEEK_OF_MONTH_FIELD", 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "AM_PM_FIELD", 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "HOUR1_FIELD", 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "HOUR0_FIELD", 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "TIMEZONE_FIELD" 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool pass = TRUE; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i = 0; i <= 17; ++i) { 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(i); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString buf; 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(dt, buf, pos); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //char[] dst = new char[pos.getEndIndex() - pos.getBeginIndex()]; 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dst; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf.extractBetween(pos.getBeginIndex(), pos.getEndIndex(), dst); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str(dst); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"" + i + (UnicodeString)": " + fieldNames[i] + 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString)", \"" + str + (UnicodeString)"\", " + 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.getBeginIndex() + (UnicodeString)", " + 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.getEndIndex()); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString exp = expected[i]; 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((exp.length() == 0 && str.length() == 0) || str == exp) 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" ok"); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString(" expected ") + exp); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pass = FALSE; 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( ! pass) 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: FieldPosition not set right by DateFormat"); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4056591 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the function of the [s|g]et2DigitYearStart() API. 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4056591(void) 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString("yyMMdd"), Locale::getUS(), status); 23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new SimpleDateFormat", TRUE)) { 2336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete fmt; 2346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 2356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate start = date(1809-1900, UCAL_DECEMBER, 25); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->set2DigitYearStart(start, status); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "fmt->setTwoDigitStartDate"); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( (fmt->get2DigitYearStart(status) != start) || failure(status, "get2DigitStartDate")) 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("get2DigitYearStart broken"); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate dates [] = { 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(1809-1900, UCAL_DECEMBER, 25), 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(1909-1900, UCAL_DECEMBER, 24), 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(1809-1900, UCAL_DECEMBER, 26), 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(1861-1900, UCAL_DECEMBER, 25), 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString strings [] = { 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "091225", 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "091224", 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "091226", 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "611225" 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Object[] DATA = { 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "091225", new Date(1809-1900, Calendar.DECEMBER, 25), 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "091224", new Date(1909-1900, Calendar.DECEMBER, 24), 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "091226", new Date(1809-1900, Calendar.DECEMBER, 26), 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "611225", new Date(1861-1900, Calendar.DECEMBER, 25), 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru };*/ 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i = 0; i < 4; i++) { 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s = strings[i]; 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate exp = dates[i]; 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate got = fmt->parse(s, status); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "fmt->parse"); 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(s + " -> " + got + "; exp " + exp); 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != exp) 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("set2DigitYearStart broken"); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*} 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch (ParseException e) { 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + e); 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4059917 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4059917(void) 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt; 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString myDate; 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new SimpleDateFormat( UnicodeString("yyyy/MM/dd"), status ); 29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new SimpleDateFormat", TRUE)) return; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myDate = "1997/01/01"; 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aux917( fmt, myDate ); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = NULL; 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new SimpleDateFormat( UnicodeString("yyyyMMdd"), status ); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new SimpleDateFormat")) return; 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myDate = "19970101"; 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aux917( fmt, myDate ); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::aux917( SimpleDateFormat *fmt, UnicodeString& str ) { 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = fmt->toPattern(pat); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( "==================" ); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( "testIt: pattern=" + pat + 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " string=" + str ); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable o; 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Object o; 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parseObject( str, o, pos ); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln( UnicodeString("Parsed object: ") + o ); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString formatted; 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition poss(FieldPosition::DONT_CARE); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru formatted = fmt->format( o, formatted, poss, status ); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "fmt->format"); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( "Formatted string: " + formatted ); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( formatted != str) 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Want " + str + " Got " + formatted); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*} 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch (ParseException e) { 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + e); 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4060212 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4060212(void) 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dateString = "1995-040.05:01:29"; 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( "dateString= " + dateString ); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Using yyyy-DDD.hh:mm:ss"); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *formatter = new SimpleDateFormat(UnicodeString("yyyy-DDD.hh:mm:ss"), status); 34750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new SimpleDateFormat", TRUE)) return; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate myDate = formatter->parse( dateString, pos ); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString myString; 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *fmt = DateFormat::createDateTimeInstance( DateFormat::FULL, 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat::LONG); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fmt == NULL) { 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling DateFormat::createDateTimeInstance"); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete formatter; 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myString = fmt->format( myDate, myString); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( myString ); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = new GregorianCalendar(status); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new GregorianCalendar"); 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(myDate, status); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "cal->setTime"); 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((cal->get(UCAL_DAY_OF_YEAR, status) != 40) || failure(status, "cal->get")) 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString) "Fail: Got " + cal->get(UCAL_DAY_OF_YEAR, status) + 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " Want 40"); 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 370b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // this is an odd usage of "ddd" and it doesn't 371b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // work now that date values are range checked per #3579. 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Using yyyy-ddd.hh:mm:ss"); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete formatter; 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru formatter = NULL; 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru formatter = new SimpleDateFormat(UnicodeString("yyyy-ddd.hh:mm:ss"), status); 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new SimpleDateFormat")) return; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.setIndex(0); 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myDate = formatter->parse( dateString, pos ); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myString = fmt->format( myDate, myString ); 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( myString ); 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setTime(myDate, status); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "cal->setTime"); 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((cal->get(UCAL_DAY_OF_YEAR, status) != 40) || failure(status, "cal->get")) 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString) "Fail: Got " + cal->get(UCAL_DAY_OF_YEAR, status) + 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " Want 40"); 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete formatter; 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4061287 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4061287(void) 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("dd/MM/yyyy"), status); 40050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 40150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status)); 40250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete df; 40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new SimpleDateFormat"); 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("") + df->parse("35/01/1971", status)); 408b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho failure(status, "df->parse(\"35/01/1971\")"); 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln(df.parse("35/01/1971").toString()); 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*catch (ParseException e) { 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + e); 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(); 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->setLenient(FALSE); 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool ok = FALSE; 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("") + df->parse("35/01/1971", status)); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = TRUE; 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln(df.parse("35/01/1971").toString()); 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} catch (ParseException e) {ok=TRUE;} 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!ok) 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Lenient not working"); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete df; 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4065240 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4065240(void) 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate curDate; 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *shortdate, *fulldate; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString strShortDate, strFullDate; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale = Locale::getDefault(); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *saveZone = TimeZone::createDefault(); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale *curLocale = new Locale("de","DE"); 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(*curLocale, status); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "Locale::setDefault"); 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} adoptDefault instead of setDefault 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //TimeZone::setDefault(TimeZone::createTimeZone("EST")); 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone::adoptDefault(TimeZone::createTimeZone("EST")); 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru curDate = date(98, 0, 1); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru shortdate = DateFormat::createDateInstance(DateFormat::SHORT); 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (shortdate == NULL){ 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling DateFormat::createDateInstance"); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fulldate = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fulldate == NULL){ 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling DateFormat::createDateTimeInstance"); 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strShortDate = "The current date (short form) is "; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = shortdate->format(curDate, temp); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strShortDate += temp; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strFullDate = "The current date (long form) is "; 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp2; 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fulldate->format(curDate, temp2); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strFullDate += temp2; 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(strShortDate); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(strFullDate); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} What to do with resource bundle stuff????? 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Check to see if the resource is present; if not, we can't test 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ResourceBundle *bundle = new ResourceBundle( 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, *curLocale, status); 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new ResourceBundle"); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //(UnicodeString) "java.text.resources.DateFormatZoneData", curLocale); 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} API change to ResourceBundle -- add getLocale() 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*if (bundle->getLocale().getLanguage(temp) == UnicodeString("de")) { 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UPDATE THIS AS ZONE NAME RESOURCE FOR <EST> in de_DE is updated 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!strFullDate.endsWith(UnicodeString("GMT-05:00"))) 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Want GMT-05:00"); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("*** TEST COULD NOT BE COMPLETED BECAUSE DateFormatZoneData ***"); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("*** FOR LOCALE de OR de_DE IS MISSING ***"); 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //finally { 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "Locale::setDefault"); 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone::setDefault(*saveZone); 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete shortdate; 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fulldate; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete saveZone; 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete curLocale; 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bundle; 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat.equals is too narrowly defined. As a result, MessageFormat 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru does not work correctly. DateFormat.equals needs to be written so 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru that the Calendar sub-object is not compared using Calendar.equals, 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru but rather compared for equivalency. This may necessitate adding a 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (package private) method to Calendar to test for equivalency. 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Currently this bug breaks MessageFormat.toPattern 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4071441 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4071441(void) 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *fmtA = DateFormat::createInstance(); 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *fmtB = DateFormat::createInstance(); 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fmtA == NULL || fmtB == NULL){ 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling DateFormat::createInstance"); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmtA; 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmtB; 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} Is it OK to cast away const here? 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calA = (Calendar*) fmtA->getCalendar(); 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *calB = (Calendar*) fmtB->getCalendar(); 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!calA || !calB) { 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Couldn't get proper calendars, exiting"); 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmtA; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmtB; 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate epoch = date(0, 0, 0); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate xmas = date(61, UCAL_DECEMBER, 25); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calA->setTime(epoch, status); 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "calA->setTime"); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calB->setTime(epoch, status); 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "calB->setTime"); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*calA != *calB) 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Can't complete test; Calendar instances unequal"); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*fmtA != *fmtB) 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DateFormat unequal when Calendars equal"); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calB->setTime(xmas, status); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "calB->setTime"); 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*calA == *calB) 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Can't complete test; Calendar instances equal"); 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*fmtA != *fmtB) 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DateFormat unequal when Calendars equivalent"); 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("DateFormat.equals ok"); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmtA; 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmtB; 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* The java.text.DateFormat.parse(String) method expects for the 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru US locale a string formatted according to mm/dd/yy and parses it 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru correctly. 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 564b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho When given a string mm/dd/yyyy [sic] it only parses up to the first 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru two y's, typically resulting in a date in the year 1919. 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Please extend the parsing method(s) to handle strings with 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru four-digit year values (probably also applicable to various 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru other locales. */ 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4073003 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4073003(void) 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 577b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho SimpleDateFormat fmt("MM/dd/yy", Locale::getUK(), ec); 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 57950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec)); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString tests [] = { 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "12/25/61", 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "12/25/1961", 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "4/3/2010", 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "4/3/10" 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i= 0; i < 4; i+=2) { 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = fmt.parse(tests[i], status); 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "fmt.parse"); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate dd = fmt.parse(tests[i+1], status); 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "fmt.parse"); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = fmt.format(d, s); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString ss; 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ss = fmt.format(dd, ss); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (d != dd) 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString) "Fail: " + d + " != " + dd); 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s != ss) 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Fail: " + s + " != " + ss); 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: " + s + " " + d); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4089106 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4089106(void) 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *def = TimeZone::createDefault(); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *z = new SimpleTimeZone((int)(1.25 * 3600000), "FAKEZONE"); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone::setDefault(*z); 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *f = new SimpleDateFormat(status); 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 61850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Couldn't create SimpleDateFormat, error %s", u_errorName(status)); 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete f; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete def; 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete z; 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new SimpleDateFormat"); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (f->getTimeZone()!= *z) 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: SimpleTimeZone should use TimeZone.getDefault()"); 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //finally { 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone::setDefault(*def); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete z; 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete f; 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete def; 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4100302 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// {sfb} not applicable in C++?? 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4100302(void) 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Locale locales [] = { 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::CANADA, 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::CANADA_FRENCH, 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::CHINA, 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::CHINESE, 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::ENGLISH, 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::FRANCE, 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::FRENCH, 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::GERMAN, 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::GERMANY, 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::ITALIAN, 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::ITALY, 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::JAPAN, 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::JAPANESE, 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::KOREA, 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::KOREAN, 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::PRC, 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::SIMPLIFIED_CHINESE, 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::TAIWAN, 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::TRADITIONAL_CHINESE, 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::UK, 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::US 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool pass = TRUE; 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i = 0; i < 21; i++) { 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Format *format = DateFormat::createDateTimeInstance(DateFormat::FULL, 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat::FULL, locales[i]); 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru byte[] bytes; 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ByteArrayOutputStream baos = new ByteArrayOutputStream(); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ObjectOutputStream oos = new ObjectOutputStream(baos); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru oos.writeObject(format); 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru oos.flush(); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru baos.close(); 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bytes = baos.toByteArray(); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ObjectInputStream ois = 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new ObjectInputStream(new ByteArrayInputStream(bytes)); 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!format.equals(ois.readObject())) { 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pass = FALSE; 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("DateFormat instance for locale " + 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locales[i] + " is incorrectly serialized/deserialized."); 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("DateFormat instance for locale " + 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locales[i] + " is OKAY."); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!pass) errln("Fail: DateFormat serialization/equality bug"); 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch (IOException e) { 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + e); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(); 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch (ClassNotFoundException e) { 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + e); 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru e.printStackTrace(); 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/} 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4101483 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4101483(void) 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdf = new SimpleDateFormat(UnicodeString("z"), Locale::getUS(), status); 71750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new SimpleDateFormat", TRUE)) return; 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition fp(UDAT_TIMEZONE_FIELD); 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Date d = date(9234567890L); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = 9234567890.0; 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //StringBuffer buf = new StringBuffer(""); 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString buf; 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(d, buf, fp); 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln(sdf.format(d, buf, fp).toString()); 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(dateToString(d) + " => " + buf); 7268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln(UnicodeString("beginIndex = ") + fp.getBeginIndex()); 7278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln(UnicodeString("endIndex = ") + fp.getEndIndex()); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fp.getBeginIndex() == fp.getEndIndex()) 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: Empty field"); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4103340 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4138203 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This bug really only works in Locale.US, since that's what the locale 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * used for Date.toString() is. Bug 4138203 reports that it fails on Korean 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NT; it would actually have failed on any non-US locale. Now it should 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * work on all locales. 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4103340(void) 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // choose a date that is the FIRST of some month 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // and some arbitrary time 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = date(97, 3, 1, 1, 1, 1); 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("MMMM"), Locale::getUS(), status); 75050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new SimpleDateFormat", TRUE)) return; 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = dateToString(d, s); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s2; 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(FieldPosition::DONT_CARE); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s2 = df->format(d, s2, pos); 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Date=" + s); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("DF=" + s2); 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString substr; 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s2.extract(0,2, substr); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s.indexOf(substr) == -1) 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Months should match"); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete df; 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4103341 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4103341(void) 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *saveZone =TimeZone::createDefault(); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} changed from setDefault to adoptDefault 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone::adoptDefault(TimeZone::createTimeZone("CST")); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *simple = new SimpleDateFormat(UnicodeString("MM/dd/yyyy HH:mm"), status); 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 78050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Couldn't create SimpleDateFormat, error %s", u_errorName(status)); 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete simple; 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new SimpleDateFormat"); 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *temp = TimeZone::createDefault(); 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(simple->getTimeZone() != *temp) 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: SimpleDateFormat not using default zone"); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //finally { 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone::adoptDefault(saveZone); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete temp; 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete simple; 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4104136 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4104136(void) 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdf = new SimpleDateFormat(status); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 80550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Couldn't create SimpleDateFormat, error %s", u_errorName(status)); 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(failure(status, "new SimpleDateFormat")) return; 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern = "'time' hh:mm"; 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->applyPattern(pattern); 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("pattern: \"" + pattern + "\""); 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString strings [] = { 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString)"time 10:30", 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "time 10:x", 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "time 10x" 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition ppos [] = { 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition(10), 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition(0), 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition(0) 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate dates [] = { 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(70, UCAL_JANUARY, 1, 10, 30), 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1, 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Object[] DATA = { 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "time 10:30", new ParsePosition(10), new Date(70, Calendar.JANUARY, 1, 10, 30), 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "time 10:x", new ParsePosition(0), null, 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "time 10x", new ParsePosition(0), null, 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru };*/ 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i = 0; i < 3; i++) { 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text = strings[i]; 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition finish = ppos[i]; 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate exp = dates[i]; 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = sdf->parse(text, pos); 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" text: \"" + text + "\""); 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" index: %d", pos.getIndex()); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) " result: " + d); 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pos.getIndex() != finish.getIndex()) 8498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln(UnicodeString("Fail: Expected pos ") + finish.getIndex()); 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (! ((d == 0 && exp == -1) || (d == exp))) 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString) "Fail: Expected result " + exp); 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4104522 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * CANNOT REPRODUCE 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * According to the bug report, this test should throw a 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * StringIndexOutOfBoundsException during the second parse. However, 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this is not seen. 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4104522(void) 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdf = new SimpleDateFormat(status); 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 87050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Couldn't create SimpleDateFormat, error %s", u_errorName(status)); 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new SimpleDateFormat"); 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern = "'time' hh:mm"; 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->applyPattern(pattern); 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("pattern: \"" + pattern + "\""); 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // works correctly 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pp(0); 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text = "time "; 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate dt = sdf->parse(text, pp); 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" text: \"" + text + "\"" + 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " date: " + dt); 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // works wrong 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pp.setIndex(0); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text = "time"; 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dt = sdf->parse(text, pp); 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(" text: \"" + text + "\"" + 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " date: " + dt); 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4106807 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4106807(void) 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate dt; 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *df = DateFormat::createDateTimeInstance(); 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdfs [] = { 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat(UnicodeString("yyyyMMddHHmmss"), status), 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat(UnicodeString("yyyyMMddHHmmss'Z'"), status), 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat(UnicodeString("yyyyMMddHHmmss''"), status), 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat(UnicodeString("yyyyMMddHHmmss'a''a'"), status), 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat(UnicodeString("yyyyMMddHHmmss %"), status) 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 91350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Couldn't create SimpleDateFormat, error %s", u_errorName(status)); 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdfs[0]; 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdfs[1]; 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdfs[2]; 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdfs[3]; 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdfs[4]; 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new SimpleDateFormat"); 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString strings [] = { 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "19980211140000", 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "19980211140000", 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "19980211140000", 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "19980211140000a", 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "19980211140000 " 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Object[] data = { 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat("yyyyMMddHHmmss"), "19980211140000", 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat("yyyyMMddHHmmss'Z'"), "19980211140000", 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat("yyyyMMddHHmmss''"), "19980211140000", 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat("yyyyMMddHHmmss'a''a'"), "19980211140000a", 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new SimpleDateFormat("yyyyMMddHHmmss %"), "19980211140000 ", 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru };*/ 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar *gc = new GregorianCalendar(status); 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "new GregorianCalendar"); 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *timeZone = TimeZone::createDefault(); 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *gmt = timeZone->clone(); 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gmt->setRawOffset(0); 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i = 0; i < 5; i++) { 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *format = sdfs[i]; 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dateString = strings[i]; 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru format->setTimeZone(*gmt); 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dt = format->parse(dateString, status); 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} some of these parses will fail purposely 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString fmtd; 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(FieldPosition::DONT_CARE); 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmtd = df->format(dt, fmtd, pos); 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(fmtd); 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln(df->format(dt)); 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gc->setTime(dt, status); 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "gc->getTime"); 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("") + gc->get(UCAL_ZONE_OFFSET, status)); 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "gc->get"); 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s = format->format(dt, s, pos); 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(s); 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*} 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru catch (ParseException e) { 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("No way Jose"); 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete timeZone; 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete df; 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t j = 0; j < 5; j++) 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdfs [j]; 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gc; 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete gmt; 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Synopsis: Chinese time zone CTT is not recogonized correctly. 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Description: Platform Chinese Windows 95 - ** Time zone set to CST ** 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4108407 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// {sfb} what to do with this one ?? 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4108407(void) 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*long l = System.currentTimeMillis(); 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("user.timezone = " + System.getProperty("user.timezone", "?")); 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Time Zone :" + 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat.getDateInstance().getTimeZone().getID()); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Default format :" + 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat.getDateInstance().format(new Date(l))); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Full format :" + 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat.getDateInstance(DateFormat.FULL).format(new 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Date(l))); 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("*** Set host TZ to CST ***"); 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("*** THE RESULTS OF THIS TEST MUST BE VERIFIED MANUALLY ***");*/ 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4134203 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * SimpleDateFormat won't parse "GMT" 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4134203(void) 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dateFormat = "MM/dd/yy HH:mm:ss zzz"; 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *fmt = new SimpleDateFormat(dateFormat, status); 101650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new SimpleDateFormat", TRUE)) return; 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition p0(0); 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = fmt->parse("01/22/92 04:52:00 GMT", p0); 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(dateToString(d)); 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(p0 == ParsePosition(0)) 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: failed to parse 'GMT'"); 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // In the failure case an exception is thrown by parse(); 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // if no exception is thrown, the test passes. 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4151631 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * SimpleDateFormat incorrect handling of 2 single quotes in format() 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4151631(void) 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern = "'TO_DATE('''dd'-'MM'-'yyyy HH:mm:ss''' , ''DD-MM-YYYY HH:MI:SS'')'"; 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("pattern=" + pattern); 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *format = new SimpleDateFormat(pattern, Locale::getUS(), status); 103850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new SimpleDateFormat", TRUE)) return; 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(FieldPosition::DONT_CARE); 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = format->format(date(1998-1900, UCAL_JUNE, 30, 13, 30, 0), result, pos); 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != "TO_DATE('30-06-1998 13:30:00' , 'DD-MM-YYYY HH:MI:SS')") { 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: result=" + result); 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Pass: result=" + result); 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4151706 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'z' at end of date format throws index exception in SimpleDateFormat 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * CANNOT REPRODUCE THIS BUG ON 1.2FCS 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4151706(void) 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dateString("Thursday, 31-Dec-98 23:00:00 GMT"); 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEEE, dd-MMM-yy HH:mm:ss z"), Locale::getUS(), status); 106250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "new SimpleDateFormat", TRUE)) return; 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = fmt.parse(dateString, status); 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru failure(status, "fmt->parse"); 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // {sfb} what about next two lines? 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if (d.getTime() != Date.UTC(1998-1900, Calendar.DECEMBER, 31, 23, 0, 0)) 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln("Incorrect value: " + d); 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*} catch (Exception e) { 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: " + e); 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(0); 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(dateString + " -> " + fmt.format(d, temp, pos)); 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @bug 4162071 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Cannot reproduce this bug under 1.2 FCS -- it may be a convoluted duplicate 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of some other bug that has been fixed. 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatRegressionTest::Test4162071(void) 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString dateString("Thu, 30-Jul-1999 11:51:14 GMT"); 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString format("EEE', 'dd-MMM-yyyy HH:mm:ss z"); // RFC 822/1123 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat df(format, Locale::getUS(), status); 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 109050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Couldn't create SimpleDateFormat - %s", u_errorName(status)); 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate x = df.parse(dateString, status); 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Parse format \"" + format + "\" ok"); 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Parse format \"" + format + "\" failed."); 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp; 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos(0); 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(dateString + " -> " + df.format(x, temp, pos)); 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} catch (Exception e) { 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln("Parse format \"" + format + "\" failed."); 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * DateFormat shouldn't parse year "-1" as a two-digit year (e.g., "-1" -> 1999). 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test4182066(void) { 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt("MM/dd/yy", Locale::getUS(), status); 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat dispFmt("MMM dd yyyy GG", Locale::getUS(), status); 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 111650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Couldn't create SimpleDateFormat - %s", u_errorName(status)); 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We expect 2-digit year formats to put 2-digit years in the right 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * window. Out of range years, that is, anything less than "00" or 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * greater than "99", are treated as literal years. So "1/2/3456" 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * becomes 3456 AD. Likewise, "1/2/-3" becomes -3 AD == 2 BC. 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* STRINGS[] = { 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "02/29/00", 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "01/23/01", 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "04/05/-1", 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "01/23/-9", 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "11/12/1314", 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "10/31/1", 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "09/12/+1", 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "09/12/001", 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t STRINGS_COUNT = (int32_t)(sizeof(STRINGS) / sizeof(STRINGS[0])); 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate FAIL_DATE = (UDate) 0; 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate DATES[] = { 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(2000-1900, UCAL_FEBRUARY, 29), 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(2001-1900, UCAL_JANUARY, 23), 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date( -1-1900, UCAL_APRIL, 5), 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date( -9-1900, UCAL_JANUARY, 23), 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(1314-1900, UCAL_NOVEMBER, 12), 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date( 1-1900, UCAL_OCTOBER, 31), 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FAIL_DATE, // "+1" isn't recognized by US NumberFormat 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date( 1-1900, UCAL_SEPTEMBER,12), 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool pass = TRUE; 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<STRINGS_COUNT; ++i) { 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str(STRINGS[i]); 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate expected = DATES[i]; 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate actual = fmt.parse(str, status); 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actual = FAIL_DATE; 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString actStr; 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (actual == FAIL_DATE) { 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru actStr.append("null"); 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Yuck: See j25 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((DateFormat*)&dispFmt)->format(actual, actStr); 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expected == actual) { 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out.append(str + " => " + actStr + "\n"); 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expStr; 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expected == FAIL_DATE) { 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr.append("null"); 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Yuck: See j25 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((DateFormat*)&dispFmt)->format(expected, expStr); 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out.append("FAIL: " + str + " => " + actStr 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + ", expected " + expStr + "\n"); 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pass = FALSE; 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pass) { 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log(out); 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru err(out); 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * j32 {JDK Bug 4210209 4209272} 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * DateFormat cannot parse Feb 29 2000 when setLenient(false) 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatRegressionTest::Test4210209(void) { 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("MMM d, yyyy"); 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat sfmt(pattern, Locale::getUS(), status); 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat sdisp("MMM dd yyyy GG", Locale::getUS(), status); 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat& fmt = *(DateFormat*)&sfmt; // Yuck: See j25 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat& disp = *(DateFormat*)&sdisp; // Yuck: See j25 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 120150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Couldn't create SimpleDateFormat - %s", u_errorName(status)); 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar* calx = (Calendar*)fmt.getCalendar(); // cast away const! 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calx->setLenient(FALSE); 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = date(2000-1900, UCAL_FEBRUARY, 29); 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s, ss; 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(d, s); 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(disp.format(d, ss.remove()) + " f> " + pattern + 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " => \"" + s + "\""); 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = fmt.parse(s, pos); 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("\"") + s + "\" p> " + pattern + 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " => " + disp.format(d, ss.remove())); 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Parse pos = ") + pos.getIndex() + 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ", error pos = " + pos.getErrorIndex()); 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.getErrorIndex() != -1) { 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL: Error index should be -1")); 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // The underlying bug is in GregorianCalendar. If the following lines 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // succeed, the bug is fixed. If the bug isn't fixed, they will throw 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // an exception. 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GregorianCalendar cal(status); 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Unable to create Calendar"); 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.clear(); 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.setLenient(FALSE); 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal.set(2000, UCAL_FEBRUARY, 29); // This should work! 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Attempt to set Calendar to Feb 29 2000: ") + 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru disp.format(cal.getTime(status), ss.remove())); 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Unable to set Calendar to Feb 29 2000"); 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test714(void) 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d(978103543000.); 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *fmt = DateFormat::createDateTimeInstance(DateFormat::NONE, 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat::MEDIUM, 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::getUS()); 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fmt == NULL) { 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling DateFormat::createDateTimeInstance"); 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString tests = 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (UnicodeString) "7:25:43 AM" ; 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format (d,s); 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString) "Fail, errmsg " + u_errorName(status)); 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s != tests) 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString) "Fail: " + s + " != " + tests); 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("OK: " + s + " == " + tests); 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass Test1684Data { 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t year; 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t month; 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t date; 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t womyear; 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t wommon; 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t wom; 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t dow; 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString data; 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString normalized; 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Test1684Data(int32_t xyear, int32_t xmonth, int32_t xdate, 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t xwomyear, int32_t xwommon, int32_t xwom, int32_t xdow, 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *xdata, const char *xnormalized) : 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru year(xyear), 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru month(xmonth-1), 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date(xdate), 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru womyear(xwomyear), 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru wommon(xwommon-1), 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru wom(xwom), 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dow(xdow), 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru data(xdata,""), 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru normalized((xnormalized==NULL)?xdata:xnormalized,"") 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { } 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test1684(void) 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // July 2001 August 2001 January 2002 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 5 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 8 9 10 11 12 13 14 5 6 7 8 9 10 11 6 7 8 9 10 11 12 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 15 16 17 18 19 20 21 12 13 14 15 16 17 18 13 14 15 16 17 18 19 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 22 23 24 25 26 27 28 19 20 21 22 23 24 25 20 21 22 23 24 25 26 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 29 30 31 26 27 28 29 30 31 27 28 29 30 31 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Test1684Data *tests[] = { 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 8, 6, 2001,8,2,UCAL_MONDAY, "2001 08 02 Mon", NULL), 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 8, 7, 2001,8,2,UCAL_TUESDAY, "2001 08 02 Tue", NULL), 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 8, 5,/*12,*/ 2001,8,2,UCAL_SUNDAY, "2001 08 02 Sun", NULL), 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 8,6, /*7, 30,*/ 2001,7,6,UCAL_MONDAY, "2001 07 06 Mon", "2001 08 02 Mon"), 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 8,7, /*7, 31,*/ 2001,7,6,UCAL_TUESDAY, "2001 07 06 Tue", "2001 08 02 Tue"), 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 8, 5, 2001,7,6,UCAL_SUNDAY, "2001 07 06 Sun", "2001 08 02 Sun"), 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 7, 30, 2001,8,1,UCAL_MONDAY, "2001 08 01 Mon", "2001 07 05 Mon"), 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 7, 31, 2001,8,1,UCAL_TUESDAY, "2001 08 01 Tue", "2001 07 05 Tue"), 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 7,29, /*8, 5,*/ 2001,8,1,UCAL_SUNDAY, "2001 08 01 Sun", "2001 07 05 Sun"), 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001, 12, 31, 2001,12,6,UCAL_MONDAY, "2001 12 06 Mon", NULL), 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2002, 1, 1, 2002,1,1,UCAL_TUESDAY, "2002 01 01 Tue", NULL), 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2002, 1, 2, 2002,1,1,UCAL_WEDNESDAY, "2002 01 01 Wed", NULL), 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2002, 1, 3, 2002,1,1,UCAL_THURSDAY, "2002 01 01 Thu", NULL), 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2002, 1, 4, 2002,1,1,UCAL_FRIDAY, "2002 01 01 Fri", NULL), 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2002, 1, 5, 2002,1,1,UCAL_SATURDAY, "2002 01 01 Sat", NULL), 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Test1684Data(2001,12,30, /*2002, 1, 6,*/ 2002,1,1,UCAL_SUNDAY, "2002 01 01 Sun", "2001 12 06 Sun") 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define kTest1684Count ((int32_t)(sizeof(tests)/sizeof(tests[0]))) 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pass = 0, error = 0, warning = 0; 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("yyyy MM WW EEE",""); 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = new GregorianCalendar(status); 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdf = new SimpleDateFormat(pattern,status); 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error constructing SimpleDateFormat"); 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<kTest1684Count;i++) { 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete tests[i]; 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setFirstDayOfWeek(UCAL_SUNDAY); 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->setMinimalDaysInFirstWeek(1); 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->adoptCalendar(cal); 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = sdf->getCalendar()->clone(); // sdf may have deleted calendar 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!cal || !sdf || U_FAILURE(status)) { 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("Error setting up test: ") + u_errorName(status)); 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < kTest1684Count; ++i) { 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Test1684Data &test = *(tests[i]); 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("#") + i + UnicodeString("\n-----\nTesting round trip of ") + test.year + 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " " + (test.month + 1) + 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " " + test.date + 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " (written as) " + test.data); 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(test.year, test.month, test.date); 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate ms = cal->getTime(status); 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->clear(); 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_YEAR, test.womyear); 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_MONTH, test.wommon); 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_WEEK_OF_MONTH, test.wom); 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(UCAL_DAY_OF_WEEK, test.dow); 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate ms2 = cal->getTime(status); 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ms2 != ms) { 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"\nError: GregorianUCAL_DOM gave " + ms + 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\n GregorianUCAL_WOM gave " + ms2); 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error++; 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pass++; 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ms2 = sdf->parse(test.data, status); 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("parse exception: " + UnicodeString(u_errorName(status))); 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ms2!=ms) { 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"\nError: GregorianCalendar gave " + ms + 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\n SimpleDateFormat.parse gave " + ms2); 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error++; 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pass++; 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(ms, result); 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != test.normalized) { 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("\nWarning: format of '" + test.data + "' gave" + 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\n '" + result + "'" + 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\n expected '" + test.normalized + "'"); 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru warning++; 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pass++; 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate ms3; 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ms3 = sdf->parse(result, status); 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("parse exception 2: " + (UnicodeString)u_errorName(status)); 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ms3!=ms) { 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error++; 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"\nError: Re-parse of '" + result + "' gave time of " + 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\n " + ms3 + 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\n not " + ms); 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pass++; 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString info 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = UnicodeString("Passed: ") + pass + ", Warnings: " + warning + ", Errors: " + error; 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (error > 0) { 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(info); 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(info); 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<kTest1684Count;i++) { 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete tests[i]; 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatRegressionTest::Test5554(void) 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("Z",""); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newfoundland("Canada/Newfoundland", ""); 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *zone = TimeZone::createTimeZone(newfoundland); 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *cal = new GregorianCalendar(zone, status); 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat *sdf = new SimpleDateFormat(pattern,status); 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error constructing SimpleDateFormat"); 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cal; 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal->set(2007, 1, 14); 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date = cal->getTime(status); 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting time to format"); 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->adoptCalendar(cal); 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString correct("-0330", ""); 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf->format(date, result); 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != correct) { 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("\nError: Newfoundland Z of Jan 14, 2007 gave '" + result + "', expected '" + correct + "'"); 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sdf; 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1469103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid DateFormatRegressionTest::Test9237(void) 1470103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{ 1471103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 1472103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString pattern("VVVV"); 1473103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1474103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SimpleDateFormat fmt(pattern, status); // default locale 1475103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SimpleDateFormat fmtDE(pattern, Locale("de_DE"), status); 1476103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 1477103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("Error constructing SimpleDateFormat"); 1478103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 1479103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1480103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1481103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // copy constructor 1482103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SimpleDateFormat fmtCopyDE(fmtDE); 1483103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString resDE, resCopyDE; 1484103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1485103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fmtDE.format(0.0, resDE); 1486103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fmtCopyDE.format(0.0, resCopyDE); 1487103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1488103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (resDE != resCopyDE) { 1489103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Error: different result by the copied instance - org:") + resDE + " copy:" + resCopyDE); 1490103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1491103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1492103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // test for assignment operator 1493103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fmt = fmtDE; 1494103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1495103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString resAssigned; 1496103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fmt.format(0.0, resAssigned); 1497103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1498103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (resDE != resAssigned) { 1499103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln(UnicodeString("Error: different results by the assigned instance - org:") + resDE + " assigned:" + resAssigned); 1500103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1501103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 1502103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1503103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid DateFormatRegressionTest::TestParsing(void) { 1504103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 1505103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString pattern("EEE-WW-MMMM-yyyy"); 1506103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString text("mon-02-march-2011"); 1507103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t expectedDay = 7; 1508103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1509103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SimpleDateFormat format(pattern, status); 1510103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 1511103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status)); 1512103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 1513103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1514103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1515103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Calendar *cal = new GregorianCalendar(status); 1516103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (cal == NULL || U_FAILURE(status)) { 1517103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Unable to create calendar - %s", u_errorName(status)); 1518103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 1519103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1520103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1521103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ParsePosition pos(0); 1522103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius format.parse(text, *cal, pos); 1523103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1524103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (cal->get(UCAL_DAY_OF_MONTH, status) != expectedDay) { 1525103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsing failed: day of month should be '7' with pattern: \"" + pattern + "\" for text: \"" + text + "\""); 1526103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1527103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1528103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete cal; 1529103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 1530103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid DateFormatRegressionTest::TestT10334(void) { 1532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 1533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString pattern("'--: 'EEE-WW-MMMM-yyyy"); 1534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString text("--mon-02-march-2011"); 1535fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius SimpleDateFormat format(pattern, status); 1536fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 1538fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Fail creating SimpleDateFormat object - %s", u_errorName(status)); 1539fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 1540fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1541fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1542fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.setBooleanAttribute(UDAT_PARSE_PARTIAL_MATCH, FALSE, status); 1543fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.parse(text, status); 1544fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (!U_FAILURE(status)) { 1545fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("parse partial match did NOT fail in strict mode - %s", u_errorName(status)); 1546fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1547fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1548fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 1549fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.setBooleanAttribute(UDAT_PARSE_PARTIAL_MATCH, TRUE, status); 1550fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.parse(text, status); 1551fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 1552fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("parse partial match failure in lenient mode - %s", u_errorName(status)); 1553fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1554fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1555fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 1556fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius pattern = UnicodeString("YYYY MM dd"); 1557fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius text = UnicodeString("2013 12 10"); 1558fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.applyPattern(pattern); 1559fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UDate referenceDate = format.parse(text, status); 1560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius FieldPosition fp(0); 1562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString formattedString(""); 1563fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius pattern = UnicodeString("YYYY LL dd ee cc qq QQ"); 1564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.applyPattern(pattern); 1565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.format(referenceDate, formattedString, fp, status); 1566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("ref date: " + formattedString); 1567fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1568fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1569fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char patternArray[] = "YYYY LLL dd eee ccc qqq QQQ"; 1570fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius pattern = UnicodeString(patternArray); 1571fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius text = UnicodeString("2013 12 10 03 3 04 04"); 1572fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 1573fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, TRUE, status); 1574fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.applyPattern(pattern); 1575fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ParsePosition pp(0); 1576fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.parse(text, pp); 1577fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (pp.getErrorIndex() != -1) { 1578fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("numeric parse error"); 1579fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1580fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1581fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 1582fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, FALSE, status); 1583fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.parse(text, status); 1584fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (!U_FAILURE(status)) { 1585fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("numeric parse did NOT fail in strict mode", u_errorName(status)); 1586fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1587fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 1589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct { 1592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char * locale; 1593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UBool leniency; 1594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString parseString; 1595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString pattern; 1596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString expectedResult; // null indicates expected error 1597fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} TestDateFormatLeniencyItem; 1598fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid DateFormatRegressionTest::TestT10619(void) { 1601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UDate july022008 = 1215000001979.0; 1602fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const TestDateFormatLeniencyItem items[] = { 1603fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius /* 1604fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius new TestDateFormatLeniencyItem(true, "2008-Jan 02", "yyyy-LLL. dd", "2008-Jan. 02"), 1605fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius new TestDateFormatLeniencyItem(false, "2008-Jan 03", "yyyy-LLL. dd", null), 1606fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius new TestDateFormatLeniencyItem(true, "2008-Jan--04", "yyyy-MMM' -- 'dd", "2008-Jan -- 04"), 1607fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius new TestDateFormatLeniencyItem(false, "2008-Jan--05", "yyyy-MMM' -- 'dd", null), 1608fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius new TestDateFormatLeniencyItem(true, "2008-12-31", "yyyy-mm-dd", "2008-12-31"), 1609fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius new TestDateFormatLeniencyItem(false, "6 Jan 05 2008", "eee MMM dd yyyy", null), 1610fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius new TestDateFormatLeniencyItem(true, "6 Jan 05 2008", "eee MMM dd yyyy", "Sat Jan 05 2008"), 1611fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */ 1612fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius //locale leniency parse String pattern expected result 1613fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", true, UnicodeString("2008-07 02"), UnicodeString("yyyy-LLLL dd"), UnicodeString("2008-July 02") }, 1614fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", false, UnicodeString("2008-07 02"), UnicodeString("yyyy-LLLL dd"), UnicodeString("") }, 1615fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", true, UnicodeString("2008-Jan 02"), UnicodeString("yyyy-LLL. dd"), UnicodeString("2008-Jan 02") }, 1616fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", false, UnicodeString("2008-Jan 02"), UnicodeString("yyyy-LLL. dd"), UnicodeString("") }, 1617fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", true, UnicodeString("2008-Jan--02"), UnicodeString("yyyy-MMM' -- 'dd"), UnicodeString("2008-Jan 02") }, 1618fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", false, UnicodeString("2008-Jan--02"), UnicodeString("yyyy-MMM' -- 'dd"), UnicodeString("") }, 1619fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", true, UnicodeString("6 Jan 05 2008"), UnicodeString("eee MMM dd yyyy"), UnicodeString("Sat Jan 05 2008") }, 1620fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", false, UnicodeString("6 Jan 05 2008"), UnicodeString("eee MMM dd yyyy"), UnicodeString("") }, 1621fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // terminator 1622fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { NULL, true, UnicodeString(""), UnicodeString(""), UnicodeString("") } 1623fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius }; 1624fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 1625fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius Calendar* cal = Calendar::createInstance(status); 1626fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 1627fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln(UnicodeString("FAIL: Unable to create Calendar for default timezone and locale.")); 1628fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1629fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius cal->setTime(july022008, status); 1630fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const TestDateFormatLeniencyItem * itemPtr; 1631fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) { 1632fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1633fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius Locale locale = Locale::createFromName(itemPtr->locale); 1634fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 1635fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ParsePosition pos(0); 1636fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius SimpleDateFormat * sdmft = new SimpleDateFormat(itemPtr->pattern, locale, status); 1637fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 1638fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status)); 1639fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius continue; 1640fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1641fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius sdmft->setLenient(itemPtr->leniency); 1642fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius sdmft->setBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, itemPtr->leniency, status).setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, itemPtr->leniency, status); 1643fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius /*UDate d = */sdmft->parse(itemPtr->parseString, pos); 1644fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1645fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete sdmft; 1646fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(pos.getErrorIndex() > -1) { 1647fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(itemPtr->expectedResult.length() != 0) { 1648fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("error: unexpected error - " + itemPtr->parseString + " - error index " + pos.getErrorIndex() + 1649fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius " - leniency " + itemPtr->leniency); 1650fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius continue; 1651fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1652fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius continue; 1653fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1654fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1655fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1656fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1657fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete cal; 1658fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1659fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 1660fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 1664