Loading...
Searching...
No Matches
ProjectCreatorTests.h
Go to the documentation of this file.
1#pragma once
2
3#include "../UITestHarness.h"
4#include "events/StateEvents.h"
5#include <imgui_te_context.h>
6
7namespace hellfire::tests {
9 ImGuiTestEngine *engine,
10 const char *category,
11 const char *name
12 ) {
13 ImGuiTest *t = IM_REGISTER_TEST(engine, category, name);
14 t->TeardownFunc = [](ImGuiTestContext *ctx) {
15 auto *harness = UITestHarness::instance;
16 if (harness) {
17 harness->get_editor_context()->event_bus.dispatch<editor::CloseProjectEvent>();
18 ctx->Yield(20);
19 }
20 };
21 return t;
22 }
23
24
25 inline void RegisterProjectHubTests(ImGuiTestEngine *engine) {
26 ImGuiTest *t = nullptr;
27 t = RegisterTestWithTeardown(engine, "ProjectHub", "WindowVisible");
28 t->TestFunc = [](ImGuiTestContext *ctx) {
29 ctx->Yield(5); // Let the app initialize
30 ctx->WindowInfo("Project Hub", ImGuiTestOpFlags_None);
31 };
32
33 t = RegisterTestWithTeardown(engine, "ProjectHub", "CreateButton_OpensCreator");
34 t->TestFunc = [](ImGuiTestContext *ctx) {
35 ctx->Yield(30);
36 IM_CHECK(ctx->WindowInfo("Hellfire - Project Hub").ID != 0);
37 ctx->SetRef("Hellfire - Project Hub");
38 ctx->ItemClick("HubLayout/New Project");
39 ctx->Yield(10);
40
41 IM_CHECK(ctx->WindowInfo("//Create New Project").ID != 0);
42 };
43 }
44
45 inline void RegisterProjectCreatorTests(ImGuiTestEngine *engine) {
46 ImGuiTest *t = nullptr;
47
48 t = RegisterTestWithTeardown(engine, "ProjectCreator", "WindowOpens_FromProjectHub");
49 t->TestFunc = [](ImGuiTestContext *ctx) {
50 ctx->Yield(30);
51
52 ctx->SetRef("//Hellfire - Project Hub");
53 ctx->ItemClick("HubLayout/New Project");
54 ctx->Yield(10);
55
56 IM_CHECK(ctx->ItemInfo("//Create New Project").ID != 0);
57 };
58
59 t = RegisterTestWithTeardown(engine, "ProjectCreator", "CancelButton_ReturnsToHub");
60 t->TestFunc = [](ImGuiTestContext *ctx) {
61 ctx->Yield(30);
62
63 ctx->SetRef("//Hellfire - Project Hub");
64 ctx->ItemClick("HubLayout/New Project");
65 ctx->Yield(10);
66
67 ctx->SetRef("//Create New Project");
68 ctx->ItemClick("**/Cancel");
69 ctx->Yield(10);
70
71 IM_CHECK(ctx->ItemInfo("//Hellfire - Project Hub").ID != 0);
72 };
73
74 t = RegisterTestWithTeardown(engine, "ProjectCreator", "FormInputs_AcceptText");
75 t->TestFunc = [](ImGuiTestContext *ctx) {
76 ctx->Yield(30);
77
78 ctx->SetRef("//Hellfire - Project Hub");
79 ctx->ItemClick("HubLayout/New Project");
80 ctx->Yield(10);
81
82 ctx->SetRef("//Create New Project");
83
84 ctx->ItemClick("**/##name");
85 ctx->KeyCharsAppend("MyTestProject");
86 ctx->Yield(5);
87
88 ctx->ItemClick("**/##location");
89 ctx->KeyCharsAppend("C:/Projects");
90 ctx->Yield(5);
91 };
92
93 t = RegisterTestWithTeardown(engine, "ProjectCreator", "CreateButton_DisabledWhenEmpty");
94 t->TestFunc = [](ImGuiTestContext *ctx) {
95 ctx->Yield(30);
96
97 ctx->SetRef("//Hellfire - Project Hub");
98 ctx->ItemClick("HubLayout/New Project");
99 ctx->Yield(10);
100
101 ctx->SetRef("//Create New Project");
102 };
103
104 t = RegisterTestWithTeardown(engine, "ProjectCreator", "CreateProject_EndToEnd");
105 t->TestFunc = [](ImGuiTestContext *ctx) {
106 ctx->Yield(30);
107
108 ctx->SetRef("//Hellfire - Project Hub");
109 ctx->ItemClick("HubLayout/New Project");
110 ctx->Yield(10);
111
112 ctx->SetRef("//Create New Project");
113
114 ctx->ItemClick("**/##name");
115 ctx->KeyCharsAppend("E2ETestProject");
116
117 ctx->ItemClick("**/##location");
118 ctx->KeyCharsAppend("C:/TestProjects");
119 ctx->Yield(5);
120
121 ctx->ItemClick("**/Create");
122 ctx->Yield(60); // Wait for project loading
123
124 // Should transition to editor
125 // IM_CHECK(ctx->ItemInfo("//Editor")->ID != 0);
126 };
127
128 // ============================================
129 // Form Reset Test
130 // ============================================
131
132 t = RegisterTestWithTeardown(engine, "ProjectCreator", "FormResets_WhenReopened");
133 t->TestFunc = [](ImGuiTestContext *ctx) {
134 ctx->Yield(30);
135
136 // Open creator and fill form
137 ctx->SetRef("//Hellfire - Project Hub");
138 ctx->ItemClick("HubLayout/New Project");
139 ctx->Yield(10);
140
141 ctx->SetRef("//Create New Project");
142 ctx->ItemClick("**/##name");
143 ctx->KeyCharsAppend("SomeProject");
144 ctx->Yield(5);
145
146 // Cancel
147 ctx->ItemClick("**/Cancel");
148 ctx->Yield(10);
149
150 // Reopen
151 ctx->SetRef("//Hellfire - Project Hub");
152 ctx->ItemClick("HubLayout/New Project");
153 ctx->Yield(10);
154
155 // Form should be reset - Create button should be disabled again
156 ctx->SetRef("//Create New Project");
157 ImGuiTestItemInfo create_btn = ctx->ItemInfo("**/Create");
158 IM_CHECK((create_btn.ItemFlags & ImGuiItemFlags_Disabled) != 0);
159 };
160
161 // ============================================
162 // Folder Browser Button Test
163 // ============================================
164
165 t = RegisterTestWithTeardown(engine, "ProjectCreator", "FolderButton_Exists");
166 t->TestFunc = [](ImGuiTestContext *ctx) {
167 ctx->Yield(30);
168
169 ctx->SetRef("//Hellfire - Project Hub");
170 ctx->ItemClick("HubLayout/New Project");
171 ctx->Yield(10);
172
173 ctx->SetRef("//Create New Project");
174
175 // If you add ##FolderBrowse ID to your button:
176 // ImGuiTestItemInfo* folder_btn = ctx->ItemInfo("##FolderBrowse");
177 // IM_CHECK(folder_btn != nullptr);
178 // IM_CHECK(folder_btn->ID != 0);
179 };
180 }
181} // namespace hellfire::tests
void on_initialize(Application &app) override
static UITestHarness * instance
void RegisterProjectCreatorTests(ImGuiTestEngine *engine)
ImGuiTest * RegisterTestWithTeardown(ImGuiTestEngine *engine, const char *category, const char *name)
void RegisterProjectHubTests(ImGuiTestEngine *engine)
void RegisterEditorStateTests(ImGuiTestEngine *engine)