From 8ce674db7ea92f6b3e551280b462c4f52ac74116 Mon Sep 17 00:00:00 2001 From: davidovski Date: Sun, 13 Feb 2022 17:52:07 +0000 Subject: added test suite for parseconf --- src/shtests | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 src/shtests (limited to 'src/shtests') diff --git a/src/shtests b/src/shtests new file mode 100755 index 0000000..9994d7b --- /dev/null +++ b/src/shtests @@ -0,0 +1,60 @@ +#!/bin/sh +# +# Simple shell test suite +# +# will run all functions with a name starting with test_ +# the return value of said function will determine if its a pass or fail +# +# to run a shell file full of unit tests, run: +# shtests [FILE] +# + +. /usr/lib/colors.sh + +PASS="${BLUE}[ ${GREEN}PASS${BLUE} ]${RESET}" +FAIL="${BLUE}[ ${RED}FAIL${BLUE} ]${RESET}" + +runtest () { + test_name=$(sed "s/_/ /g" <<< "$1") + test_func="$2" + printf "${BLUE}[ ] ${RESET}$test_name\r"; + if "$test_func" ; then + printf "$PASS\n" + return 0 + else + printf "$FAIL\n" + return 1 + fi +} + +if [ $# = "0" ]; then + printf "${RED}No tests file has been provided\n" + exit 1; +else + source $@ +fi + + +tests=$(declare -F | sed -rn "s/declare -f test_(.+)/\1/p") + +total=$(echo $tests | wc -w) +passed=0 +failed=0 + +printf "${BLUE}Running $total tests: \n" +for name in $tests; do + if runtest "$name" "test_$name"; then + passed=$((passed+1)) + else + failed=$((failed+1)) + fi +done + +printf "\n${BLUE}Summary for $total tests:\n" +printf "\t${PASS} $passed\n" +printf "\t${FAIL} $failed\n" +printf "\n" + +[ "$passed" = "$total" ] || exit 1 + + -- cgit v1.2.1