X-Git-Url: https://arthur.barton.de/gitweb/?p=bup.git;a=blobdiff_plain;f=wvtest.sh;h=47613349e12fbd31c5baa183e262ad21c9c70c07;hp=0ed5fb0cdadb541ffc2e6a0847429c86907a4da0;hb=HEAD;hpb=7f45493d9b35ea16cb7514e2a39ece16354e4449 diff --git a/wvtest.sh b/wvtest.sh index 0ed5fb0..3a6e312 100644 --- a/wvtest.sh +++ b/wvtest.sh @@ -1,24 +1,44 @@ -WVIFS=" -" +# +# 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 @@ -28,12 +48,12 @@ _wvcheck() WVPASS() { - #xIFS="$IFS" - #IFS="$WVIFS" - TEXT="$*" - #IFS="$xIFS" - + local TEXT="$*" + _wvpushcall "$@" + + _wvfind_caller if "$@"; then + _wvpopcall _wvcheck 0 "$TEXT" return 0 else @@ -46,24 +66,105 @@ WVPASS() WVFAIL() { - #xIFS="$IFS" - #IFS="$WVIFS" - TEXT="$*" - #IFS="$xIFS" - + local TEXT="$*" + _wvpushcall "$@" + + _wvfind_caller if "$@"; then _wvcheck 1 "NOT($TEXT)" # NOTREACHED return 1 else _wvcheck 0 "NOT($TEXT)" + _wvpopcall return 0 fi } +_wvgetrv() +{ + ( "$@" >&2 ) + echo -n $? +} + + +WVPASSEQ() +{ + _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() +{ + _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 +} + + +WVSKIP() +{ + local TEXT=$(_wvtextclean "$@") + _wvpushcall "$@" + _wvfind_caller + echo "! $WVCALLER_FILE:$WVCALLER_LINE $TEXT skip ok" 1>&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: