Implemented `not' expectation

env
Mike Gerwitz 2014-05-15 00:46:37 -04:00
commit 6a5c0b3d0d
No known key found for this signature in database
GPG Key ID: F22BB8158EE30EAB
3 changed files with 35 additions and 14 deletions

View File

@ -66,3 +66,8 @@ _expect--be() { _proxy-to "$@"; }
_expect--succeed() { test "$1" -eq 0; } _expect--succeed() { test "$1" -eq 0; }
_expect--fail() { test "$1" -ne 0; } _expect--fail() { test "$1" -ne 0; }
##
# Inverts the result of an expectation represented by the remainder clause
_expect--not() { ! _proxy-to "$@"; }

View File

@ -162,7 +162,8 @@ to()
_sstack-assert-follow :expect to $(caller) _sstack-assert-follow :expect to $(caller)
_sstack-pop _sstack-pop
_handle-to "$@" || fail "$*" __handle-to "$__spec_rexit" $__SHIFTN "$__spec_errpath" "$@" \
|| fail "$*"
__spec_caller= __spec_caller=
} }
@ -171,9 +172,18 @@ to()
## ##
# Perform expectation assertion by invoking expectation handler # Perform expectation assertion by invoking expectation handler
# #
# Will throw an error if the handler cannot be found. # Will throw an error if the handler cannot be found. Arguments are expected
_handle-to() # to be of the following form:
#
# <exit code> <shiftn> <...N> <expect type> <...remainder clause>
#
__handle-to()
{ {
local -ri rexit="$1"
local -ri shiftn="$2"
local -r errpath="$( [ $shiftn -gt 2 ] && echo "$3" )"
shift "$shiftn"
local -r type="$1" local -r type="$1"
shift shift
@ -186,23 +196,16 @@ _handle-to()
# output file, and all remaining arguments are said remainder clause; the # output file, and all remaining arguments are said remainder clause; the
# shift argument allows the implementation to vary without breaking BC so # shift argument allows the implementation to vary without breaking BC so
# long as the meaning of the shifted arguments do not change # long as the meaning of the shifted arguments do not change
$assert "$__spec_rexit" $__SHIFTN "$__spec_errpath" "$@" \ $assert $rexit $__SHIFTN "$errpath" "$@" \
< <( echo -n "$__spec_result" ) < <( echo -n "$__spec_result" )
} }
## ##
# Proxies remainder clause to an expectation handler # Alias for _handle-to
# #
# This is different than simply invoking `_handle-to` in that the former # Shows intent to proxy a call and allows proxy implementation to vary.
# expects to be called with arguments from an existing handler call (that _proxy-to() { __handle-to "$@"; }
# is, in need of shifting to access the remainder clause), where as the
# latter assumes that its arguments are *only* the intended remainder clause
_proxy-to()
{
shift "$2"
_handle-to "$@"
}
## ##

View File

@ -63,6 +63,19 @@ describe fail
end end
describe not
it will invert the result of an expectation
# exit code of 1, so normally `succeed' would fail
expect _expect--not 1 2 succeed
to succeed
# exit code of 0, so normally `succeed' would succeed
expect _expect--not 0 2 succeed
to fail
end
end
describe output describe output
it will default to asserting against stdout it will default to asserting against stdout
expect _expect--output 0 2 "test string" <<< "test string" expect _expect--output 0 2 "test string" <<< "test string"