X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=tests%2Flib.sh;h=33a3721f751f9268a6f653940c72a5a733d016e7;hb=abd557a42fc13b30b63523e8c148c0e5db13ebc2;hp=b1c8bc0276e22ac23215726fdb086e307ea990bb;hpb=04ac66863a96d0c80bd00cc02bc3ab1e6aa8a620;p=coloredstderr%2Fcoloredstderr.git diff --git a/tests/lib.sh b/tests/lib.sh index b1c8bc0..33a3721 100644 --- a/tests/lib.sh +++ b/tests/lib.sh @@ -40,6 +40,12 @@ fi 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 @@ -75,9 +81,9 @@ run_test() { ( # 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>' @@ -85,7 +91,7 @@ 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 @@ -93,6 +99,15 @@ run_test() { $valgrind_cmd "$@" "$testcase" > "$output" 2>&1 ) + # Some sed implementations (e.g. on FreeBSD 9.1) always append a trailing + # newline. Add "EOF" to detect if the real output had one. + echo EOF >> "$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" @@ -101,17 +116,30 @@ run_test() { test_script() { testcase="$1" + expected="$2" + # shift || true is not enough for dash. + test $# -ge 2 && shift shift - run_test "$srcdir/$testcase" "$srcdir/$testcase.expected" "$@" + + if test -z "$expected"; then + expected="$testcase" + fi + run_test "$srcdir/$testcase" "$srcdir/$expected.expected" "$@" } test_script_subshell() { - test_script "$1" bash -c 'bash $1' '' + test_script "$1" "$2" sh -c 'sh $1' '' } test_program() { testcase="$1" + expected="$2" + test $# -ge 2 && shift shift - run_test "$builddir/$testcase" "$srcdir/$testcase.expected" "$@" + + if test -z "$expected"; then + expected="$testcase" + fi + run_test "$builddir/$testcase" "$srcdir/$expected.expected" "$@" } test_program_subshell() { - test_program "$1" sh -c '$1' '' + test_program "$1" "$2" sh -c '$1' '' }