aboutsummaryrefslogtreecommitdiff
path: root/lib/test/asserts.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/test/asserts.sh')
-rw-r--r--lib/test/asserts.sh68
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=
+}