X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=test%2Frun-test;h=a3ff7387fd2573ca8ae79276c7d11886129d13e1;hb=fd259ff68c095c613acf952cc63407f294241923;hp=59fd8330c4b3b2dce9493e66471cad77abea91c8;hpb=20efe4aa261bb997dc5f5d64e51a5db20583f960;p=jansson.git diff --git a/test/run-test b/test/run-test index 59fd833..a3ff738 100644 --- a/test/run-test +++ b/test/run-test @@ -1,27 +1,54 @@ -cleanup() { - rm -rf $TMPDIR -} -trap cleanup 0 +# Copyright (c) 2009 Petri Lehtinen +# +# 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 [ -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 } for testfile in $TESTFILES; do - 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 + 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 - rm -rf $TMPDIR + echo done