fix for new nobug
[acogc] / tests / test.sh
1 #!/bin/sh 
2 # Copyright (C) 2004, Christian Thaeter <chth@gmx.net>
3 #
4 # This file is part of the MaLa extension Language.
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License version 2 as
8 # published by the Free Software Foundation.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, contact me.
17
18 # TESTMODE=FULL yet unimplemented
19 #   run all tests, PLANNED which fail count as error
20 #
21 # TESTMODE=FAST
22 #   run only tests which recently failed
23
24 arg0="$0"
25 srcdir=$(dirname "$arg0")
26
27 ulimit -S -t 1 -v 524288
28 valgrind=""
29 if [ "$VALGRINDFLAGS" = 'DISABLE' ]; then
30     echo "valgrind explicit disabled"
31 else
32     if [ "$(which valgrind)" ]; then
33         valgrind="$(which valgrind) --leak-check=yes --show-reachable=yes -q $VALGRINDFLAGS"
34         ulimit -S -t 10
35     else
36         echo "no valgrind found, go without it"
37     fi
38 fi
39
40 echo
41 echo ================ $0 ================
42
43 TESTCNT=0
44 SKIPCNT=0
45 FAILCNT=0
46
47 if test -f ,testlog; then
48     mv ,testlog ,testlog.pre
49 else
50     touch ,testlog.pre
51 fi
52
53 date >,testlog
54
55 function TEST()
56 {
57         name="$1"
58         shift
59         cat >,cmp
60         echo -n "" >,out
61         echo -n "TEST $name: "
62         echo -en "\nTEST $name: $* " >>,testlog
63
64         case $TESTMODE in
65         *FAST*)
66             if grep "^TEST $name: .* FAILED" ,testlog.pre >&/dev/null; then
67                 MSGOK=" (fixed)"
68                 MSGFAIL=" (still broken)"
69             elif grep "^TEST $name: .* \\(SKIPPED (ok)\\|OK\\)" ,testlog.pre >&/dev/null; then
70                 echo ".. SKIPPED (ok)"
71                 echo ".. SKIPPED (ok)" >>,testlog
72                 SKIPCNT=$(($SKIPCNT + 1))
73                 TESTCNT=$(($TESTCNT + 1))
74                 return
75             else
76                 MSGOK=" (new)"
77                 MSGFAIL=" (new)"
78             fi
79             ;;
80         *)
81             MSGOK=""
82             MSGFAIL=""
83             ;;
84         esac
85
86         TESTCNT=$(($TESTCNT + 1))
87         if $valgrind $TESTBIN "$@" 2>&1 | tee ,tmp | grep -v 'debug:' | cmp ,cmp - &>/dev/null; then
88             echo ".. OK$MSGOK"
89             echo ".. OK$MSGOK" >>,testlog
90         else
91             echo ".. FAILED$MSGFAIL";
92             echo ".. FAILED$MSGFAIL" >>,testlog
93             grep -v 'DEBUG:' <,tmp >,out
94             diff -ua ,cmp ,out >>,testlog
95             # grep 'DEBUG:\|==.*==' <,tmp >>,testlog
96             cat ,tmp >>,testlog
97             echo END >>,testlog
98             FAILCNT=$(($FAILCNT + 1))
99             case $TESTMODE in
100             *FIRSTFAIL*)
101                 break 2
102                 ;;
103             esac
104         fi
105 }
106
107 function PLANNED()
108 {
109         echo -n "PLANNED $1: "
110         echo -en "\nPLANNED $* " >>,testlog
111         echo ".. SKIPPED (planned)"
112         echo ".. SKIPPED (planned)" >>,testlog
113         SKIPCNT=$(($SKIPCNT + 1))
114         TESTCNT=$(($TESTCNT + 1))
115 }
116
117 function RUNTESTS()
118 {
119     for i in $srcdir/*.tests; do
120         source $i
121     done
122     echo
123     rm ,cmp ,out ,tmp
124     if [ $FAILCNT = 0 ]; then
125         echo " ... PASSED $(($TESTCNT - $SKIPCNT)) TESTS, $SKIPCNT SKIPPED"
126         #rm ,testlog
127     else
128         echo " ... SUCCEDED $(($TESTCNT - $FAILCNT - $SKIPCNT)) TESTS"
129         echo " ... FAILED $FAILCNT TESTS"
130         echo " ... SKIPPED $SKIPCNT TESTS"
131         echo " see ',testlog' for details"
132         exit 1
133     fi
134 }
135
136 function TESTING()
137 {
138     echo
139     echo "$1"
140     TESTBIN=$2
141 }
142
143 RUNTESTS
144
145 # arch-tag: f4d06a47-6e17-40de-bba8-17240ae3f435
146