summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2018-03-23 12:46:45 (GMT)
committerGitHub <noreply@github.com>2018-03-23 12:46:45 (GMT)
commit397466dfd905b5132f1c831cd9dff3ecc40b3218 (patch)
tree264d63b490acd0aca934ace77528006bce1d882e /Lib
parent702f8f3611bc49b73772cce2b9b041bd11ff9b35 (diff)
downloadcpython-397466dfd905b5132f1c831cd9dff3ecc40b3218.zip
cpython-397466dfd905b5132f1c831cd9dff3ecc40b3218.tar.gz
cpython-397466dfd905b5132f1c831cd9dff3ecc40b3218.tar.bz2
bpo-30953: Improve error messages and add tests for jumping (GH-6196)
into/out of an except block.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_sys_settrace.py70
1 files changed, 64 insertions, 6 deletions
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index 1fa43b2..f5125a4 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -1201,8 +1201,16 @@ class JumpTestCase(unittest.TestCase):
output.append(7)
output.append(8)
- @jump_test(3, 6, [2, 5, 6], (ValueError, 'finally'))
+ @jump_test(1, 5, [], (ValueError, "into a 'finally'"))
def test_no_jump_into_finally_block(output):
+ output.append(1)
+ try:
+ output.append(3)
+ finally:
+ output.append(5)
+
+ @jump_test(3, 6, [2, 5, 6], (ValueError, "into a 'finally'"))
+ def test_no_jump_into_finally_block_from_try_block(output):
try:
output.append(2)
output.append(3)
@@ -1211,21 +1219,71 @@ class JumpTestCase(unittest.TestCase):
output.append(6)
output.append(7)
- @jump_test(1, 5, [], (ValueError, 'finally'))
- def test_no_jump_into_finally_block_2(output):
+ @jump_test(5, 1, [1, 3], (ValueError, "out of a 'finally'"))
+ def test_no_jump_out_of_finally_block(output):
output.append(1)
try:
output.append(3)
finally:
output.append(5)
- @jump_test(5, 1, [1, 3], (ValueError, 'finally'))
- def test_no_jump_out_of_finally_block(output):
+ @jump_test(1, 5, [], (ValueError, "into an 'except'"))
+ def test_no_jump_into_bare_except_block(output):
output.append(1)
try:
output.append(3)
- finally:
+ except:
+ output.append(5)
+
+ @jump_test(1, 5, [], (ValueError, "into an 'except'"))
+ def test_no_jump_into_qualified_except_block(output):
+ output.append(1)
+ try:
+ output.append(3)
+ except Exception:
+ output.append(5)
+
+ @jump_test(3, 6, [2, 5, 6], (ValueError, "into an 'except'"))
+ def test_no_jump_into_bare_except_block_from_try_block(output):
+ try:
+ output.append(2)
+ output.append(3)
+ except: # executed if the jump is failed
output.append(5)
+ output.append(6)
+ raise
+ output.append(8)
+
+ @jump_test(3, 6, [2], (ValueError, "into an 'except'"))
+ def test_no_jump_into_qualified_except_block_from_try_block(output):
+ try:
+ output.append(2)
+ output.append(3)
+ except ZeroDivisionError:
+ output.append(5)
+ output.append(6)
+ raise
+ output.append(8)
+
+ @jump_test(7, 1, [1, 3, 6], (ValueError, "out of an 'except'"))
+ def test_no_jump_out_of_bare_except_block(output):
+ output.append(1)
+ try:
+ output.append(3)
+ 1/0
+ except:
+ output.append(6)
+ output.append(7)
+
+ @jump_test(7, 1, [1, 3, 6], (ValueError, "out of an 'except'"))
+ def test_no_jump_out_of_qualified_except_block(output):
+ output.append(1)
+ try:
+ output.append(3)
+ 1/0
+ except Exception:
+ output.append(6)
+ output.append(7)
@jump_test(3, 5, [1, 2, -2], (ValueError, 'into'))
def test_no_jump_between_with_blocks(output):