summaryrefslogtreecommitdiff
path: root/tools/tinytest-codegen.py
diff options
context:
space:
mode:
authorAlessandro Gatti <a.gatti@frob.it>2023-11-02 13:19:09 +0100
committerDamien George <damien@micropython.org>2023-11-07 15:53:27 +1100
commitbea6ff82fadf37555a3a282105f861a914475bb6 (patch)
tree1eddd58498693a594117b97ed2b47c842274562c /tools/tinytest-codegen.py
parentc35cc63366a924b818eaaf4f0bd1c11eeb236d79 (diff)
tools/tinytest-codegen.py: Externalise tests list.
Remove port-specific test directories and excluded tests from tinytest-codegen, and let it read said information from an external file. This way tinytest-codegen is not limited to always generate tests for the `qemu-arm` target. This allows having port-specific test directory and excluded tests for more than one QEMU bare-metal target. The `qemu-arm` port Makefile was modified to work with the generator changes and a tests profile file was added to said port. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
Diffstat (limited to 'tools/tinytest-codegen.py')
-rwxr-xr-xtools/tinytest-codegen.py116
1 files changed, 63 insertions, 53 deletions
diff --git a/tools/tinytest-codegen.py b/tools/tinytest-codegen.py
index 7f6c86243..8178b5602 100755
--- a/tools/tinytest-codegen.py
+++ b/tools/tinytest-codegen.py
@@ -32,6 +32,12 @@ def script_to_map(test_file):
return r
+def load_profile(profile_file, test_dirs, exclude_tests):
+ profile_globals = {"test_dirs": test_dirs, "exclude_tests": exclude_tests}
+ exec(profile_file.read(), profile_globals)
+ return profile_globals["test_dirs"], profile_globals["exclude_tests"]
+
+
test_function = (
"void {name}(void* data) {{\n"
" static const char pystr[] = {script};\n"
@@ -50,58 +56,55 @@ testgroup_struct = "struct testgroup_t groups[] = {{\n{body}\n END_OF_GROUPS\n}
testgroup_member = ' {{ "{name}", {name}_tests }},'
## XXX: may be we could have `--without <groups>` argument...
-# currently these tests are selected because they pass on qemu-arm
-test_dirs = (
- "basics",
- "micropython",
- "misc",
- "extmod",
- "float",
- "inlineasm",
- "qemu-arm",
-) # 'import', 'io',)
-exclude_tests = (
- # pattern matching in .exp
- "basics/bytes_compare3.py",
- "extmod/ticks_diff.py",
- "extmod/time_ms_us.py",
- # unicode char issue
- "extmod/json_loads.py",
- # doesn't output to python stdout
- "extmod/re_debug.py",
- "extmod/vfs_basic.py",
- "extmod/vfs_fat_ramdisk.py",
- "extmod/vfs_fat_fileio.py",
- "extmod/vfs_fat_fsusermount.py",
- "extmod/vfs_fat_oldproto.py",
- # rounding issues
- "float/float_divmod.py",
- # requires double precision floating point to work
- "float/float2int_doubleprec_intbig.py",
- "float/float_format_ints_doubleprec.py",
- "float/float_parse_doubleprec.py",
- # inline asm FP tests (require Cortex-M4)
- "inlineasm/asmfpaddsub.py",
- "inlineasm/asmfpcmp.py",
- "inlineasm/asmfpldrstr.py",
- "inlineasm/asmfpmuldiv.py",
- "inlineasm/asmfpsqrt.py",
- # different filename in output
- "micropython/emg_exc.py",
- "micropython/heapalloc_traceback.py",
- # don't have emergency exception buffer
- "micropython/heapalloc_exc_compressed_emg_exc.py",
- # pattern matching in .exp
- "micropython/meminfo.py",
- # needs sys stdfiles
- "misc/print_exception.py",
- # settrace .exp files are too large
- "misc/sys_settrace_loop.py",
- "misc/sys_settrace_generator.py",
- "misc/sys_settrace_features.py",
- # don't have f-string
- "basics/string_fstring.py",
- "basics/string_fstring_debug.py",
+
+test_dirs = set(
+ (
+ "basics",
+ "extmod",
+ "float",
+ "micropython",
+ "misc",
+ )
+)
+
+exclude_tests = set(
+ (
+ # pattern matching in .exp
+ "basics/bytes_compare3.py",
+ "extmod/ticks_diff.py",
+ "extmod/time_ms_us.py",
+ # unicode char issue
+ "extmod/json_loads.py",
+ # doesn't output to python stdout
+ "extmod/re_debug.py",
+ "extmod/vfs_basic.py",
+ "extmod/vfs_fat_ramdisk.py",
+ "extmod/vfs_fat_fileio.py",
+ "extmod/vfs_fat_fsusermount.py",
+ "extmod/vfs_fat_oldproto.py",
+ # rounding issues
+ "float/float_divmod.py",
+ # requires double precision floating point to work
+ "float/float2int_doubleprec_intbig.py",
+ "float/float_format_ints_doubleprec.py",
+ "float/float_parse_doubleprec.py",
+ # different filename in output
+ "micropython/emg_exc.py",
+ "micropython/heapalloc_traceback.py",
+ # don't have emergency exception buffer
+ "micropython/heapalloc_exc_compressed_emg_exc.py",
+ # pattern matching in .exp
+ "micropython/meminfo.py",
+ # needs sys stdfiles
+ "misc/print_exception.py",
+ # settrace .exp files are too large
+ "misc/sys_settrace_loop.py",
+ "misc/sys_settrace_generator.py",
+ "misc/sys_settrace_features.py",
+ # don't have f-string
+ "basics/string_fstring.py",
+ "basics/string_fstring_debug.py",
+ )
)
output = []
@@ -112,11 +115,18 @@ argparser = argparse.ArgumentParser(
)
argparser.add_argument("--stdin", action="store_true", help="read list of tests from stdin")
argparser.add_argument("--exclude", action="append", help="exclude test by name")
+argparser.add_argument(
+ "--profile",
+ type=argparse.FileType("rt", encoding="utf-8"),
+ help="optional profile file providing test directories and exclusion list",
+)
args = argparser.parse_args()
if not args.stdin:
+ if args.profile:
+ test_dirs, exclude_tests = load_profile(args.profile, test_dirs, exclude_tests)
if args.exclude:
- exclude_tests += tuple(args.exclude)
+ exclude_tests = exclude_tests.union(args.exclude)
for group in test_dirs:
tests += [test for test in glob("{}/*.py".format(group)) if test not in exclude_tests]
else: