summaryrefslogtreecommitdiff
path: root/tests/framework.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/framework.sh')
-rw-r--r--tests/framework.sh84
1 files changed, 84 insertions, 0 deletions
diff --git a/tests/framework.sh b/tests/framework.sh
new file mode 100644
index 000000000..51d4580a6
--- /dev/null
+++ b/tests/framework.sh
@@ -0,0 +1,84 @@
+#!/bin/sh
+# Simple integration test framework
+
+set -e
+
+
+cleanup() {
+ rm -f test.output test.c test.h test.tree
+}
+
+dumpone() {
+ if [ -e "$@" ]; then
+ echo "Content of $@:"
+ cat "$@" | sed "s#^#\t#g"
+ fi
+
+}
+
+dump() {
+ dumpone test.output
+ dumpone test.c
+ dumpone test.h
+ dumpone test.tree
+ return 1
+}
+
+testsuccess() {
+ [ "$INNER" ] || cleanup
+ [ "$INNER" ] || echo "Testing success of $@"
+ if ! "$@" > test.output 2>&1; then
+ echo "ERROR: Running $@ failed with error $?, messages were:" >&2
+ dump
+ return 1
+ fi
+}
+
+testfailure() {
+ [ "$INNER" ] || cleanup
+ [ "$INNER" ] || echo "Testing failure of $@"
+ if "$@" > test.output 2>&1; then
+ echo "ERROR: Running $@ unexpectedly succeeded, messages were:" >&2
+ dump
+ return 1
+ fi
+}
+
+testfileequal() {
+ [ "$INNER" ] || echo "Testing output of $2"
+ printf "%b\n" "$1" > expected
+ if ! diff -u "expected" "$2" > test.diff; then
+ echo "ERROR: Differences between expected output and and $2:" >&2
+ cat test.diff | sed "s#^#\t#g"
+ dump
+ return 1
+ fi
+}
+
+testgrep() {
+ [ "$INNER" ] || echo "Testing grep $@"
+ INNER=1 testsuccess grep "$@"
+ unset INNER
+}
+
+testsuccessequal() {
+ expect="$1"
+ shift
+ cleanup
+ echo "Testing success and output of $@"
+ INNER=1 testsuccess "$@"
+ INNER=1 testfileequal "$expect" test.output
+ unset INNER
+}
+
+
+WORDS="Word-_0
+Word = 42
+VeryLongWord
+Label ~ Word2
+= -9"
+
+triehash() {
+ printf "%b\n" "$WORDS" | perl -MDevel::Cover=-summary,0,-silent,1 $(dirname $(dirname $(readlink -f $0)))/triehash.pl "$@" || return $?
+ return $?
+}