From 97a48209e2798547fb46c210782a55859d11b5fe Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 27 Apr 2018 06:18:41 +0200 Subject: tests: Move rtems-test-check.py Remove shell script variant. --- testsuites/aclocal/rtems-test-check.m4 | 2 +- testsuites/rtems-test-check.py | 160 ++++++++++++++++++++++++++ tools/build/rtems-test-check | 203 --------------------------------- tools/build/rtems-test-check-py | 160 -------------------------- 4 files changed, 161 insertions(+), 364 deletions(-) create mode 100755 testsuites/rtems-test-check.py delete mode 100755 tools/build/rtems-test-check delete mode 100755 tools/build/rtems-test-check-py diff --git a/testsuites/aclocal/rtems-test-check.m4 b/testsuites/aclocal/rtems-test-check.m4 index ca71795cc7..a46c4abb20 100644 --- a/testsuites/aclocal/rtems-test-check.m4 +++ b/testsuites/aclocal/rtems-test-check.m4 @@ -5,7 +5,7 @@ AC_DEFUN([RTEMS_TEST_CHECK], [AC_REQUIRE([RTEMS_ENV_RTEMSBSP]) AC_REQUIRE([RTEMS_SOURCE_TOP]) AC_MSG_CHECKING([${RTEMS_CPU}/${RTEMS_BSP} $1 test]) - tcheck="${RTEMS_SOURCE_ROOT}/tools/build/rtems-test-check-py" + tcheck="${RTEMS_SOURCE_ROOT}/testsuites/rtems-test-check.py" tdata="${RTEMS_BSP}-testsuite.tcfg" tincludes="${RTEMS_SOURCE_ROOT}/bsps/${RTEMS_CPU}/${RTEMS_BSP_FAMILY}/config:${RTEMS_SOURCE_ROOT}/testsuites" if test -f $tcheck; then diff --git a/testsuites/rtems-test-check.py b/testsuites/rtems-test-check.py new file mode 100755 index 0000000000..847aab05ae --- /dev/null +++ b/testsuites/rtems-test-check.py @@ -0,0 +1,160 @@ +#! /usr/bin/env python +# +# Copyright 2017 Chris Johns +# All rights reserved +# + +# +# Python version the rtems-test-check script. +# + +from __future__ import print_function +import os.path +import sys + +def eprint(*args, **kwargs): + print(*args, file=sys.stderr, **kwargs) + +# +# Search the include paths for a file. +# +def find_testdata(paths, name): + for p in paths: + fn = os.path.join(p, name) + if os.path.exists(fn): + return fn + return None + +# +# Arguments. Keep it simple. +# +if len(sys.argv) < 4: + eprint('error: invalid command line') + print('INVALID-TEST-DATA') + sys.exit(2) + +verbose = False +args = 0 + +if sys.argv[1] == '-v': + verbose = True + args = 1 + +mode = sys.argv[args + 1] +bsp = sys.argv[args + 2] +includepaths = sys.argv[args + 4].split(':') +testconfig = [find_testdata(includepaths, sys.argv[args + 3])] +tests = sys.argv[args + 5:] + +if verbose: + eprint('cmd: %s' % (' '.join(sys.argv))) + +# +# Handle the modes. +# +if mode == 'exclude': + pass +elif mode == 'flags': + if len(tests) != 1: + eprint('error: test count not 1 for mode: %s' % (mode)) + print('INVALID-TEST-DATA') + sys.exit(1) +else: + eprint('error: invalid mode: %s' % (mode)) + print('INVALID-TEST-DATA') + sys.exit(1) + +# +# Common RTEMS testsuite configuration. Load first. +# +rtems_testdata = find_testdata(includepaths, os.path.join('testdata', 'rtems.tcfg')) +if rtems_testdata is not None: + testconfig.insert(0, rtems_testdata) + +states = ['exclude', + 'expected-fail', + 'user-input', + 'indeterminate', + 'benchmark'] +defines = { 'expected-fail' : '-DTEST_STATE_EXPECTED_FAIL=1', + 'user-input' : '-DTEST_STATE_USER_INPUT=1', + 'indeterminate' : '-DTEST_STATE_INDETERMINATE=1', + 'benchmark' : '-DTEST_STATE_BENCHMARK=1' } +output = [] +testdata = {} + +if verbose: + eprint('mode: %s' % (mode)) + eprint('testconfig: %r' % (testconfig)) + eprint('testconfig: %s' % (', '.join([x for x in testconfig if x is not None]))) + eprint('includepaths: %s' % (includepaths)) + eprint('bsp: %s' % (bsp)) + eprint('tests: %s' % (', '.join(tests))) + +def clean(line): + line = line[0:-1] + b = line.find('#') + if b >= 0: + line = line[1:b] + return line.strip() + +# +# Load the test data. +# +while len(testconfig): + tc = testconfig[0] + testconfig.remove(tc) + if tc is None: + continue + if verbose: + eprint('reading: %s' % (tc)) + if not os.path.exists(tc): + if verbose: + eprint('%s: not found' % (tc)) + continue + with open(tc) as f: + tdata = [clean(l) for l in f.readlines()] + lc = 0 + for line in tdata: + lc += 1 + ls = [s.strip() for s in line.split(':')] + if len(line) == 0: + continue + if verbose: + eprint('%4d: %s' % (lc, line)) + if len(ls) != 2: + eprint('error: syntax error: %s:%d' % (tc, lc)) + print('INVALID-TEST-DATA') + sys.exit(1) + state = ls[0] + test = ls[1] + if state == 'include': + td = find_testdata(includepaths, test) + if td is None: + eprint('error: include not found: %s:%d' % (tc, lc)) + print('INVALID-TEST-DATA') + testconfig.insert(0, td) + if verbose: + eprint('include: %s' % (', '.join(testconfig))) + elif state in states: + if state not in testdata: + testdata[state] = [test] + else: + testdata[state] += [test] + else: + eprint('error: invalid test state: %s in %s:%d' % (state, tc, lc)) + print('INVALID-TEST-DATA') + sys.exit(1) + +for test in tests: + if mode == 'exclude': + if 'exclude' not in testdata or test not in testdata['exclude']: + output += [test] + elif mode == 'flags': + for state in states: + if state != 'exclude' and state in testdata and test in testdata[state]: + output += [defines[state]] + +print(' '.join(sorted(set(output)))) + +sys.exit(0) diff --git a/tools/build/rtems-test-check b/tools/build/rtems-test-check deleted file mode 100755 index 988556d59e..0000000000 --- a/tools/build/rtems-test-check +++ /dev/null @@ -1,203 +0,0 @@ -#! /bin/sh -# -# Copyright 2014, 2016, 2017 Chris Johns -# All rights reserved -# - -# -# usage: rtems-test-check -# - -if test $# -lt 4; then - echo "error: invalid command line" >&2 - echo "INVALID-TEST-DATA" - exit 2 -fi - -mode="$1" -shift -testdata="$1" -shift -includepath="$1" -shift -bsp="$1" -shift -tests="$*" - -test_count=0 -for t in ${tests}; -do - test_count=$(expr ${test_count} + 1) -done - -case ${mode} in - exclude) - if test -f $testdata; then - output="" - else - output="${tests}" - fi - ;; - flags) - if [ $test_count != 1 ]; then - echo "error: test count not 1 for ${mode}" 1>&2 - exit 1 - fi - output="" - ;; - *) - echo "error: invalid mode" 1>&2 - echo "INVALID-TEST-DATA" - exit 1 - ;; -esac - -# -# Read the common settings first. -# -if [ -f $includepath/testdata/rtems.tcfg ]; then - testdata="$includepath/testdata/rtems.tcfg $testdata" -fi - -# -# If there is no testdata all tests are valid and must pass. -# - -if [ ! -z "$testdata" ]; then - excluded_tests="" - expected_fails="" - user_inputs="" - indeterminates="" - benchmarks="" - while [ ! -z "$testdata" ]; - do - for td in $testdata; - do - if [ ! -f $td ]; then - continue - fi - ntd="" - exec 3<& 0 - exec 0<$td - while read line - do - line=$(echo $line | sed -e 's/#.*$//' -e '/^$/d') - if [ ! -z "$line" ]; then - state=$(echo $line | sed -e "s/:.*//g") - case $state in - include) - inf=$(echo $line | sed -e 's/include://g;s/[[:blank:]]//g') - if test -f $includepath/$inf; then - ntd="$includepath/$inf $ntd" - fi - ;; - exclude) - line=$(echo $line | sed -e 's/exclude://g;s/[[:blank:]]//g') - excluded_tests="${excluded_tests} $line" - ;; - expected-fail) - line=$(echo $line | sed -e 's/expected-fail://g;s/[[:blank:]]//g') - expected_fails="${expected_fails} $line" - ;; - user-input) - line=$(echo $line | sed -e 's/user-input://g;s/[[:blank:]]//g') - user_inputs="${user_inputs} $line" - ;; - indeterminate) - line=$(echo $line | sed -e 's/indeterminate://g;s/[[:blank:]]//g') - indeterminates="${indeterminates} $line" - ;; - benchmark) - line=$(echo $line | sed -e 's/benchmark://g;s/[[:blank:]]//g') - benchmarks="${benchmarks} $line" - ;; - *) - echo "error: invalid test state: $state in $td" 1>&2 - echo "INVALID-TEST-DATA" - exit 1 - ;; - esac - fi - done - done - testdata=$ntd - done - - for t in ${tests}; - do - case ${mode} in - exclude) - allow="yes" - for dt in ${excluded_tests}; - do - if test ${t} = ${dt}; then - allow="no" - fi - done - if test ${allow} = yes; then - output="${output} ${t}" - fi - ;; - flags) - allow="yes" - for et in ${excluded_tests}; - do - if test ${t} = ${et}; then - allow="no" - fi - done - if test ${allow} = yes; then - allow="no" - for et in ${expected_fails}; - do - if test ${t} = ${et}; then - allow="yes" - fi - done - if test ${allow} = yes; then - output="-DTEST_STATE_EXPECTED_FAIL=1" - fi - allow="no" - for ut in ${user_inputs}; - do - if test ${t} = ${ut}; then - allow="yes" - fi - done - if test ${allow} = yes; then - output="-DTEST_STATE_USER_INPUT=1" - fi - allow="no" - for it in ${indeterminates}; - do - if test ${t} = ${it}; then - allow="yes" - fi - done - if test ${allow} = yes; then - output="${output} -DTEST_STATE_INDETERMINATE=1" - fi - allow="no" - for bt in ${benchmarks}; - do - if test ${t} = ${bt}; then - allow="yes" - fi - done - if test ${allow} = yes; then - output="${output} -DTEST_STATE_BENCHMARK=1" - fi - fi - ;; - *) - echo "error: invalid mode" 1>&2 - echo "INVALID-TEST-DATA" - exit 1 - ;; - esac - done -fi - -echo ${output} - -exit 0 diff --git a/tools/build/rtems-test-check-py b/tools/build/rtems-test-check-py deleted file mode 100755 index 847aab05ae..0000000000 --- a/tools/build/rtems-test-check-py +++ /dev/null @@ -1,160 +0,0 @@ -#! /usr/bin/env python -# -# Copyright 2017 Chris Johns -# All rights reserved -# - -# -# Python version the rtems-test-check script. -# - -from __future__ import print_function -import os.path -import sys - -def eprint(*args, **kwargs): - print(*args, file=sys.stderr, **kwargs) - -# -# Search the include paths for a file. -# -def find_testdata(paths, name): - for p in paths: - fn = os.path.join(p, name) - if os.path.exists(fn): - return fn - return None - -# -# Arguments. Keep it simple. -# -if len(sys.argv) < 4: - eprint('error: invalid command line') - print('INVALID-TEST-DATA') - sys.exit(2) - -verbose = False -args = 0 - -if sys.argv[1] == '-v': - verbose = True - args = 1 - -mode = sys.argv[args + 1] -bsp = sys.argv[args + 2] -includepaths = sys.argv[args + 4].split(':') -testconfig = [find_testdata(includepaths, sys.argv[args + 3])] -tests = sys.argv[args + 5:] - -if verbose: - eprint('cmd: %s' % (' '.join(sys.argv))) - -# -# Handle the modes. -# -if mode == 'exclude': - pass -elif mode == 'flags': - if len(tests) != 1: - eprint('error: test count not 1 for mode: %s' % (mode)) - print('INVALID-TEST-DATA') - sys.exit(1) -else: - eprint('error: invalid mode: %s' % (mode)) - print('INVALID-TEST-DATA') - sys.exit(1) - -# -# Common RTEMS testsuite configuration. Load first. -# -rtems_testdata = find_testdata(includepaths, os.path.join('testdata', 'rtems.tcfg')) -if rtems_testdata is not None: - testconfig.insert(0, rtems_testdata) - -states = ['exclude', - 'expected-fail', - 'user-input', - 'indeterminate', - 'benchmark'] -defines = { 'expected-fail' : '-DTEST_STATE_EXPECTED_FAIL=1', - 'user-input' : '-DTEST_STATE_USER_INPUT=1', - 'indeterminate' : '-DTEST_STATE_INDETERMINATE=1', - 'benchmark' : '-DTEST_STATE_BENCHMARK=1' } -output = [] -testdata = {} - -if verbose: - eprint('mode: %s' % (mode)) - eprint('testconfig: %r' % (testconfig)) - eprint('testconfig: %s' % (', '.join([x for x in testconfig if x is not None]))) - eprint('includepaths: %s' % (includepaths)) - eprint('bsp: %s' % (bsp)) - eprint('tests: %s' % (', '.join(tests))) - -def clean(line): - line = line[0:-1] - b = line.find('#') - if b >= 0: - line = line[1:b] - return line.strip() - -# -# Load the test data. -# -while len(testconfig): - tc = testconfig[0] - testconfig.remove(tc) - if tc is None: - continue - if verbose: - eprint('reading: %s' % (tc)) - if not os.path.exists(tc): - if verbose: - eprint('%s: not found' % (tc)) - continue - with open(tc) as f: - tdata = [clean(l) for l in f.readlines()] - lc = 0 - for line in tdata: - lc += 1 - ls = [s.strip() for s in line.split(':')] - if len(line) == 0: - continue - if verbose: - eprint('%4d: %s' % (lc, line)) - if len(ls) != 2: - eprint('error: syntax error: %s:%d' % (tc, lc)) - print('INVALID-TEST-DATA') - sys.exit(1) - state = ls[0] - test = ls[1] - if state == 'include': - td = find_testdata(includepaths, test) - if td is None: - eprint('error: include not found: %s:%d' % (tc, lc)) - print('INVALID-TEST-DATA') - testconfig.insert(0, td) - if verbose: - eprint('include: %s' % (', '.join(testconfig))) - elif state in states: - if state not in testdata: - testdata[state] = [test] - else: - testdata[state] += [test] - else: - eprint('error: invalid test state: %s in %s:%d' % (state, tc, lc)) - print('INVALID-TEST-DATA') - sys.exit(1) - -for test in tests: - if mode == 'exclude': - if 'exclude' not in testdata or test not in testdata['exclude']: - output += [test] - elif mode == 'flags': - for state in states: - if state != 'exclude' and state in testdata and test in testdata[state]: - output += [defines[state]] - -print(' '.join(sorted(set(output)))) - -sys.exit(0) -- cgit v1.2.3