blob: 9994d7bc2d4fb8cc2e6cfefa8341663b764f262f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
|