2e2939c365
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
207 lines
6.1 KiB
CMake
207 lines
6.1 KiB
CMake
#.rst:
|
|
# FindGTest
|
|
# ---------
|
|
#
|
|
# Locate the Google C++ Testing Framework.
|
|
#
|
|
# Defines the following variables:
|
|
#
|
|
# ::
|
|
#
|
|
# GTEST_FOUND - Found the Google Testing framework
|
|
# GTEST_INCLUDE_DIRS - Include directories
|
|
#
|
|
#
|
|
#
|
|
# Also defines the library variables below as normal variables. These
|
|
# contain debug/optimized keywords when a debugging library is found.
|
|
#
|
|
# ::
|
|
#
|
|
# GTEST_BOTH_LIBRARIES - Both libgtest & libgtest-main
|
|
# GTEST_LIBRARIES - libgtest
|
|
# GTEST_MAIN_LIBRARIES - libgtest-main
|
|
#
|
|
#
|
|
#
|
|
# Accepts the following variables as input:
|
|
#
|
|
# ::
|
|
#
|
|
# GTEST_ROOT - (as a CMake or environment variable)
|
|
# The root directory of the gtest install prefix
|
|
#
|
|
#
|
|
#
|
|
# ::
|
|
#
|
|
# GTEST_MSVC_SEARCH - If compiling with MSVC, this variable can be set to
|
|
# "MD" or "MT" to enable searching a GTest build tree
|
|
# (defaults: "MD")
|
|
#
|
|
#
|
|
#
|
|
# Example Usage:
|
|
#
|
|
# ::
|
|
#
|
|
# enable_testing()
|
|
# find_package(GTest REQUIRED)
|
|
# include_directories(${GTEST_INCLUDE_DIRS})
|
|
#
|
|
#
|
|
#
|
|
# ::
|
|
#
|
|
# add_executable(foo foo.cc)
|
|
# target_link_libraries(foo ${GTEST_BOTH_LIBRARIES})
|
|
#
|
|
#
|
|
#
|
|
# ::
|
|
#
|
|
# add_test(AllTestsInFoo foo)
|
|
#
|
|
#
|
|
#
|
|
#
|
|
#
|
|
# If you would like each Google test to show up in CTest as a test you
|
|
# may use the following macro. NOTE: It will slow down your tests by
|
|
# running an executable for each test and test fixture. You will also
|
|
# have to rerun CMake after adding or removing tests or test fixtures.
|
|
#
|
|
# GTEST_ADD_TESTS(executable extra_args ARGN)
|
|
#
|
|
# ::
|
|
#
|
|
# executable = The path to the test executable
|
|
# extra_args = Pass a list of extra arguments to be passed to
|
|
# executable enclosed in quotes (or "" for none)
|
|
# ARGN = A list of source files to search for tests & test
|
|
# fixtures. Or AUTO to find them from executable target.
|
|
#
|
|
#
|
|
#
|
|
# ::
|
|
#
|
|
# Example:
|
|
# set(FooTestArgs --foo 1 --bar 2)
|
|
# add_executable(FooTest FooUnitTest.cc)
|
|
# GTEST_ADD_TESTS(FooTest "${FooTestArgs}" AUTO)
|
|
|
|
#=============================================================================
|
|
# Copyright 2009 Kitware, Inc.
|
|
# Copyright 2009 Philip Lowman <philip@yhbt.com>
|
|
# Copyright 2009 Daniel Blezek <blezek@gmail.com>
|
|
#
|
|
# Distributed under the OSI-approved BSD License (the "License");
|
|
# see accompanying file Copyright.txt for details.
|
|
#
|
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
# See the License for more information.
|
|
#=============================================================================
|
|
# (To distribute this file outside of CMake, substitute the full
|
|
# License text for the above reference.)
|
|
#
|
|
# Thanks to Daniel Blezek <blezek@gmail.com> for the GTEST_ADD_TESTS code
|
|
|
|
function(GTEST_ADD_TESTS executable extra_args)
|
|
if(NOT ARGN)
|
|
message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS")
|
|
endif()
|
|
if(ARGN STREQUAL "AUTO")
|
|
# obtain sources used for building that executable
|
|
get_property(ARGN TARGET ${executable} PROPERTY SOURCES)
|
|
endif()
|
|
set(gtest_case_name_regex ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*")
|
|
foreach(source ${ARGN})
|
|
file(READ "${source}" contents)
|
|
string(REGEX MATCHALL "TEST_?[FP]?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})
|
|
foreach(hit ${found_tests})
|
|
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})
|
|
endforeach()
|
|
endforeach()
|
|
endfunction()
|
|
|
|
function(_gtest_append_debugs _endvar _library)
|
|
if(${_library} AND ${_library}_DEBUG)
|
|
set(_output optimized ${${_library}} debug ${${_library}_DEBUG})
|
|
else()
|
|
set(_output ${${_library}})
|
|
endif()
|
|
set(${_endvar} ${_output} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(_gtest_find_library _name)
|
|
find_library(${_name}
|
|
NAMES ${ARGN}
|
|
HINTS
|
|
ENV GTEST_ROOT
|
|
${GTEST_ROOT}
|
|
PATH_SUFFIXES ${_gtest_libpath_suffixes}
|
|
)
|
|
mark_as_advanced(${_name})
|
|
endfunction()
|
|
|
|
#
|
|
|
|
if(NOT DEFINED GTEST_MSVC_SEARCH)
|
|
set(GTEST_MSVC_SEARCH MD)
|
|
endif()
|
|
|
|
set(_gtest_libpath_suffixes lib)
|
|
if(MSVC)
|
|
if(GTEST_MSVC_SEARCH STREQUAL "MD")
|
|
list(APPEND _gtest_libpath_suffixes
|
|
msvc/gtest-md/Debug
|
|
msvc/gtest-md/Release)
|
|
elseif(GTEST_MSVC_SEARCH STREQUAL "MT")
|
|
list(APPEND _gtest_libpath_suffixes
|
|
msvc/gtest/Debug
|
|
msvc/gtest/Release)
|
|
endif()
|
|
endif()
|
|
|
|
|
|
find_path(GTEST_INCLUDE_DIR gtest/gtest.h
|
|
HINTS
|
|
$ENV{GTEST_ROOT}/include
|
|
${GTEST_ROOT}/include
|
|
)
|
|
mark_as_advanced(GTEST_INCLUDE_DIR)
|
|
|
|
if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD")
|
|
# The provided /MD project files for Google Test add -md suffixes to the
|
|
# library names.
|
|
_gtest_find_library(GTEST_LIBRARY gtest-md gtest)
|
|
_gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd)
|
|
_gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main)
|
|
_gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind)
|
|
else()
|
|
_gtest_find_library(GTEST_LIBRARY gtest)
|
|
_gtest_find_library(GTEST_LIBRARY_DEBUG gtestd)
|
|
_gtest_find_library(GTEST_MAIN_LIBRARY gtest_main)
|
|
_gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
|
|
endif()
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
|
|
|
|
if(GTEST_FOUND)
|
|
set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
|
|
_gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY)
|
|
_gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY)
|
|
set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
|
|
endif()
|
|
|