X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=wvtest.sh;h=47613349e12fbd31c5baa183e262ad21c9c70c07;hb=7ce77b74ba29ee028a119e5eecb001d64af2deed;hp=90bdc909b5e34a625ad2d3729b7277a5d38da67f;hpb=84c3d04310d40b0ae0ccbdf13a57543ae88b342d;p=bup.git diff --git a/wvtest.sh b/wvtest.sh old mode 100644 new mode 100755 index 90bdc90..4761334 --- a/wvtest.sh +++ b/wvtest.sh @@ -1,21 +1,44 @@ +# +# Include this file in your shell script by using: +# #!/bin/sh +# . ./wvtest.sh +# + # we don't quote $TEXT in case it contains newlines; newlines # aren't allowed in test output. However, we set -f so that # at least shell glob characters aren't processed. -_textclean() +_wvtextclean() { ( set -f; echo $* ) } + +if [ -n "$BASH_VERSION" ]; then + . ./wvtest-bash.sh # This keeps sh from choking on the syntax. +else + _wvbacktrace() { true; } + _wvpushcall() { true; } + _wvpopcall() { true; } + + _wvfind_caller() + { + WVCALLER_FILE="unknown" + WVCALLER_LINE=0 + } +fi + + _wvcheck() { - CODE="$1" - TEXT=$(_textclean "$2") - OK=ok + local CODE="$1" + local TEXT=$(_wvtextclean "$2") + local OK=ok if [ "$CODE" -ne 0 ]; then OK=FAILED fi - echo "! ${BASH_SOURCE[2]}:${BASH_LINENO[1]} $TEXT $OK" >&2 + echo "! $WVCALLER_FILE:$WVCALLER_LINE $TEXT $OK" >&2 if [ "$CODE" -ne 0 ]; then + _wvbacktrace exit $CODE else return 0 @@ -25,9 +48,12 @@ _wvcheck() WVPASS() { - TEXT="$*" - + local TEXT="$*" + _wvpushcall "$@" + + _wvfind_caller if "$@"; then + _wvpopcall _wvcheck 0 "$TEXT" return 0 else @@ -40,14 +66,17 @@ WVPASS() WVFAIL() { - TEXT="$*" - + local TEXT="$*" + _wvpushcall "$@" + + _wvfind_caller if "$@"; then _wvcheck 1 "NOT($TEXT)" # NOTREACHED return 1 else _wvcheck 0 "NOT($TEXT)" + _wvpopcall return 0 fi } @@ -62,28 +91,71 @@ _wvgetrv() WVPASSEQ() { - WVPASS [ "$#" -eq 2 ] + _wvpushcall "$@" + _wvfind_caller + _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments" echo "Comparing:" >&2 echo "$1" >&2 echo "--" >&2 echo "$2" >&2 _wvcheck $(_wvgetrv [ "$1" = "$2" ]) "'$1' = '$2'" + _wvpopcall } WVPASSNE() { - WVPASS [ "$#" -eq 2 ] + _wvpushcall "$@" + _wvfind_caller + _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments" echo "Comparing:" >&2 echo "$1" >&2 echo "--" >&2 echo "$2" >&2 _wvcheck $(_wvgetrv [ "$1" != "$2" ]) "'$1' != '$2'" + _wvpopcall +} + + +WVPASSRC() +{ + local RC=$? + _wvpushcall "$@" + _wvfind_caller + _wvcheck $(_wvgetrv [ $RC -eq 0 ]) "return code($RC) == 0" + _wvpopcall +} + + +WVFAILRC() +{ + local RC=$? + _wvpushcall "$@" + _wvfind_caller + _wvcheck $(_wvgetrv [ $RC -ne 0 ]) "return code($RC) != 0" + _wvpopcall } WVSTART() { echo >&2 - echo "Testing \"$*\" in ${BASH_SOURCE[1]}:" >&2 + _wvfind_caller + echo "Testing \"$*\" in $WVCALLER_FILE:" >&2 +} + + +WVDIE() +{ + local TEXT=$(_wvtextclean "$@") + _wvpushcall "$@" + _wvfind_caller + echo "! $WVCALLER_FILE:$WVCALLER_LINE $TEXT FAILED" 1>&2 + exit 1 } + + +# Local Variables: +# indent-tabs-mode: t +# sh-basic-offset: 8 +# End: