diff options
author | Bernhard Bauer <bauerb@chromium.org> | 2016-02-04 11:50:08 (GMT) |
---|---|---|
committer | Bernhard Bauer <bauerb@chromium.org> | 2017-09-04 14:46:31 (GMT) |
commit | e7c9e80e63e5cdcd3252ed81c9d3dbf0a7fb6841 (patch) | |
tree | 26e4e942b928684de6131214dcdb2afa402c9be0 /googletest | |
parent | 7c6353d29a147cad1c904bf2957fd4ca2befe135 (diff) | |
download | googletest-e7c9e80e63e5cdcd3252ed81c9d3dbf0a7fb6841.zip googletest-e7c9e80e63e5cdcd3252ed81c9d3dbf0a7fb6841.tar.gz googletest-e7c9e80e63e5cdcd3252ed81c9d3dbf0a7fb6841.tar.bz2 |
Allow macros inside of parametrized test names.
This allows doing things like TEST_P(TestFixture, MAYBE(TestName)) for nicer conditional test disabling.
Diffstat (limited to 'googletest')
-rw-r--r-- | googletest/include/gtest/gtest-param-test.h | 15 | ||||
-rw-r--r-- | googletest/include/gtest/gtest-param-test.h.pump | 9 | ||||
-rw-r--r-- | googletest/test/gtest-param-test_test.cc | 16 |
3 files changed, 31 insertions, 9 deletions
diff --git a/googletest/include/gtest/gtest-param-test.h b/googletest/include/gtest/gtest-param-test.h index 038f9ba..e01c3ff 100644 --- a/googletest/include/gtest/gtest-param-test.h +++ b/googletest/include/gtest/gtest-param-test.h @@ -1375,7 +1375,10 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3, } # 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) \ class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ @@ -1390,8 +1393,8 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3, #test_case_name, \ ::testing::internal::CodeLocation(\ __FILE__, __LINE__))->AddTestPattern(\ - #test_case_name, \ - #test_name, \ + GTEST_STRINGIFY_(test_case_name), \ + GTEST_STRINGIFY_(test_name), \ new ::testing::internal::TestMetaFactory< \ GTEST_TEST_CLASS_NAME_(\ test_case_name, test_name)>()); \ @@ -1412,11 +1415,11 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3, // type testing::TestParamInfo<class ParamType>, and return std::string. // // testing::PrintToStringParamName is a builtin test suffix generator that -// returns the value of testing::PrintToString(GetParam()). It does not work -// for std::string or C strings. +// returns the value of testing::PrintToString(GetParam()). // // 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, ...) \ ::testing::internal::ParamGenerator<test_case_name::ParamType> \ diff --git a/googletest/include/gtest/gtest-param-test.h.pump b/googletest/include/gtest/gtest-param-test.h.pump index 3078d6d..8ab18dd 100644 --- a/googletest/include/gtest/gtest-param-test.h.pump +++ b/googletest/include/gtest/gtest-param-test.h.pump @@ -441,7 +441,10 @@ internal::CartesianProductHolder$i<$for j, [[Generator$j]]> 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) \ 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, \ ::testing::internal::CodeLocation(\ __FILE__, __LINE__))->AddTestPattern(\ - #test_case_name, \ - #test_name, \ + GTEST_STRINGIFY_(test_case_name), \ + GTEST_STRINGIFY_(test_name), \ new ::testing::internal::TestMetaFactory< \ GTEST_TEST_CLASS_NAME_(\ test_case_name, test_name)>()); \ diff --git a/googletest/test/gtest-param-test_test.cc b/googletest/test/gtest-param-test_test.cc index 857f6c5..a6ecef6 100644 --- a/googletest/test/gtest-param-test_test.cc +++ b/googletest/test/gtest-param-test_test.cc @@ -809,6 +809,22 @@ TEST_P(NamingTest, TestsReportCorrectNamesAndParameters) { 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 that user supplied custom parameter names are working correctly. // Runs the test with a builtin helper method which uses PrintToString, // as well as a custom function and custom functor to ensure all possible |