Calendar for %s (original) (raw)
changeset: 94519:50a5c262b2e6 branch: 2.7 parent: 94512:49f07942fbd7 user: Serhiy Storchaka storchaka@gmail.com date: Thu Feb 05 15🔞26 2015 +0200 files: Lib/test/test_calendar.py Misc/NEWS description: Issue #18982: Add tests for CLI of the calendar module. diff -r 49f07942fbd7 -r 50a5c262b2e6 Lib/test/test_calendar.py --- a/Lib/test/test_calendar.py Thu Feb 05 17:19:11 2015 +1100 +++ b/Lib/test/test_calendar.py Thu Feb 05 15🔞26 2015 +0200 @@ -2,11 +2,22 @@ import unittest from test import test_support +from test.script_helper import assert_python_ok, assert_python_failure import locale import datetime - +import os -result_2004_text = """ +result_2004_01_text = """\ + January 2004 +Mo Tu We Th Fr Sa Su + 1 2 3 4 + 5 6 7 8 9 10 11 +12 13 14 15 16 17 18 +19 20 21 22 23 24 25 +26 27 28 29 30 31 +""" + +result_2004_text = """\ 2004 January February March @@ -44,7 +55,7 @@ 25 26 27 28 29 30 31 29 30 27 28 29 30 31 """ -result_2004_html = """ +result_2004_html = """\@@ -460,6 +471,124 @@ self.assertEqual(calendar.leapdays(1997,2020), 5) +class CommandLineTestCase(unittest.TestCase): + def run_ok(self, *args): + return assert_python_ok('-m', 'calendar', *args)[1] + + def assertFailure(self, *args): + rc, stdout, stderr = assert_python_failure('-m', 'calendar', *args) + self.assertIn(b'Usage:', stderr) + self.assertEqual(rc, 2) + + def test_help(self): + stdout = self.run_ok('-h') + self.assertIn(b'Usage:', stdout) + self.assertIn(b'calendar.py', stdout) + self.assertIn(b'--help', stdout) + + def test_illegal_arguments(self): + self.assertFailure('-z') + #self.assertFailure('spam') + #self.assertFailure('2004', 'spam') + self.assertFailure('-t', 'html', '2004', '1') + + def test_output_current_year(self): + stdout = self.run_ok() + year = datetime.datetime.now().year + self.assertIn((' %s' % year).encode(), stdout) + self.assertIn(b'January', stdout) + self.assertIn(b'Mo Tu We Th Fr Sa Su', stdout) + + def test_output_year(self): + stdout = self.run_ok('2004') + self.assertEqual(stdout.strip(), result_2004_text.strip()) + + def test_output_month(self): + stdout = self.run_ok('2004', '1') + self.assertEqual(stdout.strip(), result_2004_01_text.strip()) + + def test_option_encoding(self): + self.assertFailure('-e') + self.assertFailure('--encoding') + stdout = self.run_ok('--encoding', 'rot-13', '2004') + self.assertEqual(stdout.strip(), result_2004_text.encode('rot-13').strip()) + + def test_option_locale(self): + self.assertFailure('-L') + self.assertFailure('--locale') + self.assertFailure('-L', 'en') + lang, enc = locale.getdefaultlocale() + lang = lang or 'C' + enc = enc or 'UTF-8' + try: + oldlocale = locale.getlocale(locale.LC_TIME) + try: + locale.setlocale(locale.LC_TIME, (lang, enc)) + finally: + locale.setlocale(locale.LC_TIME, oldlocale) + except (locale.Error, ValueError): + self.skipTest('cannot set the system default locale') + stdout = self.run_ok('--locale', lang, '--encoding', enc, '2004') + self.assertIn('2004'.encode(enc), stdout) + + def test_option_width(self): + self.assertFailure('-w') + self.assertFailure('--width') + self.assertFailure('-w', 'spam') + stdout = self.run_ok('--width', '3', '2004') + self.assertIn(b'Mon Tue Wed Thu Fri Sat Sun', stdout) + + def test_option_lines(self): + self.assertFailure('-l') + self.assertFailure('--lines') + self.assertFailure('-l', 'spam') + stdout = self.run_ok('--lines', '2', '2004') + self.assertIn('December\n\nMo Tu We', stdout) + + def test_option_spacing(self): + self.assertFailure('-s') + self.assertFailure('--spacing') + self.assertFailure('-s', 'spam') + stdout = self.run_ok('--spacing', '8', '2004') + self.assertIn(b'Su Mo', stdout) + + def test_option_months(self): + self.assertFailure('-m') + self.assertFailure('--month') + self.assertFailure('-m', 'spam') + stdout = self.run_ok('--months', '1', '2004') + self.assertIn('\nMo Tu We Th Fr Sa Su\n', stdout) + + def test_option_type(self): + self.assertFailure('-t') + self.assertFailure('--type') + self.assertFailure('-t', 'spam') + stdout = self.run_ok('--type', 'text', '2004') + self.assertEqual(stdout.strip(), result_2004_text.strip()) + stdout = self.run_ok('--type', 'html', '2004') + self.assertEqual(stdout[:6], b'Calendar for 2004', stdout) + + def test_html_output_current_year(self): + stdout = self.run_ok('--type', 'html') + year = datetime.datetime.now().year + self.assertIn(('Calendar for %s' % year).encode(), + stdout) + self.assertIn(b'January', + stdout) + + def test_html_output_year_encoding(self): + stdout = self.run_ok('-t', 'html', '--encoding', 'ascii', '2004') + self.assertEqual(stdout.strip(), result_2004_html.strip()) + + def test_html_output_year_css(self): + self.assertFailure('-t', 'html', '-c') + self.assertFailure('-t', 'html', '--css') + stdout = self.run_ok('-t', 'html', '--css', 'custom.css', '2004') + self.assertIn(b'', stdout) + + def test_main(): test_support.run_unittest( OutputTestCase, @@ -468,8 +597,10 @@ SundayTestCase, MonthRangeTestCase, LeapdaysTestCase, + CommandLineTestCase, ) if __name__ == "__main__": test_main() + unittest.main() diff -r 49f07942fbd7 -r 50a5c262b2e6 Misc/NEWS --- a/Misc/NEWS Thu Feb 05 17:19:11 2015 +1100 +++ b/Misc/NEWS Thu Feb 05 15🔞26 2015 +0200 @@ -98,6 +98,8 @@ Tests ----- +- Issue #18982: Add tests for CLI of the calendar module. + - Issue #19949: The test_xpickle test now tests compatibility with installed Python 2.7 and reports skipped tests. Based on patch by Zachary Ware. /storchaka@gmail.com