mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-10-16 09:58:36 +00:00
Release 1.1.2 — the default path works end to end
Fix release for 1.1.1: the minimal path end to end, engine commands that run on Godot, Unity and Unreal, hook warnings you can see, and verdicts that say when they could not check. Details in CHANGELOG.md; upgrade steps in UPGRADING.md (v1.1.1 → v1.1.2). Fixes #67 Fixes #131 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
7ed2c3e9c4
commit
b21fa0f7f2
@@ -1,11 +1,27 @@
|
||||
---
|
||||
paths:
|
||||
- "tests/**"
|
||||
- "Assets/Tests/**/*.cs"
|
||||
- "Source/**/Tests/**/*.{h,cpp}"
|
||||
---
|
||||
|
||||
# Test Standards
|
||||
|
||||
- Test naming: `test_[system]_[scenario]_[expected_result]` pattern
|
||||
- Test naming follows the engine's language — every name says the scenario and
|
||||
the expected result:
|
||||
- **Godot (gdUnit4):** file `[system]_[feature]_test.gd`, function
|
||||
`test_[scenario]_[expected]`
|
||||
- **Unity (NUnit):** class `[System]Tests` in a file of the same name, method
|
||||
`[Scenario]_[Expected]` in PascalCase
|
||||
- **Unreal (Automation):** class `F[System][Scenario]Test` — one per test:
|
||||
each `IMPLEMENT_SIMPLE_AUTOMATION_TEST` defines its class, so a second test
|
||||
reusing a name fails to link — test name
|
||||
`<Project>.[System].[Scenario]` — the project's test command,
|
||||
`Automation RunTests <Project>.`, runs every test whose name contains
|
||||
`<Project>.` (a substring match, not a prefix). `<Project>.` is the root
|
||||
that filter in `commands.test` uses: the project name, or the distinct root
|
||||
`/setup-engine` chose when the project's name is also an engine area
|
||||
(`Audio`, `Core`, `Input`, …) — name tests under whichever it is
|
||||
- Every test must have a clear arrange/act/assert structure
|
||||
- Unit tests must not depend on external state (filesystem, network, database)
|
||||
- Integration tests must clean up after themselves
|
||||
@@ -27,12 +43,14 @@ paths:
|
||||
|
||||
## Examples
|
||||
|
||||
**Correct** (proper naming + Arrange/Act/Assert):
|
||||
**Correct** (proper naming + Arrange/Act/Assert) — Godot, gdUnit4:
|
||||
|
||||
```gdscript
|
||||
func test_health_system_take_damage_reduces_health() -> void:
|
||||
# Arrange
|
||||
var health := HealthComponent.new()
|
||||
extends GdUnitTestSuite
|
||||
|
||||
func test_take_damage_reduces_health() -> void:
|
||||
# Arrange — auto_free: a Node left alive is an orphan (gdUnit4 exit 101)
|
||||
var health: HealthComponent = auto_free(HealthComponent.new())
|
||||
health.max_health = 100
|
||||
health.current_health = 100
|
||||
|
||||
@@ -40,7 +58,55 @@ func test_health_system_take_damage_reduces_health() -> void:
|
||||
health.take_damage(25)
|
||||
|
||||
# Assert
|
||||
assert_eq(health.current_health, 75)
|
||||
assert_int(health.current_health).is_equal(75)
|
||||
```
|
||||
|
||||
Unity, NUnit (`Assets/Tests/EditMode/HealthTests.cs`):
|
||||
|
||||
```csharp
|
||||
using NUnit.Framework;
|
||||
|
||||
public class HealthTests
|
||||
{
|
||||
[Test]
|
||||
public void TakeDamage_ReducesHealth()
|
||||
{
|
||||
// Arrange
|
||||
var health = new Health(maxHealth: 100);
|
||||
|
||||
// Act
|
||||
health.TakeDamage(25);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(75, health.Current);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Unreal, Automation (`Source/<Module>/Private/Tests/HealthTest.cpp`):
|
||||
|
||||
```cpp
|
||||
#include "Misc/AutomationTest.h"
|
||||
|
||||
#if WITH_DEV_AUTOMATION_TESTS
|
||||
|
||||
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FHealthTakeDamageTest, "<Project>.Health.TakeDamageReducesHealth",
|
||||
EAutomationTestFlags::EditorContext | EAutomationTestFlags::ProductFilter)
|
||||
|
||||
bool FHealthTakeDamageTest::RunTest(const FString& Parameters)
|
||||
{
|
||||
// Arrange
|
||||
FHealthPool Health(100);
|
||||
|
||||
// Act
|
||||
Health.TakeDamage(25);
|
||||
|
||||
// Assert
|
||||
TestEqual(TEXT("health after 25 damage"), Health.GetCurrent(), 75);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
||||
```
|
||||
|
||||
**Incorrect**:
|
||||
@@ -49,5 +115,5 @@ func test_health_system_take_damage_reduces_health() -> void:
|
||||
func test1() -> void: # VIOLATION: no descriptive name
|
||||
var h := HealthComponent.new()
|
||||
h.take_damage(25) # VIOLATION: no arrange step, no clear assert
|
||||
assert_true(h.current_health < 100) # VIOLATION: imprecise assertion
|
||||
assert_bool(h.current_health < 100).is_true() # VIOLATION: imprecise assertion
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user