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