Fix unit tests on windows
Based on PR#210 from @gudnimg Cherry picked just the necessary changes + reformatted the corresponding CMakeLists.txtpull/213/head
parent
f43884a0ca
commit
6da1dfc7aa
|
|
@ -1,43 +1,53 @@
|
||||||
option(GCOV_ENABLE "Enable/use GCOV code coverage for tests" ON)
|
option(GCOV_ENABLE "Enable/use GCOV code coverage for tests" ON)
|
||||||
|
|
||||||
if (GCOV_ENABLE)
|
if(GCOV_ENABLE)
|
||||||
find_program(GCOV_BINARY NAMES gcov gcov-7)
|
find_program(GCOV_BINARY NAMES gcov gcov-7)
|
||||||
find_program(LCOV_BINARY NAMES lcov)
|
find_program(LCOV_BINARY NAMES lcov)
|
||||||
message(STATUS "Using gcov ${GCOV_BINARY} and LCOV ${LCOV_BINARY}")
|
message(STATUS "Using gcov ${GCOV_BINARY} and LCOV ${LCOV_BINARY}")
|
||||||
add_compile_options(-g -O0 -fprofile-arcs -ftest-coverage)
|
add_compile_options(-g -O0 -fprofile-arcs -ftest-coverage)
|
||||||
link_libraries(-coverage -lgcov)
|
link_libraries(-coverage -lgcov)
|
||||||
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE ON)
|
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE ON)
|
||||||
add_custom_target(tests_clean
|
add_custom_target(
|
||||||
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
tests_clean
|
||||||
COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_BINARY_DIR}/Coverage
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
||||||
COMMAND ${LCOV_BINARY} -b ${PROJECT_BINARY_DIR} -d ${PROJECT_BINARY_DIR} --zerocounters
|
COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_BINARY_DIR}/Coverage
|
||||||
COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/.ctest-finished
|
COMMAND ${LCOV_BINARY} -b ${PROJECT_BINARY_DIR} -d ${PROJECT_BINARY_DIR} --zerocounters
|
||||||
)
|
COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_BINARY_DIR}/.ctest-finished
|
||||||
|
)
|
||||||
|
|
||||||
# This step needs to always return OK but log whether it was successful or not. The thought here is that if the tests all
|
# This step needs to always return OK but log whether it was successful or not. The thought here
|
||||||
# pass, .ctest-finished is created and we can check for its existance after generating the report to determine if the overall
|
# is that if the tests all pass, .ctest-finished is created and we can check for its existance
|
||||||
# build result is a pass or fail.
|
# after generating the report to determine if the overall build result is a pass or fail.
|
||||||
add_custom_target(test_run_all
|
add_custom_target(
|
||||||
COMMAND cd ${PROJECT_BINARY_DIR}
|
test_run_all
|
||||||
COMMAND env CTEST_OUTPUT_ON_FAILURE=1 ctest --timeout 30 && ${CMAKE_COMMAND} -E touch .ctest-finished || exit 0
|
COMMAND ${CMAKE_COMMAND} -E env CTEST_OUTPUT_ON_FAILURE=1 ${CMAKE_CTEST_COMMAND} --timeout 30
|
||||||
DEPENDS tests_clean tests
|
COMMAND ${CMAKE_COMMAND} -E touch .ctest-finished || exit 0
|
||||||
)
|
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
|
||||||
|
DEPENDS tests_clean tests
|
||||||
|
)
|
||||||
|
|
||||||
add_custom_target(test_coverage_report
|
add_custom_target(
|
||||||
COMMAND cd ${PROJECT_BINARY_DIR}
|
test_coverage_report
|
||||||
COMMAND ${LCOV_BINARY} --capture --gcov-tool="${GCOV_BINARY}" --directory ${PROJECT_BINARY_DIR} --output-file ${PROJECT_BINARY_DIR}/coverage.info
|
COMMAND cd ${PROJECT_BINARY_DIR}
|
||||||
# Strip system headers and other uninteresting stuff.
|
COMMAND
|
||||||
COMMAND ${LCOV_BINARY} --remove coverage.info '/usr/*' '${PROJECT_SOURCE_DIR}/tests/*' '${PROJECT_SOURCE_DIR}/lib/Catch2/*' -o coverage.info
|
${LCOV_BINARY} --capture --gcov-tool="${GCOV_BINARY}" --directory ${PROJECT_BINARY_DIR}
|
||||||
# Package it up.
|
--output-file ${PROJECT_BINARY_DIR}/coverage.info
|
||||||
COMMAND genhtml coverage.info --output-directory Coverage
|
# Strip system headers and other uninteresting stuff.
|
||||||
COMMAND tar -zcvf Coverage.tar.gz Coverage
|
COMMAND
|
||||||
# Cheat and compare a file to itself to check for existence. File-Not-Found is a failure code.
|
${LCOV_BINARY} --remove coverage.info '/usr/*' '${PROJECT_SOURCE_DIR}/tests/*'
|
||||||
COMMAND ../../utils/gcovr.py -r . -e '../../tests' -e '../../lib/Catch2' | tee Summary.txt
|
'${PROJECT_SOURCE_DIR}/lib/Catch2/*' -o coverage.info
|
||||||
COMMAND ${CMAKE_COMMAND} -E compare_files ${PROJECT_BINARY_DIR}/.ctest-finished ${PROJECT_BINARY_DIR}/.ctest-finished
|
# Package it up.
|
||||||
DEPENDS test_run_all
|
COMMAND genhtml coverage.info --output-directory Coverage
|
||||||
)
|
COMMAND tar -zcvf Coverage.tar.gz Coverage
|
||||||
|
# Cheat and compare a file to itself to check for existence. File-Not-Found is a failure
|
||||||
|
# code.
|
||||||
|
COMMAND ../../utils/gcovr.py -r . -e '../../tests' -e '../../lib/Catch2' | tee Summary.txt
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E compare_files ${PROJECT_BINARY_DIR}/.ctest-finished
|
||||||
|
${PROJECT_BINARY_DIR}/.ctest-finished
|
||||||
|
DEPENDS test_run_all
|
||||||
|
)
|
||||||
else()
|
else()
|
||||||
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE OFF)
|
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(unit)
|
add_subdirectory(unit)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue