diff --git a/cmake/ctest/experimental_script.ctest b/cmake/ctest/experimental_script.ctest index f767aac5..40ce2af1 100644 --- a/cmake/ctest/experimental_script.ctest +++ b/cmake/ctest/experimental_script.ctest @@ -22,7 +22,7 @@ set(CTEST_BUILD_NAME "experimental_script-${SHORT_COMMIT}") ctest_start("Experimental") ctest_configure( OPTIONS - "-DBUILD_VIEWER=1;-DBUILD_TESTS=1;-DTEST_COVERAGE=1;-DRW_VERBOSE_DEBUG_MESSAGES=0" + "-DBUILD_VIEWER=1;-DBUILD_TESTS=1;-DTEST_COVERAGE=1;-DRW_VERBOSE_DEBUG_MESSAGES=1;-DSEPERATE_TEST_SUITES=1" ) ctest_build() ctest_test() diff --git a/cmake_options.cmake b/cmake_options.cmake index 32b4dd03..f7235f61 100644 --- a/cmake_options.cmake +++ b/cmake_options.cmake @@ -19,3 +19,4 @@ if(NOT CMAKE_BUILD_TYPE) endif() option(TEST_COVERAGE "Enable coverage analysis (implies CMAKE_BUILD_TYPE=Debug)") +option(SEPERATE_TEST_SUITES "Add each test suite as seperate test") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a8accb9b..afb10555 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -4,43 +4,46 @@ find_package(Boost COMPONENTS filesystem unit_test_framework system REQUIRED) +set(TESTS + Animation + Archive + Buoyancy + Character + Chase + Config + Cutscene + Data + FileIndex + GameData + GameWorld + Input + Items + Lifetime + LoaderDFF + LoaderIPL + Logger + Menu + Object + ObjectData + Pickup + Renderer + RWBStream + SaveGame + ScriptMachine + State + Text + TrafficDirector + Vehicle + VisualFX + Weapon + World + ZoneData + ) + set(TEST_SOURCES main.cpp test_Globals.cpp - test_Animation.cpp - test_Archive.cpp - test_Buoyancy.cpp - test_Character.cpp - test_Chase.cpp - test_Cutscene.cpp - test_Config.cpp - test_Data.cpp - test_FileIndex.cpp - test_GameData.cpp - test_GameWorld.cpp test_Globals.hpp - test_Items.cpp - test_Input.cpp - test_Lifetime.cpp - test_Loaderdff.cpp - test_LoaderIPL.cpp - test_Logger.cpp - test_Menu.cpp - test_Object.cpp - test_ObjectData.cpp - test_Pickup.cpp - test_Renderer.cpp - test_RWBStream.cpp - test_SaveGame.cpp - test_ScriptMachine.cpp - test_State.cpp - test_Text.cpp - test_TrafficDirector.cpp - test_Vehicle.cpp - test_VisualFX.cpp - test_Weapon.cpp - test_World.cpp - test_ZoneData.cpp # Hack in rwgame sources until there's a per-target test suite "${CMAKE_SOURCE_DIR}/rwgame/GameConfig.cpp" @@ -48,7 +51,13 @@ set(TEST_SOURCES "${CMAKE_SOURCE_DIR}/rwgame/GameInput.cpp" ) -add_executable(run_tests ${TEST_SOURCES}) +foreach(TEST ${TESTS}) + list(APPEND TEST_SOURCES "test_${TEST}.cpp") +endforeach() + +add_executable(run_tests + ${TEST_SOURCES} + ) target_compile_definitions(run_tests PRIVATE @@ -77,6 +86,23 @@ target_link_libraries(run_tests ${Boost_SYSTEM_LIBRARY} ) -add_test(NAME UnitTests - COMMAND "$" - ) +if(SEPERATE_TEST_SUITES) + foreach(TEST ${TESTS}) + add_test( + NAME "${TEST}" + COMMAND "$" "-t" "${TEST}Tests" + ) + set_tests_properties("${TEST}" + PROPERTIES + TIMEOUT 15 + ) + endforeach() +else() + add_test(NAME UnitTests + COMMAND "$" + ) + set_tests_properties(UnitTests + PROPERTIES + TIMEOUT 60 + ) +endif() diff --git a/tests/test_Loaderdff.cpp b/tests/test_LoaderDFF.cpp similarity index 100% rename from tests/test_Loaderdff.cpp rename to tests/test_LoaderDFF.cpp diff --git a/tests/test_Menu.cpp b/tests/test_Menu.cpp index 8dcbb4ec..1fb5186a 100644 --- a/tests/test_Menu.cpp +++ b/tests/test_Menu.cpp @@ -1,7 +1,7 @@ #include #include -BOOST_AUTO_TEST_SUITE(MenuUnitTests) +BOOST_AUTO_TEST_SUITE(MenuTests) BOOST_AUTO_TEST_CASE(menu_test_click) { bool clickered = false; diff --git a/tests/test_Object.cpp b/tests/test_Object.cpp index 90eaeb33..e2160f5b 100644 --- a/tests/test_Object.cpp +++ b/tests/test_Object.cpp @@ -3,30 +3,30 @@ #include #include "test_Globals.hpp" -BOOST_AUTO_TEST_SUITE(ObjectUnitTests) +BOOST_AUTO_TEST_SUITE(ObjectTests) #if 0 // Tests disabled as object damage logic is unclear BOOST_AUTO_TEST_CASE(instance_test_damage) { std::shared_ptr object(new ObjectData); - InstanceObject inst(Global::get().e, - glm::vec3(0.f, 0.f, 0.f), - glm::quat(), nullptr, + InstanceObject inst(Global::get().e, + glm::vec3(0.f, 0.f, 0.f), + glm::quat(), nullptr, glm::vec3(1.f), object, nullptr, nullptr ); GameObject::DamageInfo dmg; dmg.type = GameObject::DamageInfo::Bullet; dmg.hitpoints = 50.f; - + // Set object to undamagable. object->flags = 0; - + BOOST_CHECK( ! inst.takeDamage(dmg) ); - + BOOST_CHECK( inst.takeDamage(dmg) ); - + BOOST_CHECK( inst.getHealth() < 0.f ); } @@ -34,17 +34,17 @@ BOOST_AUTO_TEST_CASE(instance_test_destroy) { std::shared_ptr object(new ObjectData); InstanceObject inst(Global::get().e, - glm::vec3(0.f, 0.f, 0.f), - glm::quat(), nullptr, + glm::vec3(0.f, 0.f, 0.f), + glm::quat(), nullptr, glm::vec3(1.f), object, nullptr, nullptr ); GameObject::DamageInfo dmg; dmg.type = GameObject::DamageInfo::Bullet; dmg.hitpoints = inst.getHealth() + 1.f; - + BOOST_CHECK( inst.takeDamage(dmg) ); - + BOOST_CHECK( inst.getHealth() < 0.f ); }