1 | // This file was GENERATED by a script. DO NOT EDIT BY HAND!!! |
---|
2 | |
---|
3 | // Copyright 2008, Google Inc. |
---|
4 | // All rights reserved. |
---|
5 | // |
---|
6 | // Redistribution and use in source and binary forms, with or without |
---|
7 | // modification, are permitted provided that the following conditions are |
---|
8 | // met: |
---|
9 | // |
---|
10 | // * Redistributions of source code must retain the above copyright |
---|
11 | // notice, this list of conditions and the following disclaimer. |
---|
12 | // * Redistributions in binary form must reproduce the above |
---|
13 | // copyright notice, this list of conditions and the following disclaimer |
---|
14 | // in the documentation and/or other materials provided with the |
---|
15 | // distribution. |
---|
16 | // * Neither the name of Google Inc. nor the names of its |
---|
17 | // contributors may be used to endorse or promote products derived from |
---|
18 | // this software without specific prior written permission. |
---|
19 | // |
---|
20 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
---|
21 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
---|
22 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
---|
23 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
---|
24 | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
---|
25 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
---|
26 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
---|
27 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
---|
28 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
---|
29 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
---|
30 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
---|
31 | // |
---|
32 | // Author: wan@google.com (Zhanyong Wan) |
---|
33 | |
---|
34 | // Implements class templates NiceMock and StrictMock. |
---|
35 | // |
---|
36 | // Given a mock class MockFoo that is created using Google Mock, |
---|
37 | // NiceMock<MockFoo> is a subclass of MockFoo that allows |
---|
38 | // uninteresting calls (i.e. calls to mock methods that have no |
---|
39 | // EXPECT_CALL specs), and StrictMock<MockFoo> is a subclass of |
---|
40 | // MockFoo that treats all uninteresting calls as errors. |
---|
41 | // |
---|
42 | // NiceMock and StrictMock "inherits" the constructors of their |
---|
43 | // respective base class, with up-to 10 arguments. Therefore you can |
---|
44 | // write NiceMock<MockFoo>(5, "a") to construct a nice mock where |
---|
45 | // MockFoo has a constructor that accepts (int, const char*), for |
---|
46 | // example. |
---|
47 | // |
---|
48 | // A known limitation is that NiceMock<MockFoo> and |
---|
49 | // StrictMock<MockFoo> only works for mock methods defined using the |
---|
50 | // MOCK_METHOD* family of macros DIRECTLY in the MockFoo class. If a |
---|
51 | // mock method is defined in a base class of MockFoo, the "nice" or |
---|
52 | // "strict" modifier may not affect it, depending on the compiler. In |
---|
53 | // particular, nesting NiceMock and StrictMock is NOT supported. |
---|
54 | // |
---|
55 | // Another known limitation is that the constructors of the base mock |
---|
56 | // cannot have arguments passed by non-const reference, which are |
---|
57 | // banned by the Google C++ style guide anyway. |
---|
58 | |
---|
59 | #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ |
---|
60 | #define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ |
---|
61 | |
---|
62 | #include "gmock/gmock-spec-builders.h" |
---|
63 | #include "gmock/internal/gmock-port.h" |
---|
64 | |
---|
65 | namespace testing { |
---|
66 | |
---|
67 | template <class MockClass> |
---|
68 | class NiceMock : public MockClass { |
---|
69 | public: |
---|
70 | // We don't factor out the constructor body to a common method, as |
---|
71 | // we have to avoid a possible clash with members of MockClass. |
---|
72 | NiceMock() { |
---|
73 | ::testing::Mock::AllowUninterestingCalls( |
---|
74 | internal::ImplicitCast_<MockClass*>(this)); |
---|
75 | } |
---|
76 | |
---|
77 | // C++ doesn't (yet) allow inheritance of constructors, so we have |
---|
78 | // to define it for each arity. |
---|
79 | template <typename A1> |
---|
80 | explicit NiceMock(const A1& a1) : MockClass(a1) { |
---|
81 | ::testing::Mock::AllowUninterestingCalls( |
---|
82 | internal::ImplicitCast_<MockClass*>(this)); |
---|
83 | } |
---|
84 | template <typename A1, typename A2> |
---|
85 | NiceMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { |
---|
86 | ::testing::Mock::AllowUninterestingCalls( |
---|
87 | internal::ImplicitCast_<MockClass*>(this)); |
---|
88 | } |
---|
89 | |
---|
90 | template <typename A1, typename A2, typename A3> |
---|
91 | NiceMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { |
---|
92 | ::testing::Mock::AllowUninterestingCalls( |
---|
93 | internal::ImplicitCast_<MockClass*>(this)); |
---|
94 | } |
---|
95 | |
---|
96 | template <typename A1, typename A2, typename A3, typename A4> |
---|
97 | NiceMock(const A1& a1, const A2& a2, const A3& a3, |
---|
98 | const A4& a4) : MockClass(a1, a2, a3, a4) { |
---|
99 | ::testing::Mock::AllowUninterestingCalls( |
---|
100 | internal::ImplicitCast_<MockClass*>(this)); |
---|
101 | } |
---|
102 | |
---|
103 | template <typename A1, typename A2, typename A3, typename A4, typename A5> |
---|
104 | NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
105 | const A5& a5) : MockClass(a1, a2, a3, a4, a5) { |
---|
106 | ::testing::Mock::AllowUninterestingCalls( |
---|
107 | internal::ImplicitCast_<MockClass*>(this)); |
---|
108 | } |
---|
109 | |
---|
110 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
111 | typename A6> |
---|
112 | NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
113 | const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { |
---|
114 | ::testing::Mock::AllowUninterestingCalls( |
---|
115 | internal::ImplicitCast_<MockClass*>(this)); |
---|
116 | } |
---|
117 | |
---|
118 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
119 | typename A6, typename A7> |
---|
120 | NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
121 | const A5& a5, const A6& a6, const A7& a7) : MockClass(a1, a2, a3, a4, a5, |
---|
122 | a6, a7) { |
---|
123 | ::testing::Mock::AllowUninterestingCalls( |
---|
124 | internal::ImplicitCast_<MockClass*>(this)); |
---|
125 | } |
---|
126 | |
---|
127 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
128 | typename A6, typename A7, typename A8> |
---|
129 | NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
130 | const A5& a5, const A6& a6, const A7& a7, const A8& a8) : MockClass(a1, |
---|
131 | a2, a3, a4, a5, a6, a7, a8) { |
---|
132 | ::testing::Mock::AllowUninterestingCalls( |
---|
133 | internal::ImplicitCast_<MockClass*>(this)); |
---|
134 | } |
---|
135 | |
---|
136 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
137 | typename A6, typename A7, typename A8, typename A9> |
---|
138 | NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
139 | const A5& a5, const A6& a6, const A7& a7, const A8& a8, |
---|
140 | const A9& a9) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9) { |
---|
141 | ::testing::Mock::AllowUninterestingCalls( |
---|
142 | internal::ImplicitCast_<MockClass*>(this)); |
---|
143 | } |
---|
144 | |
---|
145 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
146 | typename A6, typename A7, typename A8, typename A9, typename A10> |
---|
147 | NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
148 | const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, |
---|
149 | const A10& a10) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { |
---|
150 | ::testing::Mock::AllowUninterestingCalls( |
---|
151 | internal::ImplicitCast_<MockClass*>(this)); |
---|
152 | } |
---|
153 | |
---|
154 | virtual ~NiceMock() { |
---|
155 | ::testing::Mock::UnregisterCallReaction( |
---|
156 | internal::ImplicitCast_<MockClass*>(this)); |
---|
157 | } |
---|
158 | |
---|
159 | private: |
---|
160 | GTEST_DISALLOW_COPY_AND_ASSIGN_(NiceMock); |
---|
161 | }; |
---|
162 | |
---|
163 | template <class MockClass> |
---|
164 | class StrictMock : public MockClass { |
---|
165 | public: |
---|
166 | // We don't factor out the constructor body to a common method, as |
---|
167 | // we have to avoid a possible clash with members of MockClass. |
---|
168 | StrictMock() { |
---|
169 | ::testing::Mock::FailUninterestingCalls( |
---|
170 | internal::ImplicitCast_<MockClass*>(this)); |
---|
171 | } |
---|
172 | |
---|
173 | template <typename A1> |
---|
174 | explicit StrictMock(const A1& a1) : MockClass(a1) { |
---|
175 | ::testing::Mock::FailUninterestingCalls( |
---|
176 | internal::ImplicitCast_<MockClass*>(this)); |
---|
177 | } |
---|
178 | template <typename A1, typename A2> |
---|
179 | StrictMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { |
---|
180 | ::testing::Mock::FailUninterestingCalls( |
---|
181 | internal::ImplicitCast_<MockClass*>(this)); |
---|
182 | } |
---|
183 | |
---|
184 | template <typename A1, typename A2, typename A3> |
---|
185 | StrictMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { |
---|
186 | ::testing::Mock::FailUninterestingCalls( |
---|
187 | internal::ImplicitCast_<MockClass*>(this)); |
---|
188 | } |
---|
189 | |
---|
190 | template <typename A1, typename A2, typename A3, typename A4> |
---|
191 | StrictMock(const A1& a1, const A2& a2, const A3& a3, |
---|
192 | const A4& a4) : MockClass(a1, a2, a3, a4) { |
---|
193 | ::testing::Mock::FailUninterestingCalls( |
---|
194 | internal::ImplicitCast_<MockClass*>(this)); |
---|
195 | } |
---|
196 | |
---|
197 | template <typename A1, typename A2, typename A3, typename A4, typename A5> |
---|
198 | StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
199 | const A5& a5) : MockClass(a1, a2, a3, a4, a5) { |
---|
200 | ::testing::Mock::FailUninterestingCalls( |
---|
201 | internal::ImplicitCast_<MockClass*>(this)); |
---|
202 | } |
---|
203 | |
---|
204 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
205 | typename A6> |
---|
206 | StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
207 | const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { |
---|
208 | ::testing::Mock::FailUninterestingCalls( |
---|
209 | internal::ImplicitCast_<MockClass*>(this)); |
---|
210 | } |
---|
211 | |
---|
212 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
213 | typename A6, typename A7> |
---|
214 | StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
215 | const A5& a5, const A6& a6, const A7& a7) : MockClass(a1, a2, a3, a4, a5, |
---|
216 | a6, a7) { |
---|
217 | ::testing::Mock::FailUninterestingCalls( |
---|
218 | internal::ImplicitCast_<MockClass*>(this)); |
---|
219 | } |
---|
220 | |
---|
221 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
222 | typename A6, typename A7, typename A8> |
---|
223 | StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
224 | const A5& a5, const A6& a6, const A7& a7, const A8& a8) : MockClass(a1, |
---|
225 | a2, a3, a4, a5, a6, a7, a8) { |
---|
226 | ::testing::Mock::FailUninterestingCalls( |
---|
227 | internal::ImplicitCast_<MockClass*>(this)); |
---|
228 | } |
---|
229 | |
---|
230 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
231 | typename A6, typename A7, typename A8, typename A9> |
---|
232 | StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
233 | const A5& a5, const A6& a6, const A7& a7, const A8& a8, |
---|
234 | const A9& a9) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9) { |
---|
235 | ::testing::Mock::FailUninterestingCalls( |
---|
236 | internal::ImplicitCast_<MockClass*>(this)); |
---|
237 | } |
---|
238 | |
---|
239 | template <typename A1, typename A2, typename A3, typename A4, typename A5, |
---|
240 | typename A6, typename A7, typename A8, typename A9, typename A10> |
---|
241 | StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, |
---|
242 | const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, |
---|
243 | const A10& a10) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { |
---|
244 | ::testing::Mock::FailUninterestingCalls( |
---|
245 | internal::ImplicitCast_<MockClass*>(this)); |
---|
246 | } |
---|
247 | |
---|
248 | virtual ~StrictMock() { |
---|
249 | ::testing::Mock::UnregisterCallReaction( |
---|
250 | internal::ImplicitCast_<MockClass*>(this)); |
---|
251 | } |
---|
252 | |
---|
253 | private: |
---|
254 | GTEST_DISALLOW_COPY_AND_ASSIGN_(StrictMock); |
---|
255 | }; |
---|
256 | |
---|
257 | // The following specializations catch some (relatively more common) |
---|
258 | // user errors of nesting nice and strict mocks. They do NOT catch |
---|
259 | // all possible errors. |
---|
260 | |
---|
261 | // These specializations are declared but not defined, as NiceMock and |
---|
262 | // StrictMock cannot be nested. |
---|
263 | template <typename MockClass> |
---|
264 | class NiceMock<NiceMock<MockClass> >; |
---|
265 | template <typename MockClass> |
---|
266 | class NiceMock<StrictMock<MockClass> >; |
---|
267 | template <typename MockClass> |
---|
268 | class StrictMock<NiceMock<MockClass> >; |
---|
269 | template <typename MockClass> |
---|
270 | class StrictMock<StrictMock<MockClass> >; |
---|
271 | |
---|
272 | } // namespace testing |
---|
273 | |
---|
274 | #endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ |
---|