X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1f29ecb357dd7b6ce1cf8f04a832e7300dff5293..50d2908480c16f7a15e121819e8401903cb16f43:/tests/datetime/datetimetest.cpp diff --git a/tests/datetime/datetimetest.cpp b/tests/datetime/datetimetest.cpp index 65375c0896..67f9269c2a 100644 --- a/tests/datetime/datetimetest.cpp +++ b/tests/datetime/datetimetest.cpp @@ -222,6 +222,7 @@ private: CPPUNIT_TEST( TestTimeWDays ); CPPUNIT_TEST( TestTimeDST ); CPPUNIT_TEST( TestTimeFormat ); + CPPUNIT_TEST( TestTimeParse ); CPPUNIT_TEST( TestTimeSpanFormat ); CPPUNIT_TEST( TestTimeTicks ); CPPUNIT_TEST( TestParceRFC822 ); @@ -240,6 +241,7 @@ private: void TestTimeWDays(); void TestTimeDST(); void TestTimeFormat(); + void TestTimeParse(); void TestTimeSpanFormat(); void TestTimeTicks(); void TestParceRFC822(); @@ -537,6 +539,11 @@ for n in range(20): { { 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++ ) @@ -839,23 +846,41 @@ void DateTimeTestCase::TestTimeFormat() CPPUNIT_ASSERT( !dt.ParseFormat("foo") ); CPPUNIT_ASSERT( !dt.ParseFormat(wxT("foo")) ); CPPUNIT_ASSERT( !dt.ParseFormat(s) ); - CPPUNIT_ASSERT( !dt.ParseFormat(s.c_str()) ); + dt.ParseFormat(s.c_str()); // Simply test compilation of this one. CPPUNIT_ASSERT( !dt.ParseFormat("foo", "%c") ); CPPUNIT_ASSERT( !dt.ParseFormat(wxT("foo"), "%c") ); CPPUNIT_ASSERT( !dt.ParseFormat(s, "%c") ); - CPPUNIT_ASSERT( !dt.ParseFormat(s.c_str(), "%c") ); + dt.ParseFormat(s.c_str(), "%c"); CPPUNIT_ASSERT( !dt.ParseFormat("foo", wxT("%c")) ); CPPUNIT_ASSERT( !dt.ParseFormat(wxT("foo"), wxT("%c")) ); CPPUNIT_ASSERT( !dt.ParseFormat(s, "%c") ); - CPPUNIT_ASSERT( !dt.ParseFormat(s.c_str(), wxT("%c")) ); + dt.ParseFormat(s.c_str(), wxT("%c")); wxString spec("%c"); CPPUNIT_ASSERT( !dt.ParseFormat("foo", spec) ); CPPUNIT_ASSERT( !dt.ParseFormat(wxT("foo"), spec) ); CPPUNIT_ASSERT( !dt.ParseFormat(s, spec) ); - CPPUNIT_ASSERT( !dt.ParseFormat(s.c_str(), spec) ); + 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() @@ -1043,6 +1068,10 @@ void DateTimeTestCase::TestDateParse() ); } } + + // Check that incomplete parse works correctly. + const char* p = dt.ParseFormat("2012-03-23 12:34:56", "%Y-%m-%d"); + CPPUNIT_ASSERT_EQUAL( " 12:34:56", wxString(p) ); } void DateTimeTestCase::TestDateParseISO() @@ -1208,7 +1237,33 @@ void DateTimeTestCase::TestTimeArithmetics() CPPUNIT_ASSERT_EQUAL( dt, dt1 - span ); CPPUNIT_ASSERT_EQUAL( dt, dt2 + span ); CPPUNIT_ASSERT_EQUAL( dt1, dt2 + 2*span ); + CPPUNIT_ASSERT_EQUAL( span, dt1.DiffAsDateSpan(dt) ); } + + // More date span arithmetics tests + wxDateTime dtd1(5, wxDateTime::Jun, 1998); + wxDateTime dtd2(6, wxDateTime::Aug, 1999); + + // All parts in dtd2 is after dtd1 + CPPUNIT_ASSERT_EQUAL( wxDateSpan(1, 2, 0, 1), dtd2.DiffAsDateSpan(dtd1) ); + + // Year and month after, day earlier, so no full month + // Jul has 31 days, so it's 31 - 5 + 4 = 30, or 4w 2d + dtd2.Set(4, wxDateTime::Aug, 1999); + CPPUNIT_ASSERT_EQUAL( wxDateSpan(1, 1, 4, 2), dtd2.DiffAsDateSpan(dtd1) ); + + // Year and day after, month earlier, so no full year, but same day diff as + // first example + dtd2.Set(6, wxDateTime::May, 1999); + CPPUNIT_ASSERT_EQUAL( wxDateSpan(0, 11, 0, 1), dtd2.DiffAsDateSpan(dtd1) ); + + // Year after, month and day earlier, so no full month and no full year + // April has 30 days, so it's 30 - 5 + 4 = 29, or 4w 1d + dtd2.Set(4, wxDateTime::May, 1999); + CPPUNIT_ASSERT_EQUAL( wxDateSpan(0, 10, 4, 1), dtd2.DiffAsDateSpan(dtd1) ); + + // And a reverse. Now we should use days in Jun (again 30 => 4w 1d) + CPPUNIT_ASSERT_EQUAL( wxDateSpan(0, -10, -4, -1), dtd1.DiffAsDateSpan(dtd2) ); } void DateTimeTestCase::TestDSTBug()