5.5 KiB
Comprehensive Plan: E2E Testing & z3ed CLI Improvements
This document outlines the design for ROM-dependent End-to-End (E2E) tests for yaze editors and improvements to the z3ed CLI tool.
1. E2E Testing Design
The goal is to ensure stability and correctness of major editors by simulating user actions and verifying the state of the ROM and application.
1.1. Test Infrastructure
We will extend the existing RomDependentTestSuite in src/app/test/rom_dependent_test_suite.h or create a new EditorE2ETestSuite.
Key Components:
- Test Fixture: A setup that loads a clean ROM (or a specific test ROM) before each test.
- Action Simulator: Helper functions to simulate editor actions (e.g.,
SelectTile,PlaceObject,Save). - State Verifier: Helper functions to verify the ROM state matches expectations after actions.
1.2. Overworld Editor Tests
Scope:
- Draw Tile 16: Select a tile from the blockset and place it on the map. Verify the map data reflects the change.
- Edit Tile 16: Modify a Tile16 definition (e.g., change sub-tiles, flip, priority). Verify the Tile16 data is updated.
- Multi-select & Draw: Select a range of tiles and draw them. Verify all tiles are placed correctly.
- Manipulate Entities: Add, move, and delete sprites/exits/items. Verify their coordinates and properties.
- Change Properties: Modify map properties (e.g., palette, music, message ID).
- Expanded Features: Test features specific to ZSCustomOverworld (if applicable).
Implementation Strategy:
- Use
OverworldEditorclass directly or via a wrapper to invoke methods likeSetTile,UpdateEntity. - Verify by inspecting
OverworldMapdata andGameData.
1.3. Dungeon Editor Tests
Scope:
- Object Manipulation: Add, delete, move, and resize objects.
- Door Manipulation: Change door types, toggle open/closed states.
- Items & Sprites: Add/remove items (chests, pots) and sprites. Verify properties.
- Room Properties: Change header settings (music, palette, floor).
Implementation Strategy:
- Use
DungeonEditorandRoomclasses. - Simulate mouse/keyboard inputs if possible, or call logical methods directly.
- Verify by reloading the room and checking object lists.
1.4. Graphics & Palette Editor Tests
Scope:
- Graphics: Edit pixel data in a sprite sheet. Save and reload. Verify pixels are preserved and no corruption occurs.
- Palette: Change color values. Save and reload. Verify colors are preserved.
Implementation Strategy:
- Modify
Bitmapdata directly or via editor methods. - Trigger
SaveGraphics/SavePalettes. - Reload and compare byte-for-byte.
1.5. Message Editor Tests
Scope:
- Text Editing: Modify dialogue text.
- Command Insertion: Insert control codes (e.g., wait, speed change).
- Save/Reload: Verify text and commands are preserved.
Implementation Strategy:
- Use
MessageEditorbackend. - Verify encoded text data in ROM.
2. z3ed CLI Improvements
The z3ed CLI is a vital tool for ROM hacking workflows. We will improve its "doctor" and "comparison" capabilities and general UX.
2.1. Doctor Command Improvements (z3ed doctor)
Goal: Provide deeper insights into ROM health and potential issues.
New Features:
- Deep Scan: Analyze all rooms, not just a sample (already exists via
--all, but make it default or more prominent). - Corruption Heuristics: Check for common corruption patterns (e.g., invalid pointers, overlapping data).
- Expanded Feature Validation: Verify integrity of expanded tables (Tile16, Tile32, Monologue).
- Fix Suggestions: Where possible, offer specific commands or actions to fix issues (e.g., "Run
z3ed fix-checksum"). - JSON Output: Ensure comprehensive JSON output for CI/CD integration.
2.2. Comparison Command Improvements (z3ed compare)
Goal: Make it easier to track changes and spot unintended regressions.
New Features:
- Smart Diff: Ignore insignificant changes (e.g., checksum, timestamp) if requested.
- Visual Diff (Text): Improved hex dump visualization of differences (side-by-side).
- Region Filtering: Allow comparing only specific regions (e.g., "Overworld", "Dungeon", "Code").
- Summary Mode: Show high-level summary of changed areas (e.g., "3 Rooms modified, 1 Overworld map modified").
2.3. UX Improvements
- Progress Bars: Add progress indicators for long-running operations (like full ROM scan).
- Interactive Mode: For
doctor, allow interactive fixing of simple issues. - Better Help: Improve help messages and examples.
- Colorized Output: Enhance readability with color-coded status (Green=OK, Yellow=Warning, Red=Error).
3. Implementation Roadmap
-
Phase 1: Foundation & CLI
- Refactor
z3edcommands for better extensibility. - Implement improved
doctorandcomparelogic. - Add UX enhancements (colors, progress).
- Refactor
-
Phase 2: Editor Test Framework
- Create
EditorTestBaseclass. - Implement helpers for ROM loading/resetting.
- Create
-
Phase 3: Specific Editor Tests
- Implement Overworld tests.
- Implement Dungeon tests.
- Implement Graphics/Palette/Message tests.
-
Phase 4: Documentation & Integration
- Update docs with usage guides.
- Integrate into CI pipeline.
4. Verification Plan
- Unit Tests: Verify individual command logic.
- Integration Tests: Run
z3edagainst known good and bad ROMs. - Manual Verification: Use the improved CLI tools on real projects to verify utility.