Files
skelly/run_tests.sh
2025-09-27 12:17:14 +04:00

122 lines
3.3 KiB
Bash

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