X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=tests%2Flib.sh;h=08309c7401af00ffd5572d7d3a386a92019e890b;hb=b926752fac0fc420ae8e8d78c26f1815d35e89ed;hp=88bcbbe62a5614c6ee5c38f1880a125f5cdd2d6c;hpb=7108005fff7a043e17c5cc6036c4b20ad37ba6b9;p=coloredstderr%2Fcoloredstderr.git diff --git a/tests/lib.sh b/tests/lib.sh index 88bcbbe..08309c7 100644 --- a/tests/lib.sh +++ b/tests/lib.sh @@ -15,17 +15,37 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +set -e + # Allow running the script directly without running `make check`. test "x$builddir" = x && builddir=. test "x$EGREP" = x && EGREP='grep -E' -# In case we are called with LD_PRELOAD already set. -unset LD_PRELOAD +# The tests fail if running under coloredstderr because the tests redirect +# stderr to stdout which is detected by coloredstderr :D (and not colored as a +# result). Therefore remove LD_PRELOAD and re-exec the test. +if test -n "$LD_PRELOAD"; then + unset LD_PRELOAD + exec "$0" +fi + +# Use valgrind to run the tests if it's available. +valgrind_cmd= +if type valgrind >/dev/null 2>&1; then + valgrind_cmd='valgrind --quiet --error-exitcode=1' +fi + # Clean locale for reproducible tests. LC_ALL=C unset LANGUAGE +# Clear user defined variables. +unset COLORED_STDERR_FDS +unset COLORED_STDERR_FORCE_WRITE +# Set default COLORED_STDERR_PRIVATE_FDS value. +fds=2, + die() { echo "$@" >&2 @@ -56,12 +76,14 @@ run_test() { shift shift + output="output-$$" + ( # Standard setup. LD_PRELOAD="$library" - COLORED_STDERR_FDS=2, + COLORED_STDERR_PRIVATE_FDS="$fds" export LD_PRELOAD - export COLORED_STDERR_FDS + export COLORED_STDERR_PRIVATE_FDS # Change pre/post strings for simpler testing. COLORED_STDERR_PRE='>STDERR>' @@ -69,23 +91,51 @@ run_test() { export COLORED_STDERR_PRE export COLORED_STDERR_POST # And force writes to a file (unless we are testing the force). - if test "x$force_write" != x; then + if test -n "$force_write"; then COLORED_STDERR_FORCE_WRITE=1 export COLORED_STDERR_FORCE_WRITE fi - "$testcase" > output 2>&1 + $valgrind_cmd "$@" "$testcase" > "$output" 2>&1 ) - diff -u "$expected" output \ + # Merge continuous regions of colored output. The exact calls don't matter + # as long as the output is colored. + sed 's/STDERR>//g' < "$output" > "$output.tmp" + mv "$output.tmp" "$output" + + diff -u "$expected" "$output" \ || die 'failed!' - rm output + rm "$output" echo 'passed.' } test_script() { - run_test "$srcdir/$1" "$srcdir/$1.expected" + testcase="$1" + expected="$2" + # shift || true is not enough for dash. + test $# -ge 2 && shift + shift + + if test -z "$expected"; then + expected="$testcase" + fi + run_test "$srcdir/$testcase" "$srcdir/$expected.expected" "$@" +} +test_script_subshell() { + test_script "$1" "$2" sh -c 'sh $1' '' } test_program() { - run_test "$builddir/$1" "$srcdir/$1.expected" + testcase="$1" + expected="$2" + test $# -ge 2 && shift + shift + + if test -z "$expected"; then + expected="$testcase" + fi + run_test "$builddir/$testcase" "$srcdir/$expected.expected" "$@" +} +test_program_subshell() { + test_program "$1" "$2" sh -c '$1' '' }