#! /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