make check: Do not re-check unless recheck=true.
[mes.git] / build-aux / test-suite.sh
1 #! /bin/sh
2
3 # GNU Mes --- Maxwell Equations of Software
4 # Copyright © 2011-2018 Free Software Foundation, Inc.
5 # Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
6 #
7 # This file is part of GNU Mes.
8 #
9 # GNU Mes is free software; you can redistribute it and/or modify it
10 # under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 3 of the License, or (at
12 # your option) any later version.
13 #
14 # GNU Mes is distributed in the hope that it will be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 # GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
21
22 # Adapted from GNU Automake
23
24 TEST_SUITE_LOG=test-suite.log
25 dry_run=false
26 create_global_log=cat
27 subdir=$(basename $(pwd))
28
29 TEST_LOGS=
30 for t in $TESTS; do
31     b=$(dirname $t)/$(basename $t $test_ext)
32     TEST_LOGS="$TEST_LOGS $b.log"
33     if test -e $b.log \
34             && test -e $b.trs\
35             && ! $recheck; then
36         echo `grep :test-result $b.trs | cut -d' ' -f 2`: $b
37         continue
38     fi
39     d=$(dirname $t)
40     case " `echo $XFAIL_TESTS` " in
41         *[\ \   ]$t[\ \ ]*)
42             fail=yes;;
43         *)
44             fail=no;;
45     esac
46     mkdir -p $d
47     sh ${srcdest}build-aux/test-driver\
48        --test-name $t \
49        --log-file $b.log\
50        --trs-file $b.trs\
51        --color-tests $colors\
52        --enable-hard-errors no\
53        --expect-failure $fail\
54        -- $log_compiler\
55        ${srcdest}$t
56 done
57
58 if test $colors = yes; then
59     red='\e[0;31m'
60     grn='\e[0;32m'
61     lgn='\e[1;32m'
62     blu='\e[1;34m'
63     mgn='\e[0;35m'
64     brg='\e[1m'
65     std='\e[m'
66 else
67     mgn= red= grn= lgn= blu= brg= std=
68 fi
69 bases="$TEST_LOGS"
70 bases=`for i in $bases; do echo $i; done | sed 's/\.log$//'`
71 bases=`echo $bases`
72 ws='[   ]'
73 results=`for b in $bases; do echo $b.trs; done`
74 test -n "$results" || results=/dev/null
75 all=`  grep "^$ws*:test-result:"           $results | wc -l`
76 pass=` grep "^$ws*:test-result:$ws*PASS"  $results | wc -l`
77 fail=` grep "^$ws*:test-result:$ws*FAIL"  $results | wc -l`
78 skip=` grep "^$ws*:test-result:$ws*SKIP"  $results | wc -l`
79 xfail=`grep "^$ws*:test-result:$ws*XFAIL" $results | wc -l`
80 xpass=`grep "^$ws*:test-result:$ws*XPASS" $results | wc -l`
81 error=`grep "^$ws*:test-result:$ws*ERROR" $results | wc -l`
82 if test `expr $fail + $xpass + $error` -eq 0; then
83   success=true
84 else
85   success=false
86 fi
87 br='==================='; br=$br$br$br$br
88 result_count ()
89 {
90     if test x"$1" = x"--maybe-color"; then
91       maybe_colorize=yes
92     elif test x"$1" = x"--no-color"; then
93       maybe_colorize=no
94     else
95       echo "$@: invalid 'result_count' usage" >&2; exit 4
96     fi
97     shift
98     desc=$1 count=$2
99     if test $maybe_colorize = yes && test $count -gt 0; then
100       color_start=$3 color_end=$std
101     else
102       color_start= color_end=
103     fi
104     echo "${color_start}# $desc $count${color_end}"
105 }
106 create_testsuite_report ()
107 {
108   result_count $1 "TOTAL:" $all   "$brg"
109   result_count $1 "PASS: " $pass  "$grn"
110   result_count $1 "SKIP: " $skip  "$blu"
111   result_count $1 "XFAIL:" $xfail "$lgn"
112   result_count $1 "FAIL: " $fail  "$red"
113   result_count $1 "XPASS:" $xpass "$red"
114   result_count $1 "ERROR:" $error "$mgn"
115 }
116 {
117   echo "${PACKAGE}: ${subdir}/${TEST_SUITE_LOG}"
118   create_testsuite_report --no-color
119   echo
120   echo
121   for b in $bases; do echo $b; done\
122     | $create_global_log
123 } >${TEST_SUITE_LOG}.tmp || exit 1
124 mv ${TEST_SUITE_LOG}.tmp ${TEST_SUITE_LOG}
125 if $success; then
126   col="$grn"
127  else
128   col="$red"
129   test x"$V" = x0 || cat ${TEST_SUITE_LOG}
130 fi
131 echo "${col}$br${std}"
132 echo "${col}Testsuite summary for ${PACKAGE_NAME}${std}"
133 echo "${col}$br${std}"
134 create_testsuite_report --maybe-color
135 echo "$col$br$std"
136 if $success; then :; else
137   echo "${col}See ${subdir}/${TEST_SUITE_LOG}${std}"
138   if test -n "${PACKAGE_BUGREPORT}"; then
139     echo "${col}Please report to ${PACKAGE_BUGREPORT}${std}"
140   fi
141   echo "$col$br$std"
142 fi
143 $success || exit 1