X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/86d19346c5e0abd5c2575d0a305ddc48f05fddf8..9e1da4827a0ec18f9766d664b9af12c25e3f71fb:/tests/datetime/datetimetest.cpp?ds=inline diff --git a/tests/datetime/datetimetest.cpp b/tests/datetime/datetimetest.cpp index 3d4fad74d1..e317c4707d 100644 --- a/tests/datetime/datetimetest.cpp +++ b/tests/datetime/datetimetest.cpp @@ -829,29 +829,33 @@ void DateTimeTestCase::TestTimeFormat() CPPUNIT_ASSERT( dt.ParseFormat("17", "%d") ); CPPUNIT_ASSERT_EQUAL( 17, dt.GetDay() ); + // test some degenerate cases + CPPUNIT_ASSERT( !dt.ParseFormat("", "%z") ); + CPPUNIT_ASSERT( !dt.ParseFormat("", "%%") ); + // test compilation of some calls which should compile (and not result in // ambiguity because of char*<->wxCStrData<->wxString conversions) wxString s("foo"); 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); } void DateTimeTestCase::TestTimeSpanFormat() @@ -1039,6 +1043,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() @@ -1204,7 +1212,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()