From 9e8a96ab7e12460179b5b503c78fe1201c1bb174 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Fri, 27 Oct 2017 05:41:19 +0200 Subject: [PATCH] tests: execute each test separately by CTest Disabled by default because empty test suites fail and would cause Travis to fail. There can be empty test suites when testing with no data. --- cmake/ctest/experimental_script.ctest | 2 +- cmake_options.cmake | 1 + tests/CMakeLists.txt | 100 +++++++++++------- ...{test_Loaderdff.cpp => test_LoaderDFF.cpp} | 0 tests/test_Menu.cpp | 2 +- tests/test_Object.cpp | 24 ++--- 6 files changed, 78 insertions(+), 51 deletions(-) rename tests/{test_Loaderdff.cpp => test_LoaderDFF.cpp} (100%) 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 ); }