#!/bin/bash cd "$(dirname "$0")" TESTS=(test-*.sh) PARALLEL=${PARALLEL:-1} if [ ${#TESTS[@]} -eq 0 ]; then echo "No tests found" exit 1 fi run_test() { local test=$1 local output if output=$(bash "$test" 2>&1); then echo "✓ $test" return 0 else echo "✗ $test" echo "$output" | sed 's/^/ /' return 1 fi } export -f run_test if [ "$PARALLEL" = "1" ]; then echo "Running ${#TESTS[@]} tests in parallel..." echo failed=0 passed=0 for test in "${TESTS[@]}"; do run_test "$test" & done for job in $(jobs -p); do if wait $job; then ((passed++)) else ((failed++)) fi done echo echo "Results: $passed passed, $failed failed" if [ $failed -gt 0 ]; then exit 1 fi else echo "Running ${#TESTS[@]} tests sequentially..." echo failed=0 passed=0 for test in "${TESTS[@]}"; do if run_test "$test"; then ((passed++)) else ((failed++)) fi echo done echo "Results: $passed passed, $failed failed" if [ $failed -gt 0 ]; then exit 1 fi fi