diff options
Diffstat (limited to 'lib/test/asserts.sh')
-rw-r--r-- | lib/test/asserts.sh | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/test/asserts.sh b/lib/test/asserts.sh new file mode 100644 index 0000000..b1f538e --- /dev/null +++ b/lib/test/asserts.sh @@ -0,0 +1,68 @@ +#!/bin/sh + +fail() { + message=${1:-"fail called without message"} + echo -e " ${red}fail:${_rst} ${reason}" + exit 1 +} + +_assert_warn= + +assert_warn() { + if ! is_true "${_assert_warn}"; then _assert_warn=y; fi +} + +assert_exited() { + status=${1} + expected=${2:-0} + message=${3:-"exit status"} + assert_compare "=" "$status" "$expected" "$message" +} + +assert_compare() { + expression=$1 + left=$2 + right=$3 + message=$4 + #cloyster_test_log "assert_compare 'test \"$left\" $expression \"$right\" && echo \"OK\" || echo \"$right\"'" + assert "test \"$left\" $expression \"$right\" && echo \"\$?\" || echo \"\$?\"" "0" "${message}" +} + +assert() { + assertion=$1 + expected=$2 + message=${3:-assertion} + status= + assertion_eval="$(eval $(echo "$1"))" && status=0 || status=$?; true + cloyster_test_log "assert: assertion={$(echo "$1" | head -c 30 | sed "s:\\n: :g")} expected=${expected} evaluated=${assertion_eval} status=${status}" + if [ ! "$status" = "0" ]; then + _assert_failed "exited: ${status}" + _assert_exit + elif [ ! "$assertion_eval" = "$expected" ]; then + _assert_failed "${message}" + echo -e "${_bold}Expected:${_rst} ${expected}\n${_bold}Got :${_rst} ${assertion_eval}" + _assert_exit + fi + _test_asserts_counter=$(( ${_test_asserts_counter:-0} + 1 )) + _assert_warn= +} + +_assert_count() { + echo "$_test_asserts_counter" +} +_assert_reset_count() { + _test_asserts_counter=0 +} +_assert_failed() { + name=$1 + reason=$2; if [ -n "${reason}" ]; then reason=" ${reason}"; fi + line=; if [ -n "${_assert_line}" ]; then line=" at line ${_bold}${_assert_line}"; fi + emoji="💥"; text= + if is_true "$_assert_warn"; then emoji="🔥"; text=" (WARNING)"; fi + echo -e "${emoji} $(tput AF 214)Assertion ${_test_asserts_counter} failed${text}${line}: ${_bold}$name${_rst}${reason}" +} + +_assert_exit() { + if ! is_true "$_assert_warn"; then exit 99; fi + _assert_warn= +} |