From d7527b5af5cc6e4b9726d065256d35390a3d2b48 Mon Sep 17 00:00:00 2001 From: bergmann Date: Thu, 1 Aug 2019 16:26:59 +0200 Subject: [PATCH] * Improved unit tests: Build one executable for each test source file (so tests can be executed in parallel) --- cmake/modules | 2 +- projects/helloworld/test/CMakeLists.txt | 73 +++++++++++++--------- projects/libhelloworld/test/CMakeLists.txt | 73 +++++++++++++--------- 3 files changed, 87 insertions(+), 61 deletions(-) diff --git a/cmake/modules b/cmake/modules index 4ca86b7..4953cd4 160000 --- a/cmake/modules +++ b/cmake/modules @@ -1 +1 @@ -Subproject commit 4ca86b7d92f24e5d8056cada3ff6bd3906b16aca +Subproject commit 4953cd4cc849afdfa02a6057b5a2011fb62e91a6 diff --git a/projects/helloworld/test/CMakeLists.txt b/projects/helloworld/test/CMakeLists.txt index bb8442d..a36814f 100644 --- a/projects/helloworld/test/CMakeLists.txt +++ b/projects/helloworld/test/CMakeLists.txt @@ -11,33 +11,46 @@ If ( NOT "${GTest_FOUND}" ) Return ( ) EndIf ( ) -File ( GLOB_RECURSE HELLOWORLD_TEST_HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) -File ( GLOB_RECURSE HELLOWORLD_TEST_INLINE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) -File ( GLOB_RECURSE HELLOWORLD_TEST_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) - -Add_Executable ( helloworld-test - EXCLUDE_FROM_ALL - ${HELLOWORLD_TEST_HEADER_FILES} - ${HELLOWORLD_TEST_INLINE_FILES} - ${HELLOWORLD_TEST_SOURCE_FILES} ) -Target_Link_Libraries ( helloworld-test - PUBLIC - helloworld-objects - GTest::Main ) - -# pedantic -If ( HAS_PEDANTIC ) - Pedantic_Apply_Flags_Target ( helloworld-test ALL ) -EndIf ( ) - -# optimization -If ( HAS_COTIRE ) - Cotire ( helloworld-test ) -EndIf ( ) - -# test -If ( HAS_CMAKE_TESTS ) - Add_CMake_Test ( NAME helloworld TARGET helloworld-test ) -Else ( ) - Add_Test ( NAME helloworld COMMAND helloworld-test ) -EndIf ( ) +File ( GLOB_RECURSE ISEF_TEST_HEADER_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) +File ( GLOB_RECURSE ISEF_TEST_INLINE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) +File ( GLOB_RECURSE ISEF_TEST_SOURCE_FILES + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) + +ForEach ( FILE IN LISTS ISEF_TEST_SOURCE_FILES ) + # add test + Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) + Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) + Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) + String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) + String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) + Set ( TEST_NAME "test-${TEST_NAME}" ) + Add_Executable ( ${TEST_NAME} + EXCLUDE_FROM_ALL + ${ISEF_TEST_HEADER_FILES} + ${ISEF_TEST_INLINE_FILES} + ${FILE} ) + Target_Link_Libraries ( ${TEST_NAME} + PUBLIC + helloworld-objects + GTest::Main ) + + # pedantic + If ( HAS_PEDANTIC ) + Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) + EndIf ( ) + + # optimization + If ( HAS_COTIRE ) + Cotire ( ${TEST_NAME} ) + EndIf ( ) + + # test + If ( HAS_CMAKE_TESTS ) + Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) + Else ( ) + Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) + EndIf ( ) +EndForEach ( ) diff --git a/projects/libhelloworld/test/CMakeLists.txt b/projects/libhelloworld/test/CMakeLists.txt index b08ec22..c3af7e1 100644 --- a/projects/libhelloworld/test/CMakeLists.txt +++ b/projects/libhelloworld/test/CMakeLists.txt @@ -11,33 +11,46 @@ If ( NOT "${GTest_FOUND}" ) Return ( ) EndIf ( ) -File ( GLOB_RECURSE LIBHELLOWORLD_TEST_HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) -File ( GLOB_RECURSE LIBHELLOWORLD_TEST_INLINE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) -File ( GLOB_RECURSE LIBHELLOWORLD_TEST_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) - -Add_Executable ( libhelloworld-test - EXCLUDE_FROM_ALL - ${LIBHELLOWORLD_TEST_HEADER_FILES} - ${LIBHELLOWORLD_TEST_INLINE_FILES} - ${LIBHELLOWORLD_TEST_SOURCE_FILES} ) -Target_Link_Libraries ( libhelloworld-test - PUBLIC - libhelloworld-objects - GTest::Main ) - -# pedantic -If ( HAS_PEDANTIC ) - Pedantic_Apply_Flags_Target ( libhelloworld-test ALL ) -EndIf ( ) - -# optimization -If ( HAS_COTIRE ) - Cotire ( libhelloworld-test ) -EndIf ( ) - -# test -If ( HAS_CMAKE_TESTS ) - Add_CMake_Test ( NAME libhelloworld TARGET libhelloworld-test ) -Else ( ) - Add_Test ( NAME libhelloworld COMMAND libhelloworld-test ) -EndIf ( ) +File ( GLOB_RECURSE ISEF_TEST_HEADER_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) +File ( GLOB_RECURSE ISEF_TEST_INLINE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) +File ( GLOB_RECURSE ISEF_TEST_SOURCE_FILES + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) + +ForEach ( FILE IN LISTS ISEF_TEST_SOURCE_FILES ) + # add test + Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) + Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) + Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) + String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) + String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) + Set ( TEST_NAME "test-${TEST_NAME}" ) + Add_Executable ( ${TEST_NAME} + EXCLUDE_FROM_ALL + ${ISEF_TEST_HEADER_FILES} + ${ISEF_TEST_INLINE_FILES} + ${FILE} ) + Target_Link_Libraries ( ${TEST_NAME} + PUBLIC + libhelloworld-objects + GTest::Main ) + + # pedantic + If ( HAS_PEDANTIC ) + Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) + EndIf ( ) + + # optimization + If ( HAS_COTIRE ) + Cotire ( ${TEST_NAME} ) + EndIf ( ) + + # test + If ( HAS_CMAKE_TESTS ) + Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} ) + Else ( ) + Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) + EndIf ( ) +EndForEach ( )