create-test-project.shโข4.6 kB
#!/bin/bash
echo "๐ฎ Creating Test Godot Project"
echo "=============================="
PROJECT_DIR="../test-game"
if [ -d "$PROJECT_DIR" ]; then
echo "โ ๏ธ Test project already exists at $PROJECT_DIR"
read -p "Remove and recreate? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -rf "$PROJECT_DIR"
else
echo "Skipping project creation"
exit 0
fi
fi
echo "1. Creating project structure..."
mkdir -p "$PROJECT_DIR"/{scripts/combat,scenes,data/movesets,test}
echo "2. Creating project.godot..."
cat > "$PROJECT_DIR/project.godot" << 'EOF'
; Engine configuration file.
[application]
config/name="Sentinel Test Game"
config/features=PackedStringArray("4.3")
[rendering]
renderer/rendering_method="mobile"
EOF
echo "3. Creating test script with intentional error..."
cat > "$PROJECT_DIR/scripts/combat/fighter.gd" << 'EOF'
extends Node
class_name Fighter
var health: int = 100
var damage: int = 0
func _ready():
setup_fighter()
# This line has an error - function doesn't exist
damage = get_damage_value() # ERROR: This function doesn't exist!
print("Fighter ready with health: ", health)
func setup_fighter():
health = 100
print("Fighter setup complete")
func calculate_damage() -> int:
return 25
func take_damage(amount: int):
health -= amount
if health <= 0:
print("Fighter defeated!")
EOF
echo "4. Creating a working test script..."
cat > "$PROJECT_DIR/scripts/combat/working_fighter.gd" << 'EOF'
extends Node
class_name WorkingFighter
var health: int = 100
var damage: int = 0
func _ready():
setup_fighter()
damage = calculate_damage() # This function exists
print("WorkingFighter ready with health: ", health)
func setup_fighter():
health = 100
print("WorkingFighter setup complete")
func calculate_damage() -> int:
return 25
EOF
echo "5. Creating simple test scene..."
cat > "$PROJECT_DIR/scenes/test_scene.tscn" << 'EOF'
[gd_scene load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/combat/fighter.gd" id="1"]
[node name="TestScene" type="Node"]
[node name="Fighter" type="Node" parent="."]
script = ExtResource("1")
EOF
echo "6. Creating test moveset data..."
cat > "$PROJECT_DIR/data/movesets/basic_attacks.json" << 'EOF'
{
"name": "Basic Attacks",
"moves": [
{
"name": "punch",
"damage": 10,
"startup": 5,
"active": 3,
"recovery": 7
},
{
"name": "kick",
"damage": 15,
"startup": 8,
"active": 2,
"recovery": 10
}
]
}
EOF
echo "7. Setting up gdUnit4 (mock structure for testing)..."
mkdir -p "$PROJECT_DIR/addons/gdUnit4/bin"
cat > "$PROJECT_DIR/addons/gdUnit4/bin/gdUnit4.gd" << 'EOF'
# Mock gdUnit4 runner for testing purposes
extends SceneTree
func _init():
print("=== Mock gdUnit4 Test Runner ===")
print("Running tests...")
# Simulate running tests and finding the error in fighter.gd
print("Loading test scene: res://scenes/test_scene.tscn")
print("ERROR: Invalid call. Nonexistent function 'get_damage_value' in base 'Node'.")
print("At: res://scripts/combat/fighter.gd:9 @ _ready()")
print("")
print("Test Results:")
print(" 1 test failed")
print(" 0 tests passed")
print("=== Test Run Complete ===")
# Exit with failure code
quit(1)
EOF
echo "8. Creating basic unit test..."
cat > "$PROJECT_DIR/test/fighter_test.gd" << 'EOF'
# Basic test file (gdUnit4 format)
extends GdUnitTestSuite
func test_fighter_creation():
var fighter = preload("res://scripts/combat/working_fighter.gd").new()
assert_not_null(fighter)
assert_eq(fighter.health, 100)
func test_damage_calculation():
var fighter = preload("res://scripts/combat/working_fighter.gd").new()
var damage = fighter.calculate_damage()
assert_eq(damage, 25)
EOF
echo ""
echo "โ
Test Godot project created at: $PROJECT_DIR"
echo ""
echo "Project structure:"
echo " ๐ $PROJECT_DIR/"
echo " โโโ ๐ project.godot"
echo " โโโ ๐ scripts/combat/"
echo " โ โโโ ๐ fighter.gd (has error)"
echo " โ โโโ โ
working_fighter.gd (works)"
echo " โโโ ๐ scenes/"
echo " โ โโโ ๐ test_scene.tscn"
echo " โโโ ๐ data/movesets/"
echo " โ โโโ ๐ basic_attacks.json"
echo " โโโ ๐ addons/gdUnit4/"
echo ""
echo "Next steps:"
echo "1. Update .env file: GODOT_PROJECT_ROOT=$PROJECT_DIR"
echo "2. Run: sentinel test (should find the error)"
echo "3. Run: sentinel ctx res://scripts/combat/fighter.gd 9"