tests/run-tests: Make test output directory configurable.
A configurable result directory is advantageous because it enables using a dedicated location, eventually outside of the source tree, instead of forcing the output files into a fixed directory which might also contain other files already. For that reason the default output directory also has been changed to tests/results/.
This commit is contained in:
parent
405893afc6
commit
0c3f9d58a5
|
@ -27,8 +27,7 @@ build-*/
|
||||||
|
|
||||||
# Test failure outputs
|
# Test failure outputs
|
||||||
######################
|
######################
|
||||||
tests/*.exp
|
tests/results/*
|
||||||
tests/*.out
|
|
||||||
|
|
||||||
# Python cache files
|
# Python cache files
|
||||||
######################
|
######################
|
||||||
|
|
|
@ -226,7 +226,7 @@ def run_feature_check(pyb, args, base_path, test_file):
|
||||||
return run_micropython(pyb, args, base_path("feature_check", test_file), is_special=True)
|
return run_micropython(pyb, args, base_path("feature_check", test_file), is_special=True)
|
||||||
|
|
||||||
|
|
||||||
def run_tests(pyb, tests, args):
|
def run_tests(pyb, tests, args, result_dir):
|
||||||
test_count = 0
|
test_count = 0
|
||||||
testcase_count = 0
|
testcase_count = 0
|
||||||
passed_count = 0
|
passed_count = 0
|
||||||
|
@ -521,8 +521,8 @@ def run_tests(pyb, tests, args):
|
||||||
|
|
||||||
testcase_count += len(output_expected.splitlines())
|
testcase_count += len(output_expected.splitlines())
|
||||||
|
|
||||||
filename_expected = base_path(test_basename + ".exp")
|
filename_expected = os.path.join(result_dir, test_basename + ".exp")
|
||||||
filename_mupy = base_path(test_basename + ".out")
|
filename_mupy = os.path.join(result_dir, test_basename + ".out")
|
||||||
|
|
||||||
if output_expected == output_mupy:
|
if output_expected == output_mupy:
|
||||||
print("pass ", test_file)
|
print("pass ", test_file)
|
||||||
|
@ -582,7 +582,7 @@ builtin tests suitable for the target platform are ran.
|
||||||
When running tests, run-tests compares the MicroPython output of the test with the output
|
When running tests, run-tests compares the MicroPython output of the test with the output
|
||||||
produced by running the test through CPython unless a <test>.exp file is found, in which
|
produced by running the test through CPython unless a <test>.exp file is found, in which
|
||||||
case it is used as comparison.
|
case it is used as comparison.
|
||||||
If a test fails, run-tests produces a pair of <test>.out and <test>.exp files in the current
|
If a test fails, run-tests produces a pair of <test>.out and <test>.exp files in the result
|
||||||
directory with the MicroPython output and the expectations, respectively.
|
directory with the MicroPython output and the expectations, respectively.
|
||||||
''',
|
''',
|
||||||
epilog='''\
|
epilog='''\
|
||||||
|
@ -599,6 +599,7 @@ the last matching regex is used:
|
||||||
cmd_parser.add_argument('-u', '--user', default='micro', help='the telnet login username')
|
cmd_parser.add_argument('-u', '--user', default='micro', help='the telnet login username')
|
||||||
cmd_parser.add_argument('-p', '--password', default='python', help='the telnet login password')
|
cmd_parser.add_argument('-p', '--password', default='python', help='the telnet login password')
|
||||||
cmd_parser.add_argument('-d', '--test-dirs', nargs='*', help='input test directories (if no files given)')
|
cmd_parser.add_argument('-d', '--test-dirs', nargs='*', help='input test directories (if no files given)')
|
||||||
|
cmd_parser.add_argument('-r', '--result-dir', default=base_path('results'), help='directory for test results')
|
||||||
cmd_parser.add_argument('-e', '--exclude', action=append_filter, metavar='REGEX', dest='filters', help='exclude test by regex on path/name.py')
|
cmd_parser.add_argument('-e', '--exclude', action=append_filter, metavar='REGEX', dest='filters', help='exclude test by regex on path/name.py')
|
||||||
cmd_parser.add_argument('-i', '--include', action=append_filter, metavar='REGEX', dest='filters', help='include test by regex on path/name.py')
|
cmd_parser.add_argument('-i', '--include', action=append_filter, metavar='REGEX', dest='filters', help='include test by regex on path/name.py')
|
||||||
cmd_parser.add_argument('--write-exp', action='store_true', help='use CPython to generate .exp files to run tests w/o CPython')
|
cmd_parser.add_argument('--write-exp', action='store_true', help='use CPython to generate .exp files to run tests w/o CPython')
|
||||||
|
@ -614,7 +615,7 @@ the last matching regex is used:
|
||||||
args = cmd_parser.parse_args()
|
args = cmd_parser.parse_args()
|
||||||
|
|
||||||
if args.print_failures:
|
if args.print_failures:
|
||||||
for exp in glob(base_path("*.exp")):
|
for exp in glob(os.path.join(args.result_dir, "*.exp")):
|
||||||
testbase = exp[:-4]
|
testbase = exp[:-4]
|
||||||
print()
|
print()
|
||||||
print("FAILURE {0}".format(testbase))
|
print("FAILURE {0}".format(testbase))
|
||||||
|
@ -623,7 +624,7 @@ the last matching regex is used:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if args.clean_failures:
|
if args.clean_failures:
|
||||||
for f in glob(base_path("*.exp")) + glob(base_path("*.out")):
|
for f in glob(os.path.join(args.result_dir, "*.exp")) + glob(os.path.join(args.result_dir, "*.out")):
|
||||||
os.remove(f)
|
os.remove(f)
|
||||||
|
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
@ -674,7 +675,8 @@ the last matching regex is used:
|
||||||
os.environ['MICROPYPATH'] = os.pathsep + base_path('../extmod')
|
os.environ['MICROPYPATH'] = os.pathsep + base_path('../extmod')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
res = run_tests(pyb, tests, args)
|
os.makedirs(args.result_dir, exist_ok=True)
|
||||||
|
res = run_tests(pyb, tests, args, args.result_dir)
|
||||||
finally:
|
finally:
|
||||||
if pyb:
|
if pyb:
|
||||||
pyb.close()
|
pyb.close()
|
||||||
|
|
Loading…
Reference in New Issue