Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
"""Default driver for run tests (run-*.test).
|
|
|
|
This imports the 'native' module (containing the compiled test cases)
|
|
and calls each function starting with test_, and reports any
|
|
exceptions as failures.
|
|
|
|
Test cases can provide a custom driver.py that overrides this file.
|
|
"""
|
|
|
|
import sys
|
|
import native
|
|
|
|
failures = []
|
|
|
|
for name in dir(native):
|
|
if name.startswith('test_'):
|
|
test_func = getattr(native, name)
|
|
try:
|
|
test_func()
|
|
except Exception as e:
|
|
failures.append((name, sys.exc_info()))
|
|
|
|
if failures:
|
|
from traceback import print_exception, format_tb
|
|
import re
|
|
|
|
def extract_line(tb):
|
|
formatted = '\n'.join(format_tb(tb))
|
|
m = re.search('File "(native|driver).py", line ([0-9]+), in (test_|<module>)', formatted)
|
|
if m is None:
|
|
return "0"
|
|
return m.group(1)
|
|
|
|
# Sort failures by line number of test function.
|
|
failures = sorted(failures, key=lambda e: extract_line(e[1][2]))
|
|
|
|
# If there are multiple failures, print stack traces of all but the final failure.
|
|
for name, e in failures[:-1]:
|
|
print(f'<< {name} >>')
|
|
sys.stdout.flush()
|
|
print_exception(*e)
|
|
print()
|
|
sys.stdout.flush()
|
|
|
|
# Raise exception for the last failure. Test runner will show the traceback.
|
|
print(f'<< {failures[-1][0]} >>')
|
|
sys.stdout.flush()
|
|
raise failures[-1][1][1]
|