From: Mark Shannon Date: Thu, 24 Jun 2021 12:09:14 +0000 (+0100) Subject: bpo-44297: Add a regression test for line numbers in with statements (GH-26891) X-Git-Tag: v3.10.0b4~46 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0b6b2865187bca7ed7f1f511a02fc8bd13ee38ca;p=thirdparty%2FPython%2Fcpython.git bpo-44297: Add a regression test for line numbers in with statements (GH-26891) --- diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index d444a122af9b..8f689546a622 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -2160,18 +2160,23 @@ class SyntaxErrorTests(unittest.TestCase): class PEP626Tests(unittest.TestCase): - def lineno_after_raise(self, f, line): + def lineno_after_raise(self, f, *expected): try: f() except Exception as ex: t = ex.__traceback__ - while t.tb_next: - t = t.tb_next + else: + self.fail("No exception raised") + lines = [] + t = t.tb_next # Skip this function + while t: frame = t.tb_frame - if line is None: - self.assertEqual(frame.f_lineno, line) - else: - self.assertEqual(frame.f_lineno-frame.f_code.co_firstlineno, line) + lines.append( + None if frame.f_lineno is None else + frame.f_lineno-frame.f_code.co_firstlineno + ) + t = t.tb_next + self.assertEqual(tuple(lines), expected) def test_lineno_after_raise_simple(self): def simple(): @@ -2250,5 +2255,17 @@ class PEP626Tests(unittest.TestCase): f.__code__ = f.__code__.replace(co_linetable=b'\x04\x80\xff\x80') self.lineno_after_raise(f, None) + def test_lineno_after_raise_in_with_exit(self): + class ExitFails: + def __enter__(self): + return self + def __exit__(self, *args): + raise ValueError + + def after_with(): + with ExitFails(): + 1/0 + self.lineno_after_raise(after_with, 1, 1) + if __name__ == '__main__': unittest.main()