Add flags to test dates struct which allow us to skip ecpected failures.

Use new flags feature to allow us to test format dates outside the two digit
 year parse range.
 Add dates to test for sf.net bug #1357272 and a couple of related issues.
  (eg,6Feb{1856,1857,1937}) .


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37323 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Roger Gammans
2006-02-05 14:05:39 +00:00
parent f30057dfbf
commit 42b62acfc2

View File

@@ -83,7 +83,8 @@ struct Date
double jdn; double jdn;
wxDateTime::WeekDay wday; wxDateTime::WeekDay wday;
time_t gmticks, ticks; time_t gmticks, ticks;
long flags; //Test specific flags - currently only used by TestTimeFormat.
void Init(const wxDateTime::Tm& tm) void Init(const wxDateTime::Tm& tm)
{ {
day = tm.mday; day = tm.mday;
@@ -126,6 +127,7 @@ struct Date
year > 0 ? _T("AD") : _T("BC")); year > 0 ? _T("AD") : _T("BC"));
return s; return s;
} }
bool IsSet(long f) const { return (f && flags) ==f; }
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -579,30 +581,34 @@ void DateTimeTestCase::TestTimeFormat()
CompareTime // time only CompareTime // time only
}; };
const int WORKS_WITH_2DIGIT_YEAR(1);
static const struct static const struct
{ {
CompareKind compareKind; CompareKind compareKind;
long flagsneeded;
const wxChar *format; const wxChar *format;
} formatTestFormats[] = } formatTestFormats[] =
{ {
{ CompareBoth, _T("---> %c") }, { CompareBoth,0 , _T("---> %c") }, //Assumes %c show a 4digit year.
{ CompareDate, _T("Date is %A, %d of %B, in year %Y") }, { CompareDate,0, _T("Date is %A, %d of %B, in year %Y") },
{ CompareBoth, _T("Date is %x, time is %X") }, { CompareBoth,WORKS_WITH_2DIGIT_YEAR, _T("Date is %x, time is %X") },
{ CompareTime, _T("Time is %H:%M:%S or %I:%M:%S %p") }, { CompareTime,0, _T("Time is %H:%M:%S or %I:%M:%S %p") },
{ CompareNone, _T("The day of year: %j, the week of year: %W") }, { CompareNone,0, _T("The day of year: %j, the week of year: %W") },
{ CompareDate, _T("ISO date without separators: %Y%m%d") }, { CompareDate,0, _T("ISO date without separators: %Y%m%d") },
}; };
static const Date formatTestDates[] = static const Date formatTestDates[] =
{ {
{ 29, wxDateTime::May, 1976, 18, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 }, { 29, wxDateTime::May, 1976, 18, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 , WORKS_WITH_2DIGIT_YEAR},
{ 31, wxDateTime::Dec, 1999, 23, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 }, { 31, wxDateTime::Dec, 1999, 23, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 , WORKS_WITH_2DIGIT_YEAR },
{ 6, wxDateTime::Feb, 1937, 23, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 ,0 },
{ 6, wxDateTime::Feb, 1856, 23, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 ,0 },
{ 6, wxDateTime::Feb, 1857, 23, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 ,0 },
{ 29, wxDateTime::May, 2076, 18, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 ,0 },
{ 29, wxDateTime::Feb, 2400, 02, 15, 25, 0.0, wxDateTime::Inv_WeekDay, 0, 0 ,0 },
#if 0 #if 0
// this test can't work for other centuries because it uses two digit // Need to add support for BCE dates.
// years in formats, so don't even try it { 01, wxDateTime::Jan, -52, 03, 16, 47, 0.0, wxDateTime::Inv_WeekDay, 0, 0 ,0 },
{ 29, wxDateTime::May, 2076, 18, 30, 00, 0.0, wxDateTime::Inv_WeekDay, 0, 0 },
{ 29, wxDateTime::Feb, 2400, 02, 15, 25, 0.0, wxDateTime::Inv_WeekDay, 0, 0 },
{ 01, wxDateTime::Jan, -52, 03, 16, 47, 0.0, wxDateTime::Inv_WeekDay, 0, 0 },
#endif #endif
}; };
@@ -611,8 +617,10 @@ void DateTimeTestCase::TestTimeFormat()
wxDateTime dt = d == 0 ? wxDateTime::Now() : formatTestDates[d - 1].DT(); wxDateTime dt = d == 0 ? wxDateTime::Now() : formatTestDates[d - 1].DT();
for ( size_t n = 0; n < WXSIZEOF(formatTestFormats); n++ ) for ( size_t n = 0; n < WXSIZEOF(formatTestFormats); n++ )
{ {
//Skip test if date hasn't got the required flags.
if ((d!=0) && !(formatTestDates[d - 1].IsSet(formatTestFormats[n].flagsneeded))) continue;
wxString s = dt.Format(formatTestFormats[n].format); wxString s = dt.Format(formatTestFormats[n].format);
// what can we recover? // what can we recover?
int kind = formatTestFormats[n].compareKind; int kind = formatTestFormats[n].compareKind;