Files
cat-haven/TEST_COVERAGE.md
2026-07-23 21:23:01 +00:00

484 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Cat Haven - Test Coverage Summary
## Overview
A complete end-to-end testing strategy has been created for the Cat Haven game using a custom testing framework with TAP-style output and XML report generation.
## Test Structure
```
test/
├── test_helper.lua # LOVR mocks and test utilities
├── run_tests.lua # Test runner script
├── spec/ # Unit tests (per module)
│ ├── core_spec.lua
│ ├── json_spec.lua
│ ├── voxel_spec.lua
│ ├── cat_spec.lua
│ ├── house_spec.lua
│ ├── ui_spec.lua
│ └── audio_spec.lua
├── integration/ # Integration tests
│ └── game_flow_spec.lua
└── e2e/ # End-to-end tests
└── edge_cases_spec.lua
```
## Test Coverage
### 1. JSON Module (spec/json_spec.lua)
**Encoding Tests:**
- ✅ nil → null
- ✅ Numbers (positive, negative, zero)
- ✅ Strings (with escape sequences)
- ✅ Booleans (true, false)
- ✅ Arrays (simple)
- ✅ Objects (simple and nested)
- ✅ Special float values (NaN, Infinity, -Infinity)
- ✅ Empty tables
**Decoding Tests:**
- ✅ null
- ✅ Numbers
- ✅ Strings
- ✅ Booleans
- ✅ Arrays
- ✅ Objects
- ✅ Nested structures
- ✅ Whitespace handling
- ✅ Empty objects/arrays
**Edge Cases:**
- ✅ Empty string input
- ✅ Invalid JSON
- ✅ Malformed strings
- ✅ Missing colons/commas
- ✅ Nil/number/boolean input
**Round-trip Tests:**
- ✅ Simple values
- ✅ Complex nested structures
- ✅ Empty arrays/objects
### 2. Voxel Module (spec/voxel_spec.lua)
**Texture Generation:**
- ✅ Default color textures
- ✅ Noise generation
- ✅ Border addition
**Mesh Generation:**
- ✅ Cube mesh creation
- ✅ Vertex format setup
**Rendering:**
- ✅ World rendering
- ✅ Furniture rendering
- ✅ Cat rendering
**Raycast:**
- ✅ Empty results
- ✅ Nil inputs
- ✅ Zero/negative distance
- ✅ Invalid direction
**Integration:**
- ✅ Furniture texture initialization
- ✅ Cat texture initialization
### 3. Cat Module (spec/cat_spec.lua)
**Creation:**
- ✅ Default personality
- ✅ Specified personality
- ✅ Nil personality handling
- ✅ Random position spawning
- ✅ Needs initialization
- ✅ History initialization
**Update:**
- ✅ Animation time update
- ✅ Comfort/social/hunger/fun decay
- ✅ Need clamping (0-1)
- ✅ Sleep state transition
- ✅ Wake up after timer
**AI Behavior:**
- ✅ Movement toward furniture
- ✅ No movement when satisfied
- ✅ Need-based furniture selection
**Needs Update:**
- ✅ Personality compatibility check
- ✅ Incompatible cat handling
- ✅ Nil personality handling
**Petting:**
- ✅ Mood increase
- ✅ Social need increase
- ✅ Fun need increase
- ✅ Mood cap at 1
**Serialization:**
- ✅ Cat data serialization
- ✅ Cat data deserialization
- ✅ Nil data handling
- ✅ Missing personality handling
- ✅ Missing position handling
**Animation:**
- ✅ Idle animation
- ✅ Moving animation
- ✅ Sleeping animation
- ✅ Nil cat handling
### 4. House Module (spec/house_spec.lua)
**Furniture Creation:**
- ✅ Default position
- ✅ Specified position
- ✅ Nil type handling
- ✅ Happiness contribution calculation
**Furniture Upgrade:**
- ✅ Level upgrade
- ✅ Happiness increase
- ✅ Max level cap (3)
- ✅ Return false at max level
**Serialization:**
- ✅ Furniture data serialization
- ✅ Nil type handling
**Deserialization:**
- ✅ Furniture data restoration
- ✅ Nil data handling
- ✅ Missing type handling
- ✅ Missing position handling
- ✅ Missing upgrade level handling
**Placement:**
- ✅ Can place check
- ✅ Out of bounds detection
- ✅ Collision detection
- ✅ Furniture placement
- ✅ Invalid type handling
**Collision Detection:**
- ✅ Overlapping furniture
- ✅ Separated furniture
- ✅ Empty furniture list
**Interaction:**
- ✅ Find furniture at position
- ✅ No furniture at position
- ✅ Empty furniture list
### 5. UI Module (spec/ui_spec.lua)
**HUD Rendering:**
- ✅ HUD with pass
- ✅ Nil pass handling
- ✅ Happiness meter
- ✅ Cat count
- ✅ Game time
- ✅ Controls hint
**Inventory Rendering:**
- ✅ Inventory display
- ✅ Selected furniture highlight
**Cat Log Rendering:**
- ✅ Cat log display
- ✅ Empty cat log
**Placement Preview:**
- ✅ Placement preview rendering
**Mouse Interaction:**
- ✅ Mouse press handling
- ✅ Close button
- ✅ Furniture selection
- ✅ Deselection
**HUD Update:**
- ✅ Dynamic updates
**Toggles:**
- ✅ Inventory toggle
- ✅ Cat log toggle
**Integration:**
- ✅ Game state rendering
### 6. Audio Module (spec/audio_spec.lua)
**Sound Creation:**
- ✅ Purr sound
- ✅ Meow sound
- ✅ Click sound
- ✅ Ambient sound
**Initialization:**
- ✅ All sounds initialization
- ✅ Ambient looping
- ✅ Ambient volume
- ✅ Ambient playback
**Playback:**
- ✅ Purr at position
- ✅ Meow at position
- ✅ Click sound
- ✅ Nil sounds handling
- ✅ Nil position handling
**Properties:**
- ✅ Spatial audio
- ✅ Rolloff
- ✅ Max distance
- ✅ Meow max distance
- ✅ Click max distance
**Cloning:**
- ✅ Purr cloning
- ✅ Meow cloning
**Integration:**
- ✅ Cat petting sound
### 7. Core Module (spec/core_spec.lua)
**Configuration:**
- ✅ Version
- ✅ Voxel size
- ✅ Grid size
- ✅ Cat spawn interval
- ✅ Max cats
- ✅ Room dimensions
- ✅ Happiness formulas
**Personality Definitions:**
- ✅ 5 personalities
- ✅ Lone wolf
- ✅ Social butterfly
- ✅ Playful clown
- ✅ Greedy eater
- ✅ Lazy sleeper
- ✅ Traits
- ✅ Needs
- ✅ Compatibility matrix
**Furniture Types:**
- ✅ 5 furniture types
- ✅ Cat tree
- ✅ Scratching post
- ✅ Bed
- ✅ Window seat
- ✅ Food bowl
- ✅ Bonuses
- ✅ Max occupants
**Initialization:**
- ✅ State initialization
- ✅ House grid initialization
- ✅ Initial cat spawning
- ✅ Voxel texture initialization
- ✅ Audio initialization
**Cat Management:**
- ✅ Cat spawning
- ✅ Name generation
- ✅ Cat removal
- ✅ Non-existent cat removal
- ✅ Cat log on spawn
- ✅ Cat log on departure
**Happiness Calculation:**
- ✅ With cats
- ✅ Empty cat list
- ✅ Needs update
- ✅ Nil cats handling
**Cat Departures:**
- ✅ Low comfort (<10%)
- ✅ Low hunger (<10%)
- ✅ Adequate needs keeping
**Furniture Management:**
- ✅ Furniture addition
- ✅ Invalid type handling
- ✅ State update
**Save/Load:**
- ✅ Save game
- ✅ Load game
- ✅ Missing save file
- ✅ Cat count preservation
- ✅ Furniture count preservation
- ✅ Game time preservation
**Pause Toggle:**
- ✅ Pause state toggle
**Happiness Percentage:**
- ✅ Percentage calculation
- ✅ Zero happiness
- ✅ Max happiness
## Integration Tests (integration/game_flow_spec.lua)
**Full Game Flow:**
- ✅ Game initialization
- ✅ Game state updates
- ✅ Scene rendering
- ✅ Save/load round-trip
**Module Interactions:**
- ✅ Cat-house interaction
- ✅ Furniture placement and spawning
- ✅ Collision detection
- ✅ Cat-audio interaction
- ✅ UI-cat interaction
- ✅ Voxel-cat interaction
- ✅ JSON serialization round-trips
**Save/Load:**
- ✅ Complete state preservation
## End-to-End Tests (e2e/edge_cases_spec.lua)
**Edge Cases:**
1. **Empty Cat List:**
- ✅ Happiness calculation with empty list
- ✅ Departures check with empty list
- ✅ Rendering with empty list
2. **Zero Distance:**
- ✅ AI behavior with zero distance
- ✅ Collision detection with zero distance
- ✅ Raycast with zero distance
3. **Nil Values:**
- ✅ Nil cat in update
- ✅ Nil furniture in rendering
- ✅ Nil personality in creation
- ✅ Nil furniture type
- ✅ Nil JSON input
- ✅ Nil position in audio
4. **Invalid JSON:**
- ✅ Malformed JSON
- ✅ Empty JSON object
- ✅ JSON with null values
- ✅ JSON with special floats
5. **Max Capacity:**
- ✅ No spawning at max capacity
6. **Furniture at Bounds:**
- ✅ Placement at grid edge
- ✅ Rejection outside grid
7. **Low Happiness:**
- ✅ Cat removal below 10% comfort
- ✅ Cat removal below 10% hunger
- ✅ Cat keeping at 10% threshold
8. **Furniture Upgrades:**
- ✅ Max 3 upgrades
- ✅ Happiness contribution calculation
9. **Personality Compatibility:**
- ✅ Incompatible personalities
- ✅ Compatible personalities
10. **Audio Generation:**
- ✅ Zero duration audio
- ✅ Audio cloning
11. **Serialization:**
- ✅ Cat with nil personality
- ✅ Furniture with nil type
- ✅ Empty save data
**Stress Tests:**
- ✅ 8 cats (max capacity)
- ✅ Many furniture items (25+)
- ✅ Multiple save/load cycles
- ✅ Rapid game updates (100 updates)
- ✅ Complete game session simulation
## Running Tests
```bash
# Run all tests
lua test/run_tests.lua
# Or with LuaJIT (faster)
luajit test/run_tests.lua
```
## Test Output
Tests output TAP format to stdout and generate `test-report.xml`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Cat Haven Tests" tests="100" failures="0" errors="0" time="0">
<testsuite name="JSON Module" tests="20" failures="0" errors="0" time="0">
<testcase name="should encode nil as null" classname="JSON Module" time="0"/>
<!-- ... -->
</testsuite>
<!-- ... -->
</testsuites>
```
## Summary
**Total Test Coverage:**
- **Unit Tests:** 7 modules × ~20-40 tests = ~200 tests
- **Integration Tests:** 1 file × ~10 tests = ~10 tests
- **End-to-End Tests:** 1 file × ~30-40 tests = ~30-40 tests
- **Total:** ~250 tests
**Coverage Areas:**
1. ✅ JSON encoding/decoding with all data types
2. ✅ Cat creation, AI behavior, serialization
3. ✅ Furniture placement, collision detection
4. ✅ Happiness calculation with edge cases
5. ✅ Save/load round-trip
6. ✅ UI rendering with various states
7. ✅ Audio generation
**Edge Cases Tested:**
- Empty cat list
- Zero distance
- Nil values
- Invalid JSON
- Max capacity
- Boundary conditions
- Low happiness thresholds
- Furniture upgrades
- Personality compatibility
- Audio generation
- Serialization edge cases
- Stress tests
## Files Created
1. `test/test_helper.lua` - LOVR mocks and utilities
2. `test/run_tests.lua` - Test runner script
3. `test/spec/core_spec.lua` - Core module tests
4. `test/spec/json_spec.lua` - JSON module tests
5. `test/spec/voxel_spec.lua` - Voxel module tests
6. `test/spec/cat_spec.lua` - Cat module tests
7. `test/spec/house_spec.lua` - House module tests
8. `test/spec/ui_spec.lua` - UI module tests
9. `test/spec/audio_spec.lua` - Audio module tests
10. `test/integration/game_flow_spec.lua` - Integration tests
11. `test/e2e/edge_cases_spec.lua` - End-to-end tests
**Total Files:** 11