diff options
author | Arnstein Ressem <aressem@gmail.com> | 2016-08-23 14:15:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-23 14:15:11 +0200 |
commit | 73e19d39da5896938a402b06ba43b4bba6bea948 (patch) | |
tree | c2a285807746c7b5e727810b5b3ce1064067c8a3 | |
parent | 32e45e8676ab6129033b59bb8cb30549cfe4a090 (diff) | |
parent | 4cfed2e622ddfd06975850f6f00e95d600602e64 (diff) |
Merge pull request #449 from yahoo/aressem/cmake-it-possible-to-autorun-tests
Make it possible to automatically run tests after linking.
-rw-r--r-- | build_settings.cmake | 6 | ||||
-rw-r--r-- | functions.cmake | 52 | ||||
-rw-r--r-- | searchcore/src/tests/proton/persistenceconformance/CMakeLists.txt | 2 |
3 files changed, 49 insertions, 11 deletions
diff --git a/build_settings.cmake b/build_settings.cmake index 2115d80d387..76871e9dd5f 100644 --- a/build_settings.cmake +++ b/build_settings.cmake @@ -10,6 +10,12 @@ set(EXCLUDE_TESTS_FROM_ALL FALSE CACHE BOOL "If TRUE, do not build tests as part # Whether to run unit tests via valgrind set(VALGRIND_UNIT_TESTS FALSE CACHE BOOL "If TRUE, run unit tests via valgrind") +# Whether to run tests marked as benchmark as part of the test runs +set(RUN_BENCHMARKS FALSE CACHE BOOL "If TRUE, benchmars are run togheter with the other tests") + +# Whether to run tests marked as benchmark as part of the test runs +set(AUTORUN_UNIT_TESTS FALSE CACHE BOOL "If TRUE, tests will be run immediately after linking the test") + # Warnings set(WARN_OPTS "-Wuninitialized -Werror -Wall -W -Wchar-subscripts -Wcomment -Wformat -Wparentheses -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings") diff --git a/functions.cmake b/functions.cmake index 7064a81e2f7..69cc455de65 100644 --- a/functions.cmake +++ b/functions.cmake @@ -328,28 +328,55 @@ function(__is_command_a_script COMMAND RESULT_VAR) list(GET COMMAND 0 FIRST) __is_script_extension(${FIRST} IS_SCRIPT_EXT) + if (IS_SCRIPT_EXT) + set(THE_SCRIPT ${FIRST}) + endif() list(LENGTH COMMAND COMMAND_LENGTH) if(COMMAND_LENGTH GREATER 1 AND NOT IS_SCRIPT_EXT) list(GET COMMAND 1 SECOND) __is_script_extension(${SECOND} IS_SCRIPT_EXT) + if (IS_SCRIPT_EXT) + set(THE_SCRIPT ${SECOND}) + endif() endif() set(${RESULT_VAR} ${IS_SCRIPT_EXT} PARENT_SCOPE) + + if(THE_SCRIPT AND ARGV2) + set(${ARGV2} ${THE_SCRIPT} PARENT_SCOPE) + endif() endfunction() function(vespa_add_test) - cmake_parse_arguments(ARG "NO_VALGRIND;RUN_SERIAL;BENCHMARK" "NAME;WORKING_DIRECTORY;ENVIRONMENT" "COMMAND" ${ARGN}) + cmake_parse_arguments(ARG "NO_VALGRIND;RUN_SERIAL;BENCHMARK" "NAME;WORKING_DIRECTORY;ENVIRONMENT" "COMMAND;DEPENDS" ${ARGN}) if(NOT RUN_BENCHMARKS AND ARG_BENCHMARK) return() endif() + __is_command_a_script("${ARG_COMMAND}" IS_SCRIPT THE_SCRIPT) + if(IS_SCRIPT) + list(APPEND TEST_DEPENDENCIES ${THE_SCRIPT}) + else() + list(GET ARG_COMMAND 0 COMMAND_FIRST) + if(TARGET ${COMMAND_FIRST}) + list(APPEND TEST_DEPENDENCIES ${COMMAND_FIRST}) + endif() + endif() + if(ARG_DEPENDS) + list(APPEND TEST_DEPENDENCIES ${ARG_DEPENDS}) + endif() + + list(LENGTH TEST_DEPENDENCIES TEST_DEPENDENCIES_LENGTH) + if(${TEST_DEPENDENCIES_LENGTH} EQUAL 0) + message(FATAL_ERROR "Test does not have any dependencies. This is not allowed.") + endif() + if(VALGRIND_UNIT_TESTS AND NOT ARG_NO_VALGRIND) if(NOT VALGRIND_EXECUTABLE) message(FATAL_ERROR "Requested valgrind tests, but could not find valgrind executable.") endif() - __is_command_a_script("${ARG_COMMAND}" IS_SCRIPT) if(IS_SCRIPT) # For shell scripts, export a VALGRIND environment variable list(APPEND ARG_ENVIRONMENT "VALGRIND=${VALGRIND_COMMAND}") @@ -365,21 +392,26 @@ function(vespa_add_test) endif() set(ARG_COMMAND "${VALGRIND_COMMAND} ${COMMAND_FIRST} ${COMMAND_REST}") endif() - - separate_arguments(ARG_COMMAND) endif() + separate_arguments(ARG_COMMAND) add_test(NAME ${ARG_NAME} COMMAND ${ARG_COMMAND} WORKING_DIRECTORY ${ARG_WORKING_DIRECTORY}) - if(ARG_ENVIRONMENT) - set_tests_properties(${ARG_NAME} PROPERTIES ENVIRONMENT "SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR};${ARG_ENVIRONMENT}") - else() - set_tests_properties(${ARG_NAME} PROPERTIES ENVIRONMENT "SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}") - endif() - + list(APPEND ARG_ENVIRONMENT "SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}") + set_tests_properties(${ARG_NAME} PROPERTIES ENVIRONMENT "${ARG_ENVIRONMENT}") if(ARG_RUN_SERIAL) set_tests_properties(${TEST_NAME} PROPERTIES RUN_SERIAL TRUE) endif() + + if (AUTORUN_UNIT_TESTS) + set(CONTROL_FILE "${ARG_NAME}.run") + add_custom_target("${CONTROL_FILE}_target" ALL DEPENDS ${CONTROL_FILE}) + add_custom_command(OUTPUT ${CONTROL_FILE} + COMMAND ctest --output-on-failure -R ${ARG_NAME} || (rm -f ${CONTROL_FILE} && false) + COMMAND touch ${CONTROL_FILE} + DEPENDS ${TEST_DEPENDENCIES} + COMMENT "Executing ${ARG_COMMAND}") + endif() endfunction() function(vespa_install_script) diff --git a/searchcore/src/tests/proton/persistenceconformance/CMakeLists.txt b/searchcore/src/tests/proton/persistenceconformance/CMakeLists.txt index f71dbf3c1ba..211c0eca2ef 100644 --- a/searchcore/src/tests/proton/persistenceconformance/CMakeLists.txt +++ b/searchcore/src/tests/proton/persistenceconformance/CMakeLists.txt @@ -1,6 +1,6 @@ # Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. vespa_add_test( NAME searchcore_persistenceconformance_test_app - COMMAND ../../../apps/tests/searchcore_persistenceconformance_test_app + COMMAND searchcore_persistenceconformance_test_app ENVIRONMENT "VESPA_LOG_TARGET=file:vlog.txt" ) |