#!/usr/bin/env bash echo "Automated Test Suite Runner" echo "===========================" echo "" echo "Scanning for test files in tests/ directory..." # Function to run a single test file run_test() { local test_file="$1" local test_name="$2" echo "" echo "=== $test_name ===" echo "Running: $test_file" if godot --headless --script "$test_file"; then echo "✅ PASSED: $test_name" else echo "❌ FAILED: $test_name" ((failed_tests++)) fi ((total_tests++)) echo "" } # Initialize counters total_tests=0 failed_tests=0 start_time=$(date +%s) # Find and run all test files echo "Discovered test files:" # Core test files in tests/ directory for test_file in tests/test_*.gd; do if [ -f "$test_file" ]; then # Extract descriptive name from filename filename=$(basename "$test_file" .gd) test_name=$(echo "$filename" | sed 's/test_//' | sed 's/_/ /g' | sed 's/\b\w/\U&/g') echo " 📄 $test_file -> $test_name" fi done # Additional test directories if [ -d "tests/unit" ]; then for test_file in tests/unit/test_*.gd; do if [ -f "$test_file" ]; then filename=$(basename "$test_file" .gd) test_name="Unit: $(echo "$filename" | sed 's/test_//' | sed 's/_/ /g' | sed 's/\b\w/\U&/g')" echo " 📄 $test_file -> $test_name" fi done fi if [ -d "tests/integration" ]; then for test_file in tests/integration/test_*.gd; do if [ -f "$test_file" ]; then filename=$(basename "$test_file" .gd) test_name="Integration: $(echo "$filename" | sed 's/test_//' | sed 's/_/ /g' | sed 's/\b\w/\U&/g')" echo " 📄 $test_file -> $test_name" fi done fi echo "" echo "Starting test execution..." echo "" # Run core tests for test_file in tests/test_*.gd; do if [ -f "$test_file" ]; then filename=$(basename "$test_file" .gd) test_name=$(echo "$filename" | sed 's/test_//' | sed 's/_/ /g' | sed 's/\b\w/\U&/g') run_test "$test_file" "$test_name" fi done # Run unit tests if [ -d "tests/unit" ]; then for test_file in tests/unit/test_*.gd; do if [ -f "$test_file" ]; then filename=$(basename "$test_file" .gd) test_name="Unit: $(echo "$filename" | sed 's/test_//' | sed 's/_/ /g' | sed 's/\b\w/\U&/g')" run_test "$test_file" "$test_name" fi done fi # Run integration tests if [ -d "tests/integration" ]; then for test_file in tests/integration/test_*.gd; do if [ -f "$test_file" ]; then filename=$(basename "$test_file" .gd) test_name="Integration: $(echo "$filename" | sed 's/test_//' | sed 's/_/ /g' | sed 's/\b\w/\U&/g')" run_test "$test_file" "$test_name" fi done fi # Calculate execution time end_time=$(date +%s) execution_time=$((end_time - start_time)) # Print summary echo "================================" echo "📊 Test Execution Summary" echo "================================" echo "Total Tests Run: $total_tests" echo "Tests Passed: $((total_tests - failed_tests))" echo "Tests Failed: $failed_tests" echo "Execution Time: ${execution_time}s" if [ $failed_tests -eq 0 ]; then echo "✅ ALL TESTS PASSED!" exit 0 else echo "❌ $failed_tests TEST(S) FAILED" exit 1 fi