105 lines
2.5 KiB
Bash
105 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# lib.sh — shared helpers for E2E test suite.
|
|
#
|
|
# Test functions set a global $FAILURES counter and $FAILED list so the
|
|
# caller can exit non-zero after all suites have run.
|
|
#
|
|
# Sourced by run.sh — do NOT execute directly.
|
|
#
|
|
|
|
FAILURES=0
|
|
PASSES=0
|
|
FAILED_TESTS=""
|
|
|
|
assert_eq() {
|
|
local desc="$1" expected="$2" actual="$3"
|
|
if [[ "$expected" == "$actual" ]]; then
|
|
printf ' \033[1;32mPASS\033[0m %s\n' "$desc"
|
|
((++PASSES))
|
|
else
|
|
printf ' \033[1;31mFAIL\033[0m %s\n' "$desc"
|
|
printf ' expected: %q\n' "$expected"
|
|
printf ' actual: %q\n' "$actual"
|
|
((++FAILURES))
|
|
FAILED_TESTS+="$desc; "
|
|
fi
|
|
}
|
|
|
|
assert_contains() {
|
|
local desc="$1" haystack="$2" needle="$3"
|
|
if [[ "$haystack" == *"$needle"* ]]; then
|
|
printf ' \033[1;32mPASS\033[0m %s\n' "$desc"
|
|
((++PASSES))
|
|
else
|
|
printf ' \033[1;31mFAIL\033[0m %s\n' "$desc"
|
|
printf ' haystack did not contain: %q\n' "$needle"
|
|
((++FAILURES))
|
|
FAILED_TESTS+="$desc; "
|
|
fi
|
|
}
|
|
|
|
assert_not_contains() {
|
|
local desc="$1" haystack="$2" needle="$3"
|
|
if [[ "$haystack" != *"$needle"* ]]; then
|
|
printf ' \033[1;32mPASS\033[0m %s\n' "$desc"
|
|
((++PASSES))
|
|
else
|
|
printf ' \033[1;31mFAIL\033[0m %s\n' "$desc"
|
|
printf ' haystack unexpectedly contained: %q\n' "$needle"
|
|
((++FAILURES))
|
|
FAILED_TESTS+="$desc; "
|
|
fi
|
|
}
|
|
|
|
assert_match() {
|
|
local desc="$1" haystack="$2" regex="$3"
|
|
if [[ "$haystack" =~ $regex ]]; then
|
|
printf ' \033[1;32mPASS\033[0m %s\n' "$desc"
|
|
((++PASSES))
|
|
else
|
|
printf ' \033[1;31mFAIL\033[0m %s\n' "$desc"
|
|
printf ' did not match regex: %s\n' "$regex"
|
|
((++FAILURES))
|
|
FAILED_TESTS+="$desc; "
|
|
fi
|
|
}
|
|
|
|
assert_file_exists() {
|
|
local desc="$1" path="$2"
|
|
if [[ -e "$path" ]]; then
|
|
printf ' \033[1;32mPASS\033[0m %s\n' "$desc"
|
|
((++PASSES))
|
|
else
|
|
printf ' \033[1;31mFAIL\033[0m %s\n' "$desc"
|
|
printf ' file not found: %s\n' "$path"
|
|
((++FAILURES))
|
|
FAILED_TESTS+="$desc; "
|
|
fi
|
|
}
|
|
|
|
assert_gt() {
|
|
local desc="$1" a="$2" b="$3"
|
|
if (( a > b )); then
|
|
printf ' \033[1;32mPASS\033[0m %s (%s > %s)\n' "$desc" "$a" "$b"
|
|
((++PASSES))
|
|
else
|
|
printf ' \033[1;31mFAIL\033[0m %s (%s <= %s)\n' "$desc" "$a" "$b"
|
|
((++FAILURES))
|
|
FAILED_TESTS+="$desc; "
|
|
fi
|
|
}
|
|
|
|
summary() {
|
|
echo
|
|
printf -- '---\n'
|
|
printf 'passes: %d\n' "$PASSES"
|
|
printf 'failures: %d\n' "$FAILURES"
|
|
if [[ -n "$FAILED_TESTS" ]]; then
|
|
printf 'failed: %s\n' "$FAILED_TESTS"
|
|
fi
|
|
if (( FAILURES > 0 )); then
|
|
return 1
|
|
fi
|
|
}
|