Refs #2 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
24 lines
1.2 KiB
Bash
Executable File
24 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# Тесты обвязки: bash, без зависимостей, работают с источниками в репозитории.
|
||
# Запуск: bash tests/run.sh [подстрока имени файла теста]
|
||
set -uo pipefail
|
||
HERE="$(cd "$(dirname "$0")" && pwd)"; ROOT="$(dirname "$HERE")"
|
||
pass=0; fail=0
|
||
ok(){ pass=$((pass+1)); printf ' ok %s\n' "$1"; }
|
||
fail(){ fail=$((fail+1)); printf ' FAIL %s\n %s\n' "$1" "$2"; }
|
||
assert_eq(){ [ "$2" = "$3" ] && ok "$1" || fail "$1" "получено: '$2', ожидалось: '$3'"; }
|
||
assert_file(){ [ -e "$2" ] && ok "$1" || fail "$1" "нет файла $2"; }
|
||
assert_grep(){ grep -qE -- "$2" "$3" 2>/dev/null && ok "$1" || fail "$1" "в $3 нет /$2/"; }
|
||
assert_max_bytes(){ local n; n=$(wc -c < "$2" | tr -d ' '); [ "$n" -le "$3" ] && ok "$1 ($n Б)" || fail "$1" "$n Б > $3"; }
|
||
assert_symlink(){ [ -L "$2" ] && [ -e "$2" ] && ok "$1" || fail "$1" "$2 не симлинк или битый"; }
|
||
for t in "$HERE"/test-*.sh; do
|
||
[ -n "${1:-}" ] && [[ "$(basename "$t")" != *"$1"* ]] && continue
|
||
echo "## $(basename "$t")"
|
||
TMP=$(mktemp -d); export TMP ROOT
|
||
# shellcheck disable=SC1090
|
||
. "$t"
|
||
rm -rf "$TMP"
|
||
done
|
||
echo "passed $pass, failed $fail"
|
||
[ "$fail" = 0 ]
|