summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_traceback.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_traceback.py')
-rw-r--r--Lib/test/test_traceback.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index a458b21..97bd9ba 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -616,6 +616,51 @@ class TracebackErrorLocationCaretTests(unittest.TestCase):
self.assertSpecialized(lambda: 1// 0,
"~^^~~")
+ def test_decorator_application_lineno_correct(self):
+ def dec_error(func):
+ raise TypeError
+ def dec_fine(func):
+ return func
+ def applydecs():
+ @dec_error
+ @dec_fine
+ def g(): pass
+ result_lines = self.get_exception(applydecs)
+ lineno_applydescs = applydecs.__code__.co_firstlineno
+ lineno_dec_error = dec_error.__code__.co_firstlineno
+ expected_error = (
+ 'Traceback (most recent call last):\n'
+ f' File "{__file__}", line {self.callable_line}, in get_exception\n'
+ ' callable()\n'
+ ' ^^^^^^^^^^\n'
+ f' File "{__file__}", line {lineno_applydescs + 1}, in applydecs\n'
+ ' @dec_error\n'
+ ' ^^^^^^^^^\n'
+ f' File "{__file__}", line {lineno_dec_error + 1}, in dec_error\n'
+ ' raise TypeError\n'
+ ' ^^^^^^^^^^^^^^^\n'
+ )
+ self.assertEqual(result_lines, expected_error.splitlines())
+
+ def applydecs_class():
+ @dec_error
+ @dec_fine
+ class A: pass
+ result_lines = self.get_exception(applydecs_class)
+ lineno_applydescs_class = applydecs_class.__code__.co_firstlineno
+ expected_error = (
+ 'Traceback (most recent call last):\n'
+ f' File "{__file__}", line {self.callable_line}, in get_exception\n'
+ ' callable()\n'
+ ' ^^^^^^^^^^\n'
+ f' File "{__file__}", line {lineno_applydescs_class + 1}, in applydecs_class\n'
+ ' @dec_error\n'
+ ' ^^^^^^^^^\n'
+ f' File "{__file__}", line {lineno_dec_error + 1}, in dec_error\n'
+ ' raise TypeError\n'
+ ' ^^^^^^^^^^^^^^^\n'
+ )
+ self.assertEqual(result_lines, expected_error.splitlines())
@cpython_only
@requires_debug_ranges()