backend-infra-engineer: Release v0.3.2 snapshot
This commit is contained in:
176
test/e2e/README.md
Normal file
176
test/e2e/README.md
Normal file
@@ -0,0 +1,176 @@
|
||||
# End-to-End (E2E) Tests
|
||||
|
||||
This directory contains E2E tests using ImGui Test Engine to validate complete user workflows.
|
||||
|
||||
## Active Tests
|
||||
|
||||
### ✅ Working Tests
|
||||
|
||||
1. **framework_smoke_test.cc** - Basic framework validation
|
||||
2. **canvas_selection_test.cc** - Canvas selection and copy/paste workflow
|
||||
3. **dungeon_editor_smoke_test.cc** - Dungeon editor UI navigation and interaction
|
||||
4. **overworld/overworld_e2e_test.cc** - Overworld editor workflows
|
||||
5. **rom_dependent/e2e_rom_test.cc** - ROM-dependent functionality tests
|
||||
6. **zscustomoverworld/zscustomoverworld_upgrade_test.cc** - ZSCustomOverworld upgrade tests
|
||||
|
||||
### 📝 Dungeon Editor Smoke Test
|
||||
|
||||
**File**: `dungeon_editor_smoke_test.cc`
|
||||
**Status**: ✅ Working and registered
|
||||
|
||||
Tests complete dungeon editor workflow:
|
||||
- ROM loading
|
||||
- Editor window opening
|
||||
- Room selection (0x00, 0x01, 0x02)
|
||||
- Canvas interaction
|
||||
- Tab navigation (Object Selector, Room Graphics, Object Editor, Entrances)
|
||||
- Mode button verification (Select, Insert, Edit)
|
||||
- Detailed logging at each step
|
||||
|
||||
## Running Tests
|
||||
|
||||
### All E2E Tests (GUI Mode)
|
||||
```bash
|
||||
./build/bin/yaze_test --show-gui
|
||||
```
|
||||
|
||||
### Specific Test Category
|
||||
```bash
|
||||
./build/bin/yaze_test --show-gui --gtest_filter="E2ETest*"
|
||||
```
|
||||
|
||||
### Dungeon Editor Test Only
|
||||
```bash
|
||||
./build/bin/yaze_test --show-gui --gtest_filter="*DungeonEditorSmokeTest"
|
||||
```
|
||||
|
||||
## Test Development
|
||||
|
||||
### Creating New Tests
|
||||
|
||||
Follow the pattern in `dungeon_editor_smoke_test.cc`:
|
||||
|
||||
```cpp
|
||||
#include "e2e/my_new_test.h"
|
||||
#include "test_utils.h"
|
||||
#include "app/core/controller.h"
|
||||
|
||||
void E2ETest_MyNewTest(ImGuiTestContext* ctx) {
|
||||
// Load ROM
|
||||
yaze::test::gui::LoadRomInTest(ctx, "zelda3.sfc");
|
||||
|
||||
// Open editor
|
||||
yaze::test::gui::OpenEditorInTest(ctx, "My Editor");
|
||||
|
||||
// Test interactions with logging
|
||||
ctx->LogInfo("Starting test...");
|
||||
ctx->WindowFocus("My Editor");
|
||||
ctx->ItemClick("MyButton");
|
||||
ctx->LogInfo("Test completed");
|
||||
}
|
||||
```
|
||||
|
||||
### Register in yaze_test.cc
|
||||
|
||||
```cpp
|
||||
#include "e2e/my_new_test.h"
|
||||
|
||||
// In RunGuiMode():
|
||||
ImGuiTest* my_test = IM_REGISTER_TEST(engine, "E2ETest", "MyNewTest");
|
||||
my_test->TestFunc = E2ETest_MyNewTest;
|
||||
my_test->UserData = &controller;
|
||||
```
|
||||
|
||||
### ImGui Test Engine API
|
||||
|
||||
Key methods available:
|
||||
- `ctx->WindowFocus("WindowName")` - Focus a window
|
||||
- `ctx->SetRef("WindowName")` - Set reference window for relative queries
|
||||
- `ctx->ItemClick("ButtonName")` - Click an item
|
||||
- `ctx->ItemExists("ItemName")` - Check if item exists
|
||||
- `ctx->LogInfo("message", ...)` - Log information
|
||||
- `ctx->LogWarning("message", ...)` - Log warning
|
||||
- `ctx->LogError("message", ...)` - Log error
|
||||
- `ctx->Yield()` - Yield to allow UI to update
|
||||
|
||||
Full API: `src/lib/imgui_test_engine/imgui_te_engine.h`
|
||||
|
||||
## Test Logging
|
||||
|
||||
Tests log detailed information during execution. View logs:
|
||||
- In GUI mode: Check ImGui Test Engine window
|
||||
- In CI mode: Check console output
|
||||
- Look for lines starting with date/time stamps
|
||||
|
||||
Example log output:
|
||||
```
|
||||
2025-10-04 14:03:38 INFO: === Starting Dungeon Editor E2E Test ===
|
||||
2025-10-04 14:03:38 INFO: Loading ROM...
|
||||
2025-10-04 14:03:38 INFO: ROM loaded successfully
|
||||
2025-10-04 14:03:38 INFO: Opening Dungeon Editor...
|
||||
```
|
||||
|
||||
## Test Infrastructure
|
||||
|
||||
### File Organization
|
||||
```
|
||||
test/e2e/
|
||||
├── README.md (this file)
|
||||
├── framework_smoke_test.{cc,h}
|
||||
├── canvas_selection_test.{cc,h}
|
||||
├── dungeon_editor_smoke_test.{cc,h} ← Latest dungeon test
|
||||
├── overworld/
|
||||
│ └── overworld_e2e_test.cc
|
||||
├── rom_dependent/
|
||||
│ └── e2e_rom_test.cc
|
||||
└── zscustomoverworld/
|
||||
└── zscustomoverworld_upgrade_test.cc
|
||||
```
|
||||
|
||||
### Helper Functions
|
||||
|
||||
Available in `test_utils.h`:
|
||||
- `yaze::test::gui::LoadRomInTest(ctx, "zelda3.sfc")` - Load ROM for testing
|
||||
- `yaze::test::gui::OpenEditorInTest(ctx, "Editor Name")` - Open an editor window
|
||||
|
||||
## Future Test Ideas
|
||||
|
||||
Potential tests to add:
|
||||
- [ ] Object placement workflow
|
||||
- [ ] Object property editing
|
||||
- [ ] Layer visibility toggling
|
||||
- [ ] Save workflow validation
|
||||
- [ ] Sprite editor workflows
|
||||
- [ ] Palette editor workflows
|
||||
- [ ] Music editor workflows
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Test Crashes in GUI Mode
|
||||
- Ensure ROM exists at `assets/zelda3.sfc`
|
||||
- Check logs for specific error messages
|
||||
- Try running without `--show-gui` first
|
||||
|
||||
### Tests Not Found
|
||||
- Verify test is registered in `yaze_test.cc`
|
||||
- Check that files are added to CMakeLists.txt
|
||||
- Rebuild: `make -C build yaze_test`
|
||||
|
||||
### ImGui Items Not Found
|
||||
- Use `ctx->ItemExists("ItemName")` to check availability
|
||||
- Ensure window is focused with `ctx->WindowFocus()`
|
||||
- Check actual widget IDs in source code (look for `##` suffixes)
|
||||
|
||||
## References
|
||||
|
||||
- **ImGui Test Engine**: `src/lib/imgui_test_engine/`
|
||||
- **Test Registration**: `test/yaze_test.cc`
|
||||
- **Test Utilities**: `test/test_utils.h`
|
||||
- **Working Examples**: See existing tests in this directory
|
||||
|
||||
## Status
|
||||
|
||||
**Current State**: E2E testing infrastructure is working with 6+ active tests.
|
||||
**Test Coverage**: Basic workflows covered; opportunity for expansion.
|
||||
**Stability**: Tests run reliably in both GUI and CI modes.
|
||||
|
||||
Reference in New Issue
Block a user