94 lines
2.1 KiB
Bash
Executable File
94 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
script_dir=$(CDPATH="" cd -- "$(dirname -- "$0")" && pwd)
|
|
project_dir=$(CDPATH="" cd -- "$script_dir/.." && pwd)
|
|
|
|
passed=0
|
|
failed=0
|
|
total=0
|
|
|
|
assert_eq() {
|
|
total=$((total + 1))
|
|
expected="$1"
|
|
actual="$2"
|
|
label="$3"
|
|
|
|
if [ "$expected" = "$actual" ]; then
|
|
passed=$((passed + 1))
|
|
printf " PASS: %s\n" "$label"
|
|
else
|
|
failed=$((failed + 1))
|
|
printf " FAIL: %s\n" "$label"
|
|
printf " expected: %s\n" "$expected"
|
|
printf " actual: %s\n" "$actual"
|
|
fi
|
|
}
|
|
|
|
assert_contains() {
|
|
total=$((total + 1))
|
|
needle="$1"
|
|
haystack="$2"
|
|
label="$3"
|
|
|
|
case "$haystack" in
|
|
*"$needle"*)
|
|
passed=$((passed + 1))
|
|
printf " PASS: %s\n" "$label"
|
|
;;
|
|
*)
|
|
failed=$((failed + 1))
|
|
printf " FAIL: %s\n" "$label"
|
|
printf " expected to contain: %s\n" "$needle"
|
|
printf " actual: %s\n" "$haystack"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
assert_file_exists() {
|
|
total=$((total + 1))
|
|
path="$1"
|
|
label="$2"
|
|
|
|
if [ -f "$path" ]; then
|
|
passed=$((passed + 1))
|
|
printf " PASS: %s\n" "$label"
|
|
else
|
|
failed=$((failed + 1))
|
|
printf " FAIL: %s\n" "$label"
|
|
printf " file not found: %s\n" "$path"
|
|
fi
|
|
}
|
|
|
|
run_test_file() {
|
|
test_file="$1"
|
|
test_name=$(basename "$test_file" .sh)
|
|
printf "\n== %s ==\n" "$test_name"
|
|
|
|
saved_total=$total
|
|
saved_passed=$passed
|
|
saved_failed=$failed
|
|
|
|
. "$test_file"
|
|
|
|
for func in $(grep '^test_' "$test_file" | sed 's/().*//' | sort -u); do
|
|
$func
|
|
done
|
|
|
|
file_total=$((total - saved_total))
|
|
file_passed=$((passed - saved_passed))
|
|
file_failed=$((failed - saved_failed))
|
|
if [ "$file_total" -eq 0 ]; then
|
|
printf " (no tests found)\n"
|
|
fi
|
|
}
|
|
|
|
for test_file in "$script_dir"/test_*.sh; do
|
|
[ "$(basename "$test_file")" = "test_runner.sh" ] && continue
|
|
run_test_file "$test_file"
|
|
done
|
|
|
|
printf "\n== Results ==\n"
|
|
printf " %d passed, %d failed, %d total\n" "$passed" "$failed" "$total"
|
|
|
|
[ "$failed" -eq 0 ] && exit 0 || exit 1
|