fix: apply clang-format to all source files
Fixes formatting violations that were causing CI failures. Applied clang-format-14 to ensure consistent code formatting across the codebase. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -57,12 +57,12 @@
|
||||
#include "imgui_test_engine/imgui_te_ui.h"
|
||||
|
||||
#include "app/controller.h"
|
||||
#include "app/platform/window.h"
|
||||
#include "app/editor/dungeon/dungeon_editor_v2.h"
|
||||
#include "app/platform/window.h"
|
||||
#include "app/rom.h"
|
||||
#include "test_utils.h"
|
||||
#include "zelda3/dungeon/room.h"
|
||||
#include "zelda3/dungeon/room_object.h"
|
||||
#include "test_utils.h"
|
||||
|
||||
namespace yaze {
|
||||
namespace test {
|
||||
@@ -78,24 +78,24 @@ class DungeonObjectRenderingE2ETests : public TestRomManager::BoundRomTest {
|
||||
|
||||
// Initialize test environment
|
||||
rom_ = std::shared_ptr<Rom>(rom(), [](Rom*) {});
|
||||
|
||||
|
||||
dungeon_editor_ = std::make_unique<editor::DungeonEditorV2>();
|
||||
dungeon_editor_->set_rom(rom_.get());
|
||||
ASSERT_TRUE(dungeon_editor_->Load().ok());
|
||||
|
||||
|
||||
// Initialize imgui test engine
|
||||
engine_ = ImGuiTestEngine_CreateContext();
|
||||
ImGuiTestEngineIO& test_io = ImGuiTestEngine_GetIO(engine_);
|
||||
test_io.ConfigVerboseLevel = ImGuiTestVerboseLevel_Info;
|
||||
test_io.ConfigVerboseLevelOnError = ImGuiTestVerboseLevel_Debug;
|
||||
test_io.ConfigRunSpeed = ImGuiTestRunSpeed_Fast;
|
||||
|
||||
|
||||
ImGuiTestEngine_Start(engine_, ImGui::GetCurrentContext());
|
||||
|
||||
|
||||
// Register all test cases
|
||||
RegisterAllTests();
|
||||
}
|
||||
|
||||
|
||||
void TearDown() override {
|
||||
if (engine_) {
|
||||
ImGuiTestEngine_Stop(engine_);
|
||||
@@ -106,9 +106,9 @@ class DungeonObjectRenderingE2ETests : public TestRomManager::BoundRomTest {
|
||||
rom_.reset();
|
||||
BoundRomTest::TearDown();
|
||||
}
|
||||
|
||||
|
||||
void RegisterAllTests();
|
||||
|
||||
|
||||
// Test registration helpers
|
||||
void RegisterObjectBrowserTests();
|
||||
void RegisterObjectPlacementTests();
|
||||
@@ -117,7 +117,7 @@ class DungeonObjectRenderingE2ETests : public TestRomManager::BoundRomTest {
|
||||
void RegisterSaveWorkflowTests();
|
||||
void RegisterRenderingQualityTests();
|
||||
void RegisterPerformanceTests();
|
||||
|
||||
|
||||
ImGuiTestEngine* engine_ = nullptr;
|
||||
std::shared_ptr<Rom> rom_;
|
||||
std::unique_ptr<editor::DungeonEditorV2> dungeon_editor_;
|
||||
@@ -136,7 +136,8 @@ class DungeonObjectRenderingE2ETests : public TestRomManager::BoundRomTest {
|
||||
* - Object list is scrollable
|
||||
*/
|
||||
void DungeonObjectRenderingE2ETests::RegisterObjectBrowserTests() {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering", "ObjectBrowser_NavigateCategories");
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering",
|
||||
"ObjectBrowser_NavigateCategories");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
// Render dungeon editor UI
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
@@ -145,26 +146,22 @@ void DungeonObjectRenderingE2ETests::RegisterObjectBrowserTests() {
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
// Open dungeon editor window
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Navigate to object selector
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Test category tabs
|
||||
const char* categories[] = {
|
||||
"Type1##tab",
|
||||
"Type2##tab",
|
||||
"Type3##tab",
|
||||
"All##tab"
|
||||
};
|
||||
|
||||
const char* categories[] = {"Type1##tab", "Type2##tab", "Type3##tab",
|
||||
"All##tab"};
|
||||
|
||||
for (const char* category : categories) {
|
||||
ctx->ItemClick(category);
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object list is visible and has content
|
||||
ctx->ItemExists("AssetBrowser##child");
|
||||
|
||||
|
||||
// Try scrolling the list
|
||||
ctx->ItemClick("AssetBrowser##child");
|
||||
ctx->KeyPress(ImGuiKey_DownArrow, 5);
|
||||
@@ -182,32 +179,34 @@ void DungeonObjectRenderingE2ETests::RegisterObjectBrowserTests() {
|
||||
* - Preview updates when object selected
|
||||
* - Object details window shows correct info
|
||||
*/
|
||||
void RegisterObjectBrowserTests_SelectObject(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "ObjectBrowser_SelectObject");
|
||||
void RegisterObjectBrowserTests_SelectObject(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"ObjectBrowser_SelectObject");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
};
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Navigate to object selector
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Select Type1 category
|
||||
ctx->ItemClick("Type1##tab");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Click on first object in list (wall object 0x10)
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object details window appears
|
||||
ctx->SetRef("Object Details");
|
||||
ctx->ItemExists("Object ID: 0x10");
|
||||
|
||||
|
||||
// Verify preview canvas shows object
|
||||
ctx->SetRef("Dungeon Editor/PreviewCanvas");
|
||||
ctx->ItemExists("**/canvas##child");
|
||||
@@ -223,28 +222,30 @@ void RegisterObjectBrowserTests_SelectObject(DungeonObjectRenderingE2ETests* sel
|
||||
* - Filtering by ID works
|
||||
* - Clearing search restores full list
|
||||
*/
|
||||
void RegisterObjectBrowserTests_SearchFilter(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "ObjectBrowser_SearchFilter");
|
||||
void RegisterObjectBrowserTests_SearchFilter(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"ObjectBrowser_SearchFilter");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
};
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
ctx->SetRef("Dungeon Editor/Object Selector");
|
||||
|
||||
|
||||
// Type in search box
|
||||
ctx->ItemClick("Search##input");
|
||||
ctx->KeyCharsAppend("0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify filtered results
|
||||
ctx->ItemExists("Object_0x10");
|
||||
ctx->ItemVerifyNotExists("Object_0x20");
|
||||
|
||||
|
||||
// Clear search
|
||||
ctx->ItemClick("Clear##button");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify full list restored
|
||||
ctx->ItemExists("Object_0x10");
|
||||
ctx->ItemExists("Object_0x20");
|
||||
@@ -266,44 +267,45 @@ void RegisterObjectBrowserTests_SearchFilter(DungeonObjectRenderingE2ETests* sel
|
||||
* - Canvas renders placed object
|
||||
*/
|
||||
void DungeonObjectRenderingE2ETests::RegisterObjectPlacementTests() {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering", "ObjectPlacement_MouseClick");
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering",
|
||||
"ObjectPlacement_MouseClick");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
};
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Select an object (wall 0x10)
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->Yield();
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Switch to main canvas
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemClick("Canvas##tab");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Click on canvas to place object
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
// TODO: fix this
|
||||
// ImVec2 canvas_center = ctx->ItemRectCenter("canvas##child");
|
||||
// ctx->MouseMove(canvas_center);
|
||||
// ctx->Yield();
|
||||
|
||||
|
||||
// Verify preview is visible
|
||||
// (Actual verification would check rendering)
|
||||
|
||||
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object was placed
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemClick("Room Objects##tab");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Check object appears in list
|
||||
ctx->ItemExists("Object ID: 0x10");
|
||||
};
|
||||
@@ -318,33 +320,35 @@ void DungeonObjectRenderingE2ETests::RegisterObjectPlacementTests() {
|
||||
* - Object positions align to grid
|
||||
* - Grid size can be changed
|
||||
*/
|
||||
void RegisterObjectPlacementTests_SnapToGrid(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "ObjectPlacement_SnapToGrid");
|
||||
void RegisterObjectPlacementTests_SnapToGrid(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"ObjectPlacement_SnapToGrid");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
};
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Enable snap to grid
|
||||
ctx->ItemClick("Options##menu");
|
||||
ctx->ItemClick("Snap to Grid##checkbox");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Select object
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Place object at arbitrary position
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + 37, canvas_pos.y + 49));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object was placed at snapped position (32, 48)
|
||||
ctx->SetRef("Dungeon Editor/Object Details");
|
||||
ctx->ItemVerifyValue("X Position", 32);
|
||||
@@ -361,25 +365,27 @@ void RegisterObjectPlacementTests_SnapToGrid(DungeonObjectRenderingE2ETests* sel
|
||||
* - Each placement is independent
|
||||
* - All placed objects render correctly
|
||||
*/
|
||||
void RegisterObjectPlacementTests_MultipleObjects(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "ObjectPlacement_MultipleObjects");
|
||||
void RegisterObjectPlacementTests_MultipleObjects(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"ObjectPlacement_MultipleObjects");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
};
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Place 5 different objects
|
||||
const uint16_t object_ids[] = {0x10, 0x11, 0x20, 0x100, 0xF99};
|
||||
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
// Select object
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick(ImGuiTestRef_Str("Object_0x%02X", object_ids[i]));
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Place at different position
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
@@ -387,7 +393,7 @@ void RegisterObjectPlacementTests_MultipleObjects(DungeonObjectRenderingE2ETests
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
}
|
||||
|
||||
|
||||
// Verify all 5 objects in room
|
||||
ctx->SetRef("Dungeon Editor/Room Objects");
|
||||
ctx->ItemExists("Object Count: 5");
|
||||
@@ -408,7 +414,8 @@ void RegisterObjectPlacementTests_MultipleObjects(DungeonObjectRenderingE2ETests
|
||||
* - Object details update
|
||||
*/
|
||||
void DungeonObjectRenderingE2ETests::RegisterObjectSelectionTests() {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering", "ObjectSelection_Click");
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering",
|
||||
"ObjectSelection_Click");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -420,18 +427,18 @@ void DungeonObjectRenderingE2ETests::RegisterObjectSelectionTests() {
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_center = ctx->ItemRectCenter("canvas##child");
|
||||
ctx->MouseMove(canvas_center);
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Now try to select it
|
||||
ctx->MouseMove(canvas_center);
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object is selected
|
||||
ctx->SetRef("Dungeon Editor/Object Details");
|
||||
ctx->ItemExists("Selected Object");
|
||||
@@ -448,8 +455,10 @@ void DungeonObjectRenderingE2ETests::RegisterObjectSelectionTests() {
|
||||
* - All objects in box are selected
|
||||
* - Selection count is correct
|
||||
*/
|
||||
void RegisterObjectSelectionTests_MultiSelect(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "ObjectSelection_MultiSelect");
|
||||
void RegisterObjectSelectionTests_MultiSelect(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"ObjectSelection_MultiSelect");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -462,14 +471,14 @@ void RegisterObjectSelectionTests_MultiSelect(DungeonObjectRenderingE2ETests* se
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + (i * 32) + 16, canvas_pos.y + 16));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
}
|
||||
|
||||
|
||||
// Ctrl+drag to select all
|
||||
ctx->KeyDown(ImGuiKey_LeftCtrl);
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
@@ -479,7 +488,7 @@ void RegisterObjectSelectionTests_MultiSelect(DungeonObjectRenderingE2ETests* se
|
||||
ctx->MouseUp();
|
||||
ctx->KeyUp(ImGuiKey_LeftCtrl);
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify 3 objects selected
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemVerifyValue("Selected Objects", 3);
|
||||
@@ -495,8 +504,10 @@ void RegisterObjectSelectionTests_MultiSelect(DungeonObjectRenderingE2ETests* se
|
||||
* - Object position updates during drag
|
||||
* - Final position is correct
|
||||
*/
|
||||
void RegisterObjectSelectionTests_MoveObject(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "ObjectSelection_MoveObject");
|
||||
void RegisterObjectSelectionTests_MoveObject(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"ObjectSelection_MoveObject");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -508,14 +519,14 @@ void RegisterObjectSelectionTests_MoveObject(DungeonObjectRenderingE2ETests* sel
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ImVec2 initial_pos = ImVec2(canvas_pos.x + 16, canvas_pos.y + 16);
|
||||
ctx->MouseMove(initial_pos);
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Select and drag to (48, 48)
|
||||
ctx->MouseMove(initial_pos);
|
||||
ctx->MouseClick();
|
||||
@@ -523,7 +534,7 @@ void RegisterObjectSelectionTests_MoveObject(DungeonObjectRenderingE2ETests* sel
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + 48, canvas_pos.y + 48));
|
||||
ctx->MouseUp();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify new position
|
||||
ctx->SetRef("Dungeon Editor/Object Details");
|
||||
ctx->ItemVerifyValue("X Position", 48);
|
||||
@@ -540,8 +551,10 @@ void RegisterObjectSelectionTests_MoveObject(DungeonObjectRenderingE2ETests* sel
|
||||
* - Object no longer in room list
|
||||
* - Canvas no longer renders object
|
||||
*/
|
||||
void RegisterObjectSelectionTests_DeleteObject(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "ObjectSelection_DeleteObject");
|
||||
void RegisterObjectSelectionTests_DeleteObject(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"ObjectSelection_DeleteObject");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -553,21 +566,21 @@ void RegisterObjectSelectionTests_DeleteObject(DungeonObjectRenderingE2ETests* s
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_center = ctx->ItemRectCenter("canvas##child");
|
||||
ctx->MouseMove(canvas_center);
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Select object
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Delete with Delete key
|
||||
ctx->KeyPress(ImGuiKey_Delete);
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object removed
|
||||
ctx->SetRef("Dungeon Editor/Room Objects");
|
||||
ctx->ItemVerifyValue("Object Count", 0);
|
||||
@@ -588,29 +601,30 @@ void RegisterObjectSelectionTests_DeleteObject(DungeonObjectRenderingE2ETests* s
|
||||
* - Layer can be shown again
|
||||
*/
|
||||
void DungeonObjectRenderingE2ETests::RegisterLayerManagementTests() {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering", "LayerManagement_ToggleVisibility");
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering",
|
||||
"LayerManagement_ToggleVisibility");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
};
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Open layer management panel
|
||||
ctx->ItemClick("Layers##tab");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Toggle Layer 1 visibility
|
||||
ctx->ItemClick("Layer 1 Visible##checkbox");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify checkbox state
|
||||
ctx->ItemVerifyValue("Layer 1 Visible##checkbox", false);
|
||||
|
||||
|
||||
// Toggle back on
|
||||
ctx->ItemClick("Layer 1 Visible##checkbox");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->ItemVerifyValue("Layer 1 Visible##checkbox", true);
|
||||
};
|
||||
test->UserData = this;
|
||||
@@ -624,51 +638,53 @@ void DungeonObjectRenderingE2ETests::RegisterLayerManagementTests() {
|
||||
* - Objects placed on correct layer
|
||||
* - Layer indicator shows current layer
|
||||
*/
|
||||
void RegisterLayerManagementTests_PlaceOnLayers(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "LayerManagement_PlaceOnLayers");
|
||||
void RegisterLayerManagementTests_PlaceOnLayers(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"LayerManagement_PlaceOnLayers");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
};
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Place object on Layer 0
|
||||
ctx->ItemClick("Layers##tab");
|
||||
ctx->ItemClick("Layer 0##radio");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + 16, canvas_pos.y + 16));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object on Layer 0
|
||||
ctx->SetRef("Dungeon Editor/Object Details");
|
||||
ctx->ItemVerifyValue("Layer", 0);
|
||||
|
||||
|
||||
// Switch to Layer 1 and place another object
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemClick("Layers##tab");
|
||||
ctx->ItemClick("Layer 1##radio");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x20");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + 48, canvas_pos.y + 48));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object on Layer 1
|
||||
ctx->SetRef("Dungeon Editor/Object Details");
|
||||
ctx->ItemVerifyValue("Layer", 1);
|
||||
@@ -684,8 +700,10 @@ void RegisterLayerManagementTests_PlaceOnLayers(DungeonObjectRenderingE2ETests*
|
||||
* - Overlapping objects render correctly
|
||||
* - Visual inspection of layer order
|
||||
*/
|
||||
void RegisterLayerManagementTests_RenderingOrder(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "LayerManagement_RenderingOrder");
|
||||
void RegisterLayerManagementTests_RenderingOrder(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"LayerManagement_RenderingOrder");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -693,28 +711,28 @@ void RegisterLayerManagementTests_RenderingOrder(DungeonObjectRenderingE2ETests*
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
// Place 3 objects at same position on different layers
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
for (int layer = 0; layer < 3; layer++) {
|
||||
ctx->ItemClick("Layers##tab");
|
||||
ctx->ItemClick(ImGuiTestRef_Str("Layer %d##radio", layer));
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick(ImGuiTestRef_Str("Object_0x%02X", 0x10 + layer));
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_center = ctx->ItemRectCenter("canvas##child");
|
||||
ctx->MouseMove(canvas_center);
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
}
|
||||
|
||||
|
||||
// Verify all 3 objects exist
|
||||
ctx->SetRef("Dungeon Editor/Room Objects");
|
||||
ctx->ItemVerifyValue("Object Count", 3);
|
||||
|
||||
|
||||
// Visual verification would be done with snapshot comparison
|
||||
// Here we just verify the objects are in the right layers
|
||||
ctx->ItemExists("Layer 0: 1 object");
|
||||
@@ -737,7 +755,8 @@ void RegisterLayerManagementTests_RenderingOrder(DungeonObjectRenderingE2ETests*
|
||||
* - No errors during save
|
||||
*/
|
||||
void DungeonObjectRenderingE2ETests::RegisterSaveWorkflowTests() {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering", "SaveWorkflow_SaveRoom");
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering",
|
||||
"SaveWorkflow_SaveRoom");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -749,19 +768,19 @@ void DungeonObjectRenderingE2ETests::RegisterSaveWorkflowTests() {
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_center = ctx->ItemRectCenter("canvas##child");
|
||||
ctx->MouseMove(canvas_center);
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Save room
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemClick("File##menu");
|
||||
ctx->ItemClick("Save Room##menuitem");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify save success message
|
||||
ctx->ItemExists("Save successful");
|
||||
};
|
||||
@@ -777,7 +796,8 @@ void DungeonObjectRenderingE2ETests::RegisterSaveWorkflowTests() {
|
||||
* - No data corruption
|
||||
*/
|
||||
void RegisterSaveWorkflowTests_RoundTrip(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "SaveWorkflow_RoundTrip");
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"SaveWorkflow_RoundTrip");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -789,30 +809,30 @@ void RegisterSaveWorkflowTests_RoundTrip(DungeonObjectRenderingE2ETests* self) {
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + 64, canvas_pos.y + 96));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify initial state
|
||||
ctx->SetRef("Dungeon Editor/Object Details");
|
||||
int initial_x = ctx->ItemGetValue<int>("X Position");
|
||||
int initial_y = ctx->ItemGetValue<int>("Y Position");
|
||||
int initial_id = ctx->ItemGetValue<int>("Object ID");
|
||||
|
||||
|
||||
// Save room
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemClick("File##menu");
|
||||
ctx->ItemClick("Save Room##menuitem");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Reload room
|
||||
ctx->ItemClick("File##menu");
|
||||
ctx->ItemClick("Reload Room##menuitem");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify object persisted with same properties
|
||||
ctx->SetRef("Dungeon Editor/Object Details");
|
||||
ctx->ItemVerifyValue("X Position", initial_x);
|
||||
@@ -830,8 +850,10 @@ void RegisterSaveWorkflowTests_RoundTrip(DungeonObjectRenderingE2ETests* self) {
|
||||
* - Encoding is correct for each type
|
||||
* - All objects reload correctly
|
||||
*/
|
||||
void RegisterSaveWorkflowTests_MultipleTypes(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "SaveWorkflow_MultipleTypes");
|
||||
void RegisterSaveWorkflowTests_MultipleTypes(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"SaveWorkflow_MultipleTypes");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -839,40 +861,40 @@ void RegisterSaveWorkflowTests_MultipleTypes(DungeonObjectRenderingE2ETests* sel
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
// Place one of each object type
|
||||
const uint16_t object_ids[] = {
|
||||
0x10, // Type1
|
||||
0x125, // Type2
|
||||
0xF99 // Type3 (chest)
|
||||
0x10, // Type1
|
||||
0x125, // Type2
|
||||
0xF99 // Type3 (chest)
|
||||
};
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick(ImGuiTestRef_Str("Object_0x%02X", object_ids[i]));
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + (i * 32), canvas_pos.y + (i * 32)));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
}
|
||||
|
||||
|
||||
// Save and reload
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemClick("File##menu");
|
||||
ctx->ItemClick("Save Room##menuitem");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->ItemClick("File##menu");
|
||||
ctx->ItemClick("Reload Room##menuitem");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify all 3 objects reloaded
|
||||
ctx->SetRef("Dungeon Editor/Room Objects");
|
||||
ctx->ItemVerifyValue("Object Count", 3);
|
||||
|
||||
|
||||
// Verify each object type
|
||||
for (int i = 0; i < 3; i++) {
|
||||
ctx->ItemExists(ImGuiTestRef_Str("Object ID: 0x%02X", object_ids[i]));
|
||||
@@ -895,7 +917,8 @@ void RegisterSaveWorkflowTests_MultipleTypes(DungeonObjectRenderingE2ETests* sel
|
||||
* - All render at correct positions
|
||||
*/
|
||||
void DungeonObjectRenderingE2ETests::RegisterRenderingQualityTests() {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering", "RenderingQuality_AllTypes");
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering",
|
||||
"RenderingQuality_AllTypes");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -903,28 +926,29 @@ void DungeonObjectRenderingE2ETests::RegisterRenderingQualityTests() {
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
// This would typically involve visual snapshot comparison
|
||||
// For now, we verify objects are placed and rendered without errors
|
||||
|
||||
|
||||
const uint16_t object_ids[] = {
|
||||
0x10, 0x11, 0x20, // Type1 objects
|
||||
0x100, 0x125, // Type2 objects
|
||||
0xF99, 0xFB1 // Type3 objects
|
||||
0x10, 0x11, 0x20, // Type1 objects
|
||||
0x100, 0x125, // Type2 objects
|
||||
0xF99, 0xFB1 // Type3 objects
|
||||
};
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
for (int i = 0; i < 7; i++) {
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick(ImGuiTestRef_Str("Object_0x%02X", object_ids[i]));
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + ((i % 4) * 48), canvas_pos.y + ((i / 4) * 48)));
|
||||
ctx->MouseMove(
|
||||
ImVec2(canvas_pos.x + ((i % 4) * 48), canvas_pos.y + ((i / 4) * 48)));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
}
|
||||
|
||||
|
||||
// Verify all objects rendered without errors
|
||||
ctx->SetRef("Dungeon Editor/Room Objects");
|
||||
ctx->ItemVerifyValue("Object Count", 7);
|
||||
@@ -941,8 +965,10 @@ void DungeonObjectRenderingE2ETests::RegisterRenderingQualityTests() {
|
||||
* - Objects render with correct colors
|
||||
* - No palette-related rendering errors
|
||||
*/
|
||||
void RegisterRenderingQualityTests_Palettes(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "RenderingQuality_Palettes");
|
||||
void RegisterRenderingQualityTests_Palettes(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"RenderingQuality_Palettes");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -954,22 +980,22 @@ void RegisterRenderingQualityTests_Palettes(DungeonObjectRenderingE2ETests* self
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_center = ctx->ItemRectCenter("canvas##child");
|
||||
ctx->MouseMove(canvas_center);
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Switch palettes and verify rendering
|
||||
const int palette_ids[] = {0, 1, 2, 3, 4, 5};
|
||||
|
||||
|
||||
for (int palette : palette_ids) {
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemClick("Options##menu");
|
||||
ctx->ItemInput("Palette##input", palette);
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
// Verify no rendering errors
|
||||
ctx->ItemVerifyNotExists("Rendering Error");
|
||||
}
|
||||
@@ -985,8 +1011,10 @@ void RegisterRenderingQualityTests_Palettes(DungeonObjectRenderingE2ETests* self
|
||||
* - Performance is acceptable
|
||||
* - No rendering artifacts
|
||||
*/
|
||||
void RegisterRenderingQualityTests_ComplexRoom(DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering", "RenderingQuality_ComplexRoom");
|
||||
void RegisterRenderingQualityTests_ComplexRoom(
|
||||
DungeonObjectRenderingE2ETests* self) {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(self->engine_, "DungeonObjectRendering",
|
||||
"RenderingQuality_ComplexRoom");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
@@ -994,7 +1022,7 @@ void RegisterRenderingQualityTests_ComplexRoom(DungeonObjectRenderingE2ETests* s
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
// Place many objects to create complex room
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Place wall perimeter (Type1 objects)
|
||||
for (int x = 0; x < 16; x++) {
|
||||
for (int side = 0; side < 2; side++) {
|
||||
@@ -1002,16 +1030,17 @@ void RegisterRenderingQualityTests_ComplexRoom(DungeonObjectRenderingE2ETests* s
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
int y = side == 0 ? 0 : 10;
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + (x * 16), canvas_pos.y + (y * 16)));
|
||||
ctx->MouseMove(
|
||||
ImVec2(canvas_pos.x + (x * 16), canvas_pos.y + (y * 16)));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Add some decorative objects
|
||||
const uint16_t decorative_objects[] = {0x20, 0x21, 0xF99};
|
||||
for (int i = 0; i < 3; i++) {
|
||||
@@ -1019,18 +1048,18 @@ void RegisterRenderingQualityTests_ComplexRoom(DungeonObjectRenderingE2ETests* s
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick(ImGuiTestRef_Str("Object_0x%02X", decorative_objects[i]));
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + (i * 64) + 32, canvas_pos.y + 80));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
}
|
||||
|
||||
|
||||
// Verify all objects rendered
|
||||
ctx->SetRef("Dungeon Editor/Room Objects");
|
||||
ctx->ItemVerifyValue("Object Count", 35); // 32 walls + 3 decorative
|
||||
|
||||
|
||||
// Verify no performance issues (frame time < 16ms for 60fps)
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
ctx->ItemVerifyLessThan("Frame Time (ms)", 16.0f);
|
||||
@@ -1051,38 +1080,37 @@ void RegisterRenderingQualityTests_ComplexRoom(DungeonObjectRenderingE2ETests* s
|
||||
* - Memory usage is reasonable
|
||||
*/
|
||||
void DungeonObjectRenderingE2ETests::RegisterPerformanceTests() {
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering", "Performance_LargeRoom");
|
||||
ImGuiTest* test = IM_REGISTER_TEST(engine_, "DungeonObjectRendering",
|
||||
"Performance_LargeRoom");
|
||||
test->GuiFunc = [](ImGuiTestContext* ctx) {
|
||||
auto* self = (DungeonObjectRenderingE2ETests*)ctx->UserData;
|
||||
self->dungeon_editor_->Update();
|
||||
};
|
||||
test->TestFunc = [](ImGuiTestContext* ctx) {
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
|
||||
|
||||
// Place 100 objects
|
||||
for (int i = 0; i < 100; i++) {
|
||||
ctx->ItemClick("Object Selector##tab");
|
||||
ctx->SetRef("AssetBrowser");
|
||||
ctx->ItemClick("Object_0x10");
|
||||
ctx->Yield();
|
||||
|
||||
|
||||
ctx->SetRef("Dungeon Editor/Canvas");
|
||||
ImVec2 canvas_pos = ctx->ItemRectMin("canvas##child");
|
||||
ctx->MouseMove(ImVec2(
|
||||
canvas_pos.x + ((i % 16) * 16),
|
||||
canvas_pos.y + ((i / 16) * 16)
|
||||
));
|
||||
ctx->MouseMove(ImVec2(canvas_pos.x + ((i % 16) * 16),
|
||||
canvas_pos.y + ((i / 16) * 16)));
|
||||
ctx->MouseClick();
|
||||
ctx->Yield();
|
||||
}
|
||||
|
||||
|
||||
// Measure rendering performance
|
||||
ctx->SetRef("Dungeon Editor");
|
||||
float frame_time = ctx->ItemGetValue<float>("Frame Time (ms)");
|
||||
|
||||
|
||||
// Verify acceptable performance (< 16ms for 60fps)
|
||||
IM_CHECK_LT(frame_time, 16.0f);
|
||||
|
||||
|
||||
// Verify object count
|
||||
ctx->SetRef("Dungeon Editor/Room Objects");
|
||||
ctx->ItemVerifyValue("Object Count", 100);
|
||||
@@ -1102,7 +1130,7 @@ void DungeonObjectRenderingE2ETests::RegisterAllTests() {
|
||||
RegisterSaveWorkflowTests();
|
||||
RegisterRenderingQualityTests();
|
||||
RegisterPerformanceTests();
|
||||
|
||||
|
||||
// Register additional helper tests
|
||||
RegisterObjectBrowserTests_SelectObject(this);
|
||||
RegisterObjectBrowserTests_SearchFilter(this);
|
||||
@@ -1127,13 +1155,12 @@ TEST_F(DungeonObjectRenderingE2ETests, RunAllTests) {
|
||||
// Run all registered tests
|
||||
ImGuiTestEngine_QueueTests(engine_, ImGuiTestGroup_Tests, nullptr, nullptr);
|
||||
ImGuiTestEngine_Run(engine_);
|
||||
|
||||
|
||||
// Verify all tests passed
|
||||
ImGuiTestEngineIO& test_io = ImGuiTestEngine_GetIO(engine_);
|
||||
EXPECT_EQ(test_io.TestsFailedCount, 0)
|
||||
<< "Some E2E tests failed. Check test engine output for details.";
|
||||
EXPECT_EQ(test_io.TestsFailedCount, 0)
|
||||
<< "Some E2E tests failed. Check test engine output for details.";
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
} // namespace yaze
|
||||
|
||||
|
||||
Reference in New Issue
Block a user