summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2015-02-05 13:18:26 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2015-02-05 13:18:26 (GMT)
commitd44bcc9b2fd74f9c27398dc2e7e6f2360ecea209 (patch)
treed9277586e8c7f447e83b2bf56c7ff9b5e8c45a08 /Lib
parentfa11978f1b14ca5dbbf83c3e0152d4bfa029bf35 (diff)
downloadcpython-d44bcc9b2fd74f9c27398dc2e7e6f2360ecea209.zip
cpython-d44bcc9b2fd74f9c27398dc2e7e6f2360ecea209.tar.gz
cpython-d44bcc9b2fd74f9c27398dc2e7e6f2360ecea209.tar.bz2
Issue #18982: Add tests for CLI of the calendar module.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_calendar.py137
1 files changed, 134 insertions, 3 deletions
diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py
index 40fb76d..accd16c 100644
--- a/Lib/test/test_calendar.py
+++ b/Lib/test/test_calendar.py
@@ -2,11 +2,22 @@ import calendar
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_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 = """
+result_2004_text = """\
2004
January February March
@@ -44,7 +55,7 @@ Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
25 26 27 28 29 30 31 29 30 27 28 29 30 31
"""
-result_2004_html = """
+result_2004_html = """\
<?xml version="1.0" encoding="ascii"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
@@ -460,6 +471,124 @@ class LeapdaysTestCase(unittest.TestCase):
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'<?xml ')
+ self.assertIn(b'<title>Calendar for 2004</title>', stdout)
+
+ def test_html_output_current_year(self):
+ stdout = self.run_ok('--type', 'html')
+ year = datetime.datetime.now().year
+ self.assertIn(('<title>Calendar for %s</title>' % year).encode(),
+ stdout)
+ self.assertIn(b'<tr><th colspan="7" class="month">January</th></tr>',
+ 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'<link rel="stylesheet" type="text/css" '
+ b'href="custom.css" />', stdout)
+
+
def test_main():
test_support.run_unittest(
OutputTestCase,
@@ -468,8 +597,10 @@ def test_main():
SundayTestCase,
MonthRangeTestCase,
LeapdaysTestCase,
+ CommandLineTestCase,
)
if __name__ == "__main__":
test_main()
+ unittest.main()