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

10 KiB
Raw Blame History

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

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