2014-05-05 16:49:52 +01:00
|
|
|
#! /usr/bin/env python3
|
|
|
|
|
|
|
|
import os, sys
|
|
|
|
from glob import glob
|
|
|
|
from re import sub
|
|
|
|
|
|
|
|
def escape(s):
|
|
|
|
lookup = {
|
|
|
|
'\0': '\\0',
|
|
|
|
'\t': '\\t',
|
|
|
|
'\n': '\\n\"\n\"',
|
|
|
|
'\r': '\\r',
|
|
|
|
'\\': '\\\\',
|
|
|
|
'\"': '\\\"',
|
|
|
|
}
|
|
|
|
return "\"\"\n\"{}\"".format(''.join([lookup[x] if x in lookup else x for x in s]))
|
|
|
|
|
|
|
|
def chew_filename(t):
|
|
|
|
return { 'func': "test_{}_fn".format(sub(r'/|\.|-', '_', t)), 'desc': t.split('/')[1] }
|
|
|
|
|
|
|
|
def script_to_map(t):
|
|
|
|
r = { 'name': chew_filename(t)['func'] }
|
|
|
|
with open(t) as f: r['script'] = escape(''.join(f.readlines()))
|
|
|
|
return r
|
|
|
|
|
|
|
|
test_function = (
|
|
|
|
"void {name}(void* data) {{\n"
|
|
|
|
" const char * pystr = {script};\n"
|
|
|
|
" do_str(pystr);\n"
|
|
|
|
"}}"
|
|
|
|
)
|
|
|
|
|
|
|
|
testcase_struct = (
|
|
|
|
"struct testcase_t {name}_tests[] = {{\n{body}\n END_OF_TESTCASES\n}};"
|
|
|
|
)
|
|
|
|
testcase_member = (
|
|
|
|
" {{ \"{desc}\", {func}, TT_ENABLED_, 0, 0 }},"
|
|
|
|
)
|
|
|
|
|
|
|
|
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...
|
2015-01-09 00:03:21 +00:00
|
|
|
# currently these tests are selected because they pass on qemu-arm
|
2015-01-25 18:48:03 +00:00
|
|
|
# basics/try_finally1.py passes on local machine but only passes 50% of the
|
|
|
|
# time on Travis CI; no idea why so we just disable it.
|
2015-01-12 12:07:42 +00:00
|
|
|
test_dirs = ('basics', 'micropython', 'inlineasm') # 'float', 'import', 'io', 'misc')
|
2015-04-19 15:50:24 +01:00
|
|
|
exclude_tests = ('basics/builtin_override.py', 'basics/class_super_object.py', 'basics/memoryerror.py', 'basics/try_finally1.py', 'micropython/heapalloc.py', 'inlineasm/asmfpaddsub.py', 'inlineasm/asmfpcmp.py', 'inlineasm/asmfpldrstr.py', 'inlineasm/asmfpmuldiv.py', 'inlineasm/asmfpsqrt.py',)
|
2014-05-05 16:49:52 +01:00
|
|
|
|
|
|
|
output = []
|
|
|
|
|
|
|
|
for group in test_dirs:
|
2015-01-09 00:03:21 +00:00
|
|
|
tests = [test for test in glob('{}/*.py'.format(group)) if test not in exclude_tests]
|
2014-05-05 16:49:52 +01:00
|
|
|
output.extend([test_function.format(**script_to_map(test)) for test in tests])
|
|
|
|
testcase_members = [testcase_member.format(**chew_filename(test)) for test in tests]
|
|
|
|
output.append(testcase_struct.format(name=group, body='\n'.join(testcase_members)))
|
|
|
|
|
|
|
|
testgroup_members = [testgroup_member.format(name=group) for group in test_dirs]
|
|
|
|
|
|
|
|
output.append(testgroup_struct.format(body='\n'.join(testgroup_members)))
|
|
|
|
|
|
|
|
## XXX: may be we could have `--output <filename>` argument...
|
|
|
|
print('\n\n'.join(output))
|