1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
if(NOT BUILD_TESTING)
return()
endif()
# Inspired by https://eb2.co/blog/2015/06/driving-boost.test-with-cmake
function(gather_boost_tests SOURCE_FILE_NAME)
file(READ "${SOURCE_FILE_NAME}" SOURCE_FILE_CONTENTS)
string(REGEX MATCHALL "BOOST_(AUTO|FIXTURE)_TEST_CASE\\([^,\\)]+"
FOUND_TESTS ${SOURCE_FILE_CONTENTS})
list(TRANSFORM FOUND_TESTS REPLACE ".*\\(([^,\\)]+).*" "\\1")
set(ALL_TEST_CASES ${FOUND_TESTS} PARENT_SCOPE)
endfunction()
find_package(Boost REQUIRED unit_test_framework)
add_executable(db_test test/test.cpp)
target_include_directories(db_test PUBLIC ${Boost_INCLUDE_DIRS})
target_compile_options(db_test PUBLIC -Wall -Wextra -pedantic)
target_link_libraries(db_test ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} Tango::Tango)
configure_file(test/start_tdb.sh.in start_tdb.sh @ONLY)
configure_file(test/stop_tdb.sh.in stop_tdb.sh @ONLY)
gather_boost_tests("test/test.cpp")
# not using cmake FIXTURES_SETUP/FIXTURES_CLEANUP as these are not called per test case
message(STATUS "Found test cases: ${ALL_TEST_CASES}")
foreach(TEST_CASE IN LISTS ALL_TEST_CASES)
add_test(NAME ${TEST_CASE} COMMAND db_test --log_level=all --logger=JUNIT,message,JU_${TEST_CASE}.xml:HRF,message,stdout --run_test=*/${TEST_CASE} --catch_system_error=yes)
# don't allow parallel runs
set_tests_properties(${TEST_CASE} PROPERTIES RESOURCE_LOCK Database)
endforeach()
|