gmock-generated-nice-strict.h 16 KB

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