| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """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]
|