mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 08:20:18 -06:00
GoogleTest: Fix multiple discovery on same target
According to the documentation, tests can be discovered for a target multiple times by using a different prefix and/or suffix to ensure name uniqueness. However, while this worked for gtest_add_tests, it did not work with gtest_discover_tests because the generated file that sets up the tests was named based only on the target name, and so subsequent discovery from the same target would clobber earlier discovery. Fix this by introducing a counter that records how many times discovery has been used on a target, and use this to generate unique names of the generated test list files.
This commit is contained in:
committed by
Brad King
parent
7746fdb2fe
commit
70f9f62da8
@@ -361,9 +361,32 @@ function(gtest_discover_tests TARGET)
|
||||
set(_TEST_LIST ${TARGET}_TESTS)
|
||||
endif()
|
||||
|
||||
get_property(
|
||||
has_counter
|
||||
TARGET ${TARGET}
|
||||
PROPERTY CTEST_DISCOVERED_TEST_COUNTER
|
||||
SET
|
||||
)
|
||||
if(has_counter)
|
||||
get_property(
|
||||
counter
|
||||
TARGET ${TARGET}
|
||||
PROPERTY CTEST_DISCOVERED_TEST_COUNTER
|
||||
)
|
||||
math(EXPR counter "${counter} + 1")
|
||||
else()
|
||||
set(counter 1)
|
||||
endif()
|
||||
set_property(
|
||||
TARGET ${TARGET}
|
||||
PROPERTY CTEST_DISCOVERED_TEST_COUNTER
|
||||
${counter}
|
||||
)
|
||||
|
||||
# Define rule to generate test list for aforementioned test executable
|
||||
set(ctest_include_file "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_include.cmake")
|
||||
set(ctest_tests_file "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_tests.cmake")
|
||||
set(ctest_file_base "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}[${counter}]")
|
||||
set(ctest_include_file "${ctest_file_base}_include.cmake")
|
||||
set(ctest_tests_file "${ctest_file_base}_tests.cmake")
|
||||
get_property(crosscompiling_emulator
|
||||
TARGET ${TARGET}
|
||||
PROPERTY CROSSCOMPILING_EMULATOR
|
||||
|
||||
25
Tests/RunCMake/GoogleTest/GoogleTest-test2-stdout.txt
Normal file
25
Tests/RunCMake/GoogleTest/GoogleTest-test2-stdout.txt
Normal file
@@ -0,0 +1,25 @@
|
||||
Test project .*
|
||||
Start 9: TEST:basic\.case_foo!2
|
||||
1/8 Test #9: TEST:basic\.case_foo!2 \.+ +Passed +[0-9.]+ sec
|
||||
Start 10: TEST:basic\.case_bar!2
|
||||
2/8 Test #10: TEST:basic\.case_bar!2 \.+ +Passed +[0-9.]+ sec
|
||||
Start 11: TEST:basic\.disabled_case!2
|
||||
3/8 Test #11: TEST:basic\.disabled_case!2 \.+\*+Not Run \(Disabled\) +[0-9.]+ sec
|
||||
Start 12: TEST:disabled\.case!2
|
||||
4/8 Test #12: TEST:disabled\.case!2 \.+\*+Not Run \(Disabled\) +[0-9.]+ sec
|
||||
Start 13: TEST:typed/short\.case!2
|
||||
5/8 Test #13: TEST:typed/short\.case!2 \.+ +Passed +[0-9.]+ sec
|
||||
Start 14: TEST:typed/float\.case!2
|
||||
6/8 Test #14: TEST:typed/float\.case!2 \.+ +Passed +[0-9.]+ sec
|
||||
Start 15: TEST:value/test\.case/1!2
|
||||
7/8 Test #15: TEST:value/test\.case/1!2 \.+ +Passed +[0-9.]+ sec
|
||||
Start 16: TEST:value/test\.case/"foo"!2
|
||||
8/8 Test #16: TEST:value/test\.case/"foo"!2 \.+ +Passed +[0-9.]+ sec
|
||||
|
||||
100% tests passed, 0 tests failed out of 6
|
||||
|
||||
Total Test time \(real\) = +[0-9.]+ sec
|
||||
|
||||
The following tests did not run:
|
||||
.*11 - TEST:basic\.disabled_case!2 \(Disabled\)
|
||||
.*12 - TEST:disabled\.case!2 \(Disabled\)
|
||||
@@ -11,5 +11,13 @@ gtest_discover_tests(
|
||||
TEST_PREFIX TEST:
|
||||
TEST_SUFFIX !1
|
||||
EXTRA_ARGS how now "\"brown\" cow"
|
||||
PROPERTIES LABELS TEST
|
||||
PROPERTIES LABELS TEST1
|
||||
)
|
||||
|
||||
gtest_discover_tests(
|
||||
fake_gtest
|
||||
TEST_PREFIX TEST:
|
||||
TEST_SUFFIX !2
|
||||
EXTRA_ARGS how now "\"brown\" cow"
|
||||
PROPERTIES LABELS TEST2
|
||||
)
|
||||
|
||||
@@ -15,10 +15,16 @@ function(run_GoogleTest)
|
||||
--build .
|
||||
--config Debug
|
||||
)
|
||||
run_cmake_command(GoogleTest-test
|
||||
run_cmake_command(GoogleTest-test1
|
||||
${CMAKE_CTEST_COMMAND}
|
||||
-C Debug
|
||||
-L TEST
|
||||
-L TEST1
|
||||
--no-label-summary
|
||||
)
|
||||
run_cmake_command(GoogleTest-test2
|
||||
${CMAKE_CTEST_COMMAND}
|
||||
-C Debug
|
||||
-L TEST2
|
||||
--no-label-summary
|
||||
)
|
||||
endfunction()
|
||||
|
||||
Reference in New Issue
Block a user