Fix bugs in the recently added wxDateTime::DiffAsDateSpan().

Correct the test for negative spans less than a month and use the correct
month for computing the number of days in it.

Also add unit tests for problematic cases.

Closes #14704.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72616 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-10-04 22:48:30 +00:00
parent 16630eb7e3
commit f4370376b6
2 changed files with 42 additions and 8 deletions

View File

@@ -1214,6 +1214,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()