From 9f6e9defb05b6d057adbb2055d836af3fd6b5b6a Mon Sep 17 00:00:00 2001 From: Green Sky Date: Mon, 7 Nov 2022 00:52:37 +0100 Subject: [PATCH] make tests auto terminate --- .github/workflows/test.yml | 2 - external/soloud/CMakeLists.txt | 2 + .../engine/src/mm/services/count_down.hpp | 43 +++++++++++++++++++ framework/imgui/test/engine_tools_test.cpp | 7 ++- framework/imgui/test/json_editor_test.cpp | 8 +++- framework/imgui/test/scene_tools_test.cpp | 6 +++ framework/imgui/test/sound_test.cpp | 6 +++ framework/imgui/test/text_edit_test.cpp | 17 +++++++- framework/imgui/test/widget_test.cpp | 6 +++ framework/input/test/CMakeLists.txt | 4 +- .../batched_spritesheet_render_task_test.cpp | 6 +++ .../test/blur_render_task_test.cpp | 6 +++ .../test/fast_sky_render_task_test.cpp | 6 +++ .../test/hdr_bloom_pipeline_example.cpp | 6 +++ .../test/imgui_render_task_test.cpp | 6 +++ .../opengl_renderer/test/lite_particles2d.cpp | 6 +++ .../test/simple_rect_render_task_test.cpp | 6 +++ .../test/simple_sprite_render_task_test.cpp | 6 +++ .../simple_spritesheet_render_task_test.cpp | 6 +++ .../test/tilemap_render_task_test.cpp | 6 +++ .../simple_sdl_renderer/test/start_test.cpp | 7 +++ mm_options_and_defines.cmake | 2 + 22 files changed, 162 insertions(+), 8 deletions(-) create mode 100644 framework/engine/src/mm/services/count_down.hpp diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 338a869..91f26e7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,9 +39,7 @@ jobs: DISPLAY: :0 run: | sudo Xorg :0 -config ${{github.workspace}}/.github/workflows/x/dummy-1920x1080.conf -noautoBindGPU & - #export DISPLAY=:4 sleep 20s - #bin/sdl_service_test ctest --output-on-failure --timeout 20 sudo pkill -15 Xorg diff --git a/external/soloud/CMakeLists.txt b/external/soloud/CMakeLists.txt index 1ba52c9..fd43264 100644 --- a/external/soloud/CMakeLists.txt +++ b/external/soloud/CMakeLists.txt @@ -29,6 +29,7 @@ set(CPP_FILES soloud/src/backend/alsa/soloud_alsa.cpp soloud/src/backend/coreaudio/soloud_coreaudio.cpp soloud/src/backend/null/soloud_null.cpp + soloud/src/backend/nosound/soloud_nosound.cpp #soloud/src/backend/openal/soloud_openal.cpp #soloud/src/backend/openal/soloud_openal_dll.c soloud/src/backend/opensles/soloud_opensles.cpp @@ -156,6 +157,7 @@ set(HPP_FILES add_library(soloud ${CPP_FILES} ${HPP_FILES}) target_compile_definitions(soloud PRIVATE WITH_NULL) +target_compile_definitions(soloud PRIVATE WITH_NOSOUND) #target_compile_definitions(soloud PRIVATE WITH_SDL2) target_compile_definitions(soloud PRIVATE WITH_SDL2_STATIC) diff --git a/framework/engine/src/mm/services/count_down.hpp b/framework/engine/src/mm/services/count_down.hpp new file mode 100644 index 0000000..fbdb681 --- /dev/null +++ b/framework/engine/src/mm/services/count_down.hpp @@ -0,0 +1,43 @@ +#pragma once + +#include + +namespace MM::Services { + +// counts X times and stops engine +// useful for automatic testing +class CountDown : public Service { + public: + CountDown(int64_t start) : _counter(start) {} + + const char* name(void) override { return "CountDown"; } + + bool enable(Engine&, std::vector& task_array) override { + // add task + task_array.push_back( + UpdateStrategies::TaskInfo{"CountDown::tick"} + .phase(UpdateStrategies::update_phase_t::POST) + .fn([this](Engine& e) { this->tick(e); }) + ); + + return true; + } + + void disable(Engine&) override {} + + private: + + void tick(Engine& engine) { + _counter--; + if (_counter == 0) { + engine.stop(); + } + } + + private: + int64_t _counter = 0; + +}; + +} // MM::Services + diff --git a/framework/imgui/test/engine_tools_test.cpp b/framework/imgui/test/engine_tools_test.cpp index 56ccd1b..fe54e86 100644 --- a/framework/imgui/test/engine_tools_test.cpp +++ b/framework/imgui/test/engine_tools_test.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -38,10 +39,14 @@ TEST(imgui_scene_tools, it) { rs.addRenderTask(engine); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + engine.run(); sdl_ss.destroyWindow(); - } int main(int argc, char** argv) { diff --git a/framework/imgui/test/json_editor_test.cpp b/framework/imgui/test/json_editor_test.cpp index 4cbe3f6..415b5e4 100644 --- a/framework/imgui/test/json_editor_test.cpp +++ b/framework/imgui/test/json_editor_test.cpp @@ -1,4 +1,3 @@ -#include "nlohmann/json_fwd.hpp" #include #include @@ -8,6 +7,7 @@ #include #include #include +#include #include @@ -183,9 +183,13 @@ TEST(imgui_json_editor, basic) { }; engine.addService(); // engine dtr ????????????????? - ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + engine.run(); sdl_ss.destroyWindow(); diff --git a/framework/imgui/test/scene_tools_test.cpp b/framework/imgui/test/scene_tools_test.cpp index 225b8df..fafed2d 100644 --- a/framework/imgui/test/scene_tools_test.cpp +++ b/framework/imgui/test/scene_tools_test.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -54,6 +55,11 @@ TEST(imgui_scene_tools, it) { ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + rs.addRenderTask(engine); engine.run(); diff --git a/framework/imgui/test/sound_test.cpp b/framework/imgui/test/sound_test.cpp index 33d6d45..2f82d6c 100644 --- a/framework/imgui/test/sound_test.cpp +++ b/framework/imgui/test/sound_test.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include @@ -171,6 +172,11 @@ TEST(imgui_sound, basic) { engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + engine.run(); sdl_ss.destroyWindow(); diff --git a/framework/imgui/test/text_edit_test.cpp b/framework/imgui/test/text_edit_test.cpp index aaa6935..5d45e6e 100644 --- a/framework/imgui/test/text_edit_test.cpp +++ b/framework/imgui/test/text_edit_test.cpp @@ -1,4 +1,3 @@ -#include #include #include @@ -11,6 +10,7 @@ #include #include #include +#include #include @@ -19,6 +19,8 @@ #include #include +#include + static char* argv0; using namespace entt::literals; @@ -35,7 +37,7 @@ class TemplateUpdateMainService : public MM::Services::Service { MM::UpdateStrategies::TaskInfo{"TemplateUpdateMainService::fn"} .fn(_fn) ); - return true; + return true; } void disable(MM::Engine&) override {} @@ -72,6 +74,11 @@ TEST(imgui_text_edit, it) { }); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + engine.run(); // TODO: clear asset manager @@ -112,6 +119,12 @@ TEST(imgui_text_edit, shader) { }); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + + // TODO: fix non existant files fte.open("shader/quad_renderer/vert.glsl"); fse.open("shader/quad_renderer/frag.glsl"); diff --git a/framework/imgui/test/widget_test.cpp b/framework/imgui/test/widget_test.cpp index 1559fe3..0939c48 100644 --- a/framework/imgui/test/widget_test.cpp +++ b/framework/imgui/test/widget_test.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -68,6 +69,11 @@ TEST(imgui_widgets, basic) { engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + engine.run(); sdl_ss.destroyWindow(); diff --git a/framework/input/test/CMakeLists.txt b/framework/input/test/CMakeLists.txt index b77c2f6..1b88be3 100644 --- a/framework/input/test/CMakeLists.txt +++ b/framework/input/test/CMakeLists.txt @@ -29,5 +29,7 @@ target_link_libraries(input_service_visualizer_test gtest_main ) -add_test(NAME input_service_visualizer_test COMMAND input_service_visualizer_test) +if(NOT MM_AUTOTEST) + add_test(NAME input_service_visualizer_test COMMAND input_service_visualizer_test) +endif() diff --git a/framework/opengl_renderer/test/batched_spritesheet_render_task_test.cpp b/framework/opengl_renderer/test/batched_spritesheet_render_task_test.cpp index c77e9e1..b592f96 100644 --- a/framework/opengl_renderer/test/batched_spritesheet_render_task_test.cpp +++ b/framework/opengl_renderer/test/batched_spritesheet_render_task_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -68,6 +69,11 @@ TEST(batched_spritesheet_render_task, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + auto& cam = scene.ctx().emplace(); cam.horizontalViewPortSize = 5; cam.setOrthographic(); diff --git a/framework/opengl_renderer/test/blur_render_task_test.cpp b/framework/opengl_renderer/test/blur_render_task_test.cpp index 442e3c3..ec53c6e 100644 --- a/framework/opengl_renderer/test/blur_render_task_test.cpp +++ b/framework/opengl_renderer/test/blur_render_task_test.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -64,6 +65,11 @@ TEST(blur_render_task, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + //rs.addRenderTask(engine).target_fbo = "game_view"; rs.addRenderTask(engine).target_fbo = "blur_io"; diff --git a/framework/opengl_renderer/test/fast_sky_render_task_test.cpp b/framework/opengl_renderer/test/fast_sky_render_task_test.cpp index 309b4e5..818e38e 100644 --- a/framework/opengl_renderer/test/fast_sky_render_task_test.cpp +++ b/framework/opengl_renderer/test/fast_sky_render_task_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -39,6 +40,11 @@ TEST(fast_sky_render_task, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + rs.addRenderTask(engine); // setup systems diff --git a/framework/opengl_renderer/test/hdr_bloom_pipeline_example.cpp b/framework/opengl_renderer/test/hdr_bloom_pipeline_example.cpp index c1cde47..dfd0b88 100644 --- a/framework/opengl_renderer/test/hdr_bloom_pipeline_example.cpp +++ b/framework/opengl_renderer/test/hdr_bloom_pipeline_example.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -149,6 +150,11 @@ TEST(hdr_bloom_pipeline, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + { // setup rendering // TODO: split vertically setup_textures(engine); diff --git a/framework/opengl_renderer/test/imgui_render_task_test.cpp b/framework/opengl_renderer/test/imgui_render_task_test.cpp index 5cca2e8..e589974 100644 --- a/framework/opengl_renderer/test/imgui_render_task_test.cpp +++ b/framework/opengl_renderer/test/imgui_render_task_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include @@ -43,6 +44,11 @@ TEST(imgui_render_task, demowindow) { rs.addRenderTask(engine); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + engine.run(); } diff --git a/framework/opengl_renderer/test/lite_particles2d.cpp b/framework/opengl_renderer/test/lite_particles2d.cpp index 3994fc4..d0f501e 100644 --- a/framework/opengl_renderer/test/lite_particles2d.cpp +++ b/framework/opengl_renderer/test/lite_particles2d.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include @@ -259,6 +260,11 @@ TEST(lite_particles2d, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + // load particle types // before addRenderTask // OR diff --git a/framework/opengl_renderer/test/simple_rect_render_task_test.cpp b/framework/opengl_renderer/test/simple_rect_render_task_test.cpp index be701fa..0c65c7f 100644 --- a/framework/opengl_renderer/test/simple_rect_render_task_test.cpp +++ b/framework/opengl_renderer/test/simple_rect_render_task_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -49,6 +50,11 @@ TEST(simple_rect_render_task, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + rs.addRenderTask(engine); scene.on_construct().connect<&entt::registry::emplace_or_replace>(); diff --git a/framework/opengl_renderer/test/simple_sprite_render_task_test.cpp b/framework/opengl_renderer/test/simple_sprite_render_task_test.cpp index fbbaaa7..46d4203 100644 --- a/framework/opengl_renderer/test/simple_sprite_render_task_test.cpp +++ b/framework/opengl_renderer/test/simple_sprite_render_task_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -52,6 +53,11 @@ TEST(simple_sprite_render_task, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + rs.addRenderTask(engine); scene.on_construct().connect<&entt::registry::emplace_or_replace>(); diff --git a/framework/opengl_renderer/test/simple_spritesheet_render_task_test.cpp b/framework/opengl_renderer/test/simple_spritesheet_render_task_test.cpp index a96273d..f3f5327 100644 --- a/framework/opengl_renderer/test/simple_spritesheet_render_task_test.cpp +++ b/framework/opengl_renderer/test/simple_spritesheet_render_task_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -64,6 +65,11 @@ TEST(simple_spritesheet_render_task, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + auto& cam = scene.ctx().emplace(); cam.horizontalViewPortSize = 5; cam.setOrthographic(); diff --git a/framework/opengl_renderer/test/tilemap_render_task_test.cpp b/framework/opengl_renderer/test/tilemap_render_task_test.cpp index 34b546a..2b8829d 100644 --- a/framework/opengl_renderer/test/tilemap_render_task_test.cpp +++ b/framework/opengl_renderer/test/tilemap_render_task_test.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -51,6 +52,11 @@ TEST(tilemap_render_task_test, it) { auto& rs = engine.addService(); ASSERT_TRUE(engine.enableService()); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + rs.addRenderTask(engine); scene.on_construct().connect<&entt::registry::emplace_or_replace>(); diff --git a/framework/simple_sdl_renderer/test/start_test.cpp b/framework/simple_sdl_renderer/test/start_test.cpp index e54bbd0..f5e60ac 100644 --- a/framework/simple_sdl_renderer/test/start_test.cpp +++ b/framework/simple_sdl_renderer/test/start_test.cpp @@ -5,6 +5,8 @@ #include #include +#include + TEST(simple_sdl_renderer, basic) { srand(1); MM::Engine engine; @@ -33,6 +35,11 @@ TEST(simple_sdl_renderer, basic) { } ); +#ifdef MM_AUTOTEST + engine.addService(50); // 50 frames + ASSERT_TRUE(engine.enableService()); +#endif + engine.run(); } diff --git a/mm_options_and_defines.cmake b/mm_options_and_defines.cmake index 8219160..6daf5de 100644 --- a/mm_options_and_defines.cmake +++ b/mm_options_and_defines.cmake @@ -5,6 +5,7 @@ if(NOT MM_INTERNAL_OPTIONS) # MM options option(BUILD_TESTING "Enable testing with ctest." OFF) + option(MM_AUTOTEST "Quits tests after some frames. for ci." ON) option(MM_HEADLESS "Headless mode for MM, disables all kind of rendering stuff." OFF) option(MM_NETWORKING "control networking implementations for MM." OFF) @@ -25,6 +26,7 @@ if(NOT MM_INTERNAL_OPTIONS) endif() endmacro() + gen_compile_definition(MM_AUTOTEST) gen_compile_definition(MM_HEADLESS) gen_compile_definition(MM_NETWORKING) gen_compile_definition(MM_OPENGL_3)