# z3ed Test Commands The test command suite provides machine-readable test discovery and execution for CI/CD and agent automation. ## Available Test Commands | Command | Description | Requires ROM | |---------|-------------|--------------| | `test-list` | List available test suites with labels and requirements | No | | `test-run` | Run tests with structured output | No | | `test-status` | Show test configuration status | No | ## test-list Discover available test suites and their requirements. ```bash # Human-readable list z3ed test-list # Machine-readable JSON for agents z3ed test-list --format json # Filter by label z3ed test-list --label stable ``` ### Sample Output (Text) ``` === Available Test Suites === stable Core unit and integration tests (fast, reliable) Requirements: None gui GUI smoke tests (ImGui framework validation) Requirements: SDL display or headless z3ed z3ed CLI self-test and smoke tests Requirements: z3ed target built headless_gui GUI tests in headless mode (CI-safe) Requirements: None rom_dependent Tests requiring actual Zelda3 ROM Requirements: YAZE_ENABLE_ROM_TESTS=ON + ROM path ⚠ Requires ROM file experimental AI runtime features and experiments Requirements: YAZE_ENABLE_AI_RUNTIME=ON ⚠ Requires AI runtime benchmark Performance and optimization tests Requirements: None ``` ### Sample Output (JSON) ```json { "suites": [ { "label": "stable", "description": "Core unit and integration tests (fast, reliable)", "requirements": "None", "requires_rom": false, "requires_ai": false }, { "label": "rom_dependent", "description": "Tests requiring actual Zelda3 ROM", "requirements": "YAZE_ENABLE_ROM_TESTS=ON + ROM path", "requires_rom": true, "requires_ai": false } ], "total_tests_discovered": 42, "build_directory": "build" } ``` ## test-run Run tests and get structured results. ```bash # Run stable tests (default) z3ed test-run # Run specific label z3ed test-run --label gui # Run with preset z3ed test-run --label stable --preset mac-test # Verbose output z3ed test-run --label stable --verbose # JSON output for CI z3ed test-run --label stable --format json ``` ### Sample Output (JSON) ```json { "build_directory": "build", "label": "stable", "preset": "default", "tests_passed": 42, "tests_failed": 0, "tests_total": 42, "success": true } ``` ### Exit Codes - `0` - All tests passed - `1` - One or more tests failed or error occurred ## test-status Show current test configuration. ```bash # Human-readable status z3ed test-status # JSON for agents z3ed test-status --format json ``` ### Sample Output (Text) ``` ╔═══════════════════════════════════════════════════════════════╗ ║ TEST CONFIGURATION ║ ╠═══════════════════════════════════════════════════════════════╣ ║ ROM Path: (not set) ║ ║ Skip ROM Tests: NO ║ ║ UI Tests Enabled: NO ║ ║ Active Preset: mac-test (fast) ║ ╠═══════════════════════════════════════════════════════════════╣ ║ Available Build Directories: ║ ║ ✓ build ║ ╠═══════════════════════════════════════════════════════════════╣ ║ Available Test Suites: ║ ║ ✓ stable ║ ║ ✓ gui ║ ║ ✓ z3ed ║ ║ ✗ rom_dependent (needs ROM) ║ ║ ✓ experimental (needs AI) ║ ╚═══════════════════════════════════════════════════════════════╝ ``` ### Sample Output (JSON) ```json { "rom_vanilla": "not set", "rom_expanded": "not set", "rom_path": "not set", "skip_rom_tests": false, "ui_tests_enabled": false, "build_directories": ["build"], "active_preset": "mac-test (fast)", "available_suites": ["stable", "gui", "z3ed", "headless_gui", "experimental", "benchmark"] } ``` ## Environment Variables The test commands respect these environment variables: | Variable | Description | |----------|-------------| | `YAZE_TEST_ROM_VANILLA` | Path to vanilla Zelda3 ROM for ROM-dependent tests | | `YAZE_TEST_ROM_EXPANDED` | Path to expanded Zelda3 ROM (ZSCustom/OOS) | | `YAZE_TEST_ROM_PATH` | Legacy ROM path (vanilla fallback) | | `YAZE_SKIP_ROM_TESTS` | Set to `1` to skip ROM tests | | `YAZE_ENABLE_UI_TESTS` | Set to `1` to enable UI tests | ## Quick Start ### For Developers ```bash # Configure fast test build cmake --preset mac-test # Build test targets cmake --build --preset mac-test # Run stable tests z3ed test-run --label stable ``` ### For CI/Agents ```bash # Check what's available z3ed test-list --format json # Run stable suite and capture results z3ed test-run --label stable --format json > test-results.json # Check exit code if [ $? -eq 0 ]; then echo "All tests passed"; fi ``` ### With ROM Tests ```bash # Set ROM path export YAZE_TEST_ROM_VANILLA=/path/to/alttp_vanilla.sfc # Configure with ROM tests enabled cmake --preset mac-dev -DYAZE_ENABLE_ROM_TESTS=ON # Run ROM-dependent tests z3ed test-run --label rom_dependent ``` ## Integration with ctest The test commands wrap `ctest` internally. You can also use ctest directly: ```bash # Equivalent to z3ed test-run --label stable ctest --test-dir build -L stable # Run all tests ctest --test-dir build --output-on-failure # Run specific pattern ctest --test-dir build -R "RomTest" ``` ## Test Labels Reference | Label | Description | CI Stage | |-------|-------------|----------| | `stable` | Core unit + integration tests | PR/Push | | `gui` | GUI smoke tests | PR/Push | | `z3ed` | CLI self-tests | PR/Push | | `headless_gui` | CI-safe GUI tests | PR/Push | | `rom_dependent` | Tests requiring ROM | Nightly | | `experimental` | AI features | Nightly | | `benchmark` | Performance tests | Nightly |