Fix INSTANTIATE_TEST_CASE_P with zero variadic arguments
This commit is contained in:
parent
0adeadd283
commit
7c4164bf40
|
@ -544,9 +544,9 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
|
||||||
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
|
||||||
void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
|
void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
|
||||||
|
|
||||||
// The optional last argument to INSTANTIATE_TEST_SUITE_P allows the user
|
// The last argument to INSTANTIATE_TEST_SUITE_P allows the user to specify generator
|
||||||
// to specify a function or functor that generates custom test name suffixes
|
// and an optional function or functor that generates custom test name suffixes
|
||||||
// based on the test parameters. The function should accept one argument of
|
// based on the test parameters. Such a function or functor should accept one argument of
|
||||||
// type testing::TestParamInfo<class ParamType>, and return std::string.
|
// type testing::TestParamInfo<class ParamType>, and return std::string.
|
||||||
//
|
//
|
||||||
// testing::PrintToStringParamName is a builtin test suffix generator that
|
// testing::PrintToStringParamName is a builtin test suffix generator that
|
||||||
|
@ -556,15 +556,15 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
|
||||||
// alphanumeric characters or underscore. Because PrintToString adds quotes
|
// alphanumeric characters or underscore. Because PrintToString adds quotes
|
||||||
// to std::string and C strings, it won't work for these types.
|
// to std::string and C strings, it won't work for these types.
|
||||||
|
|
||||||
#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, generator, ...) \
|
#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...) \
|
||||||
static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \
|
static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \
|
||||||
gtest_##prefix##test_suite_name##_EvalGenerator_() { \
|
gtest_##prefix##test_suite_name##_EvalGenerator_() { \
|
||||||
return generator; \
|
return VA_GETFIRST(__VA_ARGS__); \
|
||||||
} \
|
} \
|
||||||
static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \
|
static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \
|
||||||
const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \
|
const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \
|
||||||
return ::testing::internal::GetParamNameGen<test_suite_name::ParamType>( \
|
return ::testing::internal::CreateParamGenerator< \
|
||||||
__VA_ARGS__)(info); \
|
test_suite_name::ParamType>(VA_GETREST(__VA_ARGS__, 0))(info); \
|
||||||
} \
|
} \
|
||||||
static int gtest_##prefix##test_suite_name##_dummy_ \
|
static int gtest_##prefix##test_suite_name##_dummy_ \
|
||||||
GTEST_ATTRIBUTE_UNUSED_ = \
|
GTEST_ATTRIBUTE_UNUSED_ = \
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
#include <type_traits>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -396,6 +397,30 @@ typename ParamNameGenFunc<ParamType>::Type *GetParamNameGen() {
|
||||||
return DefaultParamName;
|
return DefaultParamName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
|
||||||
|
//
|
||||||
|
// Macroses allow to address an issue with zero element variadic macro
|
||||||
|
|
||||||
|
#define EXPAND(X) X
|
||||||
|
#define VA__GETFIRST(X, ...) X
|
||||||
|
#define VA_GETFIRST(...) EXPAND(VA__GETFIRST(__VA_ARGS__, 0))
|
||||||
|
#define VA_GETREST(X, ...) __VA_ARGS__
|
||||||
|
|
||||||
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
|
||||||
|
//
|
||||||
|
// Function is intended to swallow 0 as last argument and call GetParamNameGen
|
||||||
|
|
||||||
|
template <class ParamType>
|
||||||
|
auto CreateParamGenerator(int) -> decltype(GetParamNameGen<ParamType>()) {
|
||||||
|
return GetParamNameGen<ParamType>();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class ParamType, class Arg>
|
||||||
|
auto CreateParamGenerator(Arg&& arg, int) -> decltype(
|
||||||
|
GetParamNameGen<ParamType>(std::forward<Arg>(arg))) {
|
||||||
|
return GetParamNameGen<ParamType>(std::forward<Arg>(arg));
|
||||||
|
}
|
||||||
|
|
||||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
|
||||||
//
|
//
|
||||||
// Stores a parameter value and later creates tests parameterized with that
|
// Stores a parameter value and later creates tests parameterized with that
|
||||||
|
|
Loading…
Reference in New Issue
Block a user