Andrey Epifancev 874c6c4c57 test: изоляция HOME и git-идентичности, мелкие правки ревью
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
2026-10-12 00:48:58 +04:00

28 lines
1.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 ]