FindGTest: Teach GTEST_ADD_TESTS about TEST_P

Previously the GTEST_ADD_TESTS function would miss parameterized tests
because it only considered TEST and TEST_F.  Add TEST_P to the list of
considered tests and will run all instantiations of this parameterized
test together.

This is perhaps not as correct as searching for all instantiations of
this parameterized test and separating those into separate runs, but
this will at least run tests that were previously missing.

For reference: https://code.google.com/p/googletest/wiki/Documentation
This commit is contained in:
Jack Morrison 2014-04-01 09:21:23 -04:00 committed by Brad King
parent e3e1ba3f78
commit 2e2939c365
1 changed files with 10 additions and 2 deletions

View File

@ -115,11 +115,19 @@ function(GTEST_ADD_TESTS executable extra_args)
# obtain sources used for building that executable # obtain sources used for building that executable
get_property(ARGN TARGET ${executable} PROPERTY SOURCES) get_property(ARGN TARGET ${executable} PROPERTY SOURCES)
endif() endif()
set(gtest_case_name_regex ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*")
foreach(source ${ARGN}) foreach(source ${ARGN})
file(READ "${source}" contents) file(READ "${source}" contents)
string(REGEX MATCHALL "TEST_?F?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents}) string(REGEX MATCHALL "TEST_?[FP]?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})
foreach(hit ${found_tests}) foreach(hit ${found_tests})
string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit}) string(REGEX MATCH "TEST_?[FP]?" test_type ${hit})
# Parameterized tests have a different signature for the filter
if(${test_type} STREQUAL "TEST_P")
string(REGEX REPLACE ${gtest_case_name_regex} "*/\\1.\\2/*" test_name ${hit})
else()
string(REGEX REPLACE ${gtest_case_name_regex} "\\1.\\2" test_name ${hit})
endif()
add_test(${test_name} ${executable} --gtest_filter=${test_name} ${extra_args}) add_test(${test_name} ${executable} --gtest_filter=${test_name} ${extra_args})
endforeach() endforeach()
endforeach() endforeach()