try to fix compat with googletest 1.15 (#874)

Due to running containerized tests we had to cut and paste the `TEST_P`
macro definition in `googletest/include/gtest/gtest-param-test.h`, and
modify it as it isn't designed to be wrapped in any way. Unfortunately
this tends to change from release to release, usually in minor ways ...
but also google test specifically doesn't advertise its own version so
it can be hard to work around.

Lets try to fix compatibility with google test 1.15

Fixes #873
Authored-By: Brad House (@bradh352)
v1.30
Brad House 6 months ago
parent 465597e6b6
commit 41a3b35b27
  1. 94
      test/ares-test.h

94
test/ares-test.h vendored

@ -761,49 +761,57 @@ int RunInContainer(ContainerFilesystem *fs, const std::string &hostname,
} \ } \
int ICLASS_NAME(casename, testname)::InnerTestBody() int ICLASS_NAME(casename, testname)::InnerTestBody()
#define CONTAINED_TEST_P(test_suite_name, test_name, hostname, domainname, files) \ /* Derived from googletest/include/gtest/gtest-param-test.h, specifically the
class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ * TEST_P() macro, and some fixes to try to be compatible with different
: public test_suite_name { \ * versions. */
public: \ #ifndef GTEST_ATTRIBUTE_UNUSED_
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \ # define GTEST_ATTRIBUTE_UNUSED_
int InnerTestBody(); \ #endif
void TestBody() \ #ifndef GTEST_INTERNAL_ATTRIBUTE_MAYBE_UNUSED
{ \ # define GTEST_INTERNAL_ATTRIBUTE_MAYBE_UNUSED
ContainerFilesystem chroot(files, ".."); \ #endif
VoidToIntFn fn = \ # define CONTAINED_TEST_P(test_suite_name, test_name, hostname, domainname, \
[this](void) -> int { \ files) \
ares_reinit(this->channel_); \ class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
ares_sleep_time(100); \ : public test_suite_name { \
return this->InnerTestBody(); \ public: \
}; \ GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() \
EXPECT_EQ(0, RunInContainer(&chroot, hostname, domainname, fn)); \ { \
} \ } \
\ int InnerTestBody(); \
private: \ void TestBody() \
static int AddToRegistry() { \ { \
::testing::UnitTest::GetInstance() \ ContainerFilesystem chroot(files, ".."); \
->parameterized_test_registry() \ VoidToIntFn fn = [this](void) -> int { \
.GetTestSuitePatternHolder<test_suite_name>( \ ares_reinit(this->channel_); \
GTEST_STRINGIFY_(test_suite_name), \ ares_sleep_time(100); \
::testing::internal::CodeLocation(__FILE__, __LINE__)) \ return this->InnerTestBody(); \
->AddTestPattern( \ }; \
GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \ EXPECT_EQ(0, RunInContainer(&chroot, hostname, domainname, fn)); \
new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \ } \
test_suite_name, test_name)>(), \ \
::testing::internal::CodeLocation(__FILE__, __LINE__)); \ private: \
return 0; \ static int AddToRegistry() \
} \ { \
static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \ ::testing::UnitTest::GetInstance() \
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ ->parameterized_test_registry() \
(const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete; \ .GetTestSuitePatternHolder<test_suite_name>( \
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \ GTEST_STRINGIFY_(test_suite_name), \
const GTEST_TEST_CLASS_NAME_(test_suite_name, \ ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
test_name) &) = delete; /* NOLINT */ \ ->AddTestPattern( \
}; \ GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
int GTEST_TEST_CLASS_NAME_(test_suite_name, \ new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \
test_name)::gtest_registering_dummy_ = \ test_suite_name, test_name)>(), \
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ ::testing::internal::CodeLocation(__FILE__, __LINE__)); \
int GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::InnerTestBody() return 0; \
} \
GTEST_INTERNAL_ATTRIBUTE_MAYBE_UNUSED static int \
gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
}; \
int GTEST_TEST_CLASS_NAME_(test_suite_name, \
test_name)::gtest_registering_dummy_ = \
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
int GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::InnerTestBody()
#endif #endif

Loading…
Cancel
Save