summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Scott <craig.scott@crascit.com>2021-11-14 17:22:28 +1100
committerBrad King <brad.king@kitware.com>2021-11-16 09:45:26 -0500
commit1bf6d5979d7fceae8b8a32129b5816bae459fb96 (patch)
treebd3aa76e7bf71173f7f5ccbd06fbf7788f2055e3
parent715af43124cbd99656c085cef4c37be1ea0cc7b0 (diff)
downloadcmake-1bf6d5979d7fceae8b8a32129b5816bae459fb96.tar.gz
gtest_discover_tests: Re-run PRE_TEST discovery on any arg change
Fixes: #22912
-rw-r--r--Modules/GoogleTest.cmake3
-rw-r--r--Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change-basic-stdout.txt7
-rw-r--r--Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change-typed-stdout.txt5
-rw-r--r--Tests/RunCMake/GoogleTest/GoogleTestDiscoveryArgChange.cmake14
-rw-r--r--Tests/RunCMake/GoogleTest/RunCMakeTest.cmake51
5 files changed, 79 insertions, 1 deletions
diff --git a/Modules/GoogleTest.cmake b/Modules/GoogleTest.cmake
index a483c0356d..fd14453730 100644
--- a/Modules/GoogleTest.cmake
+++ b/Modules/GoogleTest.cmake
@@ -513,7 +513,8 @@ function(gtest_discover_tests TARGET)
string(CONCAT ctest_include_content
"if(EXISTS \"$<TARGET_FILE:${TARGET}>\")" "\n"
" if(NOT EXISTS \"${ctest_tests_file}\" OR" "\n"
- " NOT \"${ctest_tests_file}\" IS_NEWER_THAN \"$<TARGET_FILE:${TARGET}>\")" "\n"
+ " NOT \"${ctest_tests_file}\" IS_NEWER_THAN \"$<TARGET_FILE:${TARGET}>\" OR\n"
+ " NOT \"${ctest_tests_file}\" IS_NEWER_THAN \"\${CMAKE_CURRENT_LIST_FILE}\")\n"
" include(\"${_GOOGLETEST_DISCOVER_TESTS_SCRIPT}\")" "\n"
" gtest_discover_tests_impl(" "\n"
" TEST_EXECUTABLE" " [==[" "$<TARGET_FILE:${TARGET}>" "]==]" "\n"
diff --git a/Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change-basic-stdout.txt b/Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change-basic-stdout.txt
new file mode 100644
index 0000000000..385159d65a
--- /dev/null
+++ b/Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change-basic-stdout.txt
@@ -0,0 +1,7 @@
+Test project .*/Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change
+ Test #1: basic\.case_foo
+ Test #2: basic\.case_bar
+ Test #3: basic\.disabled_case \(Disabled\)
+ Test #4: basic\.DISABLEDnot_really_case
+
+Total Tests: 4
diff --git a/Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change-typed-stdout.txt b/Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change-typed-stdout.txt
new file mode 100644
index 0000000000..095fdcded8
--- /dev/null
+++ b/Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change-typed-stdout.txt
@@ -0,0 +1,5 @@
+Test project .*/Tests/RunCMake/GoogleTest/GoogleTest-discovery-arg-change
+ Test #1: typed/short\.case
+ Test #2: typed/float\.case
+
+Total Tests: 2
diff --git a/Tests/RunCMake/GoogleTest/GoogleTestDiscoveryArgChange.cmake b/Tests/RunCMake/GoogleTest/GoogleTestDiscoveryArgChange.cmake
new file mode 100644
index 0000000000..e4e13c5f7e
--- /dev/null
+++ b/Tests/RunCMake/GoogleTest/GoogleTestDiscoveryArgChange.cmake
@@ -0,0 +1,14 @@
+enable_language(CXX)
+include(GoogleTest)
+
+enable_testing()
+
+include(xcode_sign_adhoc.cmake)
+
+add_executable(fake_gtest fake_gtest.cpp)
+xcode_sign_adhoc(fake_gtest)
+
+gtest_discover_tests(
+ fake_gtest
+ TEST_FILTER "${TEST_FILTER}*"
+)
diff --git a/Tests/RunCMake/GoogleTest/RunCMakeTest.cmake b/Tests/RunCMake/GoogleTest/RunCMakeTest.cmake
index c5c592507f..33a4b4353d 100644
--- a/Tests/RunCMake/GoogleTest/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GoogleTest/RunCMakeTest.cmake
@@ -1,5 +1,12 @@
include(RunCMake)
+if(RunCMake_GENERATOR STREQUAL "Borland Makefiles" OR
+ RunCMake_GENERATOR STREQUAL "Watcom WMake")
+ set(fs_delay 3)
+else()
+ set(fs_delay 1.125)
+endif()
+
function(run_GoogleTest DISCOVERY_MODE)
# Use a single build tree for a few tests without cleaning.
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/GoogleTest-build)
@@ -153,6 +160,46 @@ function(run_GoogleTest_discovery_timeout DISCOVERY_MODE)
)
endfunction()
+function(run_GoogleTest_discovery_arg_change DISCOVERY_MODE)
+ # Use a single build tree for a few tests without cleaning.
+ set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/GoogleTest-discovery-arg-change)
+ set(RunCMake_TEST_NO_CLEAN 1)
+ file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+ file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+
+ run_cmake_with_options(GoogleTestDiscoveryArgChange
+ -DCMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE=${DISCOVERY_MODE}
+ -DTEST_FILTER=basic
+ )
+ run_cmake_command(GoogleTest-discovery-arg-change-build
+ ${CMAKE_COMMAND}
+ --build .
+ --config Release
+ --target fake_gtest
+ )
+ run_cmake_command(GoogleTest-discovery-arg-change-basic
+ ${CMAKE_CTEST_COMMAND}
+ -C Release
+ -N
+ )
+ execute_process(COMMAND ${CMAKE_COMMAND} -E sleep ${fs_delay}) # handle 1s resolution
+ run_cmake_with_options(GoogleTestDiscoveryArgChange
+ -DCMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE=${DISCOVERY_MODE}
+ -DTEST_FILTER=typed
+ )
+ run_cmake_command(GoogleTest-discovery-arg-change-build
+ ${CMAKE_COMMAND}
+ --build .
+ --config Release
+ --target fake_gtest
+ )
+ run_cmake_command(GoogleTest-discovery-arg-change-typed
+ ${CMAKE_CTEST_COMMAND}
+ -C Release
+ -N
+ )
+endfunction()
+
function(run_GoogleTest_discovery_multi_config)
# Use a single build tree for a few tests without cleaning.
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/GoogleTest-discovery-multi-config)
@@ -195,6 +242,10 @@ foreach(DISCOVERY_MODE POST_BUILD PRE_TEST)
run_GoogleTestXML(${DISCOVERY_MODE})
message("Testing ${DISCOVERY_MODE} discovery mode via DISCOVERY_MODE option...")
run_GoogleTest_discovery_timeout(${DISCOVERY_MODE})
+ if(# VS 9 does not rebuild if POST_BUILD command changes.
+ NOT "${DISCOVERY_MODE};${RunCMake_GENERATOR}" MATCHES "^POST_BUILD;Visual Studio 9")
+ run_GoogleTest_discovery_arg_change(${DISCOVERY_MODE})
+ endif()
endforeach()
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)