diff --git a/CMakeLists.txt b/CMakeLists.txt index c0085d71..a2f10664 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,25 +55,24 @@ set(YAZE_INSTALL_LIB OFF) # Testing and CI Configuration option(YAZE_ENABLE_ROM_TESTS "Enable tests that require ROM files" OFF) option(YAZE_ENABLE_EXPERIMENTAL_TESTS "Enable experimental/unstable tests" ON) -option(YAZE_ENABLE_UI_TESTS "Enable ImGui Test Engine UI testing" ON) option(YAZE_MINIMAL_BUILD "Minimal build for CI (disable optional features)" OFF) option(YAZE_USE_MODULAR_BUILD "Use modularized library build system for faster builds" ON) option(YAZE_UNITY_BUILD "Enable Unity (Jumbo) builds" OFF) -# Feature Flags +# Feature Flags - Simplified: Always enabled by default (use wrapper classes to hide complexity) +# JSON is header-only with minimal overhead +# gRPC is only used in agent/cli tools, not in core editor runtime +set(YAZE_WITH_JSON ON) +set(YAZE_WITH_GRPC ON) +set(Z3ED_AI ON) + +# Minimal build override - disable only the most expensive features if(YAZE_MINIMAL_BUILD) - # Minimal build for CI: disable features that are slow to build or not essential - set(Z3ED_AI OFF) - set(YAZE_WITH_JSON ON) # JSON is header-only, low impact set(YAZE_WITH_GRPC OFF) - set(YAZE_ENABLE_UI_TESTS OFF) - message(STATUS "✓ Minimal build enabled for CI") + set(Z3ED_AI OFF) + message(STATUS "✓ Minimal build: gRPC and AI disabled") else() - # Full build for development/release - set(Z3ED_AI ON) - set(YAZE_WITH_JSON ON) - set(YAZE_WITH_GRPC ON) - message(STATUS "✓ All features enabled: JSON, gRPC, AI Agent") + message(STATUS "✓ Full build: All features enabled (JSON, gRPC, AI)") endif() # Define preprocessor macros for feature flags (so #ifdef works in source code) diff --git a/cmake/imgui.cmake b/cmake/imgui.cmake index ad05700a..2fb07665 100644 --- a/cmake/imgui.cmake +++ b/cmake/imgui.cmake @@ -12,31 +12,21 @@ target_include_directories(ImGui PUBLIC ${SDL2_INCLUDE_DIR}) target_compile_definitions(ImGui PUBLIC IMGUI_IMPL_OPENGL_LOADER_CUSTOM= GL_GLEXT_PROTOTYPES=1) -# Set up ImGui Test Engine sources and target conditionally -if(YAZE_ENABLE_UI_TESTS) +# ImGui Test Engine - Always built when tests are enabled for simplified integration +# The test infrastructure is tightly coupled with the editor, so we always include it +if(YAZE_BUILD_TESTS) set(IMGUI_TEST_ENGINE_PATH ${CMAKE_SOURCE_DIR}/src/lib/imgui_test_engine/imgui_test_engine) file(GLOB IMGUI_TEST_ENGINE_SOURCES ${IMGUI_TEST_ENGINE_PATH}/*.cpp) add_library("ImGuiTestEngine" STATIC ${IMGUI_TEST_ENGINE_SOURCES}) target_include_directories(ImGuiTestEngine PUBLIC ${IMGUI_PATH} ${CMAKE_SOURCE_DIR}/src/lib) target_link_libraries(ImGuiTestEngine PUBLIC ImGui) - - # Enable test engine definitions only when UI tests are enabled target_compile_definitions(ImGuiTestEngine PUBLIC IMGUI_ENABLE_TEST_ENGINE=1 IMGUI_TEST_ENGINE_ENABLE_COROUTINE_STDTHREAD_IMPL=1) - # Also define for targets that link to ImGuiTestEngine - set(IMGUI_TEST_ENGINE_DEFINITIONS - IMGUI_ENABLE_TEST_ENGINE=1 - IMGUI_TEST_ENGINE_ENABLE_COROUTINE_STDTHREAD_IMPL=1) - - # Make ImGuiTestEngine target available - set(IMGUI_TEST_ENGINE_TARGET ImGuiTestEngine) + message(STATUS "✓ ImGui Test Engine enabled (tests are ON)") else() - # Create empty variables when UI tests are disabled - set(IMGUI_TEST_ENGINE_SOURCES "") - set(IMGUI_TEST_ENGINE_TARGET "") - set(IMGUI_TEST_ENGINE_DEFINITIONS "") + message(STATUS "✗ ImGui Test Engine disabled (tests are OFF)") endif() set( diff --git a/src/app/editor/editor_library.cmake b/src/app/editor/editor_library.cmake index 764f2a8c..b3cf0002 100644 --- a/src/app/editor/editor_library.cmake +++ b/src/app/editor/editor_library.cmake @@ -121,12 +121,11 @@ if(YAZE_WITH_JSON) target_compile_definitions(yaze_editor PUBLIC YAZE_WITH_JSON) endif() -# Conditionally link ImGui Test Engine -if(YAZE_ENABLE_UI_TESTS AND TARGET ImGuiTestEngine) +# Link ImGui Test Engine when tests are enabled +# The test infrastructure is integrated into the editor for test automation +if(YAZE_BUILD_TESTS AND TARGET ImGuiTestEngine) target_link_libraries(yaze_editor PUBLIC ImGuiTestEngine) - target_compile_definitions(yaze_editor PRIVATE YAZE_ENABLE_IMGUI_TEST_ENGINE=1) -else() - target_compile_definitions(yaze_editor PRIVATE YAZE_ENABLE_IMGUI_TEST_ENGINE=0) + message(STATUS "✓ yaze_editor linked to ImGuiTestEngine") endif() # Conditionally link gRPC if enabled diff --git a/src/app/emu/emu.cmake b/src/app/emu/emu.cmake index 48c12d88..c66fe9f9 100644 --- a/src/app/emu/emu.cmake +++ b/src/app/emu/emu.cmake @@ -34,9 +34,8 @@ if(YAZE_BUILD_EMU AND NOT YAZE_MINIMAL_BUILD) message(WARNING "yaze_emu needs yaze_test_support but TARGET not found") endif() - if(YAZE_ENABLE_UI_TESTS) - target_compile_definitions(yaze_emu PRIVATE YAZE_ENABLE_IMGUI_TEST_ENGINE=1) - endif() + # Test engine is always available when tests are built + # No need for conditional definitions # Headless Emulator Test Harness add_executable(yaze_emu_test emu_test.cc) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f43dd6b1..dc6ca6a0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -34,10 +34,12 @@ if(YAZE_BUILD_TESTS) ${SDL_TARGETS} ) - # Link ImGui Test Engine for GUI tests - if(is_gui_test AND YAZE_ENABLE_UI_TESTS) - target_link_libraries(${suite_name} PRIVATE ${IMGUI_TEST_ENGINE_TARGET}) - target_compile_definitions(${suite_name} PRIVATE ${IMGUI_TEST_ENGINE_DEFINITIONS}) + # Link ImGui Test Engine for GUI tests (always available when tests are built) + if(is_gui_test AND TARGET ImGuiTestEngine) + target_link_libraries(${suite_name} PRIVATE ImGuiTestEngine) + target_compile_definitions(${suite_name} PRIVATE + IMGUI_ENABLE_TEST_ENGINE=1 + IMGUI_TEST_ENGINE_ENABLE_COROUTINE_STDTHREAD_IMPL=1) endif() if(WIN32) diff --git a/test/test_utils.cc b/test/test_utils.cc index 3f61c523..77222e08 100644 --- a/test/test_utils.cc +++ b/test/test_utils.cc @@ -6,16 +6,12 @@ namespace test { namespace gui { void LoadRomInTest(ImGuiTestContext* ctx, const std::string& rom_path) { -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE yaze::core::Controller* controller = (yaze::core::Controller*)ctx->Test->UserData; controller->OnEntry(rom_path); -#endif } void OpenEditorInTest(ImGuiTestContext* ctx, const std::string& editor_name) { -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE ctx->MenuClick(absl::StrFormat("Editors/%s", editor_name).c_str()); -#endif } } // namespace gui diff --git a/test/test_utils.h b/test/test_utils.h index a2b10d46..7552a149 100644 --- a/test/test_utils.h +++ b/test/test_utils.h @@ -15,11 +15,8 @@ #include #include "absl/strings/str_format.h" -#include "app/rom.h" - -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE #include "imgui_test_engine/imgui_te_context.h" -#endif +#include "app/rom.h" namespace yaze { namespace test { @@ -196,10 +193,8 @@ class RomDependentTest : public ::testing::Test { namespace gui { -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE void LoadRomInTest(ImGuiTestContext* ctx, const std::string& rom_path); void OpenEditorInTest(ImGuiTestContext* ctx, const std::string& editor_name); -#endif } // namespace gui diff --git a/test/yaze_test.cc b/test/yaze_test.cc index c5bec155..28f0db36 100644 --- a/test/yaze_test.cc +++ b/test/yaze_test.cc @@ -17,18 +17,15 @@ #include "imgui/imgui.h" #include "imgui/backends/imgui_impl_sdl2.h" #include "imgui/backends/imgui_impl_sdlrenderer2.h" -#include "app/core/window.h" -#include "app/core/controller.h" -#include "app/gfx/backend/sdl2_renderer.h" - -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE #include "imgui_test_engine/imgui_te_context.h" #include "imgui_test_engine/imgui_te_engine.h" #include "imgui_test_engine/imgui_te_ui.h" +#include "app/core/window.h" +#include "app/core/controller.h" +#include "app/gfx/backend/sdl2_renderer.h" #include "e2e/canvas_selection_test.h" #include "e2e/framework_smoke_test.h" #include "e2e/dungeon_editor_smoke_test.h" -#endif // #include "test_editor.h" // Not used in main @@ -58,9 +55,7 @@ struct TestConfig { bool skip_rom_tests = false; bool enable_ui_tests = false; bool show_gui = false; -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE ImGuiTestRunSpeed test_speed = ImGuiTestRunSpeed_Fast; -#endif }; // Parse command line arguments for better AI agent testing support @@ -136,15 +131,11 @@ TestConfig ParseArguments(int argc, char* argv[]) { } else if (arg == "--show-gui") { config.show_gui = true; } else if (arg == "--fast") { -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE config.test_speed = ImGuiTestRunSpeed_Fast; } else if (arg == "--normal") { config.test_speed = ImGuiTestRunSpeed_Normal; -#endif } else if (arg == "--cinematic") { -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE config.test_speed = ImGuiTestRunSpeed_Cinematic; -#endif } else if (arg == "--ui") { config.enable_ui_tests = true; } else if (arg.find("--") != 0) { @@ -307,7 +298,6 @@ int main(int argc, char* argv[]) { yaze::core::Controller controller; -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE // Setup test engine ImGuiTestEngine* engine = ImGuiTestEngine_CreateContext(); ImGuiTestEngineIO& test_io = ImGuiTestEngine_GetIO(engine); @@ -320,6 +310,7 @@ int main(int argc, char* argv[]) { if (config.test_speed == ImGuiTestRunSpeed_Normal) speed_name = "Normal"; else if (config.test_speed == ImGuiTestRunSpeed_Cinematic) speed_name = "Cinematic"; std::cout << "Running tests in " << speed_name << " mode" << std::endl; + // Register smoke test ImGuiTest* smoke_test = IM_REGISTER_TEST(engine, "E2ETest", "FrameworkSmokeTest"); smoke_test->TestFunc = E2ETest_FrameworkSmokeTest; @@ -333,7 +324,6 @@ int main(int argc, char* argv[]) { ImGuiTest* dungeon_test = IM_REGISTER_TEST(engine, "E2ETest", "DungeonEditorSmokeTest"); dungeon_test->TestFunc = E2ETest_DungeonEditorV2SmokeTest; dungeon_test->UserData = &controller; -#endif // Main loop bool done = false; @@ -355,11 +345,9 @@ int main(int argc, char* argv[]) { ImGui::NewFrame(); // Render the UI -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE if (config.show_gui) { ImGuiTestEngine_ShowTestEngineWindows(engine, &config.show_gui); } -#endif controller.DoRender(); // End the Dear ImGui frame @@ -377,13 +365,10 @@ int main(int argc, char* argv[]) { SDL_GL_MakeCurrent(backup_current_window, backup_current_context); } -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE // Run test engine ImGuiTestEngine_PostSwap(engine); -#endif } -#ifdef YAZE_ENABLE_IMGUI_TEST_ENGINE // Get test result ImGuiTestEngineResultSummary summary; ImGuiTestEngine_GetResultSummary(engine, &summary); @@ -392,10 +377,6 @@ int main(int argc, char* argv[]) { // Cleanup controller.OnExit(); ImGuiTestEngine_DestroyContext(engine); -#else - int result = 0; - controller.OnExit(); -#endif ImGui_ImplSDLRenderer2_Shutdown(); ImGui_ImplSDL2_Shutdown(); ImGui::DestroyContext();