xref: /aosp_15_r20/external/cronet/base/test/mock_callback.h.pump (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker$$ This is a pump file for generating file templates.  Pump is a python
2*6777b538SAndroid Build Coastguard Worker$$ script that is part of the Google Test suite of utilities.  Description
3*6777b538SAndroid Build Coastguard Worker$$ can be found here:
4*6777b538SAndroid Build Coastguard Worker$$
5*6777b538SAndroid Build Coastguard Worker$$ https://github.com/google/googletest/blob/main/googletest/docs/PumpManual.md
6*6777b538SAndroid Build Coastguard Worker$$
7*6777b538SAndroid Build Coastguard Worker$$ MAX_ARITY controls the number of arguments that MockCallback supports.
8*6777b538SAndroid Build Coastguard Worker$$ It is choosen to match the number GMock supports.
9*6777b538SAndroid Build Coastguard Worker$var MAX_ARITY = 10
10*6777b538SAndroid Build Coastguard Worker$$
11*6777b538SAndroid Build Coastguard Worker// Copyright 2017 The Chromium Authors
12*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
13*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file.
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker// Analogous to GMock's built-in MockFunction, but for base::{Once,
16*6777b538SAndroid Build Coastguard Worker// Repeating}Callback instead of std::function. It takes the full callback type
17*6777b538SAndroid Build Coastguard Worker// as a parameter, so that it can support both OnceCallback and
18*6777b538SAndroid Build Coastguard Worker// RepeatingCallback. Furthermore, this file defines convenience typedefs in the
19*6777b538SAndroid Build Coastguard Worker// form of MockOnceCallback<Signature>, MockRepeatingCallback<Signature>,
20*6777b538SAndroid Build Coastguard Worker// MockOnceClosure and MockRepeatingClosure.
21*6777b538SAndroid Build Coastguard Worker//
22*6777b538SAndroid Build Coastguard Worker// Use:
23*6777b538SAndroid Build Coastguard Worker//   using FooCallback = base::RepeatingCallback<int(std::string)>;
24*6777b538SAndroid Build Coastguard Worker//
25*6777b538SAndroid Build Coastguard Worker//   TEST(FooTest, RunsCallbackWithBarArgument) {
26*6777b538SAndroid Build Coastguard Worker//     base::MockCallback<FooCallback> callback;
27*6777b538SAndroid Build Coastguard Worker//     EXPECT_CALL(callback, Run("bar")).WillOnce(Return(1));
28*6777b538SAndroid Build Coastguard Worker//     Foo(callback.Get());
29*6777b538SAndroid Build Coastguard Worker//   }
30*6777b538SAndroid Build Coastguard Worker//
31*6777b538SAndroid Build Coastguard Worker// Or equivalently:
32*6777b538SAndroid Build Coastguard Worker//
33*6777b538SAndroid Build Coastguard Worker//   TEST(FooTest, RunsCallbackWithBarArgument) {
34*6777b538SAndroid Build Coastguard Worker//     base::MockRepeatingCallback<int(std::string)> callback;
35*6777b538SAndroid Build Coastguard Worker//     EXPECT_CALL(callback, Run("bar")).WillOnce(Return(1));
36*6777b538SAndroid Build Coastguard Worker//     Foo(callback.Get());
37*6777b538SAndroid Build Coastguard Worker//   }
38*6777b538SAndroid Build Coastguard Worker//
39*6777b538SAndroid Build Coastguard Worker//
40*6777b538SAndroid Build Coastguard Worker// Can be used with StrictMock and NiceMock. Caller must ensure that it outlives
41*6777b538SAndroid Build Coastguard Worker// any base::{Once, Repeating}Callback obtained from it.
42*6777b538SAndroid Build Coastguard Worker
43*6777b538SAndroid Build Coastguard Worker#ifndef BASE_TEST_MOCK_CALLBACK_H_
44*6777b538SAndroid Build Coastguard Worker#define BASE_TEST_MOCK_CALLBACK_H_
45*6777b538SAndroid Build Coastguard Worker
46*6777b538SAndroid Build Coastguard Worker#include "base/functional/bind.h"
47*6777b538SAndroid Build Coastguard Worker#include "base/functional/callback.h"
48*6777b538SAndroid Build Coastguard Worker#include "testing/gmock/include/gmock/gmock.h"
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Workernamespace base {
51*6777b538SAndroid Build Coastguard Worker
52*6777b538SAndroid Build Coastguard Worker// clang-format off
53*6777b538SAndroid Build Coastguard Worker
54*6777b538SAndroid Build Coastguard Workertemplate <typename F>
55*6777b538SAndroid Build Coastguard Workerclass MockCallback;
56*6777b538SAndroid Build Coastguard Worker
57*6777b538SAndroid Build Coastguard Workertemplate <typename Signature>
58*6777b538SAndroid Build Coastguard Workerusing MockOnceCallback = MockCallback<OnceCallback<Signature>>;
59*6777b538SAndroid Build Coastguard Workertemplate <typename Signature>
60*6777b538SAndroid Build Coastguard Workerusing MockRepeatingCallback = MockCallback<RepeatingCallback<Signature>>;
61*6777b538SAndroid Build Coastguard Worker
62*6777b538SAndroid Build Coastguard Workerusing MockOnceClosure = MockCallback<OnceClosure>;
63*6777b538SAndroid Build Coastguard Workerusing MockRepeatingClosure = MockCallback<RepeatingClosure>;
64*6777b538SAndroid Build Coastguard Worker
65*6777b538SAndroid Build Coastguard Worker$range i 0..MAX_ARITY
66*6777b538SAndroid Build Coastguard Worker$for i [[
67*6777b538SAndroid Build Coastguard Worker$range j 1..i
68*6777b538SAndroid Build Coastguard Worker$var run_type = [[R($for j, [[A$j]])]]
69*6777b538SAndroid Build Coastguard Worker
70*6777b538SAndroid Build Coastguard Workertemplate <typename R$for j [[, typename A$j]]>
71*6777b538SAndroid Build Coastguard Workerclass MockCallback<RepeatingCallback<$run_type>> {
72*6777b538SAndroid Build Coastguard Worker public:
73*6777b538SAndroid Build Coastguard Worker  MockCallback() = default;
74*6777b538SAndroid Build Coastguard Worker
75*6777b538SAndroid Build Coastguard Worker  MockCallback(const MockCallback&) = delete;
76*6777b538SAndroid Build Coastguard Worker  MockCallback& operator=(const MockCallback&) = delete;
77*6777b538SAndroid Build Coastguard Worker
78*6777b538SAndroid Build Coastguard Worker  MOCK_METHOD$(i)_T(Run, $run_type);
79*6777b538SAndroid Build Coastguard Worker
80*6777b538SAndroid Build Coastguard Worker  RepeatingCallback<$run_type> Get() {
81*6777b538SAndroid Build Coastguard Worker    return ::base::BindRepeating(&MockCallback::Run, ::base::Unretained(this));
82*6777b538SAndroid Build Coastguard Worker  }
83*6777b538SAndroid Build Coastguard Worker};
84*6777b538SAndroid Build Coastguard Worker
85*6777b538SAndroid Build Coastguard Workertemplate <typename R$for j [[, typename A$j]]>
86*6777b538SAndroid Build Coastguard Workerclass MockCallback<OnceCallback<$run_type>> {
87*6777b538SAndroid Build Coastguard Worker public:
88*6777b538SAndroid Build Coastguard Worker  MockCallback() = default;
89*6777b538SAndroid Build Coastguard Worker
90*6777b538SAndroid Build Coastguard Worker  MockCallback(const MockCallback&) = delete;
91*6777b538SAndroid Build Coastguard Worker  MockCallback& operator=(const MockCallback&) = delete;
92*6777b538SAndroid Build Coastguard Worker
93*6777b538SAndroid Build Coastguard Worker  MOCK_METHOD$(i)_T(Run, $run_type);
94*6777b538SAndroid Build Coastguard Worker
95*6777b538SAndroid Build Coastguard Worker  OnceCallback<$run_type> Get() {
96*6777b538SAndroid Build Coastguard Worker    return ::base::BindOnce(&MockCallback::Run, ::base::Unretained(this));
97*6777b538SAndroid Build Coastguard Worker  }
98*6777b538SAndroid Build Coastguard Worker};
99*6777b538SAndroid Build Coastguard Worker
100*6777b538SAndroid Build Coastguard Worker]]
101*6777b538SAndroid Build Coastguard Worker
102*6777b538SAndroid Build Coastguard Worker// clang-format on
103*6777b538SAndroid Build Coastguard Worker
104*6777b538SAndroid Build Coastguard Worker}  // namespace base
105*6777b538SAndroid Build Coastguard Worker
106*6777b538SAndroid Build Coastguard Worker#endif  // BASE_TEST_MOCK_CALLBACK_H_
107