test/.gitignore: Add testprogs/test_simple
[jansson.git] / test / run-test
index c0db36a..a3ff738 100644 (file)
@@ -1,30 +1,54 @@
-cleanup() {
-    rm -rf $TMPDIR
-}
-trap cleanup 0
+# Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
+#
+# Jansson is free software; you can redistribute it and/or modify
+# it under the terms of the MIT license. See LICENSE for details.
+
+VALGRIND_CMDLINE="valgrind --leak-check=full --show-reachable=yes --track-origins=yes -q"
 
 run_testprog() {
     local prog=$1
-    local input=$2
+    local prefix=$2
+    if [ -n "$VALGRIND" ]; then
+        local runner="$VALGRIND_CMDLINE "
+    fi
+
     case "$prog" in
-        load_dump)
-            ./$prog $input $TMPDIR/output 2>$TMPDIR/error
+        load_file_dump_file)
+            $runner./$prog \
+                $prefix.in \
+                $prefix.$prog.stdout \
+                2>$prefix.$prog.stderr
             ;;
         *)
-            ./$prog <$input >$TMPDIR/output 2>$TMPDIR/error
+            $runner./$prog \
+                <$prefix.in \
+                >$prefix.$prog.stdout \
+                2>$prefix.$prog.stderr
             ;;
     esac
-}
 
-if [ ! -f $TESTFILE ]; then
-    echo "$TESTFILE cannot be found" >&2
-    exit 1
-fi
+    if [ -n "$VALGRIND" ]; then
+        # Check for Valgrind error output. The valgrind option
+        # --error-exitcode is not enough because Valgrind doesn't
+        # think unfreed allocs are errors.
+        if grep -E -q '^==[0-9]+== ' $prefix.$prog.stderr; then
+            echo "### $prefix ($prog) failed:" >&2
+            echo "valgrind detected an error" >&2
+            echo "for details, see test/$prefix.$prog.stderr" >&2
+            exit 1
+        fi
+    fi
+}
 
-mkdir -p $TMPDIR
-${srcdir}/split-testfile.py $TESTFILE $TMPDIR | \
-while read input output; do
-    run_test load_dump $input $output
-    run_test loadf_dumpf $input $output
-    run_test loads_dumps $input $output
+for testfile in $TESTFILES; do
+    tmpdir="testlogs/`basename $testfile`"
+    rm -rf $tmpdir
+    mkdir -p $tmpdir
+    ${srcdir}/split-testfile.py $testfile $tmpdir | while read name; do
+        run_test loadf_dumpf $tmpdir/$name
+        run_test loads_dumps $tmpdir/$name
+        run_test load_file_dump_file $tmpdir/$name
+        echo -n '.'
+    done || exit 1
+    echo
 done