50#define IMGUI_DEFINE_MATH_OPERATORS
52#include <gtest/gtest.h>
55#include "imgui_test_engine/imgui_te_context.h"
56#include "imgui_test_engine/imgui_te_engine.h"
57#include "imgui_test_engine/imgui_te_ui.h"
77 BoundRomTest::SetUp();
80 rom_ = std::shared_ptr<Rom>(
rom(), [](
Rom*) {});
87 engine_ = ImGuiTestEngine_CreateContext();
88 ImGuiTestEngineIO& test_io = ImGuiTestEngine_GetIO(
engine_);
89 test_io.ConfigVerboseLevel = ImGuiTestVerboseLevel_Info;
90 test_io.ConfigVerboseLevelOnError = ImGuiTestVerboseLevel_Debug;
91 test_io.ConfigRunSpeed = ImGuiTestRunSpeed_Fast;
93 ImGuiTestEngine_Start(
engine_, ImGui::GetCurrentContext());
102 ImGuiTestEngine_DestroyContext(
engine_);
107 BoundRomTest::TearDown();
139 ImGuiTest* test = IM_REGISTER_TEST(
engine_,
"DungeonObjectRendering",
"ObjectBrowser_NavigateCategories");
140 test->GuiFunc = [](ImGuiTestContext* ctx) {
143 self->dungeon_editor_->Update();
145 test->TestFunc = [](ImGuiTestContext* ctx) {
147 ctx->SetRef(
"Dungeon Editor");
150 ctx->ItemClick(
"Object Selector##tab");
154 const char* categories[] = {
161 for (
const char* category : categories) {
162 ctx->ItemClick(category);
166 ctx->ItemExists(
"AssetBrowser##child");
169 ctx->ItemClick(
"AssetBrowser##child");
170 ctx->KeyPress(ImGuiKey_DownArrow, 5);
174 test->UserData =
this;
186 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"ObjectBrowser_SelectObject");
187 test->GuiFunc = [](ImGuiTestContext* ctx) {
191 test->TestFunc = [](ImGuiTestContext* ctx) {
192 ctx->SetRef(
"Dungeon Editor");
195 ctx->ItemClick(
"Object Selector##tab");
199 ctx->ItemClick(
"Type1##tab");
203 ctx->SetRef(
"AssetBrowser");
204 ctx->ItemClick(
"Object_0x10");
208 ctx->SetRef(
"Object Details");
209 ctx->ItemExists(
"Object ID: 0x10");
212 ctx->SetRef(
"Dungeon Editor/PreviewCanvas");
213 ctx->ItemExists(
"**/canvas##child");
215 test->UserData = self;
227 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"ObjectBrowser_SearchFilter");
228 test->GuiFunc = [](ImGuiTestContext* ctx) {
232 test->TestFunc = [](ImGuiTestContext* ctx) {
233 ctx->SetRef(
"Dungeon Editor/Object Selector");
236 ctx->ItemClick(
"Search##input");
237 ctx->KeyCharsAppend(
"0x10");
241 ctx->ItemExists(
"Object_0x10");
242 ctx->ItemVerifyNotExists(
"Object_0x20");
245 ctx->ItemClick(
"Clear##button");
249 ctx->ItemExists(
"Object_0x10");
250 ctx->ItemExists(
"Object_0x20");
252 test->UserData = self;
269 ImGuiTest* test = IM_REGISTER_TEST(
engine_,
"DungeonObjectRendering",
"ObjectPlacement_MouseClick");
270 test->GuiFunc = [](ImGuiTestContext* ctx) {
272 self->dungeon_editor_->Update();
274 test->TestFunc = [](ImGuiTestContext* ctx) {
275 ctx->SetRef(
"Dungeon Editor");
278 ctx->ItemClick(
"Object Selector##tab");
280 ctx->SetRef(
"AssetBrowser");
281 ctx->ItemClick(
"Object_0x10");
285 ctx->SetRef(
"Dungeon Editor");
286 ctx->ItemClick(
"Canvas##tab");
290 ctx->SetRef(
"Dungeon Editor/Canvas");
303 ctx->SetRef(
"Dungeon Editor");
304 ctx->ItemClick(
"Room Objects##tab");
308 ctx->ItemExists(
"Object ID: 0x10");
310 test->UserData =
this;
322 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"ObjectPlacement_SnapToGrid");
323 test->GuiFunc = [](ImGuiTestContext* ctx) {
327 test->TestFunc = [](ImGuiTestContext* ctx) {
328 ctx->SetRef(
"Dungeon Editor");
331 ctx->ItemClick(
"Options##menu");
332 ctx->ItemClick(
"Snap to Grid##checkbox");
336 ctx->ItemClick(
"Object Selector##tab");
337 ctx->SetRef(
"AssetBrowser");
338 ctx->ItemClick(
"Object_0x10");
342 ctx->SetRef(
"Dungeon Editor/Canvas");
343 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
344 ctx->MouseMove(ImVec2(canvas_pos.x + 37, canvas_pos.y + 49));
349 ctx->SetRef(
"Dungeon Editor/Object Details");
350 ctx->ItemVerifyValue(
"X Position", 32);
351 ctx->ItemVerifyValue(
"Y Position", 48);
353 test->UserData = self;
365 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"ObjectPlacement_MultipleObjects");
366 test->GuiFunc = [](ImGuiTestContext* ctx) {
370 test->TestFunc = [](ImGuiTestContext* ctx) {
371 ctx->SetRef(
"Dungeon Editor");
374 const uint16_t object_ids[] = {0x10, 0x11, 0x20, 0x100, 0xF99};
376 for (
int i = 0; i < 5; i++) {
378 ctx->ItemClick(
"Object Selector##tab");
379 ctx->SetRef(
"AssetBrowser");
380 ctx->ItemClick(ImGuiTestRef_Str(
"Object_0x%02X", object_ids[i]));
384 ctx->SetRef(
"Dungeon Editor/Canvas");
385 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
386 ctx->MouseMove(ImVec2(canvas_pos.x + (i * 32), canvas_pos.y + (i * 32)));
392 ctx->SetRef(
"Dungeon Editor/Room Objects");
393 ctx->ItemExists(
"Object Count: 5");
395 test->UserData = self;
411 ImGuiTest* test = IM_REGISTER_TEST(
engine_,
"DungeonObjectRendering",
"ObjectSelection_Click");
412 test->GuiFunc = [](ImGuiTestContext* ctx) {
414 self->dungeon_editor_->Update();
416 test->TestFunc = [](ImGuiTestContext* ctx) {
418 ctx->SetRef(
"Dungeon Editor");
419 ctx->ItemClick(
"Object Selector##tab");
420 ctx->SetRef(
"AssetBrowser");
421 ctx->ItemClick(
"Object_0x10");
424 ctx->SetRef(
"Dungeon Editor/Canvas");
425 ImVec2 canvas_center = ctx->ItemRectCenter(
"canvas##child");
426 ctx->MouseMove(canvas_center);
431 ctx->MouseMove(canvas_center);
436 ctx->SetRef(
"Dungeon Editor/Object Details");
437 ctx->ItemExists(
"Selected Object");
438 ctx->ItemVerifyValue(
"Object ID", 0x10);
440 test->UserData =
this;
452 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"ObjectSelection_MultiSelect");
453 test->GuiFunc = [](ImGuiTestContext* ctx) {
457 test->TestFunc = [](ImGuiTestContext* ctx) {
459 ctx->SetRef(
"Dungeon Editor");
460 for (
int i = 0; i < 3; i++) {
461 ctx->ItemClick(
"Object Selector##tab");
462 ctx->SetRef(
"AssetBrowser");
463 ctx->ItemClick(
"Object_0x10");
466 ctx->SetRef(
"Dungeon Editor/Canvas");
467 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
468 ctx->MouseMove(ImVec2(canvas_pos.x + (i * 32) + 16, canvas_pos.y + 16));
474 ctx->KeyDown(ImGuiKey_LeftCtrl);
475 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
476 ctx->MouseMove(ImVec2(canvas_pos.x, canvas_pos.y));
478 ctx->MouseMove(ImVec2(canvas_pos.x + 100, canvas_pos.y + 50));
480 ctx->KeyUp(ImGuiKey_LeftCtrl);
484 ctx->SetRef(
"Dungeon Editor");
485 ctx->ItemVerifyValue(
"Selected Objects", 3);
487 test->UserData = self;
499 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"ObjectSelection_MoveObject");
500 test->GuiFunc = [](ImGuiTestContext* ctx) {
504 test->TestFunc = [](ImGuiTestContext* ctx) {
506 ctx->SetRef(
"Dungeon Editor");
507 ctx->ItemClick(
"Object Selector##tab");
508 ctx->SetRef(
"AssetBrowser");
509 ctx->ItemClick(
"Object_0x10");
512 ctx->SetRef(
"Dungeon Editor/Canvas");
513 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
514 ImVec2 initial_pos = ImVec2(canvas_pos.x + 16, canvas_pos.y + 16);
515 ctx->MouseMove(initial_pos);
520 ctx->MouseMove(initial_pos);
523 ctx->MouseMove(ImVec2(canvas_pos.x + 48, canvas_pos.y + 48));
528 ctx->SetRef(
"Dungeon Editor/Object Details");
529 ctx->ItemVerifyValue(
"X Position", 48);
530 ctx->ItemVerifyValue(
"Y Position", 48);
532 test->UserData = self;
544 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"ObjectSelection_DeleteObject");
545 test->GuiFunc = [](ImGuiTestContext* ctx) {
549 test->TestFunc = [](ImGuiTestContext* ctx) {
551 ctx->SetRef(
"Dungeon Editor");
552 ctx->ItemClick(
"Object Selector##tab");
553 ctx->SetRef(
"AssetBrowser");
554 ctx->ItemClick(
"Object_0x10");
557 ctx->SetRef(
"Dungeon Editor/Canvas");
558 ImVec2 canvas_center = ctx->ItemRectCenter(
"canvas##child");
559 ctx->MouseMove(canvas_center);
568 ctx->KeyPress(ImGuiKey_Delete);
572 ctx->SetRef(
"Dungeon Editor/Room Objects");
573 ctx->ItemVerifyValue(
"Object Count", 0);
575 test->UserData = self;
591 ImGuiTest* test = IM_REGISTER_TEST(
engine_,
"DungeonObjectRendering",
"LayerManagement_ToggleVisibility");
592 test->GuiFunc = [](ImGuiTestContext* ctx) {
594 self->dungeon_editor_->Update();
596 test->TestFunc = [](ImGuiTestContext* ctx) {
597 ctx->SetRef(
"Dungeon Editor");
600 ctx->ItemClick(
"Layers##tab");
604 ctx->ItemClick(
"Layer 1 Visible##checkbox");
608 ctx->ItemVerifyValue(
"Layer 1 Visible##checkbox",
false);
611 ctx->ItemClick(
"Layer 1 Visible##checkbox");
614 ctx->ItemVerifyValue(
"Layer 1 Visible##checkbox",
true);
616 test->UserData =
this;
628 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"LayerManagement_PlaceOnLayers");
629 test->GuiFunc = [](ImGuiTestContext* ctx) {
633 test->TestFunc = [](ImGuiTestContext* ctx) {
634 ctx->SetRef(
"Dungeon Editor");
637 ctx->ItemClick(
"Layers##tab");
638 ctx->ItemClick(
"Layer 0##radio");
641 ctx->ItemClick(
"Object Selector##tab");
642 ctx->SetRef(
"AssetBrowser");
643 ctx->ItemClick(
"Object_0x10");
646 ctx->SetRef(
"Dungeon Editor/Canvas");
647 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
648 ctx->MouseMove(ImVec2(canvas_pos.x + 16, canvas_pos.y + 16));
653 ctx->SetRef(
"Dungeon Editor/Object Details");
654 ctx->ItemVerifyValue(
"Layer", 0);
657 ctx->SetRef(
"Dungeon Editor");
658 ctx->ItemClick(
"Layers##tab");
659 ctx->ItemClick(
"Layer 1##radio");
662 ctx->ItemClick(
"Object Selector##tab");
663 ctx->SetRef(
"AssetBrowser");
664 ctx->ItemClick(
"Object_0x20");
667 ctx->SetRef(
"Dungeon Editor/Canvas");
668 ctx->MouseMove(ImVec2(canvas_pos.x + 48, canvas_pos.y + 48));
673 ctx->SetRef(
"Dungeon Editor/Object Details");
674 ctx->ItemVerifyValue(
"Layer", 1);
676 test->UserData = self;
688 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"LayerManagement_RenderingOrder");
689 test->GuiFunc = [](ImGuiTestContext* ctx) {
693 test->TestFunc = [](ImGuiTestContext* ctx) {
695 ctx->SetRef(
"Dungeon Editor");
697 for (
int layer = 0; layer < 3; layer++) {
698 ctx->ItemClick(
"Layers##tab");
699 ctx->ItemClick(ImGuiTestRef_Str(
"Layer %d##radio", layer));
702 ctx->ItemClick(
"Object Selector##tab");
703 ctx->SetRef(
"AssetBrowser");
704 ctx->ItemClick(ImGuiTestRef_Str(
"Object_0x%02X", 0x10 + layer));
707 ctx->SetRef(
"Dungeon Editor/Canvas");
708 ImVec2 canvas_center = ctx->ItemRectCenter(
"canvas##child");
709 ctx->MouseMove(canvas_center);
715 ctx->SetRef(
"Dungeon Editor/Room Objects");
716 ctx->ItemVerifyValue(
"Object Count", 3);
720 ctx->ItemExists(
"Layer 0: 1 object");
721 ctx->ItemExists(
"Layer 1: 1 object");
722 ctx->ItemExists(
"Layer 2: 1 object");
724 test->UserData = self;
740 ImGuiTest* test = IM_REGISTER_TEST(
engine_,
"DungeonObjectRendering",
"SaveWorkflow_SaveRoom");
741 test->GuiFunc = [](ImGuiTestContext* ctx) {
743 self->dungeon_editor_->Update();
745 test->TestFunc = [](ImGuiTestContext* ctx) {
747 ctx->SetRef(
"Dungeon Editor");
748 ctx->ItemClick(
"Object Selector##tab");
749 ctx->SetRef(
"AssetBrowser");
750 ctx->ItemClick(
"Object_0x10");
753 ctx->SetRef(
"Dungeon Editor/Canvas");
754 ImVec2 canvas_center = ctx->ItemRectCenter(
"canvas##child");
755 ctx->MouseMove(canvas_center);
760 ctx->SetRef(
"Dungeon Editor");
761 ctx->ItemClick(
"File##menu");
762 ctx->ItemClick(
"Save Room##menuitem");
766 ctx->ItemExists(
"Save successful");
768 test->UserData =
this;
780 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"SaveWorkflow_RoundTrip");
781 test->GuiFunc = [](ImGuiTestContext* ctx) {
785 test->TestFunc = [](ImGuiTestContext* ctx) {
787 ctx->SetRef(
"Dungeon Editor");
788 ctx->ItemClick(
"Object Selector##tab");
789 ctx->SetRef(
"AssetBrowser");
790 ctx->ItemClick(
"Object_0x10");
793 ctx->SetRef(
"Dungeon Editor/Canvas");
794 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
795 ctx->MouseMove(ImVec2(canvas_pos.x + 64, canvas_pos.y + 96));
800 ctx->SetRef(
"Dungeon Editor/Object Details");
801 int initial_x = ctx->ItemGetValue<
int>(
"X Position");
802 int initial_y = ctx->ItemGetValue<
int>(
"Y Position");
803 int initial_id = ctx->ItemGetValue<
int>(
"Object ID");
806 ctx->SetRef(
"Dungeon Editor");
807 ctx->ItemClick(
"File##menu");
808 ctx->ItemClick(
"Save Room##menuitem");
812 ctx->ItemClick(
"File##menu");
813 ctx->ItemClick(
"Reload Room##menuitem");
817 ctx->SetRef(
"Dungeon Editor/Object Details");
818 ctx->ItemVerifyValue(
"X Position", initial_x);
819 ctx->ItemVerifyValue(
"Y Position", initial_y);
820 ctx->ItemVerifyValue(
"Object ID", initial_id);
822 test->UserData = self;
834 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"SaveWorkflow_MultipleTypes");
835 test->GuiFunc = [](ImGuiTestContext* ctx) {
839 test->TestFunc = [](ImGuiTestContext* ctx) {
841 const uint16_t object_ids[] = {
847 ctx->SetRef(
"Dungeon Editor");
849 for (
int i = 0; i < 3; i++) {
850 ctx->ItemClick(
"Object Selector##tab");
851 ctx->SetRef(
"AssetBrowser");
852 ctx->ItemClick(ImGuiTestRef_Str(
"Object_0x%02X", object_ids[i]));
855 ctx->SetRef(
"Dungeon Editor/Canvas");
856 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
857 ctx->MouseMove(ImVec2(canvas_pos.x + (i * 32), canvas_pos.y + (i * 32)));
863 ctx->SetRef(
"Dungeon Editor");
864 ctx->ItemClick(
"File##menu");
865 ctx->ItemClick(
"Save Room##menuitem");
868 ctx->ItemClick(
"File##menu");
869 ctx->ItemClick(
"Reload Room##menuitem");
873 ctx->SetRef(
"Dungeon Editor/Room Objects");
874 ctx->ItemVerifyValue(
"Object Count", 3);
877 for (
int i = 0; i < 3; i++) {
878 ctx->ItemExists(ImGuiTestRef_Str(
"Object ID: 0x%02X", object_ids[i]));
881 test->UserData = self;
898 ImGuiTest* test = IM_REGISTER_TEST(
engine_,
"DungeonObjectRendering",
"RenderingQuality_AllTypes");
899 test->GuiFunc = [](ImGuiTestContext* ctx) {
901 self->dungeon_editor_->Update();
903 test->TestFunc = [](ImGuiTestContext* ctx) {
907 const uint16_t object_ids[] = {
913 ctx->SetRef(
"Dungeon Editor");
915 for (
int i = 0; i < 7; i++) {
916 ctx->ItemClick(
"Object Selector##tab");
917 ctx->SetRef(
"AssetBrowser");
918 ctx->ItemClick(ImGuiTestRef_Str(
"Object_0x%02X", object_ids[i]));
921 ctx->SetRef(
"Dungeon Editor/Canvas");
922 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
923 ctx->MouseMove(ImVec2(canvas_pos.x + ((i % 4) * 48), canvas_pos.y + ((i / 4) * 48)));
929 ctx->SetRef(
"Dungeon Editor/Room Objects");
930 ctx->ItemVerifyValue(
"Object Count", 7);
931 ctx->ItemVerifyNotExists(
"Rendering Error");
933 test->UserData =
this;
945 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"RenderingQuality_Palettes");
946 test->GuiFunc = [](ImGuiTestContext* ctx) {
950 test->TestFunc = [](ImGuiTestContext* ctx) {
952 ctx->SetRef(
"Dungeon Editor");
953 ctx->ItemClick(
"Object Selector##tab");
954 ctx->SetRef(
"AssetBrowser");
955 ctx->ItemClick(
"Object_0x10");
958 ctx->SetRef(
"Dungeon Editor/Canvas");
959 ImVec2 canvas_center = ctx->ItemRectCenter(
"canvas##child");
960 ctx->MouseMove(canvas_center);
965 const int palette_ids[] = {0, 1, 2, 3, 4, 5};
967 for (
int palette : palette_ids) {
968 ctx->SetRef(
"Dungeon Editor");
969 ctx->ItemClick(
"Options##menu");
970 ctx->ItemInput(
"Palette##input", palette);
974 ctx->ItemVerifyNotExists(
"Rendering Error");
977 test->UserData = self;
989 ImGuiTest* test = IM_REGISTER_TEST(self->
engine_,
"DungeonObjectRendering",
"RenderingQuality_ComplexRoom");
990 test->GuiFunc = [](ImGuiTestContext* ctx) {
994 test->TestFunc = [](ImGuiTestContext* ctx) {
996 ctx->SetRef(
"Dungeon Editor");
999 for (
int x = 0; x < 16; x++) {
1000 for (
int side = 0; side < 2; side++) {
1001 ctx->ItemClick(
"Object Selector##tab");
1002 ctx->SetRef(
"AssetBrowser");
1003 ctx->ItemClick(
"Object_0x10");
1006 ctx->SetRef(
"Dungeon Editor/Canvas");
1007 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
1008 int y = side == 0 ? 0 : 10;
1009 ctx->MouseMove(ImVec2(canvas_pos.x + (x * 16), canvas_pos.y + (y * 16)));
1016 const uint16_t decorative_objects[] = {0x20, 0x21, 0xF99};
1017 for (
int i = 0; i < 3; i++) {
1018 ctx->ItemClick(
"Object Selector##tab");
1019 ctx->SetRef(
"AssetBrowser");
1020 ctx->ItemClick(ImGuiTestRef_Str(
"Object_0x%02X", decorative_objects[i]));
1023 ctx->SetRef(
"Dungeon Editor/Canvas");
1024 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
1025 ctx->MouseMove(ImVec2(canvas_pos.x + (i * 64) + 32, canvas_pos.y + 80));
1031 ctx->SetRef(
"Dungeon Editor/Room Objects");
1032 ctx->ItemVerifyValue(
"Object Count", 35);
1035 ctx->SetRef(
"Dungeon Editor");
1036 ctx->ItemVerifyLessThan(
"Frame Time (ms)", 16.0f);
1038 test->UserData = self;
1054 ImGuiTest* test = IM_REGISTER_TEST(
engine_,
"DungeonObjectRendering",
"Performance_LargeRoom");
1055 test->GuiFunc = [](ImGuiTestContext* ctx) {
1057 self->dungeon_editor_->Update();
1059 test->TestFunc = [](ImGuiTestContext* ctx) {
1060 ctx->SetRef(
"Dungeon Editor");
1063 for (
int i = 0; i < 100; i++) {
1064 ctx->ItemClick(
"Object Selector##tab");
1065 ctx->SetRef(
"AssetBrowser");
1066 ctx->ItemClick(
"Object_0x10");
1069 ctx->SetRef(
"Dungeon Editor/Canvas");
1070 ImVec2 canvas_pos = ctx->ItemRectMin(
"canvas##child");
1071 ctx->MouseMove(ImVec2(
1072 canvas_pos.x + ((i % 16) * 16),
1073 canvas_pos.y + ((i / 16) * 16)
1080 ctx->SetRef(
"Dungeon Editor");
1081 float frame_time = ctx->ItemGetValue<
float>(
"Frame Time (ms)");
1084 IM_CHECK_LT(frame_time, 16.0f);
1087 ctx->SetRef(
"Dungeon Editor/Room Objects");
1088 ctx->ItemVerifyValue(
"Object Count", 100);
1090 test->UserData =
this;
1128 ImGuiTestEngine_QueueTests(engine_, ImGuiTestGroup_Tests,
nullptr,
nullptr);
1129 ImGuiTestEngine_Run(engine_);
1132 ImGuiTestEngineIO& test_io = ImGuiTestEngine_GetIO(engine_);
1133 EXPECT_EQ(test_io.TestsFailedCount, 0)
1134 <<
"Some E2E tests failed. Check test engine output for details.";
The Rom class is used to load, save, and modify Rom data.
Comprehensive E2E test fixture for dungeon object rendering system.
std::shared_ptr< Rom > rom_
void RegisterRenderingQualityTests()
Test: Render all object types correctly.
void RegisterObjectSelectionTests()
Test: Select object by clicking on canvas.
void RegisterLayerManagementTests()
Test: Toggle layer visibility.
std::unique_ptr< editor::DungeonEditorV2 > dungeon_editor_
ImGuiTestEngine * engine_
void RegisterObjectBrowserTests()
Test: Navigate object browser categories.
void RegisterObjectPlacementTests()
Test: Place object on canvas with mouse click.
void RegisterPerformanceTests()
Test: Large room with many objects performance.
void RegisterSaveWorkflowTests()
Test: Save room with objects.
void RegisterRenderingQualityTests_ComplexRoom(DungeonObjectRenderingE2ETests *self)
Test: Complex room scenario rendering.
void RegisterObjectSelectionTests_MultiSelect(DungeonObjectRenderingE2ETests *self)
Test: Multi-select objects with Ctrl+drag.
void RegisterLayerManagementTests_RenderingOrder(DungeonObjectRenderingE2ETests *self)
Test: Layer rendering order.
void RegisterObjectPlacementTests_SnapToGrid(DungeonObjectRenderingE2ETests *self)
Test: Place object with snap to grid.
void RegisterObjectBrowserTests_SelectObject(DungeonObjectRenderingE2ETests *self)
Test: Select object from browser.
void RegisterObjectSelectionTests_MoveObject(DungeonObjectRenderingE2ETests *self)
Test: Move selected object with drag.
void RegisterSaveWorkflowTests_RoundTrip(DungeonObjectRenderingE2ETests *self)
Test: Save and reload room (round-trip)
void RegisterRenderingQualityTests_Palettes(DungeonObjectRenderingE2ETests *self)
Test: Render with different palettes.
void RegisterLayerManagementTests_PlaceOnLayers(DungeonObjectRenderingE2ETests *self)
Test: Place objects on different layers.
void RegisterObjectPlacementTests_MultipleObjects(DungeonObjectRenderingE2ETests *self)
Test: Place multiple objects sequentially.
void RegisterObjectBrowserTests_SearchFilter(DungeonObjectRenderingE2ETests *self)
Test: Search and filter objects.
void RegisterSaveWorkflowTests_MultipleTypes(DungeonObjectRenderingE2ETests *self)
Test: Save with multiple object types.
void RegisterObjectSelectionTests_DeleteObject(DungeonObjectRenderingE2ETests *self)
Test: Delete selected object.
TEST_F(DungeonObjectRenderingE2ETests, RunAllTests)
Main namespace for the application.