X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/68261ea30bdaec3384876f2fe152a377d2d5c0d1..c02f66668d32980a3770e450061c5b96b9f31690:/test/common.sh.in diff --git a/test/common.sh.in b/test/common.sh.in index 4734612c..e47cca09 100644 --- a/test/common.sh.in +++ b/test/common.sh.in @@ -198,8 +198,6 @@ prepare_space() { #### 'ignore space' -- spacing differences will not be considered #### significant, emulating GNU diff -w. It is assumed that the #### first file has already been run through prepare_space. -#### 'expectfail' -- The test is expected to fail, e.g. due to a code -#### bug, but the test should run as a placeholder for the fix. #### ':' -- will print '' in the failure message, #### to make it easier to tell which of multiple tests has failed. check() { @@ -207,13 +205,11 @@ check() { second=$1; shift keepfirst= ignorespace= - expectfail=false label=test while [ $# -gt 0 ]; do case $1 in 'keep first') keepfirst=1 ;; 'ignore space') ignorespace=1 ;; - expectfail) expectfail=true;; ':') shift; label=\'"$*"\'; break ;; *) echo "$0: invalid check() argument \"$1\" in test suite" >&2 ;; esac @@ -231,25 +227,15 @@ check() { if [ "$success" ]; then [ "$keepfirst" ] || rm -f "$first" rm -f "$second" - if $expectfail; then - echo "$0: expected test to fail, but it passed" - failed=`expr ${failed:-0} + 1` - #### Set return status of the function. - [ $failed -eq 0 ] - fi else echo #### POSIX diff should support -c. diff -c "$first" "$second" || true echo echo "$0: $label failed, outputs are in $first and $second." - if $expectfail; then - echo "$0: $label expected to fail, ignoring" - else - failed=`expr ${failed:-0} + 1` - #### Set return status of the function. - [ $failed -eq 0 ] - fi + failed=`expr ${failed:-0} + 1` + #### Set return status of the function. + [ $failed -eq 0 ] fi } @@ -295,6 +281,27 @@ run_test() { fi } +#### check_exit() runs the command in $2..., capturing stdout and +#### stderr, and then tests its exit status with the test(1) condition +#### in $1. If that fails, the captured stdout and stderr are +#### displayed, and $failed incremented. +check_exit() { + c="$1"; shift + t="$MH_TEST_DIR/.check_exit" + r=0 + $NMH_TEST_PREFIX "$@" >"$t.1" 2>"$t.2" || r=$? + if test $r $c; then + rm "$t.1" "$t.2" + else + echo "$0: check_exit: $r $c failed: $*" >&2 + echo " stdout:" >&2 + sed 's/^/ /' "$t.1" >&2 + echo " stderr:" >&2 + sed 's/^/ /' "$t.2" >&2 + failed=`expr ${failed:-0} + 1` + fi +} + #### Function invoked by trap on exit. cleanup() { #### Save exit status to use as status for this program.