summaryrefslogblamecommitdiffstats
path: root/tools/build/rtems-test-check
blob: 108b7881c264d8e432f87a68ca4fffed6449ba0e (plain) (tree)
1
2
3
4
5
6
7
8
9
10

          
                                                     



                     
                                                                               

 
                      
                                        
                          


        

         

             

                


          








                                     




                             













                                                    

 
                                                            
 
 
                          


                   
                             
    








                                                         

























                                                                                          



                 

      

                    













                                    
                  

























                                                         


      
              

      
#! /bin/sh
#
# Copyright 2014, 2016 Chris Johns <chrisj@rtems.org>
# All rights reserved
#

#
# usage: rtems-test-check <mode> <bsp-test-database> <includes> <bsp> <tests..>
#

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