mirror of
https://github.com/google/googletest.git
synced 2024-12-27 18:31:21 +08:00
Merge pull request #1245 from sheepmaster/2017_09_04_parametrized
Allow macros inside of parametrized test names.
This commit is contained in:
commit
ff6796877f
@ -1375,7 +1375,10 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
|
|||||||
}
|
}
|
||||||
# endif // GTEST_HAS_COMBINE
|
# endif // GTEST_HAS_COMBINE
|
||||||
|
|
||||||
|
// Use a macro to stringify the test (case) name, because direct stringification
|
||||||
|
// does not work if one of the arguments is itself a macro
|
||||||
|
// (https://gcc.gnu.org/onlinedocs/cpp/Stringification.html).
|
||||||
|
# define GTEST_STRINGIFY_(name) #name
|
||||||
|
|
||||||
# define TEST_P(test_case_name, test_name) \
|
# define TEST_P(test_case_name, test_name) \
|
||||||
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
|
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
|
||||||
@ -1390,8 +1393,8 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
|
|||||||
#test_case_name, \
|
#test_case_name, \
|
||||||
::testing::internal::CodeLocation(\
|
::testing::internal::CodeLocation(\
|
||||||
__FILE__, __LINE__))->AddTestPattern(\
|
__FILE__, __LINE__))->AddTestPattern(\
|
||||||
#test_case_name, \
|
GTEST_STRINGIFY_(test_case_name), \
|
||||||
#test_name, \
|
GTEST_STRINGIFY_(test_name), \
|
||||||
new ::testing::internal::TestMetaFactory< \
|
new ::testing::internal::TestMetaFactory< \
|
||||||
GTEST_TEST_CLASS_NAME_(\
|
GTEST_TEST_CLASS_NAME_(\
|
||||||
test_case_name, test_name)>()); \
|
test_case_name, test_name)>()); \
|
||||||
@ -1412,11 +1415,11 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
|
|||||||
// 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
|
||||||
// returns the value of testing::PrintToString(GetParam()). It does not work
|
// returns the value of testing::PrintToString(GetParam()).
|
||||||
// for std::string or C strings.
|
|
||||||
//
|
//
|
||||||
// Note: test names must be non-empty, unique, and may only contain ASCII
|
// Note: test names must be non-empty, unique, and may only contain ASCII
|
||||||
// alphanumeric characters or underscore.
|
// alphanumeric characters or underscore. Because PrintToString adds quotes
|
||||||
|
// to std::string and C strings, it won't work for these types.
|
||||||
|
|
||||||
# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
|
# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
|
||||||
::testing::internal::ParamGenerator<test_case_name::ParamType> \
|
::testing::internal::ParamGenerator<test_case_name::ParamType> \
|
||||||
|
@ -441,7 +441,10 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
|
|||||||
]]
|
]]
|
||||||
# endif // GTEST_HAS_COMBINE
|
# endif // GTEST_HAS_COMBINE
|
||||||
|
|
||||||
|
// Use a macro to stringify the test (case) name, because direct stringification
|
||||||
|
// does not work if one of the arguments is itself a macro
|
||||||
|
// (https://gcc.gnu.org/onlinedocs/cpp/Stringification.html).
|
||||||
|
# define GTEST_STRINGIFY_(name) #name
|
||||||
|
|
||||||
# define TEST_P(test_case_name, test_name) \
|
# define TEST_P(test_case_name, test_name) \
|
||||||
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
|
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
|
||||||
@ -456,8 +459,8 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
|
|||||||
#test_case_name, \
|
#test_case_name, \
|
||||||
::testing::internal::CodeLocation(\
|
::testing::internal::CodeLocation(\
|
||||||
__FILE__, __LINE__))->AddTestPattern(\
|
__FILE__, __LINE__))->AddTestPattern(\
|
||||||
#test_case_name, \
|
GTEST_STRINGIFY_(test_case_name), \
|
||||||
#test_name, \
|
GTEST_STRINGIFY_(test_name), \
|
||||||
new ::testing::internal::TestMetaFactory< \
|
new ::testing::internal::TestMetaFactory< \
|
||||||
GTEST_TEST_CLASS_NAME_(\
|
GTEST_TEST_CLASS_NAME_(\
|
||||||
test_case_name, test_name)>()); \
|
test_case_name, test_name)>()); \
|
||||||
|
@ -809,6 +809,34 @@ TEST_P(NamingTest, TestsReportCorrectNamesAndParameters) {
|
|||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(ZeroToFiveSequence, NamingTest, Range(0, 5));
|
INSTANTIATE_TEST_CASE_P(ZeroToFiveSequence, NamingTest, Range(0, 5));
|
||||||
|
|
||||||
|
// Tests that macros in test names are expanded correctly.
|
||||||
|
class MacroNamingTest : public TestWithParam<int> {};
|
||||||
|
|
||||||
|
#define PREFIX_WITH_FOO(test_name) FOO_##test_name
|
||||||
|
#define PREFIX_WITH_MACRO(test_name) Macro##test_name
|
||||||
|
|
||||||
|
TEST_P(PREFIX_WITH_MACRO(NamingTest), PREFIX_WITH_FOO(SomeTestName)) {
|
||||||
|
const ::testing::TestInfo* const test_info =
|
||||||
|
::testing::UnitTest::GetInstance()->current_test_info();
|
||||||
|
|
||||||
|
EXPECT_STREQ("FortyTwo/MacroNamingTest", test_info->test_case_name());
|
||||||
|
EXPECT_STREQ("FOO_SomeTestName", test_info->name());
|
||||||
|
}
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_CASE_P(FortyTwo, MacroNamingTest, Values(42));
|
||||||
|
|
||||||
|
// Tests the same thing for non-parametrized tests.
|
||||||
|
class MacroNamingTestNonParametrized : public ::testing::Test {};
|
||||||
|
|
||||||
|
TEST_F(PREFIX_WITH_MACRO(NamingTestNonParametrized),
|
||||||
|
PREFIX_WITH_FOO(SomeTestName)) {
|
||||||
|
const ::testing::TestInfo* const test_info =
|
||||||
|
::testing::UnitTest::GetInstance()->current_test_info();
|
||||||
|
|
||||||
|
EXPECT_STREQ("MacroNamingTestNonParametrized", test_info->test_case_name());
|
||||||
|
EXPECT_STREQ("FOO_SomeTestName", test_info->name());
|
||||||
|
}
|
||||||
|
|
||||||
// Tests that user supplied custom parameter names are working correctly.
|
// Tests that user supplied custom parameter names are working correctly.
|
||||||
// Runs the test with a builtin helper method which uses PrintToString,
|
// Runs the test with a builtin helper method which uses PrintToString,
|
||||||
// as well as a custom function and custom functor to ensure all possible
|
// as well as a custom function and custom functor to ensure all possible
|
||||||
|
Loading…
x
Reference in New Issue
Block a user