mirror of
https://github.com/reactos/CMake.git
synced 2024-11-27 05:20:34 +00:00
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.
This commit is contained in:
parent
c3ab1c22b0
commit
e9ab39eb1d
@ -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
|
||||
)
|
||||
|
@ -99,6 +99,11 @@ foreach(line ${output})
|
||||
endif()
|
||||
string(REGEX REPLACE "^DISABLED_" "" pretty_test "${pretty_test}")
|
||||
string(REGEX REPLACE "#.*" "" test "${test}")
|
||||
if(NOT TEST_XML_OUTPUT_DIR STREQUAL "")
|
||||
set(TEST_XML_OUTPUT_PARAM "--gtest_output=xml:${TEST_XML_OUTPUT_DIR}/${prefix}${pretty_suite}.${pretty_test}${suffix}.xml")
|
||||
else()
|
||||
unset(TEST_XML_OUTPUT_PARAM)
|
||||
endif()
|
||||
# ...and add to script
|
||||
add_command(add_test
|
||||
"${prefix}${pretty_suite}.${pretty_test}${suffix}"
|
||||
@ -106,6 +111,7 @@ foreach(line ${output})
|
||||
"${TEST_EXECUTABLE}"
|
||||
"--gtest_filter=${suite}.${test}"
|
||||
"--gtest_also_run_disabled_tests"
|
||||
${TEST_XML_OUTPUT_PARAM}
|
||||
${extra_args}
|
||||
)
|
||||
if(suite MATCHES "^DISABLED" OR test MATCHES "^DISABLED")
|
||||
|
Loading…
Reference in New Issue
Block a user