diff --git a/test/poc.test.bash b/test/poc.test.bash new file mode 100755 index 0000000..b5e4488 --- /dev/null +++ b/test/poc.test.bash @@ -0,0 +1,81 @@ +#!/usr/bin/env bash + +# CONSTANTS + +TEST_COUNT=0 +SUCCESS_COUNT=0 +# functions + +function assert { + ((TEST_COUNT++)) + if ./poc ./test/stub/scenario.bash "$1" >/dev/null; then + echo -n . + ((SUCCESS_COUNT++)) + else + (echo "error in: $1" && exit 1) + fi + +} + +function fail_type { + ((TEST_COUNT++)) + local i line first error_start_above regex hint_message + hint_message="${3:-}" + mapfile -t stderr <<<"$(./test/stub/scenario.bash "$1" 2>&1 >/dev/null)" + # echo "stderr countains ${#stderr[@]}" + error_start_above=false + success=false + regex="║[[:blank:]]+([A-Z|_]+)" + for i in "${!stderr[@]}"; do + line=$(strip_ansi "${stderr[$i]}") + first="${line:1:1}" + [[ $first == ╔ ]] && error_start_above=true && continue + if [[ "$error_start_above" == true ]]; then + [[ $line =~ $regex ]] && [[ ${BASH_REMATCH[1]} == "$2" ]] && success=true + break + fi + done + + if [[ $success == true && -n "${hint_message}" ]]; then + success=false + regex="╟─⟶.*(\(.*\))$" + for j in $(seq "$((i + 1))" "$((${#stderr[@]} - 1))"); do + line=$(strip_ansi "${stderr[$j]}") + if [[ $line =~ $regex ]]; then + [[ "${BASH_REMATCH[1]}" == "${hint_message}" ]] && success=true + break + fi + done + fi + if [[ $success == true ]]; then + ((SUCCESS_COUNT++)) + else + echo "error in: $1" && return 1 + fi +} + +# main +set -uo pipefail + +assert success +# fail_type subshell_term SUBSHELL_TERM +# fail_type unbound_variable UNBOUND_VARIABLE +# fail_type false FALSE +# fail_type return RETURN +# fail_type command_not_found COMMAND_NOT_FOUND +# fail_type exit EXIT +# fail_type source_not_found SOURCE_NOT_FOUND +# fail_type file_not_found FILE_NOT_FOUND +# fail_type subshell_error COMMAND_NOT_FOUND '(hint: prefer source than subshell)' +# fail_type command_error COMMAND_ERROR + +failed=$((TEST_COUNT - SUCCESS_COUNT)) + +echo +if [[ $failed -gt 0 ]]; then + ratio=$((100 * SUCCESS_COUNT / TEST_COUNT)) + echo "${ratio}% passed, $SUCCESS_COUNT succeeded, $failed failed!" + exit 1 +else + echo 100% passed! +fi