X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77dd7daad2df0faac2b4e846ac9bb6aff588278c..fde8374482bc51ca0539b2db8f449c62a0d0d7e4:/tests/datetime/datetimetest.cpp diff --git a/tests/datetime/datetimetest.cpp b/tests/datetime/datetimetest.cpp index 00a76af0ea..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++ ) @@ -858,6 +865,24 @@ void DateTimeTestCase::TestTimeFormat() 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 @@ -1214,6 +1239,31 @@ void DateTimeTestCase::TestTimeArithmetics() 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()