diff options
author | Mark Shannon <mark@hotpy.org> | 2021-06-24 12:09:14 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-24 12:09:14 (GMT) |
commit | 0b6b2865187bca7ed7f1f511a02fc8bd13ee38ca (patch) | |
tree | f1a384de993ad8c957b09e3f59690fab90e23f90 /Lib/test/test_exceptions.py | |
parent | 0a3452e7cf00c51ab1af0f674b670520b09f0e39 (diff) | |
download | cpython-0b6b2865187bca7ed7f1f511a02fc8bd13ee38ca.zip cpython-0b6b2865187bca7ed7f1f511a02fc8bd13ee38ca.tar.gz cpython-0b6b2865187bca7ed7f1f511a02fc8bd13ee38ca.tar.bz2 |
bpo-44297: Add a regression test for line numbers in with statements (GH-26891)
Diffstat (limited to 'Lib/test/test_exceptions.py')
-rw-r--r-- | Lib/test/test_exceptions.py | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index d444a12..8f68954 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() |