237int main(
int argc,
char* argv[]) {
238 absl::InitializeSymbolizer(argv[0]);
241 absl::FailureSignalHandlerOptions options;
242 options.symbolize_stacktrace =
true;
243 options.use_alternate_stack =
false;
244 options.alarm_on_failure_secs =
false;
245 options.call_previous_handler =
true;
246 options.writerfn =
nullptr;
247 absl::InstallFailureSignalHandler(options);
250 if (SDL_Init(SDL_INIT_VIDEO) != 0) {
251 SDL_Log(
"Failed to initialize SDL: %s", SDL_GetError());
265 ::testing::InitGoogleTest(&argc, argv);
267 if (config.enable_ui_tests) {
271 auto test_renderer = std::make_unique<yaze::gfx::SDL2Renderer>();
277 IMGUI_CHECKVERSION();
278 ImGui::CreateContext();
279 ImGuiIO& io = ImGui::GetIO(); (void)io;
280 io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
281 io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
282 io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
285 ImGui::StyleColorsDark();
288 ImGuiStyle& style = ImGui::GetStyle();
289 if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) {
290 style.WindowRounding = 0.0f;
291 style.Colors[ImGuiCol_WindowBg].w = 1.0f;
295 SDL_Renderer* sdl_renderer =
static_cast<SDL_Renderer*
>(test_renderer->GetBackendRenderer());
296 ImGui_ImplSDL2_InitForSDLRenderer(window.
window_.get(), sdl_renderer);
297 ImGui_ImplSDLRenderer2_Init(sdl_renderer);
302 ImGuiTestEngine* engine = ImGuiTestEngine_CreateContext();
303 ImGuiTestEngineIO& test_io = ImGuiTestEngine_GetIO(engine);
304 test_io.ConfigRunSpeed = config.test_speed;
305 test_io.ConfigVerboseLevel = ImGuiTestVerboseLevel_Info;
306 test_io.ConfigVerboseLevelOnError = ImGuiTestVerboseLevel_Debug;
309 const char* speed_name =
"Fast";
310 if (config.test_speed == ImGuiTestRunSpeed_Normal) speed_name =
"Normal";
311 else if (config.test_speed == ImGuiTestRunSpeed_Cinematic) speed_name =
"Cinematic";
312 std::cout <<
"Running tests in " << speed_name <<
" mode" << std::endl;
315#ifdef YAZE_GUI_TEST_TARGET
316 ImGuiTest* smoke_test = IM_REGISTER_TEST(engine,
"E2ETest",
"FrameworkSmokeTest");
319 ImGuiTest* canvas_test = IM_REGISTER_TEST(engine,
"E2ETest",
"CanvasSelectionTest");
321 canvas_test->UserData = &controller;
323 ImGuiTest* dungeon_test = IM_REGISTER_TEST(engine,
"E2ETest",
"DungeonEditorSmokeTest");
325 dungeon_test->UserData = &controller;
332 while (SDL_PollEvent(&event)) {
333 ImGui_ImplSDL2_ProcessEvent(&event);
334 if (event.type == SDL_QUIT) {
337 if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window.
window_.get())) {
343 ImGui_ImplSDLRenderer2_NewFrame();
344 ImGui_ImplSDL2_NewFrame();
348 if (config.show_gui) {
349 ImGuiTestEngine_ShowTestEngineWindows(engine, &config.show_gui);
355 test_renderer->Clear();
356 ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData(), sdl_renderer);
357 test_renderer->Present();
360 if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) {
361 SDL_Window* backup_current_window = SDL_GL_GetCurrentWindow();
362 SDL_GLContext backup_current_context = SDL_GL_GetCurrentContext();
363 ImGui::UpdatePlatformWindows();
364 ImGui::RenderPlatformWindowsDefault();
365 SDL_GL_MakeCurrent(backup_current_window, backup_current_context);
369 ImGuiTestEngine_PostSwap(engine);
373 ImGuiTestEngineResultSummary summary;
374 ImGuiTestEngine_GetResultSummary(engine, &summary);
375 int result = (summary.CountSuccess == summary.CountTested) ? 0 : 1;
379 ImGuiTestEngine_DestroyContext(engine);
380 ImGui_ImplSDLRenderer2_Shutdown();
381 ImGui_ImplSDL2_Shutdown();
382 ImGui::DestroyContext();
390 int result = RUN_ALL_TESTS();