Commit | Line | Data |
---|---|---|
3cd4b0f8 MW |
1 | #! /bin/bash |
2 | set -e | |
3 | ||
4 | failed() { | |
5 | echo FAILED | |
6 | status=1 | |
7 | cat $errors | |
8 | echo | |
9 | } | |
10 | ||
11 | case "$TEST_COMPILER" in | |
12 | "" ) | |
13 | validate() { | |
14 | ./cparse -- "$@" | |
15 | } | |
16 | ;; | |
17 | * ) | |
18 | validate() { | |
19 | $TEST_COMPILER -c "$@" | |
20 | } | |
21 | ;; | |
22 | esac | |
23 | ||
24 | if test $# = 0; then | |
25 | set -- tests/*.c | |
26 | fi | |
27 | ||
28 | mkdir -p errors | |
29 | rm -f errors/* | |
30 | status=0 | |
31 | ||
32 | for 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 | |
52 | done | |
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 | ||
60 | for 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 | |
79 | done | |
80 | ||
81 | exit $status |