Skip to content

Commit a0b4b70

Browse files
committed
add test
1 parent 634f3be commit a0b4b70

File tree

1 file changed

+161
-5
lines changed

1 file changed

+161
-5
lines changed

Lib/test/test_traceback.py

Lines changed: 161 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -564,12 +564,12 @@ def test_signatures(self):
564564
self.assertEqual(
565565
str(inspect.signature(traceback.print_exception)),
566566
('(exc, /, value=<implicit>, tb=<implicit>, '
567-
'limit=None, file=None, chain=True, **kwargs)'))
567+
'limit=None, file=None, chain=True, show_lines=True, **kwargs)'))
568568

569569
self.assertEqual(
570570
str(inspect.signature(traceback.format_exception)),
571571
('(exc, /, value=<implicit>, tb=<implicit>, limit=None, '
572-
'chain=True, **kwargs)'))
572+
'chain=True, show_lines=True, **kwargs)'))
573573

574574
self.assertEqual(
575575
str(inspect.signature(traceback.format_exception_only)),
@@ -3340,7 +3340,7 @@ def some_inner(k, v):
33403340

33413341
def test_custom_format_frame(self):
33423342
class CustomStackSummary(traceback.StackSummary):
3343-
def format_frame_summary(self, frame_summary, colorize=False):
3343+
def format_frame_summary(self, frame_summary, **kwargs):
33443344
return f'{frame_summary.filename}:{frame_summary.lineno}'
33453345

33463346
def some_inner():
@@ -3365,10 +3365,10 @@ def g():
33653365
tb = g()
33663366

33673367
class Skip_G(traceback.StackSummary):
3368-
def format_frame_summary(self, frame_summary, colorize=False):
3368+
def format_frame_summary(self, frame_summary, **kwargs):
33693369
if frame_summary.name == 'g':
33703370
return None
3371-
return super().format_frame_summary(frame_summary)
3371+
return super().format_frame_summary(frame_summary, **kwargs)
33723372

33733373
stack = Skip_G.extract(
33743374
traceback.walk_tb(tb)).format()
@@ -4877,5 +4877,161 @@ def expected(t, m, fn, l, f, E, e, z):
48774877
]
48784878
self.assertEqual(actual, expected(**colors))
48794879

4880+
4881+
class TestShowLines(unittest.TestCase):
4882+
"""Tests for the show_lines parameter in traceback formatting functions."""
4883+
4884+
def setUp(self):
4885+
# Create a simple exception for testing
4886+
try:
4887+
x = 1 / 0
4888+
except ZeroDivisionError as e:
4889+
self.exc = e
4890+
4891+
def test_print_tb_show_lines_true(self):
4892+
"""Test print_tb with show_lines=True (default)"""
4893+
output = StringIO()
4894+
traceback.print_tb(self.exc.__traceback__, file=output, show_lines=True)
4895+
result = output.getvalue()
4896+
self.assertIn('x = 1 / 0', result)
4897+
self.assertIn('File ', result)
4898+
4899+
def test_print_tb_show_lines_false(self):
4900+
"""Test print_tb with show_lines=False"""
4901+
output = StringIO()
4902+
traceback.print_tb(self.exc.__traceback__, file=output, show_lines=False)
4903+
result = output.getvalue()
4904+
self.assertNotIn('x = 1 / 0', result)
4905+
self.assertIn('File ', result) # File info should still be present
4906+
4907+
def test_format_tb_show_lines_true(self):
4908+
"""Test format_tb with show_lines=True (default)"""
4909+
result = traceback.format_tb(self.exc.__traceback__, show_lines=True)
4910+
formatted = ''.join(result)
4911+
self.assertIn('x = 1 / 0', formatted)
4912+
self.assertIn('File ', formatted)
4913+
4914+
def test_format_tb_show_lines_false(self):
4915+
"""Test format_tb with show_lines=False"""
4916+
result = traceback.format_tb(self.exc.__traceback__, show_lines=False)
4917+
formatted = ''.join(result)
4918+
self.assertNotIn('x = 1 / 0', formatted)
4919+
self.assertIn('File ', formatted) # File info should still be present
4920+
4921+
def test_print_exception_show_lines_true(self):
4922+
"""Test print_exception with show_lines=True (default)"""
4923+
output = StringIO()
4924+
traceback.print_exception(self.exc, file=output, show_lines=True)
4925+
result = output.getvalue()
4926+
self.assertIn('x = 1 / 0', result)
4927+
self.assertIn('ZeroDivisionError', result)
4928+
4929+
def test_print_exception_show_lines_false(self):
4930+
"""Test print_exception with show_lines=False"""
4931+
output = StringIO()
4932+
traceback.print_exception(self.exc, file=output, show_lines=False)
4933+
result = output.getvalue()
4934+
self.assertNotIn('x = 1 / 0', result)
4935+
self.assertIn('ZeroDivisionError', result) # Exception type should still be present
4936+
4937+
def test_format_exception_show_lines_true(self):
4938+
"""Test format_exception with show_lines=True (default)"""
4939+
result = traceback.format_exception(self.exc, show_lines=True)
4940+
formatted = ''.join(result)
4941+
self.assertIn('x = 1 / 0', formatted)
4942+
self.assertIn('ZeroDivisionError', formatted)
4943+
4944+
def test_format_exception_show_lines_false(self):
4945+
"""Test format_exception with show_lines=False"""
4946+
result = traceback.format_exception(self.exc, show_lines=False)
4947+
formatted = ''.join(result)
4948+
self.assertNotIn('x = 1 / 0', formatted)
4949+
self.assertIn('ZeroDivisionError', formatted) # Exception type should still be present
4950+
4951+
def test_print_exc_show_lines_false(self):
4952+
"""Test print_exc with show_lines=False"""
4953+
# Override sys.exception() to return our test exception
4954+
original_exception = sys.exception
4955+
sys.exception = lambda: self.exc
4956+
try:
4957+
output = StringIO()
4958+
traceback.print_exc(file=output, show_lines=False)
4959+
result = output.getvalue()
4960+
self.assertNotIn('x = 1 / 0', result)
4961+
self.assertIn('ZeroDivisionError', result)
4962+
finally:
4963+
sys.exception = original_exception
4964+
4965+
def test_format_exc_show_lines_false(self):
4966+
"""Test format_exc with show_lines=False"""
4967+
# Override sys.exception() to return our test exception
4968+
original_exception = sys.exception
4969+
sys.exception = lambda: self.exc
4970+
try:
4971+
result = traceback.format_exc(show_lines=False)
4972+
self.assertNotIn('x = 1 / 0', result)
4973+
self.assertIn('ZeroDivisionError', result)
4974+
finally:
4975+
sys.exception = original_exception
4976+
4977+
def test_print_stack_show_lines_false(self):
4978+
"""Test print_stack with show_lines=False"""
4979+
output = StringIO()
4980+
traceback.print_stack(file=output, show_lines=False)
4981+
result = output.getvalue()
4982+
# Should not contain source code lines
4983+
lines = result.split('\n')
4984+
# Filter out empty lines and check that remaining lines are just file/line info
4985+
non_empty_lines = [line for line in lines if line.strip()]
4986+
for line in non_empty_lines:
4987+
if line.strip():
4988+
self.assertTrue(line.strip().startswith('File ') or
4989+
'in ' in line or
4990+
line.strip() == 'traceback.print_stack(file=output, show_lines=False)')
4991+
4992+
def test_format_stack_show_lines_false(self):
4993+
"""Test format_stack with show_lines=False"""
4994+
result = traceback.format_stack(show_lines=False)
4995+
formatted = ''.join(result)
4996+
# Should contain file information but not source code
4997+
self.assertIn('File ', formatted)
4998+
# Check that the source code of this test is not included
4999+
self.assertNotIn('traceback.format_stack(show_lines=False)', formatted)
5000+
5001+
def test_format_list_show_lines_false(self):
5002+
"""Test format_list with show_lines=False"""
5003+
tb_list = traceback.extract_tb(self.exc.__traceback__)
5004+
result = traceback.format_list(tb_list, show_lines=False)
5005+
formatted = ''.join(result)
5006+
self.assertNotIn('x = 1 / 0', formatted)
5007+
self.assertIn('File ', formatted) # File info should still be present
5008+
5009+
def test_print_list_show_lines_false(self):
5010+
"""Test print_list with show_lines=False"""
5011+
tb_list = traceback.extract_tb(self.exc.__traceback__)
5012+
output = StringIO()
5013+
traceback.print_list(tb_list, file=output, show_lines=False)
5014+
result = output.getvalue()
5015+
self.assertNotIn('x = 1 / 0', result)
5016+
self.assertIn('File ', result) # File info should still be present
5017+
5018+
def test_traceback_exception_show_lines_false(self):
5019+
"""Test TracebackException with show_lines=False"""
5020+
te = traceback.TracebackException.from_exception(self.exc)
5021+
result = list(te.format(show_lines=False))
5022+
formatted = ''.join(result)
5023+
self.assertNotIn('x = 1 / 0', formatted)
5024+
self.assertIn('ZeroDivisionError', formatted)
5025+
5026+
def test_traceback_exception_print_show_lines_false(self):
5027+
"""Test TracebackException.print with show_lines=False"""
5028+
te = traceback.TracebackException.from_exception(self.exc)
5029+
output = StringIO()
5030+
te.print(file=output, show_lines=False)
5031+
result = output.getvalue()
5032+
self.assertNotIn('x = 1 / 0', result)
5033+
self.assertIn('ZeroDivisionError', result)
5034+
5035+
48805036
if __name__ == "__main__":
48815037
unittest.main()

0 commit comments

Comments
 (0)