diff options
author | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2016-09-28 02:45:20 (GMT) |
---|---|---|
committer | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2016-09-28 02:45:20 (GMT) |
commit | 8cab419624cba0df59fb2d61261a59230ef4578c (patch) | |
tree | e6da7918b064fca89d7c5345ebd1e704fd682f9c /Lib/test/test_calendar.py | |
parent | 36beb5ec135142b1e800577be49238bf767f4a79 (diff) | |
download | cpython-8cab419624cba0df59fb2d61261a59230ef4578c.zip cpython-8cab419624cba0df59fb2d61261a59230ef4578c.tar.gz cpython-8cab419624cba0df59fb2d61261a59230ef4578c.tar.bz2 |
Issue #28253: Fixed calendar functions for extreme months: 0001-01 and 9999-12.
Methods itermonthdays() and itermonthdays2() are reimplemented so that they
don't call itermonthdates() which can cause datetime.date under/overflow.
Diffstat (limited to 'Lib/test/test_calendar.py')
-rw-r--r-- | Lib/test/test_calendar.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py index 46c4a6f..b87b04f 100644 --- a/Lib/test/test_calendar.py +++ b/Lib/test/test_calendar.py @@ -291,6 +291,27 @@ class CalendarTestCase(unittest.TestCase): # see #15421 list(calendar.Calendar().itermonthdates(datetime.MAXYEAR, 12)) + def test_itermonthdays(self): + for firstweekday in range(7): + cal = calendar.Calendar(firstweekday) + # Test the extremes, see #28253 and #26650 + for y, m in [(1, 1), (9999, 12)]: + days = list(cal.itermonthdays(y, m)) + self.assertIn(len(days), (35, 42)) + # Test a short month + cal = calendar.Calendar(firstweekday=3) + days = list(cal.itermonthdays(2001, 2)) + self.assertEqual(days, list(range(1, 29))) + + def test_itermonthdays2(self): + for firstweekday in range(7): + cal = calendar.Calendar(firstweekday) + # Test the extremes, see #28253 and #26650 + for y, m in [(1, 1), (9999, 12)]: + days = list(cal.itermonthdays2(y, m)) + self.assertEqual(days[0][1], firstweekday) + self.assertEqual(days[-1][1], (firstweekday - 1) % 7) + class MonthCalendarTestCase(unittest.TestCase): def setUp(self): |