Skip to content

Commit

Permalink
solves issues #2 and #3.
Browse files Browse the repository at this point in the history
  • Loading branch information
lslvr committed Dec 28, 2020
1 parent 011acd5 commit 7d3947a
Showing 1 changed file with 29 additions and 37 deletions.
66 changes: 29 additions & 37 deletions tbd
Original file line number Diff line number Diff line change
Expand Up @@ -3,65 +3,57 @@

shopt -s expand_aliases

alias putr='printf "%b\n"' \
quiet='> /dev/null 2>&1'
alias quiet='> /dev/null ' \
putln='printf "%b\n"' \
put='printf "%b"' \
run='2> "$trace_f" eval ' \
abort_on_error:='read __err <<<'

r=$'\e[31m' g=$'\e[32m' i=$'\e[3m' u=$'\e[0m'

abort () {
>&2 putr "\e[31m${*}\e[0m"
"${abort_on_error:=true}" && exit ${err:-1} \
|| return ${err:-1}
>&2 putln "\r${r}${1}${u}"
${__err:=true} && { put "$i"; sed "s|^| |" "$trace_f"; put "$u"; exit ${err:-1}; } \
|| return ${err:-1}
}

on_error () {
case "$*" in
( 'quit' | 'abort' ) abort_on_error='true';;
( 'continue' ) abort_on_error='false';;

( * ) abort "malformed instruction: on_error $*.";;
esac
}
++ () { : $(( ++$1 )); }

@ () { putr "${new_ln}\e[33m${*}\e[0m"; new_ln="\n"; }
@ () { putln "${new_ln}\e[33m${*}\e[0m"; new_ln="\n"; }

- () {
printf '%s' " $*"
case "$2" in
( 'works' )
test $# = 2 || abort "malformed test."
quiet eval "$1";;

( 'fails' )
test $# = 2 || abort "malformed test."
quiet eval ! "$1";;
put " $*"

( 'prints' )
test $# = 3 || abort "malformed test."
quiet test "$(eval "$1" 2> /dev/null)" = "$3";;
case "$2" in
( 'works' ) quiet run "$1";;
( 'fails' ) quiet run ! "$1";;
( 'prints' ) quiet test "$(run "$1")" = "$3";;

( * )
quiet command -V "$2" || abort "no such test '$2'."
quiet "$2" "$1" "${@:3}";;
quiet command -V "$2" || abort "no such command '$2'."
quiet run "$2" "$1" "${@:3}";;
esac

err=$?
_c=$?; ++ tests

: $(( ++tests ))
test $err = 0 && { : $(( ++passed_tests )); putr " \e[32mok.\e[0m"; } \
|| { : $(( ++failed_tests )); abort " failed!"; }
test $_c = 0 && { ++ good; putln "\r ${g}ok${u}"; } \
|| { ++ fail; abort " fail"; }
}

tbd_main () {
trap 'exit' INT
trap 'putr "" " \e[3m${tests:-0} tests executed, ${passed_tests:-0} passed, ${failed_tests:-0} failed.\e[0m"' \
EXIT TERM
trap 'rm "$trace_f"; exit' INT
trap 'rm "$trace_f"; putln "" " \e[3m${tests:-0} tests executed, ${good:-0} passed, ${fail:-0} failed.\e[0m"' \
EXIT

trace_f="$(mktemp)"

for tf in "${@:-testfile}"; do
test -r "$tf" || abort "could not read from '$tf'. aborting."
source "$tf"
done

"${abort_on_error:=true}" && exit $failed_tests \
|| exit 0
${__err:=true} && exit $fail \
|| exit 0
}

tbd_main "$@"

0 comments on commit 7d3947a

Please sign in to comment.