summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_sys_settrace.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_sys_settrace.py')
-rw-r--r--Lib/test/test_sys_settrace.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index a842139..3bfc993 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -678,6 +678,119 @@ class TraceTestCase(unittest.TestCase):
(4, 'line'),
(4, 'return')])
+ def test_if_break(self):
+
+ def func():
+ seq = [1, 0]
+ while seq:
+ n = seq.pop()
+ if n:
+ break # line 5
+ else:
+ n = 99
+ return n # line 8
+
+ self.run_and_compare(func,
+ [(0, 'call'),
+ (1, 'line'),
+ (2, 'line'),
+ (3, 'line'),
+ (4, 'line'),
+ (2, 'line'),
+ (3, 'line'),
+ (4, 'line'),
+ (5, 'line'),
+ (8, 'line'),
+ (8, 'return')])
+
+ def test_break_through_finally(self):
+
+ def func():
+ a, c, d, i = 1, 1, 1, 99
+ try:
+ for i in range(3):
+ try:
+ a = 5
+ if i > 0:
+ break # line 7
+ a = 8
+ finally:
+ c = 10
+ except:
+ d = 12 # line 12
+ assert a == 5 and c == 10 and d == 1 # line 13
+
+ self.run_and_compare(func,
+ [(0, 'call'),
+ (1, 'line'),
+ (2, 'line'),
+ (3, 'line'),
+ (4, 'line'),
+ (5, 'line'),
+ (6, 'line'),
+ (8, 'line'),
+ (10, 'line'),
+ (3, 'line'),
+ (4, 'line'),
+ (5, 'line'),
+ (6, 'line'),
+ (7, 'line'),
+ (10, 'line'),
+ (13, 'line'),
+ (13, 'return')])
+
+ def test_continue_through_finally(self):
+
+ def func():
+ a, b, c, d, i = 1, 1, 1, 1, 99
+ try:
+ for i in range(2):
+ try:
+ a = 5
+ if i > 0:
+ continue # line 7
+ b = 8
+ finally:
+ c = 10
+ except:
+ d = 12 # line 12
+ assert (a, b, c, d) == (5, 8, 10, 1) # line 13
+
+ self.run_and_compare(func,
+ [(0, 'call'),
+ (1, 'line'),
+ (2, 'line'),
+ (3, 'line'),
+ (4, 'line'),
+ (5, 'line'),
+ (6, 'line'),
+ (8, 'line'),
+ (10, 'line'),
+ (3, 'line'),
+ (4, 'line'),
+ (5, 'line'),
+ (6, 'line'),
+ (7, 'line'),
+ (10, 'line'),
+ (3, 'line'),
+ (13, 'line'),
+ (13, 'return')])
+
+ def test_return_through_finally(self):
+
+ def func():
+ try:
+ return 2
+ finally:
+ 4
+
+ self.run_and_compare(func,
+ [(0, 'call'),
+ (1, 'line'),
+ (2, 'line'),
+ (4, 'line'),
+ (4, 'return')])
+
class SkipLineEventsTraceTestCase(TraceTestCase):
"""Repeat the trace tests, but with per-line events skipped"""