Googletest export
Address -Wgnu-zero-variadic-macro-arguments Originally in OSS PR #2063 https://github.com/google/googletest/pull/2063 Fix regression in INSTANTIATE_TEST_SUITE_P macro to accept function pointers properly. PiperOrigin-RevId: 232316698
This commit is contained in:
		@@ -544,10 +544,11 @@ 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
 | 
				
			||||||
// to specify a function or functor that generates custom test name suffixes
 | 
					// generator and an optional function or functor that generates custom test name
 | 
				
			||||||
// based on the test parameters. The function should accept one argument of
 | 
					// suffixes based on the test parameters. Such a function or functor should
 | 
				
			||||||
// type testing::TestParamInfo<class ParamType>, and return std::string.
 | 
					// accept one argument of 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
 | 
				
			||||||
// returns the value of testing::PrintToString(GetParam()).
 | 
					// returns the value of testing::PrintToString(GetParam()).
 | 
				
			||||||
@@ -556,15 +557,30 @@ 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 GTEST_EXPAND_(arg) arg
 | 
				
			||||||
 | 
					#define GTEST_GET_FIRST_(first, ...) first
 | 
				
			||||||
 | 
					#define GTEST_GET_SECOND_(first, second, ...) second
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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 GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_));        \
 | 
				
			||||||
  }                                                                           \
 | 
					  }                                                                           \
 | 
				
			||||||
  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>(  \
 | 
					    if (::testing::internal::AlwaysFalse()) {                                 \
 | 
				
			||||||
        __VA_ARGS__)(info);                                                   \
 | 
					      ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_(      \
 | 
				
			||||||
 | 
					          __VA_ARGS__,                                                        \
 | 
				
			||||||
 | 
					          ::testing::internal::DefaultParamName<test_suite_name::ParamType>,  \
 | 
				
			||||||
 | 
					          DUMMY_PARAM_)));                                                    \
 | 
				
			||||||
 | 
					      auto t = std::make_tuple(__VA_ARGS__);                                  \
 | 
				
			||||||
 | 
					      static_assert(std::tuple_size<decltype(t)>::value <= 2,                 \
 | 
				
			||||||
 | 
					                    "Too Many Args!");                                        \
 | 
				
			||||||
 | 
					    }                                                                         \
 | 
				
			||||||
 | 
					    return ((GTEST_EXPAND_(GTEST_GET_SECOND_(                                 \
 | 
				
			||||||
 | 
					        __VA_ARGS__,                                                          \
 | 
				
			||||||
 | 
					        ::testing::internal::DefaultParamName<test_suite_name::ParamType>,    \
 | 
				
			||||||
 | 
					        DUMMY_PARAM_))))(info);                                               \
 | 
				
			||||||
  }                                                                           \
 | 
					  }                                                                           \
 | 
				
			||||||
  static int gtest_##prefix##test_suite_name##_dummy_                         \
 | 
					  static int gtest_##prefix##test_suite_name##_dummy_                         \
 | 
				
			||||||
      GTEST_ATTRIBUTE_UNUSED_ =                                               \
 | 
					      GTEST_ATTRIBUTE_UNUSED_ =                                               \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -376,25 +376,12 @@ std::string DefaultParamName(const TestParamInfo<ParamType>& info) {
 | 
				
			|||||||
  return name_stream.GetString();
 | 
					  return name_stream.GetString();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
					template <typename T = int>
 | 
				
			||||||
//
 | 
					void TestNotEmpty() {
 | 
				
			||||||
// Parameterized test name overload helpers, which help the
 | 
					  static_assert(sizeof(T) == 0, "Empty arguments are not allowed.");
 | 
				
			||||||
// INSTANTIATE_TEST_SUITE_P macro choose between the default parameterized
 | 
					 | 
				
			||||||
// test name generator and user param name generator.
 | 
					 | 
				
			||||||
template <class ParamType, class ParamNameGenFunctor>
 | 
					 | 
				
			||||||
ParamNameGenFunctor GetParamNameGen(ParamNameGenFunctor func) {
 | 
					 | 
				
			||||||
  return func;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <class ParamType>
 | 
					 | 
				
			||||||
struct ParamNameGenFunc {
 | 
					 | 
				
			||||||
  typedef std::string Type(const TestParamInfo<ParamType>&);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <class ParamType>
 | 
					 | 
				
			||||||
typename ParamNameGenFunc<ParamType>::Type *GetParamNameGen() {
 | 
					 | 
				
			||||||
  return DefaultParamName;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					template <typename T = int>
 | 
				
			||||||
 | 
					void TestNotEmpty(const T&) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
					// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
@@ -500,7 +487,7 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase {
 | 
				
			|||||||
  using ParamType = typename TestSuite::ParamType;
 | 
					  using ParamType = typename TestSuite::ParamType;
 | 
				
			||||||
  // A function that returns an instance of appropriate generator type.
 | 
					  // A function that returns an instance of appropriate generator type.
 | 
				
			||||||
  typedef ParamGenerator<ParamType>(GeneratorCreationFunc)();
 | 
					  typedef ParamGenerator<ParamType>(GeneratorCreationFunc)();
 | 
				
			||||||
  typedef typename ParamNameGenFunc<ParamType>::Type ParamNameGeneratorFunc;
 | 
					  using ParamNameGeneratorFunc = std::string(const TestParamInfo<ParamType>&);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  explicit ParameterizedTestSuiteInfo(const char* name,
 | 
					  explicit ParameterizedTestSuiteInfo(const char* name,
 | 
				
			||||||
                                      CodeLocation code_location)
 | 
					                                      CodeLocation code_location)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -853,6 +853,10 @@ INSTANTIATE_TEST_SUITE_P(CustomParamNameFunction, CustomFunctionNamingTest,
 | 
				
			|||||||
                         Values(std::string("FunctionName")),
 | 
					                         Values(std::string("FunctionName")),
 | 
				
			||||||
                         CustomParamNameFunction);
 | 
					                         CustomParamNameFunction);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INSTANTIATE_TEST_SUITE_P(CustomParamNameFunctionP, CustomFunctionNamingTest,
 | 
				
			||||||
 | 
					                         Values(std::string("FunctionNameP")),
 | 
				
			||||||
 | 
					                         &CustomParamNameFunction);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Test custom naming with a lambda
 | 
					// Test custom naming with a lambda
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CustomLambdaNamingTest : public TestWithParam<std::string> {};
 | 
					class CustomLambdaNamingTest : public TestWithParam<std::string> {};
 | 
				
			||||||
@@ -878,6 +882,7 @@ TEST(CustomNamingTest, CheckNameRegistry) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  EXPECT_EQ(1u, test_names.count("CustomTestNames/FunctorName"));
 | 
					  EXPECT_EQ(1u, test_names.count("CustomTestNames/FunctorName"));
 | 
				
			||||||
  EXPECT_EQ(1u, test_names.count("CustomTestNames/FunctionName"));
 | 
					  EXPECT_EQ(1u, test_names.count("CustomTestNames/FunctionName"));
 | 
				
			||||||
 | 
					  EXPECT_EQ(1u, test_names.count("CustomTestNames/FunctionNameP"));
 | 
				
			||||||
  EXPECT_EQ(1u, test_names.count("CustomTestNames/LambdaName"));
 | 
					  EXPECT_EQ(1u, test_names.count("CustomTestNames/LambdaName"));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user