174 lines
5.9 KiB
Markdown
174 lines
5.9 KiB
Markdown
# Skill Test Spec: /test-setup
|
|
|
|
## Skill Summary
|
|
|
|
`/test-setup` scaffolds the test framework for the project based on the
|
|
configured engine. It creates the `tests/` directory structure defined in
|
|
`coding-standards.md` (unit/, integration/, performance/, playtest/) and
|
|
generates the appropriate test runner configuration for the detected engine:
|
|
GdUnit4 config for Godot, Unity Test Runner asmdef for Unity, or Unreal headless
|
|
runner for Unreal Engine.
|
|
|
|
Each file or directory created is gated behind a "May I write" ask. If the test
|
|
framework already exists, the skill verifies the configuration rather than
|
|
reinitializing. No director gates apply. The verdict is COMPLETE when the
|
|
scaffold is in place.
|
|
|
|
---
|
|
|
|
## Static Assertions (Structural)
|
|
|
|
Verified automatically by `/skill-test static` — no fixture needed.
|
|
|
|
- [ ] Has required frontmatter fields: `name`, `description`, `argument-hint`, `user-invocable`, `allowed-tools`
|
|
- [ ] Has ≥2 phase headings
|
|
- [ ] Contains verdict keyword: COMPLETE
|
|
- [ ] Contains "May I write" collaborative protocol language before creating files
|
|
- [ ] Has a next-step handoff (e.g., `/test-helpers` to generate helper utilities)
|
|
|
|
---
|
|
|
|
## Director Gate Checks
|
|
|
|
None. `/test-setup` is a scaffolding utility. No director gates apply.
|
|
|
|
---
|
|
|
|
## Test Cases
|
|
|
|
### Case 1: Happy Path — Godot project, scaffolds GdUnit4 test structure
|
|
|
|
**Fixture:**
|
|
- `technical-preferences.md` has engine set to Godot 4, language GDScript
|
|
- `tests/` directory does not exist yet
|
|
|
|
**Input:** `/test-setup`
|
|
|
|
**Expected behavior:**
|
|
1. Skill reads engine from `technical-preferences.md` → Godot 4 + GDScript
|
|
2. Skill drafts the test directory structure: tests/unit/, tests/integration/,
|
|
tests/performance/, tests/playtest/, and a GdUnit4 runner config file
|
|
3. Skill asks "May I write the tests/ directory structure?"
|
|
4. Directories and GdUnit4 runner script created on approval
|
|
5. Skill confirms the runner script matches the CI command in coding-standards.md:
|
|
`godot --headless --script tests/gdunit4_runner.gd`
|
|
6. Verdict is COMPLETE
|
|
|
|
**Assertions:**
|
|
- [ ] All 4 subdirectories (unit/, integration/, performance/, playtest/) are created
|
|
- [ ] GdUnit4 runner config is generated
|
|
- [ ] Runner script path matches coding-standards.md CI command
|
|
- [ ] "May I write" is asked before creating any files
|
|
- [ ] Verdict is COMPLETE
|
|
|
|
---
|
|
|
|
### Case 2: Unity Project — Scaffolds Unity Test Runner with asmdef
|
|
|
|
**Fixture:**
|
|
- `technical-preferences.md` has engine set to Unity, language C#
|
|
- `tests/` directory does not exist
|
|
|
|
**Input:** `/test-setup`
|
|
|
|
**Expected behavior:**
|
|
1. Skill reads engine → Unity + C#
|
|
2. Skill creates `Tests/` directory with Unity conventions (capitalized)
|
|
3. Skill generates `Tests/Tests.asmdef` and `Tests/Editor/EditorTests.asmdef`
|
|
4. EditMode and PlayMode test runner modes are configured
|
|
5. Skill asks "May I write the Tests/ directory structure?"
|
|
6. Verdict is COMPLETE
|
|
|
|
**Assertions:**
|
|
- [ ] Unity-specific `Tests/` structure is created (not the Godot structure)
|
|
- [ ] `.asmdef` files are generated
|
|
- [ ] EditMode and PlayMode runner config is present
|
|
- [ ] Verdict is COMPLETE
|
|
|
|
---
|
|
|
|
### Case 3: Test Framework Already Exists — Verifies config, not re-initialized
|
|
|
|
**Fixture:**
|
|
- `tests/unit/`, `tests/integration/` exist
|
|
- GdUnit4 runner script exists (Godot project)
|
|
|
|
**Input:** `/test-setup`
|
|
|
|
**Expected behavior:**
|
|
1. Skill detects existing tests/ structure
|
|
2. Skill reports: "Test framework already exists — verifying configuration"
|
|
3. Skill checks: runner script path, directory completeness, CI command alignment
|
|
4. If all checks pass: reports "Configuration verified — no changes needed"
|
|
5. If checks fail (e.g., missing tests/performance/): reports specific gap and
|
|
asks "May I add the missing directories?"
|
|
|
|
**Assertions:**
|
|
- [ ] Skill does NOT reinitialize when framework exists
|
|
- [ ] Verification checks are performed on existing structure
|
|
- [ ] Only missing parts trigger a "May I write" ask
|
|
- [ ] Verdict is COMPLETE whether everything was OK or gaps were fixed
|
|
|
|
---
|
|
|
|
### Case 4: No Engine Configured — Redirects to /setup-engine
|
|
|
|
**Fixture:**
|
|
- `technical-preferences.md` contains only placeholders (engine not set)
|
|
|
|
**Input:** `/test-setup`
|
|
|
|
**Expected behavior:**
|
|
1. Skill reads `technical-preferences.md` and finds engine placeholder
|
|
2. Skill reports: "Engine not configured — cannot scaffold engine-specific test framework"
|
|
3. Skill suggests running `/setup-engine` first
|
|
4. No directories or files are created
|
|
|
|
**Assertions:**
|
|
- [ ] Error message explicitly states engine is not configured
|
|
- [ ] `/setup-engine` is suggested as the next step
|
|
- [ ] No write tool is called
|
|
- [ ] Verdict is not COMPLETE (blocked state)
|
|
|
|
---
|
|
|
|
### Case 5: Director Gate Check — No gate; test-setup is a scaffolding utility
|
|
|
|
**Fixture:**
|
|
- Engine configured, tests/ does not exist
|
|
|
|
**Input:** `/test-setup`
|
|
|
|
**Expected behavior:**
|
|
1. Skill scaffolds and writes all test framework files
|
|
2. No director agents are spawned
|
|
3. No gate IDs appear in output
|
|
|
|
**Assertions:**
|
|
- [ ] No director gate is invoked
|
|
- [ ] No gate skip messages appear
|
|
- [ ] Verdict is COMPLETE without any gate check
|
|
|
|
---
|
|
|
|
## Protocol Compliance
|
|
|
|
- [ ] Reads engine from `technical-preferences.md` before generating any scaffold
|
|
- [ ] Generates engine-appropriate test runner config (not generic)
|
|
- [ ] Creates all 4 subdirectories from coding-standards.md
|
|
- [ ] Asks "May I write" before creating files
|
|
- [ ] Detects existing framework and offers verification (not reinitialization)
|
|
- [ ] Verdict is COMPLETE when scaffold is in place
|
|
|
|
---
|
|
|
|
## Coverage Notes
|
|
|
|
- Unreal Engine test scaffolding (headless runner with `-nullrhi`) follows the
|
|
same pattern as Cases 1 and 2 and is not separately fixture-tested.
|
|
- CI integration file generation (e.g., `.github/workflows/test.yml`) is
|
|
referenced but not assertion-tested here — it may be a separate skill concern.
|
|
- The case where tests/ exists but is from a different engine (e.g., Unity tests
|
|
in a now-Godot project) is not tested; the skill would detect the mismatch
|
|
and offer to reconcile.
|