// Purpose: wxDateTime unit test
// Author: Vadim Zeitlin
// Created: 2004-06-23 (extracted from samples/console/console.cpp)
-// RCS-ID: $Id$
// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org>
///////////////////////////////////////////////////////////////////////////////
CPPUNIT_TEST( TestTimeWDays );
CPPUNIT_TEST( TestTimeDST );
CPPUNIT_TEST( TestTimeFormat );
+ CPPUNIT_TEST( TestTimeParse );
CPPUNIT_TEST( TestTimeSpanFormat );
CPPUNIT_TEST( TestTimeTicks );
CPPUNIT_TEST( TestParceRFC822 );
void TestTimeWDays();
void TestTimeDST();
void TestTimeFormat();
+ void TestTimeParse();
void TestTimeSpanFormat();
void TestTimeTicks();
void TestParceRFC822();
{ { 2, wxDateTime::Jan, 2004, 0, 0, 0, 0.0, wxDateTime::Inv_WeekDay, 0 }, 1, 1, 1, 2 },
{ { 5, wxDateTime::Jan, 2010, 0, 0, 0, 0.0, wxDateTime::Inv_WeekDay, 0 }, 1, 2, 2, 5 },
{ { 3, wxDateTime::Jan, 2011, 0, 0, 0, 0.0, wxDateTime::Inv_WeekDay, 0 }, 1, 2, 2, 3 },
+ { { 31, wxDateTime::Dec, 2009, 0, 0, 0, 0.0, wxDateTime::Inv_WeekDay, 0 }, 53, 5, 5, 365 },
+ { { 31, wxDateTime::Dec, 2012, 0, 0, 0, 0.0, wxDateTime::Inv_WeekDay, 0 }, 1, 6, 6, 366 },
+ { { 29, wxDateTime::Dec, 2013, 0, 0, 0, 0.0, wxDateTime::Inv_WeekDay, 0 }, 52, 5, 5, 363 },
+ { { 30, wxDateTime::Dec, 2013, 0, 0, 0, 0.0, wxDateTime::Inv_WeekDay, 0 }, 1, 6, 5, 364 },
+ { { 31, wxDateTime::Dec, 2013, 0, 0, 0, 0.0, wxDateTime::Inv_WeekDay, 0 }, 1, 6, 5, 365 },
};
for ( size_t n = 0; n < WXSIZEOF(weekNumberTestDates); n++ )
dt.ParseFormat(s.c_str(), spec);
}
+// Test parsing time in free format.
+void DateTimeTestCase::TestTimeParse()
+{
+ wxDateTime dt;
+
+ // Parsing standard formats should work.
+ CPPUNIT_ASSERT( dt.ParseTime("12:34:56") );
+ CPPUNIT_ASSERT_EQUAL( "12:34:56", dt.FormatISOTime() );
+
+ // Parsing just hours should work too.
+ dt.ResetTime();
+ CPPUNIT_ASSERT( dt.ParseTime("17") );
+ CPPUNIT_ASSERT_EQUAL( "17:00:00", dt.FormatISOTime() );
+
+ // Parsing gibberish shouldn't work.
+ CPPUNIT_ASSERT( !dt.ParseTime("bloordyblop") );
+}
+
void DateTimeTestCase::TestTimeSpanFormat()
{
static const struct TimeSpanFormatTestData
CPPUNIT_ASSERT_EQUAL(0, (int)dt2.GetSecond());
CPPUNIT_ASSERT_EQUAL(0, (int)dt2.GetMillisecond());
#endif // CHANGE_SYSTEM_DATE
+
+ // Verify that setting the date to the beginning of the DST period moves it
+ // forward (as this date on its own would be invalid). The problem here is
+ // that our GetBeginDST() is far from being trustworthy, so just try a
+ // couple of dates for the common time zones and check that all of them are
+ // either unchanged or moved forward.
+ wxDateTime dtDST(10, wxDateTime::Mar, 2013, 2, 0, 0);
+ if ( dtDST.GetHour() != 2 )
+ CPPUNIT_ASSERT_EQUAL( 3, dtDST.GetHour() );
+
+ dtDST = wxDateTime(31, wxDateTime::Mar, 2013, 2, 0, 0);
+ if ( dtDST.GetHour() != 2 )
+ CPPUNIT_ASSERT_EQUAL( 3, dtDST.GetHour() );
}
void DateTimeTestCase::TestDateOnly()