#! /bin/sh # # Copyright 2014, 2016 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 # # If there is no testdata all tests are valid and must pass. # if test -f $testdata; then excluded_tests="" expected_fails="" indeterminates="" while [ ! -z "$testdata" ]; do for td in $testdata; do 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" -e 's/^[ \t]//;s/[ \t]$//') if test -f $includepath/$inf; then ntd="$includepath/$inf $ntd" fi ;; exclude) line=$(echo $line | sed -e "s/exclude://g" -e 's/^[ \t]//;s/[ \t]$//') excluded_tests="${excluded_tests} $line" ;; expected-fail) line=$(echo $line | sed -e "s/expected-fail://g" -e 's/^[ \t]//;s/[ \t]$//') expected_fails="${expected_fails} $line" ;; indeterminate) line=$(echo $line | sed -e "s/indeterminate://g" -e 's/^[ \t]//;s/[ \t]$//') indeterminates="${indeterminates} $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="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 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 ;; *) echo "error: invalid mode" 1>&2 echo "INVALID-TEST-DATA" exit 1 ;; esac done fi echo ${output} exit 0