Commit 70f9f62d authored by Matthew Woehlke's avatar Matthew Woehlke Committed by Brad King
Browse files

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.
parent 7746fdb2
......@@ -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
......
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()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment