summaryrefslogtreecommitdiffstats
path: root/Modules/GoogleTest.cmake
diff options
context:
space:
mode:
authorAlexander Stein <alexander.stein@mailbox.org>2020-03-06 12:42:36 (GMT)
committerBrad King <brad.king@kitware.com>2020-03-13 14:47:33 (GMT)
commite9ab39eb1db8f072b030a929992df828bc05cc63 (patch)
tree03c80db31aafa6b0de009bf7478ea10b11c8288a /Modules/GoogleTest.cmake
parentc3ab1c22b069b64483a0525c3244e3377f256a87 (diff)
downloadCMake-e9ab39eb1db8f072b030a929992df828bc05cc63.zip
CMake-e9ab39eb1db8f072b030a929992df828bc05cc63.tar.gz
CMake-e9ab39eb1db8f072b030a929992df828bc05cc63.tar.bz2
GoogleTest: Add XML_OUTPUT_DIR parameter
When executing googltests in parallel using 'ctest -j n' and using '--gtest_output=xml' there is a race condition upon file creation. See googletest issue https://github.com/google/googletest/issues/2506. As all testcases (potentially) can be run in parallel each testcase has to create it's own XML JUnit file. EXTRA_ARGS is not suitable because it is identical per testsuite. So instead a new (opitional) parameter has been introduced to specify the storage location for each test of the testsuite.
Diffstat (limited to 'Modules/GoogleTest.cmake')
-rw-r--r--Modules/GoogleTest.cmake11
1 files changed, 10 insertions, 1 deletions
diff --git a/Modules/GoogleTest.cmake b/Modules/GoogleTest.cmake
index a5bb863..1d4398e 100644
--- a/Modules/GoogleTest.cmake
+++ b/Modules/GoogleTest.cmake
@@ -151,6 +151,7 @@ same as the Google Test name (i.e. ``suite.testcase``); see also
[PROPERTIES name1 value1...]
[TEST_LIST var]
[DISCOVERY_TIMEOUT seconds]
+ [XML_OUTPUT_DIR dir]
)
``gtest_discover_tests`` sets up a post-build command on the test executable
@@ -236,6 +237,13 @@ same as the Google Test name (i.e. ``suite.testcase``); see also
problem. The ambiguous behavior of the ``TIMEOUT`` keyword in 3.10.1
and 3.10.2 has not been preserved.
+ ``XML_OUTPUT_DIR dir``
+ If specified, the parameter is passed along with ``--gtest_output=xml:``
+ to test executable. The actual file name is the same as the test target,
+ including prefix and suffix. This should be used instead of
+ ``EXTRA_ARGS --gtest_output=xml`` to avoid race conditions writing the
+ XML result output when using parallel test execution.
+
#]=======================================================================]
# Save project's policies
@@ -372,7 +380,7 @@ function(gtest_discover_tests TARGET)
cmake_parse_arguments(
""
"NO_PRETTY_TYPES;NO_PRETTY_VALUES"
- "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST;DISCOVERY_TIMEOUT"
+ "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST;DISCOVERY_TIMEOUT;XML_OUTPUT_DIR"
"EXTRA_ARGS;PROPERTIES"
${ARGN}
)
@@ -434,6 +442,7 @@ function(gtest_discover_tests TARGET)
-D "TEST_LIST=${_TEST_LIST}"
-D "CTEST_FILE=${ctest_tests_file}"
-D "TEST_DISCOVERY_TIMEOUT=${_DISCOVERY_TIMEOUT}"
+ -D "TEST_XML_OUTPUT_DIR=${_XML_OUTPUT_DIR}"
-P "${_GOOGLETEST_DISCOVER_TESTS_SCRIPT}"
VERBATIM
)