summaryrefslogtreecommitdiff
path: root/tests/misc/sys_settrace_loop.py
diff options
context:
space:
mode:
authorMilan Rossa <rossa.milan@gmail.com>2019-08-14 16:11:25 +0200
committerDamien George <damien.p.george@gmail.com>2019-08-30 16:48:22 +1000
commit498e35219e1f54243ff6d650781c525e20cad9b1 (patch)
treed028a0679913355853958a0a5ddc9f09796b6b56 /tests/misc/sys_settrace_loop.py
parent310b3d1b81d561e19d719acd89ee47b759e3795c (diff)
tests: Add tests for sys.settrace feature.
Diffstat (limited to 'tests/misc/sys_settrace_loop.py')
-rw-r--r--tests/misc/sys_settrace_loop.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/misc/sys_settrace_loop.py b/tests/misc/sys_settrace_loop.py
new file mode 100644
index 000000000..9ae0f41a1
--- /dev/null
+++ b/tests/misc/sys_settrace_loop.py
@@ -0,0 +1,51 @@
+# test sys.settrace with while and for loops
+
+import sys
+
+try:
+ sys.settrace
+except AttributeError:
+ print("SKIP")
+ raise SystemExit
+
+def print_stacktrace(frame, level=0):
+ print("%2d: %s@%s:%s => %s:%d" % (
+ level, " ",
+ frame.f_globals['__name__'],
+ frame.f_code.co_name,
+ # reduce full path to some pseudo-relative
+ 'misc' + ''.join(frame.f_code.co_filename.split('tests/misc')[-1:]),
+ frame.f_lineno,
+ ))
+
+ if frame.f_back:
+ print_stacktrace(frame.f_back, level + 1)
+
+trace_count = 0
+
+def trace_tick_handler(frame, event, arg):
+ global trace_count
+ print("### trace_handler::main event:", event)
+ trace_count += 1
+ print_stacktrace(frame)
+ return trace_tick_handler
+
+def test_loop():
+ # for loop
+ r = 0
+ for i in range(3):
+ r += i
+ print("test_for_loop", r)
+
+ # while loop
+ r = 0
+ i = 0
+ while i < 3:
+ r += i
+ i += 1
+ print("test_while_loop", i)
+
+sys.settrace(trace_tick_handler)
+test_loop()
+sys.settrace(None)
+print("Total traces executed: ", trace_count)