chiark / gitweb /
Import upstream sources.
[cparse] / tests.bash
CommitLineData
3cd4b0f8
MW
1#! /bin/bash
2set -e
3
4failed() {
5 echo FAILED
6 status=1
7 cat $errors
8 echo
9}
10
11case "$TEST_COMPILER" in
12"" )
13 validate() {
14 ./cparse -- "$@"
15 }
16 ;;
17* )
18 validate() {
19 $TEST_COMPILER -c "$@"
20 }
21 ;;
22esac
23
24if test $# = 0; then
25 set -- tests/*.c
26fi
27
28mkdir -p errors
29rm -f errors/*
30status=0
31
32for test; do
33 printf "*** $test: "
34 errors=${test//tests/errors}
35 case $test in
36 tests/fail-* )
37 if validate $test 2> $errors > /dev/null; then
38 echo UNEXPECTEDLY SUCCEEDED
39 status=1
40 else
41 echo OK
42 fi
43 ;;
44 * )
45 if validate $test 2> $errors > /dev/null; then
46 echo OK
47 else
48 failed
49 fi
50 ;;
51 esac
52done
53
54# make sure we can parse ourselves, and that if we do it twice we
55# get the same answer both times
56#
57# really we should compile the results and check they match what
58# the compiler produces without our involvement
59
60for path in *.c; do
61 printf "*** $path: "
62 errors=errors/${path}.errors
63 once=errors/${path%.c}.i
64 twice=errors/${path%.c}.j
65 object=errors/${path%.c}.o
66 rm -f ${once} ${twice} ${errors}
67 echo ./cparse --cpp ${CC} ${ALL_CFLAGS} -- ${path} > ${once} > $errors
68 if ! ./cparse --cpp ${CC} ${ALL_CFLAGS} -- ${path} > ${once} 2>> $errors; then
69 failed
70 elif ! ./cparse --no-cpp -- ${once} > ${twice} 2> $errors; then
71 failed
72 elif ! diff -u ${once} ${twice} > $errors 2>&1; then
73 failed
74 elif ! ${CC} ${ALL_CFLAGS} -o ${object} -c ${once} 2> $errors; then
75 failed
76 else
77 echo OK
78 fi
79done
80
81exit $status