From 2d2ca3ca41b202d6f8b2f3e9ad078bfaf23a17a5 Mon Sep 17 00:00:00 2001 From: Haibo Huang Date: Mon, 10 Feb 2020 14:04:35 -0800 Subject: [PATCH] Add definitions of GMOCK_RESULT_ and GMOCK_ARG_ These two definitions are removed in new googletest. Copy them here. (Ideally we should not depend on googletest internal. Change-Id: I399549dc33dce7a464e81978e0697fc649ff01b0 --- .../broadcastradio-vts-utils/mock-timeout.h | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/broadcastradio/common/vts/utils/include/broadcastradio-vts-utils/mock-timeout.h b/broadcastradio/common/vts/utils/include/broadcastradio-vts-utils/mock-timeout.h index f6cd6aed4a..8ab2b43d97 100644 --- a/broadcastradio/common/vts/utils/include/broadcastradio-vts-utils/mock-timeout.h +++ b/broadcastradio/common/vts/utils/include/broadcastradio-vts-utils/mock-timeout.h @@ -82,33 +82,44 @@ inline void EGMockFlippedComma_(std::function returned, std::function(invokeMock, notify); +// We define this as a variadic macro in case F contains unprotected +// commas (the same reason that we use variadic macros in other places +// in this file). +#define EGMOCK_RESULT_(tn, ...) \ + tn ::testing::internal::Function<__VA_ARGS__>::Result + +// The type of argument N of the given function type. +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define EGMOCK_ARG_(tn, N, ...) \ + tn ::testing::internal::Function<__VA_ARGS__>::template Arg::type + /** * Gmock MOCK_METHOD0 timeout-capable extension. */ #define MOCK_TIMEOUT_METHOD0(Method, ...) \ MOCK_METHOD0(egmock_##Method, __VA_ARGS__); \ EGMOCK_TIMEOUT_METHOD_DEF_(Method); \ - virtual GMOCK_RESULT_(, __VA_ARGS__) Method() { EGMOCK_TIMEOUT_METHOD_BODY_(Method); } + virtual EGMOCK_RESULT_(, __VA_ARGS__) Method() { EGMOCK_TIMEOUT_METHOD_BODY_(Method); } /** * Gmock MOCK_METHOD1 timeout-capable extension. */ -#define MOCK_TIMEOUT_METHOD1(Method, ...) \ - MOCK_METHOD1(egmock_##Method, __VA_ARGS__); \ - EGMOCK_TIMEOUT_METHOD_DEF_(Method); \ - virtual GMOCK_RESULT_(, __VA_ARGS__) Method(GMOCK_ARG_(, 1, __VA_ARGS__) egmock_a1) { \ - EGMOCK_TIMEOUT_METHOD_BODY_(Method, egmock_a1); \ +#define MOCK_TIMEOUT_METHOD1(Method, ...) \ + MOCK_METHOD1(egmock_##Method, __VA_ARGS__); \ + EGMOCK_TIMEOUT_METHOD_DEF_(Method); \ + virtual EGMOCK_RESULT_(, __VA_ARGS__) Method(EGMOCK_ARG_(, 1, __VA_ARGS__) egmock_a1) { \ + EGMOCK_TIMEOUT_METHOD_BODY_(Method, egmock_a1); \ } /** * Gmock MOCK_METHOD2 timeout-capable extension. */ -#define MOCK_TIMEOUT_METHOD2(Method, ...) \ - MOCK_METHOD2(egmock_##Method, __VA_ARGS__); \ - EGMOCK_TIMEOUT_METHOD_DEF_(Method); \ - virtual GMOCK_RESULT_(, __VA_ARGS__) \ - Method(GMOCK_ARG_(, 1, __VA_ARGS__) egmock_a1, GMOCK_ARG_(, 2, __VA_ARGS__) egmock_a2) { \ - EGMOCK_TIMEOUT_METHOD_BODY_(Method, egmock_a1, egmock_a2); \ +#define MOCK_TIMEOUT_METHOD2(Method, ...) \ + MOCK_METHOD2(egmock_##Method, __VA_ARGS__); \ + EGMOCK_TIMEOUT_METHOD_DEF_(Method); \ + virtual EGMOCK_RESULT_(, __VA_ARGS__) \ + Method(EGMOCK_ARG_(, 1, __VA_ARGS__) egmock_a1, EGMOCK_ARG_(, 2, __VA_ARGS__) egmock_a2) { \ + EGMOCK_TIMEOUT_METHOD_BODY_(Method, egmock_a1, egmock_a2); \ } /**