diff options
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | googletest/docs/advanced.md | 2 | ||||
-rw-r--r-- | googletest/include/gtest/gtest-param-test.h | 23 | ||||
-rw-r--r-- | googletest/include/gtest/internal/gtest-param-util.h | 22 |
4 files changed, 31 insertions, 18 deletions
diff --git a/.travis.yml b/.travis.yml index 23d55b2..3c52e78 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,7 +40,7 @@ matrix: - os: linux group: deprecated-2017Q4 compiler: clang - env: BUILD_TYPE=Release VERBOSE=1 CXX_FLAGS=-std=c++11 -Wgnu-zero-variadic-macro-arguments" + env: BUILD_TYPE=Release VERBOSE=1 CXX_FLAGS=-std=c++11 - os: linux compiler: clang env: BUILD_TYPE=Release VERBOSE=1 CXX_FLAGS=-std=c++11 NO_EXCEPTION=ON NO_RTTI=ON COMPILER_IS_GNUCXX=ON diff --git a/googletest/docs/advanced.md b/googletest/docs/advanced.md index acb7f24..dbe6694 100644 --- a/googletest/docs/advanced.md +++ b/googletest/docs/advanced.md @@ -1198,7 +1198,7 @@ also supports per-test-suite set-up/tear-down. To use it: 1. Outside your test fixture class (typically just below it), define those member variables, optionally giving them initial values. 1. In the same test fixture class, define a `static void SetUpTestSuite()` - function (remember not to spell it as **`SetupTestSuite`** with a small `u`!) + function (remember not to spell it as **`SetUpTestSuite`** with a small `u`!) to set up the shared resources and a `static void TearDownTestSuite()` function to tear them down. diff --git a/googletest/include/gtest/gtest-param-test.h b/googletest/include/gtest/gtest-param-test.h index 3f712cf..a0eecc6 100644 --- a/googletest/include/gtest/gtest-param-test.h +++ b/googletest/include/gtest/gtest-param-test.h @@ -544,11 +544,10 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3, GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() -// The last argument to INSTANTIATE_TEST_SUITE_P allows the user to specify -// generator and an optional function or functor that generates custom test name -// suffixes based on the test parameters. Such a function or functor should -// accept one argument of type testing::TestParamInfo<class ParamType>, and -// return std::string. +// The optional last argument to INSTANTIATE_TEST_SUITE_P allows the user +// to specify a function or functor that generates custom test name suffixes +// based on the test parameters. The function should accept one argument of +// 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()). @@ -557,21 +556,15 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3, // alphanumeric characters or underscore. Because PrintToString adds quotes // to std::string and C strings, it won't work for these types. -#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, ...) \ +#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, generator, ...) \ static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \ gtest_##prefix##test_suite_name##_EvalGenerator_() { \ - return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_)); \ + return generator; \ } \ static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \ const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \ - return GTEST_EXPAND_(GTEST_GET_SECOND_( \ - __VA_ARGS__, \ - ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \ - DUMMY_PARAM_))(info); \ + return ::testing::internal::GetParamNameGen<test_suite_name::ParamType>( \ + __VA_ARGS__)(info); \ } \ static int gtest_##prefix##test_suite_name##_dummy_ \ GTEST_ATTRIBUTE_UNUSED_ = \ diff --git a/googletest/include/gtest/internal/gtest-param-util.h b/googletest/include/gtest/internal/gtest-param-util.h index 12b1e52..bca7253 100644 --- a/googletest/include/gtest/internal/gtest-param-util.h +++ b/googletest/include/gtest/internal/gtest-param-util.h @@ -378,6 +378,26 @@ std::string DefaultParamName(const TestParamInfo<ParamType>& info) { // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // +// Parameterized test name overload helpers, which help the +// 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; +} + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// // Stores a parameter value and later creates tests parameterized with that // value. template <class TestClass> @@ -480,7 +500,7 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { using ParamType = typename TestSuite::ParamType; // A function that returns an instance of appropriate generator type. typedef ParamGenerator<ParamType>(GeneratorCreationFunc)(); - typedef std::string ParamNameGeneratorFunc(const TestParamInfo<ParamType>&); + typedef typename ParamNameGenFunc<ParamType>::Type ParamNameGeneratorFunc; explicit ParameterizedTestSuiteInfo(const char* name, CodeLocation code_location) |