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