This directory contains the comprehensive test suite for YAZE, organized for optimal AI agent testing and development workflow.
Directory Structure
test/
├── unit/ # Unit tests for individual components
│ ├── core/ # Core functionality tests
│ ├── rom/ # ROM handling tests
│ ├── gfx/ # Graphics system tests
│ └── zelda3/ # Zelda 3 specific tests
├── integration/ # Integration tests
│ ├── editor/ # Editor integration tests
│ ├── asar_integration_test.cc
│ ├── asar_rom_test.cc
│ └── dungeon_editor_test.cc
├── e2e/ # End-to-end tests
│ ├── rom_dependent/ # ROM-dependent E2E tests
│ └── zscustomoverworld/ # ZSCustomOverworld upgrade tests
├── deprecated/ # Outdated tests (for cleanup)
│ └── emu/ # Deprecated emulator tests
├── mocks/ # Mock objects for testing
├── assets/ # Test assets and patches
└── yaze_test.cc # Enhanced test runner
Test Categories
Unit Tests (<tt>unit/</tt>)
- Core: ASAR wrapper, hex utilities, core functionality
- ROM: ROM loading, saving, validation
- Graphics: SNES tiles, palettes, compression
- Zelda3: Message system, overworld, objects, sprites
Integration Tests (<tt>integration/</tt>)
- Editor: Tile editor, dungeon editor integration
- ASAR: ASAR integration and ROM patching
- Dungeon: Dungeon editor system integration
End-to-End Tests (<tt>e2e/</tt>)
- ROM Dependent: Complete ROM editing workflow validation
- ZSCustomOverworld: Version upgrade testing (vanilla → v2 → v3)
Enhanced Test Runner
The yaze_test executable now supports comprehensive argument handling for AI agents:
Usage Examples
# Run all tests
./yaze_test
# Run specific test categories
./yaze_test --unit --verbose
./yaze_test --integration
./yaze_test --e2e --rom-path my_rom.sfc
./yaze_test --zscustomoverworld --verbose
# Run specific test patterns
./yaze_test RomTest.*
./yaze_test *ZSCustomOverworld*
# Skip ROM-dependent tests
./yaze_test --skip-rom-tests
# Enable UI tests
./yaze_test --enable-ui-tests
Test Modes
--unit: Unit tests only
--integration: Integration tests only
--e2e: End-to-end tests only
--rom-dependent: ROM-dependent tests only
--zscustomoverworld: ZSCustomOverworld tests only
--core: Core functionality tests
--graphics: Graphics tests
--editor: Editor tests
--deprecated: Deprecated tests (for cleanup)
Options
--rom-path PATH: Specify ROM path for testing
--skip-rom-tests: Skip tests requiring ROM files
--enable-ui-tests: Enable UI tests (requires display)
--verbose: Enable verbose output
--help: Show help message
E2E ROM Testing
The E2E ROM test suite (e2e/rom_dependent/e2e_rom_test.cc) provides comprehensive validation of the complete ROM editing workflow:
- Load vanilla ROM
- Apply various edits (overworld, dungeon, graphics, etc.)
- Save changes
- Reload ROM and verify edits persist
- Verify no data corruption occurred
Test Cases
BasicROMLoadSave: Basic ROM loading and saving
OverworldEditWorkflow: Complete overworld editing workflow
DungeonEditWorkflow: Complete dungeon editing workflow
TransactionSystem: Multi-edit transaction validation
CorruptionDetection: ROM corruption detection
LargeScaleEditing: Large-scale editing without corruption
ZSCustomOverworld Upgrade Testing
The ZSCustomOverworld test suite (e2e/zscustomoverworld/zscustomoverworld_upgrade_test.cc) validates version upgrades:
Supported Upgrades
- Vanilla → v2: Basic upgrade with main palettes
- v2 → v3: Advanced upgrade with expanded features
- Vanilla → v3: Direct upgrade to latest version
Test Cases
VanillaBaseline: Validate vanilla ROM baseline
VanillaToV2Upgrade: Test vanilla to v2 upgrade
V2ToV3Upgrade: Test v2 to v3 upgrade
VanillaToV3Upgrade: Test direct vanilla to v3 upgrade
AddressValidation: Validate version-specific addresses
SaveCompatibility: Test save compatibility between versions
FeatureToggle: Test feature enablement/disablement
DataIntegrity: Test data integrity during upgrades
Version-Specific Features
Vanilla
- Basic overworld functionality
- Standard message IDs, area graphics, palettes
v2
- Main palettes support
- Expanded message ID table
v3
- Area-specific background colors
- Subscreen overlays
- Animated GFX
- Custom tile GFX groups
- Mosaic effects
Environment Variables
YAZE_TEST_ROM_PATH: Path to test ROM file
YAZE_SKIP_ROM_TESTS: Skip ROM-dependent tests
YAZE_ENABLE_UI_TESTS: Enable UI tests
YAZE_VERBOSE_TESTS: Enable verbose test output
CI/CD Integration
Tests are automatically labeled for CI/CD:
unit: Fast unit tests
integration: Medium-speed integration tests
e2e: Slow end-to-end tests
rom: ROM-dependent tests
zscustomoverworld: ZSCustomOverworld specific tests
core: Core functionality tests
graphics: Graphics tests
editor: Editor tests
deprecated: Deprecated tests
Deprecated Tests
The deprecated/ directory contains outdated tests that no longer pass after the large refactor:
- EMU tests: CPU, PPU, SPC700, APU tests that are no longer compatible
- These tests are kept for reference but should not be run in CI/CD
Best Practices
- Use appropriate test categories for new tests
- Add comprehensive E2E tests for new features
- Test upgrade paths for ZSCustomOverworld features
- Validate data integrity in all ROM operations
- Use descriptive test names for AI agent clarity
- Include verbose output for debugging
AI Agent Testing
The enhanced test runner is specifically designed for AI agent testing:
- Clear argument structure for easy automation
- Comprehensive help system for understanding capabilities
- Verbose output for debugging and validation
- Flexible test filtering for targeted testing
- Environment variable support for configuration