34#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
35#define GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
60TEST_P(FooTest, DoesBlah) {
63 EXPECT_TRUE(foo.Blah(GetParam()));
67TEST_P(FooTest, HasBlahBlah) {
95INSTANTIATE_TEST_SUITE_P(InstantiationName,
97 Values(
"meeny",
"miny",
"moe"));
118const char* pets[] = {
"cat",
"dog"};
119INSTANTIATE_TEST_SUITE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));
163TEST_F(BaseTest, HasFoo) {
169 EXPECT_TRUE(foo.Blah(GetParam()));
177#include "gtest/internal/gtest-internal.h"
178#include "gtest/internal/gtest-param-util.h"
179#include "gtest/internal/gtest-port.h"
225template <
typename T,
typename IncrementT>
226internal::ParamGenerator<T> Range(T start, T end, IncrementT step) {
227 return internal::ParamGenerator<T>(
228 new internal::RangeGenerator<T, IncrementT>(start, end, step));
232internal::ParamGenerator<T> Range(T start, T end) {
233 return Range(start, end, 1);
291template <
typename ForwardIterator>
292internal::ParamGenerator<
293 typename std::iterator_traits<ForwardIterator>::value_type>
294ValuesIn(ForwardIterator begin, ForwardIterator end) {
295 typedef typename std::iterator_traits<ForwardIterator>::value_type ParamType;
296 return internal::ParamGenerator<ParamType>(
297 new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));
300template <
typename T,
size_t N>
301internal::ParamGenerator<T> ValuesIn(
const T (&array)[N]) {
302 return ValuesIn(array, array + N);
305template <
class Container>
306internal::ParamGenerator<typename Container::value_type> ValuesIn(
307 const Container& container) {
308 return ValuesIn(container.begin(), container.end());
331template <
typename... T>
332internal::ValueArray<T...> Values(T... v) {
333 return internal::ValueArray<T...>(std::move(v)...);
356inline internal::ParamGenerator<bool>
Bool() {
357 return Values(
false,
true);
404template <
typename... Generator>
405internal::CartesianProductHolder<Generator...> Combine(
const Generator&... g) {
406 return internal::CartesianProductHolder<Generator...>(g...);
409#define TEST_P(test_suite_name, test_name) \
410 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
411 : public test_suite_name { \
413 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
414 void TestBody() override; \
417 static int AddToRegistry() { \
418 ::testing::UnitTest::GetInstance() \
419 ->parameterized_test_registry() \
420 .GetTestSuitePatternHolder<test_suite_name>( \
421 GTEST_STRINGIFY_(test_suite_name), \
422 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
424 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
425 new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \
426 test_suite_name, test_name)>(), \
427 ::testing::internal::CodeLocation(__FILE__, __LINE__)); \
430 static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
431 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
434 int GTEST_TEST_CLASS_NAME_(test_suite_name, \
435 test_name)::gtest_registering_dummy_ = \
436 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
437 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
452#define GTEST_EXPAND_(arg) arg
453#define GTEST_GET_FIRST_(first, ...) first
454#define GTEST_GET_SECOND_(first, second, ...) second
456#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...) \
457 static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \
458 gtest_##prefix##test_suite_name##_EvalGenerator_() { \
459 return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_)); \
461 static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \
462 const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \
463 if (::testing::internal::AlwaysFalse()) { \
464 ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_( \
466 ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \
468 auto t = std::make_tuple(__VA_ARGS__); \
469 static_assert(std::tuple_size<decltype(t)>::value <= 2, \
472 return ((GTEST_EXPAND_(GTEST_GET_SECOND_( \
474 ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \
475 DUMMY_PARAM_))))(info); \
477 static int gtest_##prefix##test_suite_name##_dummy_ \
478 GTEST_ATTRIBUTE_UNUSED_ = \
479 ::testing::UnitTest::GetInstance() \
480 ->parameterized_test_registry() \
481 .GetTestSuitePatternHolder<test_suite_name>( \
482 GTEST_STRINGIFY_(test_suite_name), \
483 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
484 ->AddTestSuiteInstantiation( \
485 GTEST_STRINGIFY_(prefix), \
486 >est_##prefix##test_suite_name##_EvalGenerator_, \
487 >est_##prefix##test_suite_name##_EvalGenerateName_, \
492#define GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(T) \
493 namespace gtest_do_not_use_outside_namespace_scope {} \
494 static const ::testing::internal::MarkAsIgnored gtest_allow_ignore_##T( \
498#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
499#define INSTANTIATE_TEST_CASE_P \
500 static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \
502 INSTANTIATE_TEST_SUITE_P
Definition gtest-typed-test_test.cc:268
Definition gtest_pred_impl_unittest.cc:56