32909df887a595868576d10adc9e419502ed4166
[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     d=$(dirname $t)
33     case " `echo $XFAIL_TESTS` " in
34         *[\ \   ]$t[\ \ ]*)
35             fail=yes;;
36         *)
37             fail=no;;
38     esac
39     mkdir -p $d
40     sh ${srcdest}build-aux/test-driver\
41        --test-name $t \
42        --log-file $b.log\
43        --trs-file $b.trs\
44        --color-tests $colors\
45        --enable-hard-errors no\
46        --expect-failure $fail\
47        -- $log_compiler\
48        ${srcdest}$t
49     TEST_LOGS="$TEST_LOGS $b.log"
50 done
51
52 if test $colors = yes; then
53     red='\e[0;31m'
54     grn='\e[0;32m'
55     lgn='\e[1;32m'
56     blu='\e[1;34m'
57     mgn='\e[0;35m'
58     brg='\e[1m'
59     std='\e[m'
60 else
61     mgn= red= grn= lgn= blu= brg= std=
62 fi
63 bases="$TEST_LOGS"
64 bases=`for i in $bases; do echo $i; done | sed 's/\.log$//'`
65 bases=`echo $bases`
66 ws='[   ]'
67 results=`for b in $bases; do echo $b.trs; done`
68 test -n "$results" || results=/dev/null
69 all=`  grep "^$ws*:test-result:"           $results | wc -l`
70 pass=` grep "^$ws*:test-result:$ws*PASS"  $results | wc -l`
71 fail=` grep "^$ws*:test-result:$ws*FAIL"  $results | wc -l`
72 skip=` grep "^$ws*:test-result:$ws*SKIP"  $results | wc -l`
73 xfail=`grep "^$ws*:test-result:$ws*XFAIL" $results | wc -l`
74 xpass=`grep "^$ws*:test-result:$ws*XPASS" $results | wc -l`
75 error=`grep "^$ws*:test-result:$ws*ERROR" $results | wc -l`
76 if test `expr $fail + $xpass + $error` -eq 0; then
77   success=true
78 else
79   success=false
80 fi
81 br='==================='; br=$br$br$br$br
82 result_count ()
83 {
84     if test x"$1" = x"--maybe-color"; then
85       maybe_colorize=yes
86     elif test x"$1" = x"--no-color"; then
87       maybe_colorize=no
88     else
89       echo "$@: invalid 'result_count' usage" >&2; exit 4
90     fi
91     shift
92     desc=$1 count=$2
93     if test $maybe_colorize = yes && test $count -gt 0; then
94       color_start=$3 color_end=$std
95     else
96       color_start= color_end=
97     fi
98     echo "${color_start}# $desc $count${color_end}"
99 }
100 create_testsuite_report ()
101 {
102   result_count $1 "TOTAL:" $all   "$brg"
103   result_count $1 "PASS: " $pass  "$grn"
104   result_count $1 "SKIP: " $skip  "$blu"
105   result_count $1 "XFAIL:" $xfail "$lgn"
106   result_count $1 "FAIL: " $fail  "$red"
107   result_count $1 "XPASS:" $xpass "$red"
108   result_count $1 "ERROR:" $error "$mgn"
109 }
110 {
111   echo "${PACKAGE}: ${subdir}/${TEST_SUITE_LOG}"
112   create_testsuite_report --no-color
113   echo
114   echo
115   for b in $bases; do echo $b; done\
116     | $create_global_log
117 } >${TEST_SUITE_LOG}.tmp || exit 1
118 mv ${TEST_SUITE_LOG}.tmp ${TEST_SUITE_LOG}
119 if $success; then
120   col="$grn"
121  else
122   col="$red"
123   test x"$V" = x0 || cat ${TEST_SUITE_LOG}
124 fi
125 echo "${col}$br${std}"
126 echo "${col}Testsuite summary for ${PACKAGE_NAME}${std}"
127 echo "${col}$br${std}"
128 create_testsuite_report --maybe-color
129 echo "$col$br$std"
130 if $success; then :; else
131   echo "${col}See ${subdir}/${TEST_SUITE_LOG}${std}"
132   if test -n "${PACKAGE_BUGREPORT}"; then
133     echo "${col}Please report to ${PACKAGE_BUGREPORT}${std}"
134   fi
135   echo "$col$br$std"
136 fi
137 $success || exit 1