summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-12-07 08:03:11 -0500
committerBrad King <brad.king@kitware.com>2017-12-07 08:03:11 -0500
commitafae027d6398462906e762da29f306f41d21c6ee (patch)
tree7604ad4c90941999a342a28c5fd329412a304e10 /Modules
parent05f86af716e00b58b5103b231a22515edcc95321 (diff)
parent935848a8a7164631b9410a0e6f7c5574b01bb85c (diff)
downloadcmake-afae027d6398462906e762da29f306f41d21c6ee.tar.gz
Merge branch 'gtest-discovery-timeout' into release-3.10
Merge-request: !1534
Diffstat (limited to 'Modules')
-rw-r--r--Modules/GoogleTest.cmake14
-rw-r--r--Modules/GoogleTestAddTests.cmake11
2 files changed, 21 insertions, 4 deletions
diff --git a/Modules/GoogleTest.cmake b/Modules/GoogleTest.cmake
index 3d47367d5e..c525101c7d 100644
--- a/Modules/GoogleTest.cmake
+++ b/Modules/GoogleTest.cmake
@@ -217,6 +217,14 @@ same as the Google Test name (i.e. ``suite.testcase``); see also
executable is being used in multiple calls to ``gtest_discover_tests()``.
Note that this variable is only available in CTest.
+ ``TIMEOUT num``
+ Specifies how long (in seconds) CMake will wait for the test to enumerate
+ available tests. If the test takes longer than this, discovery (and your
+ build) will fail. Most test executables will enumerate their tests very
+ quickly, but under some exceptional circumstances, a test may require a
+ longer timeout. The default is 5. See also the ``TIMEOUT`` option of
+ :command:`execute_process`.
+
#]=======================================================================]
#------------------------------------------------------------------------------
@@ -349,7 +357,7 @@ function(gtest_discover_tests TARGET)
cmake_parse_arguments(
""
"NO_PRETTY_TYPES;NO_PRETTY_VALUES"
- "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST"
+ "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST;TIMEOUT"
"EXTRA_ARGS;PROPERTIES"
${ARGN}
)
@@ -360,6 +368,9 @@ function(gtest_discover_tests TARGET)
if(NOT _TEST_LIST)
set(_TEST_LIST ${TARGET}_TESTS)
endif()
+ if(NOT _TIMEOUT)
+ set(_TIMEOUT 5)
+ endif()
get_property(
has_counter
@@ -407,6 +418,7 @@ function(gtest_discover_tests TARGET)
-D "NO_PRETTY_VALUES=${_NO_PRETTY_VALUES}"
-D "TEST_LIST=${_TEST_LIST}"
-D "CTEST_FILE=${ctest_tests_file}"
+ -D "TEST_DISCOVERY_TIMEOUT=${_TIMEOUT}"
-P "${_GOOGLETEST_DISCOVER_TESTS_SCRIPT}"
VERBATIM
)
diff --git a/Modules/GoogleTestAddTests.cmake b/Modules/GoogleTestAddTests.cmake
index 7d0d9097b1..5a4bdcad39 100644
--- a/Modules/GoogleTestAddTests.cmake
+++ b/Modules/GoogleTestAddTests.cmake
@@ -24,19 +24,24 @@ endfunction()
# Run test executable to get list of available tests
if(NOT EXISTS "${TEST_EXECUTABLE}")
message(FATAL_ERROR
- "Specified test executable '${TEST_EXECUTABLE}' does not exist"
+ "Specified test executable does not exist.\n"
+ " Path: '${TEST_EXECUTABLE}'"
)
endif()
execute_process(
COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" --gtest_list_tests
+ TIMEOUT ${TEST_DISCOVERY_TIMEOUT}
OUTPUT_VARIABLE output
RESULT_VARIABLE result
)
if(NOT ${result} EQUAL 0)
+ string(REPLACE "\n" "\n " output "${output}")
message(FATAL_ERROR
- "Error running test executable '${TEST_EXECUTABLE}':\n"
+ "Error running test executable.\n"
+ " Path: '${TEST_EXECUTABLE}'\n"
" Result: ${result}\n"
- " Output: ${output}\n"
+ " Output:\n"
+ " ${output}\n"
)
endif()