class TestProlepticJulianCalendar(TestJulianCalendar): def setUp(self): self.calendar = ProlepticJulianCalendar() self.addTypeEqualityFunc( DateWithCalendar, DateWithCalendar.make_assertEqual(self) ) def test_year_1_bce(self): self.check_valid_date(-1, 3, 1, JulianCalendar) def test_date_near_end_of_vanilla_dates(self): self.check_valid_date(9999, 12, 1) @given(integers(1, 12), integers(1, 31)) def test_year_0_does_not_exist(self, month, day): self.check_invalid_date(0, month, day) @example(-2147483649) @given(integers(None, -1)) def test_feb_29th_does_not_exist_except_julian_leap_years(self, year): assume(year % 4 != 0) self.check_invalid_date(year, 2, 29) @example(-2147483652) @given(integers(None, -1)) def test_feb_29th_does_exist_in_julian_leap_years(self, year): assume(year % 4 == 0) self.check_valid_date(year, 2, 29) def test_display_string_for_bce_date(self): """ The display string for a date gives the correct date and specifies the calendar. """ d = self.calendar.date(-44, 3, 15) self.assertEqual(d.calendar, JulianCalendar) self.assertEqual(str(d), "15th March 44 BCE (Julian Calendar)") def test_display_string_for_proleptic_date(self): """ The display string for a date gives the correct date and specifies the calendar. """ d = self.calendar.date(-100, 7, 13) self.assertEqual(str(d), "13th July 100 BCE (Proleptic Julian Calendar)") def test_distant_date(self): d = self.calendar.date(9999, 12, 1) dd = DateWithCalendar(ProlepticJulianCalendar, DistantDate(10000, 2, 12)) self.assertEqual(d.calendar, dd.calendar) self.assertEqual(d.y, dd.y) self.assertEqual(d._date, dd._date) self.assertTrue(dd == d) self.assertTrue(d == dd) self.assertEqual(d, dd) def test_representation(self): self.assertEqual( ProlepticJulianCalendar.representation(DistantDate(10000, 2, 12)), {'year': 9999, 'month': 12, 'day': 1} ) self.assertEqual( ProlepticJulianCalendar.representation(DistantDate(10000, 2, 13)), {'year': 9999, 'month': 12, 'day': 2} )