run.sh задаёт HOME во временный каталог на каждый тест и фиксирует git-идентичность; test-install.sh передаёт HOME и CLAUDE_CONFIG_DIR inline (M-1, T9.2). doctor.sh распознаёт шапку таблицы с лишними пробелами и пропускает пустые и «-» каталоги, тест (M-5, T8.1). Исправлены ячейка таблицы в HARNESS.md (T10.1), «Что это» и «Тесты» в CLAUDE.md репозитория (T10.3, T10.4). Refs #2 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MzkPQWjfA7RpqYWkjnqJwt
28 lines
1.6 KiB
Bash
Executable File
28 lines
1.6 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
|
||
REAL_HOME="$HOME"
|
||
# git-идентичность для коммитов в тестах не зависит от машины
|
||
export GIT_AUTHOR_NAME=test GIT_AUTHOR_EMAIL=test@example.invalid GIT_COMMITTER_NAME=test GIT_COMMITTER_EMAIL=test@example.invalid
|
||
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
|
||
export HOME="$TMP/home"; mkdir -p "$HOME"
|
||
# shellcheck disable=SC1090
|
||
. "$t"
|
||
export HOME="$REAL_HOME"; rm -rf "$TMP"
|
||
done
|
||
echo "passed $pass, failed $fail"
|
||
[ "$fail" = 0 ]
|