#!/usr/bin/env bash # Run all test-*.sh files in the repo (including plugins) and the bats suite. # Usage: bash tests/run-tests.sh [--bats-only] # # TEST_DIR — override root to search for test-*.sh (default: REPO_ROOT); used by tests. set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" BATS="$REPO_ROOT/tests/run-bats.sh" BATS_ONLY=false [[ "${1:-}" == "--bats-only" ]] && BATS_ONLY=true SEARCH_ROOT="${TEST_DIR:-$REPO_ROOT}" FAILED=() PASSED=0 run_bats() { if [[ -x "$BATS" ]]; then echo "=== bats ===" bash "$BATS" echo "" fi } if $BATS_ONLY; then run_bats exit 0 fi run_bats mapfile -t SCRIPTS < <( find "$SEARCH_ROOT" -name "test-*.sh" \ -not -path "*/.git/*" \ -not -path "*/.claude/worktrees/*" \ | sort ) for script in "${SCRIPTS[@]}"; do rel="${script#"$SEARCH_ROOT/"}" echo "=== $rel ===" if bash "$script"; then PASSED=$((PASSED + 1)) else FAILED+=("$rel") fi echo "" done echo "=== Summary: $PASSED passed, ${#FAILED[@]} failed ===" if [[ ${#FAILED[@]} -gt 0 ]]; then echo "Failed scripts:" for s in "${FAILED[@]}"; do echo " $s" done exit 1 fi