Googletest export
Correctly deal with stringification, and forbid empty arguments where they could slip thought, in the type parameterized test API. Note: even where empty args work, it's likely to result in technically invalid code by virtue of creating reserved identifiers: https://en.cppreference.com/w/cpp/language/identifiers PiperOrigin-RevId: 279330971
This commit is contained in:
parent
681454dae4
commit
d5707695cb
|
@ -169,6 +169,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
|
||||||
|
|
||||||
#endif // 0
|
#endif // 0
|
||||||
|
|
||||||
|
#include "gtest/internal/gtest-internal.h"
|
||||||
#include "gtest/internal/gtest-port.h"
|
#include "gtest/internal/gtest-port.h"
|
||||||
#include "gtest/internal/gtest-type-util.h"
|
#include "gtest/internal/gtest-type-util.h"
|
||||||
|
|
||||||
|
@ -194,6 +195,8 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
|
||||||
GTEST_NAME_GENERATOR_(CaseName)
|
GTEST_NAME_GENERATOR_(CaseName)
|
||||||
|
|
||||||
#define TYPED_TEST(CaseName, TestName) \
|
#define TYPED_TEST(CaseName, TestName) \
|
||||||
|
static_assert(sizeof(GTEST_STRINGIFY_(TestName)) > 1, \
|
||||||
|
"test-name must not be empty"); \
|
||||||
template <typename gtest_TypeParam_> \
|
template <typename gtest_TypeParam_> \
|
||||||
class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
|
class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
|
||||||
: public CaseName<gtest_TypeParam_> { \
|
: public CaseName<gtest_TypeParam_> { \
|
||||||
|
@ -211,7 +214,8 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
|
||||||
CaseName)>::Register("", \
|
CaseName)>::Register("", \
|
||||||
::testing::internal::CodeLocation( \
|
::testing::internal::CodeLocation( \
|
||||||
__FILE__, __LINE__), \
|
__FILE__, __LINE__), \
|
||||||
#CaseName, #TestName, 0, \
|
GTEST_STRINGIFY_(CaseName), \
|
||||||
|
GTEST_STRINGIFY_(TestName), 0, \
|
||||||
::testing::internal::GenerateNames< \
|
::testing::internal::GenerateNames< \
|
||||||
GTEST_NAME_GENERATOR_(CaseName), \
|
GTEST_NAME_GENERATOR_(CaseName), \
|
||||||
GTEST_TYPE_PARAMS_(CaseName)>()); \
|
GTEST_TYPE_PARAMS_(CaseName)>()); \
|
||||||
|
@ -278,12 +282,14 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
|
||||||
}; \
|
}; \
|
||||||
static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
|
static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
|
||||||
GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \
|
GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \
|
||||||
__FILE__, __LINE__, #SuiteName, #TestName); \
|
__FILE__, __LINE__, GTEST_STRINGIFY_(SuiteName), \
|
||||||
|
GTEST_STRINGIFY_(TestName)); \
|
||||||
} \
|
} \
|
||||||
template <typename gtest_TypeParam_> \
|
template <typename gtest_TypeParam_> \
|
||||||
void GTEST_SUITE_NAMESPACE_( \
|
void GTEST_SUITE_NAMESPACE_( \
|
||||||
SuiteName)::TestName<gtest_TypeParam_>::TestBody()
|
SuiteName)::TestName<gtest_TypeParam_>::TestBody()
|
||||||
|
|
||||||
|
// Note: this won't work correctly if the trailing arguments are macros.
|
||||||
#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \
|
#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \
|
||||||
namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
|
namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \
|
||||||
typedef ::testing::internal::Templates<__VA_ARGS__> gtest_AllTests_; \
|
typedef ::testing::internal::Templates<__VA_ARGS__> gtest_AllTests_; \
|
||||||
|
@ -302,13 +308,16 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
|
||||||
#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
|
#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
|
||||||
|
|
||||||
#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \
|
#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \
|
||||||
|
static_assert(sizeof(GTEST_STRINGIFY_(Prefix)) > 1, \
|
||||||
|
"test-suit-prefix must not be empty"); \
|
||||||
static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \
|
static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \
|
||||||
::testing::internal::TypeParameterizedTestSuite< \
|
::testing::internal::TypeParameterizedTestSuite< \
|
||||||
SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \
|
SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \
|
||||||
::testing::internal::GenerateTypeList<Types>::type>:: \
|
::testing::internal::GenerateTypeList<Types>::type>:: \
|
||||||
Register(#Prefix, \
|
Register(GTEST_STRINGIFY_(Prefix), \
|
||||||
::testing::internal::CodeLocation(__FILE__, __LINE__), \
|
::testing::internal::CodeLocation(__FILE__, __LINE__), \
|
||||||
>EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \
|
>EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), \
|
||||||
|
GTEST_STRINGIFY_(SuiteName), \
|
||||||
GTEST_REGISTERED_TEST_NAMES_(SuiteName), \
|
GTEST_REGISTERED_TEST_NAMES_(SuiteName), \
|
||||||
::testing::internal::GenerateNames< \
|
::testing::internal::GenerateNames< \
|
||||||
::testing::internal::NameGeneratorSelector< \
|
::testing::internal::NameGeneratorSelector< \
|
||||||
|
|
Loading…
Reference in New Issue
Block a user