Files
kewt/tests/test_runner.sh
2026-05-20 08:30:21 +02:00

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