Changeset View
Changeset View
Standalone View
Standalone View
cmake/modules/TestSuite.cmake
# Allow to easily build test suites | # Allow to easily build test suites | ||||
option(ENABLE_JUNIT_REPORT "Enable Junit report generation for targets that support it" OFF) | option(ENABLE_JUNIT_REPORT "Enable Junit report generation for targets that support it" OFF) | ||||
set(JUNIT_REPORT_DIRECTORY "${CMAKE_BINARY_DIR}/test/junit") | |||||
set_property( | set_property( | ||||
DIRECTORY "${CMAKE_SOURCE_DIR}" | DIRECTORY "${CMAKE_SOURCE_DIR}" | ||||
APPEND PROPERTY ADDITIONAL_CLEAN_FILES | APPEND PROPERTY ADDITIONAL_CLEAN_FILES | ||||
"${CMAKE_BINARY_DIR}/test/junit" | "${JUNIT_REPORT_DIRECTORY}" | ||||
"${CMAKE_BINARY_DIR}/test/tmp" | "${CMAKE_BINARY_DIR}/test/tmp" | ||||
) | ) | ||||
macro(add_test_environment VARIABLE VALUE) | macro(add_test_environment VARIABLE VALUE) | ||||
set_property(GLOBAL APPEND PROPERTY TEST_ENVIRONMENT "${VARIABLE}=${VALUE}") | set_property(GLOBAL APPEND PROPERTY TEST_ENVIRONMENT "${VARIABLE}=${VALUE}") | ||||
endmacro() | endmacro() | ||||
function(add_test_custom_target TARGET) | function(add_test_custom_target TARGET) | ||||
cmake_parse_arguments(ARG "" "" "CUSTOM_TARGET_ARGS;TEST_COMMAND" ${ARGN}) | cmake_parse_arguments(ARG "" "" "CUSTOM_TARGET_ARGS;TEST_COMMAND" ${ARGN}) | ||||
get_property(TEST_ENVIRONMENT GLOBAL PROPERTY TEST_ENVIRONMENT) | get_property(TEST_ENVIRONMENT GLOBAL PROPERTY TEST_ENVIRONMENT) | ||||
add_custom_target(${TARGET} | add_custom_target(${TARGET} | ||||
${ARG_CUSTOM_TARGET_ARGS} | ${ARG_CUSTOM_TARGET_ARGS} | ||||
COMMAND ${CMAKE_COMMAND} -E make_directory "${JUNIT_REPORT_DIRECTORY}" | |||||
COMMAND ${CMAKE_COMMAND} -E env ${TEST_ENVIRONMENT} ${ARG_TEST_COMMAND} | COMMAND ${CMAKE_COMMAND} -E env ${TEST_ENVIRONMENT} ${ARG_TEST_COMMAND} | ||||
) | ) | ||||
endfunction() | endfunction() | ||||
# Define a new target property to hold the list of tests associated with a test | # Define a new target property to hold the list of tests associated with a test | ||||
# suite. This property is named UNIT_TESTS to avoid confusion with the directory | # suite. This property is named UNIT_TESTS to avoid confusion with the directory | ||||
# level property TESTS. | # level property TESTS. | ||||
define_property(TARGET | define_property(TARGET | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | function(add_test_runner SUITE NAME EXECUTABLE) | ||||
add_dependencies(${SUITE_TARGET} ${TARGET}) | add_dependencies(${SUITE_TARGET} ${TARGET}) | ||||
if(ENABLE_JUNIT_REPORT AND ARG_JUNIT) | if(ENABLE_JUNIT_REPORT AND ARG_JUNIT) | ||||
add_custom_command(TARGET ${TARGET} POST_BUILD | add_custom_command(TARGET ${TARGET} POST_BUILD | ||||
COMMENT "Processing junit report for test ${NAME} from suite ${SUITE}" | COMMENT "Processing junit report for test ${NAME} from suite ${SUITE}" | ||||
COMMAND_EXPAND_LISTS | COMMAND_EXPAND_LISTS | ||||
COMMAND | COMMAND | ||||
"${Python_EXECUTABLE}" "${CMAKE_SOURCE_DIR}/cmake/utils/junit-reports-merge.py" | "${Python_EXECUTABLE}" "${CMAKE_SOURCE_DIR}/cmake/utils/junit-reports-merge.py" | ||||
"${CMAKE_BINARY_DIR}/test/junit" | "${JUNIT_REPORT_DIRECTORY}" | ||||
"${CMAKE_BINARY_DIR}/test/tmp" | "${CMAKE_BINARY_DIR}/test/tmp" | ||||
"${SUITE}" | "${SUITE}" | ||||
"${NAME}" | "${NAME}" | ||||
) | ) | ||||
endif() | endif() | ||||
endfunction() | endfunction() | ||||
function(add_test_to_suite SUITE NAME) | function(add_test_to_suite SUITE NAME) | ||||
▲ Show 20 Lines • Show All 63 Lines • Show Last 20 Lines |