cpython: e057da873673 (original) (raw)
--- a/Lib/test/test_calendar.py +++ b/Lib/test/test_calendar.py @@ -2,13 +2,14 @@ import calendar import unittest from test import support -from test.script_helper import assert_python_ok +from test.script_helper import assert_python_ok, assert_python_failure import time import locale import sys import datetime +import os -result_2004_01_text = """ +result_2004_01_text = """[](#l1.16) January 2004 Mo Tu We Th Fr Sa Su 1 2 3 4 @@ -18,7 +19,7 @@ 19 20 21 22 23 24 25 26 27 28 29 30 31 """ -result_2004_text = """ +result_2004_text = """[](#l1.25) 2004 January February March @@ -56,7 +57,7 @@ 18 19 20 21 22 23 24 22 23 24 25 26 25 26 27 28 29 30 31 29 30 27 28 29 30 31 """ -result_2004_html = """ +result_2004_html = """[](#l1.34) @@ -327,8 +328,8 @@ class OutputTestCase(unittest.TestCase): def check_htmlcalendar_encoding(self, req, res): cal = calendar.HTMLCalendar() self.assertEqual(
cal.formatyearpage(2004, encoding=req).strip(b' \t\n'),[](#l1.42)
(result_2004_html % {'e': res}).strip(' \t\n').encode(res)[](#l1.43)
cal.formatyearpage(2004, encoding=req),[](#l1.44)
(result_2004_html % {'e': res}).encode(res)[](#l1.45) )[](#l1.46)
def test_output(self): @@ -339,8 +340,8 @@ class OutputTestCase(unittest.TestCase): def test_output_textcalendar(self): self.assertEqual(
calendar.TextCalendar().formatyear(2004).strip(),[](#l1.53)
result_2004_text.strip()[](#l1.54)
calendar.TextCalendar().formatyear(2004),[](#l1.55)
result_2004_text[](#l1.56) )[](#l1.57)
def test_output_htmlcalendar_encoding_ascii(self): @@ -383,8 +384,8 @@ class OutputTestCase(unittest.TestCase): def test_formatmonth(self): self.assertEqual(
calendar.TextCalendar().formatmonth(2004, 1).strip(),[](#l1.64)
result_2004_01_text.strip()[](#l1.65)
calendar.TextCalendar().formatmonth(2004, 1),[](#l1.66)
result_2004_01_text[](#l1.67) )[](#l1.68)
def test_formatmonthname_with_year(self): @@ -692,23 +693,127 @@ class LeapdaysTestCase(unittest.TestCase self.assertEqual(calendar.leapdays(1997,2020), 5) -class ConsoleOutputTestCase(unittest.TestCase):
- def test_outputs_bytes(self):
(return_code, stdout, stderr) = assert_python_ok('-m', 'calendar', '--type=html', '2010')[](#l1.77)
self.assertEqual(stdout[:6], b'<?xml ')[](#l1.78)
+ +class CommandLineTestCase(unittest.TestCase):
- def assertFailure(self, *args):
rc, stdout, stderr = assert_python_failure('-m', 'calendar', *args)[](#l1.87)
self.assertIn(b'Usage:', stderr)[](#l1.88)
self.assertEqual(rc, 2)[](#l1.89)
- def test_help(self):
stdout = self.run_ok('-h')[](#l1.92)
self.assertIn(b'Usage:', stdout)[](#l1.93)
self.assertIn(b'calendar.py', stdout)[](#l1.94)
self.assertIn(b'--help', stdout)[](#l1.95)
- def test_illegal_arguments(self):
self.assertFailure('-z')[](#l1.98)
#self.assertFailure('spam')[](#l1.99)
#self.assertFailure('2004', 'spam')[](#l1.100)
self.assertFailure('-t', 'html', '2004', '1')[](#l1.101)
- def test_output_current_year(self):
stdout = self.run_ok()[](#l1.104)
year = datetime.datetime.now().year[](#l1.105)
self.assertIn((' %s' % year).encode(), stdout)[](#l1.106)
self.assertIn(b'January', stdout)[](#l1.107)
self.assertIn(b'Mo Tu We Th Fr Sa Su', stdout)[](#l1.108)
- def test_output_year(self):
stdout = self.run_ok('2004')[](#l1.111)
self.assertEqual(stdout, conv(result_2004_text))[](#l1.112)
- def test_output_month(self):
stdout = self.run_ok('2004', '1')[](#l1.115)
self.assertEqual(stdout, conv(result_2004_01_text))[](#l1.116)
- def test_option_encoding(self):
self.assertFailure('-e')[](#l1.119)
self.assertFailure('--encoding')[](#l1.120)
stdout = self.run_ok('--encoding', 'utf-16-le', '2004')[](#l1.121)
self.assertEqual(stdout, result_2004_text.encode('utf-16-le'))[](#l1.122)
- support.run_unittest(
OutputTestCase,[](#l1.126)
CalendarTestCase,[](#l1.127)
MondayTestCase,[](#l1.128)
SundayTestCase,[](#l1.129)
TimegmTestCase,[](#l1.130)
MonthRangeTestCase,[](#l1.131)
LeapdaysTestCase,[](#l1.132)
ConsoleOutputTestCase[](#l1.133)
- )
- def test_option_locale(self):
self.assertFailure('-L')[](#l1.136)
self.assertFailure('--locale')[](#l1.137)
self.assertFailure('-L', 'en')[](#l1.138)
lang, enc = locale.getdefaultlocale()[](#l1.139)
lang = lang or 'C'[](#l1.140)
enc = enc or 'UTF-8'[](#l1.141)
try:[](#l1.142)
oldlocale = locale.getlocale(locale.LC_TIME)[](#l1.143)
try:[](#l1.144)
locale.setlocale(locale.LC_TIME, (lang, enc))[](#l1.145)
finally:[](#l1.146)
locale.setlocale(locale.LC_TIME, oldlocale)[](#l1.147)
except (locale.Error, ValueError):[](#l1.148)
self.skipTest('cannot set the system default locale')[](#l1.149)
stdout = self.run_ok('--locale', lang, '--encoding', enc, '2004')[](#l1.150)
self.assertIn('2004'.encode(enc), stdout)[](#l1.151)
- def test_option_width(self):
self.assertFailure('-w')[](#l1.154)
self.assertFailure('--width')[](#l1.155)
self.assertFailure('-w', 'spam')[](#l1.156)
stdout = self.run_ok('--width', '3', '2004')[](#l1.157)
self.assertIn(b'Mon Tue Wed Thu Fri Sat Sun', stdout)[](#l1.158)
- def test_option_lines(self):
self.assertFailure('-l')[](#l1.161)
self.assertFailure('--lines')[](#l1.162)
self.assertFailure('-l', 'spam')[](#l1.163)
stdout = self.run_ok('--lines', '2', '2004')[](#l1.164)
self.assertIn(conv('December\n\nMo Tu We'), stdout)[](#l1.165)
- def test_option_spacing(self):
self.assertFailure('-s')[](#l1.168)
self.assertFailure('--spacing')[](#l1.169)
self.assertFailure('-s', 'spam')[](#l1.170)
stdout = self.run_ok('--spacing', '8', '2004')[](#l1.171)
self.assertIn(b'Su Mo', stdout)[](#l1.172)
- def test_option_months(self):
self.assertFailure('-m')[](#l1.175)
self.assertFailure('--month')[](#l1.176)
self.assertFailure('-m', 'spam')[](#l1.177)
stdout = self.run_ok('--months', '1', '2004')[](#l1.178)
self.assertIn(conv('\nMo Tu We Th Fr Sa Su\n'), stdout)[](#l1.179)
- def test_option_type(self):
self.assertFailure('-t')[](#l1.182)
self.assertFailure('--type')[](#l1.183)
self.assertFailure('-t', 'spam')[](#l1.184)
stdout = self.run_ok('--type', 'text', '2004')[](#l1.185)
self.assertEqual(stdout, conv(result_2004_text))[](#l1.186)
stdout = self.run_ok('--type', 'html', '2004')[](#l1.187)
self.assertEqual(stdout[:6], b'<?xml ')[](#l1.188)
self.assertIn(b'<title>Calendar for 2004</title>', stdout)[](#l1.189)
- def test_html_output_current_year(self):
stdout = self.run_ok('--type', 'html')[](#l1.192)
year = datetime.datetime.now().year[](#l1.193)
self.assertIn(('<title>Calendar for %s</title>' % year).encode(),[](#l1.194)
stdout)[](#l1.195)
self.assertIn(b'<tr><th colspan="7" class="month">January</th></tr>',[](#l1.196)
stdout)[](#l1.197)
- def test_html_output_year_encoding(self):
stdout = self.run_ok('-t', 'html', '--encoding', 'ascii', '2004')[](#l1.200)
self.assertEqual(stdout,[](#l1.201)
(result_2004_html % {'e': 'ascii'}).encode('ascii'))[](#l1.202)
- def test_html_output_year_css(self):
self.assertFailure('-t', 'html', '-c')[](#l1.205)
self.assertFailure('-t', 'html', '--css')[](#l1.206)
stdout = self.run_ok('-t', 'html', '--css', 'custom.css', '2004')[](#l1.207)
self.assertIn(b'<link rel="stylesheet" type="text/css" '[](#l1.208)
b'href="custom.css" />', stdout)[](#l1.209)
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -1629,6 +1629,8 @@ Documentation Tests ----- +- Issue #18982: Add tests for CLI of the calendar module. +