diff -r 15f82b64eee0 Lib/calendar.py --- a/Lib/calendar.py Thu Sep 22 17:11:53 2016 -0700 +++ b/Lib/calendar.py Fri Sep 23 16:01:52 2016 +0800 @@ -366,7 +366,7 @@ weeks.append('') else: weeks.append(self.formatweek(cal[j], w)) - a(formatstring(weeks, colwidth, c).rstrip()) + a(formatstring1(weeks, colwidth, c).rstrip()) a('\n' * l) return ''.join(v) @@ -591,6 +591,9 @@ spacing *= ' ' return spacing.join(c.center(colwidth) for c in cols) +def formatstring1(cols, colwidth=_colwidth, spacing=_spacing): + spacing *= ' ' + return spacing.join(c.ljust(colwidth) for c in cols) EPOCH = 1970 _EPOCH_ORD = datetime.date(EPOCH, 1, 1).toordinal() diff -r 15f82b64eee0 Lib/test/test_calendar.py --- a/Lib/test/test_calendar.py Thu Sep 22 17:11:53 2016 -0700 +++ b/Lib/test/test_calendar.py Fri Sep 23 16:01:52 2016 +0800 @@ -311,6 +311,43 @@ '12/20/04 12/21/04 12/22/04 12/23/04 12/24/04 12/25/04 12/26/04', '12/27/04 12/28/04 12/29/04 12/30/04 12/31/04 01/01/05 01/02/05']]] +result_9999_text = """ + 9999 + + January February March +Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7 + 4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14 +11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21 +18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28 +25 26 27 28 29 30 31 29 30 31 + + April May June +Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 3 4 1 2 1 2 3 4 5 6 + 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13 +12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20 +19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27 +26 27 28 29 30 24 25 26 27 28 29 30 28 29 30 + 31 + + July August September +Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 3 4 1 1 2 3 4 5 + 5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12 +12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19 +19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26 +26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30 + 30 31 + + October November December +Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 + 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12 +11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19 +18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26 +25 26 27 28 29 30 31 29 30 27 28 29 30 31 +""" class OutputTestCase(unittest.TestCase): def normalize_calendar(self, s): @@ -417,6 +454,12 @@ calendar.TextCalendar().pryear(2004) self.assertEqual(out.getvalue().strip(), result_2004_text.strip()) + def test_pryear_9999(self): + # issue 28253 + with support.captured_stdout() as out: + calendar.TextCalendar().pryear(9999) + self.assertEqual(out.getvalue().strip(), result_9999_text.strip()) + def test_format(self): with support.captured_stdout() as out: calendar.format(["1", "2", "3"], colwidth=3, spacing=1) @@ -820,7 +863,8 @@ blacklist = {'mdays', 'January', 'February', 'EPOCH', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY', 'different_locale', 'c', - 'prweek', 'week', 'format', 'formatstring', 'main'} + 'prweek', 'week', 'format', 'formatstring', 'formatstring1', + 'main'} support.check__all__(self, calendar, blacklist=blacklist)