Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d2ca3ca authored by Haibo Huang's avatar Haibo Huang
Browse files

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
parent 5adcaebd
Loading
Loading
Loading
Loading
+23 −12
Original line number Diff line number Diff line
@@ -82,13 +82,24 @@ inline void EGMockFlippedComma_(std::function<void()> returned, std::function<vo
    };                                                                \
    return EGMockFlippedComma_<decltype(invokeMock())>(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<N-1>::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.
@@ -96,7 +107,7 @@ inline void EGMockFlippedComma_(std::function<void()> returned, std::function<vo
#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) { \
    virtual EGMOCK_RESULT_(, __VA_ARGS__) Method(EGMOCK_ARG_(, 1, __VA_ARGS__) egmock_a1) { \
        EGMOCK_TIMEOUT_METHOD_BODY_(Method, egmock_a1);                                     \
    }

@@ -106,8 +117,8 @@ inline void EGMockFlippedComma_(std::function<void()> returned, std::function<vo
#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) { \
    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);                                 \
    }