diff -r 6b70f16d585a Lib/calendar.py --- a/Lib/calendar.py Wed Apr 15 10:27:58 2015 -0400 +++ b/Lib/calendar.py Thu Apr 16 09:16:41 2015 -0500 @@ -12,7 +12,9 @@ __all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday", "firstweekday", "isleap", "leapdays", "weekday", "monthrange", "monthcalendar", "prmonth", "month", "prcal", "calendar", - "timegm", "month_name", "month_abbr", "day_name", "day_abbr"] + "timegm", "month_name", "month_abbr", "day_name", "day_abbr", + "Calendar", "TextCalendar", "HTMLCalendar", "LocaleTextCalendar", + "LocaleHTMLCalendar", "weekheader"] # Exception raised for bad input (with string parameter for details) error = ValueError diff -r 6b70f16d585a Lib/test/test_calendar.py --- a/Lib/test/test_calendar.py Wed Apr 15 10:27:58 2015 -0400 +++ b/Lib/test/test_calendar.py Thu Apr 16 09:16:41 2015 -0500 @@ -815,5 +815,25 @@ b'href="custom.css" />', stdout) +class MiscTestCase(unittest.TestCase): + + def test__all__(self): + blacklist = {'SUNDAY', 'February', 'main', 'mdays', 'January', + 'TUESDAY', 'THURSDAY', 'FRIDAY', 'error', 'c', + 'formatstring', 'WEDNESDAY', 'SATURDAY', + 'different_locale', 'MONDAY', 'EPOCH', 'week', + 'format', 'prweek'} + exported = set(calendar.__all__) + possible_exports = set() + import types + for name, value in calendar.__dict__.items(): + if name.startswith('_'): + continue + if isinstance(value, (types.ModuleType,)): + continue + possible_exports.add(name) + self.assertEqual(exported, possible_exports - blacklist) + + if __name__ == "__main__": unittest.main()