3dc324d3f1
This adds the Python files in the tests/ directory to be formatted with ./tools/codeformat.py. The basics/ subdirectory is excluded for now so we aren't changing too much at once. In a few places `# fmt: off`/`# fmt: on` was used where the code had special formatting for readability or where the test was actually testing the specific formatting.
109 lines
2.4 KiB
Python
109 lines
2.4 KiB
Python
import sys
|
|
|
|
try:
|
|
sys.settrace
|
|
except AttributeError:
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
|
|
def print_stacktrace(frame, level=0):
|
|
# Ignore CPython specific helpers.
|
|
if frame.f_globals["__name__"].find("importlib") != -1:
|
|
print_stacktrace(frame.f_back, level)
|
|
return
|
|
|
|
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)
|
|
|
|
|
|
class _Prof:
|
|
trace_count = 0
|
|
|
|
def trace_tick(self, frame, event, arg):
|
|
self.trace_count += 1
|
|
print_stacktrace(frame)
|
|
|
|
|
|
__prof__ = _Prof()
|
|
|
|
alice_handler_set = False
|
|
|
|
|
|
def trace_tick_handler_alice(frame, event, arg):
|
|
print("### trace_handler::Alice event:", event)
|
|
__prof__.trace_tick(frame, event, arg)
|
|
return trace_tick_handler_alice
|
|
|
|
|
|
bob_handler_set = False
|
|
|
|
|
|
def trace_tick_handler_bob(frame, event, arg):
|
|
print("### trace_handler::Bob event:", event)
|
|
__prof__.trace_tick(frame, event, arg)
|
|
return trace_tick_handler_bob
|
|
|
|
|
|
def trace_tick_handler(frame, event, arg):
|
|
# Ignore CPython specific helpers.
|
|
if frame.f_globals["__name__"].find("importlib") != -1:
|
|
return
|
|
|
|
print("### trace_handler::main event:", event)
|
|
__prof__.trace_tick(frame, event, arg)
|
|
|
|
if frame.f_code.co_name != "factorial":
|
|
return trace_tick_handler
|
|
|
|
global alice_handler_set
|
|
if event == "call" and not alice_handler_set:
|
|
alice_handler_set = True
|
|
return trace_tick_handler_alice
|
|
|
|
global bob_handler_set
|
|
if event == "call" and not bob_handler_set:
|
|
bob_handler_set = True
|
|
return trace_tick_handler_bob
|
|
|
|
return trace_tick_handler
|
|
|
|
|
|
def factorial(n):
|
|
if n == 0:
|
|
return 1
|
|
else:
|
|
return n * factorial(n - 1)
|
|
|
|
|
|
def do_tests():
|
|
# These commands are here to demonstrate some execution being traced.
|
|
print("Who loves the sun?")
|
|
print("Not every-", factorial(3))
|
|
|
|
from sys_settrace_subdir import trace_generic
|
|
|
|
trace_generic.run_tests()
|
|
return
|
|
|
|
|
|
sys.settrace(trace_tick_handler)
|
|
do_tests()
|
|
sys.settrace(None)
|
|
|
|
print("\n------------------ script exited ------------------")
|
|
print("Total traces executed: ", __prof__.trace_count)
|