Index: testing/gmock/include/gmock/gmock-generated-function-mockers.h.pump |
diff --git a/testing/gmock/include/gmock/gmock-generated-function-mockers.h.pump b/testing/gmock/include/gmock/gmock-generated-function-mockers.h.pump |
new file mode 100644 |
index 0000000000000000000000000000000000000000..54b848f6019608e884754c7b3b369d5035c250c5 |
--- /dev/null |
+++ b/testing/gmock/include/gmock/gmock-generated-function-mockers.h.pump |
@@ -0,0 +1,203 @@ |
+$$ -*- mode: c++; -*- |
+$$ This is a Pump source file. Please use Pump to convert it to |
+$$ gmock-generated-function-mockers.h. |
+$$ |
+$var n = 10 $$ The maximum arity we support. |
+// Copyright 2007, Google Inc. |
+// All rights reserved. |
+// |
+// Redistribution and use in source and binary forms, with or without |
+// modification, are permitted provided that the following conditions are |
+// met: |
+// |
+// * Redistributions of source code must retain the above copyright |
+// notice, this list of conditions and the following disclaimer. |
+// * Redistributions in binary form must reproduce the above |
+// copyright notice, this list of conditions and the following disclaimer |
+// in the documentation and/or other materials provided with the |
+// distribution. |
+// * Neither the name of Google Inc. nor the names of its |
+// contributors may be used to endorse or promote products derived from |
+// this software without specific prior written permission. |
+// |
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+// |
+// Author: wan@google.com (Zhanyong Wan) |
+ |
+// Google Mock - a framework for writing C++ mock classes. |
+// |
+// This file implements function mockers of various arities. |
+ |
+#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ |
+#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ |
+ |
+#include <gmock/gmock-spec-builders.h> |
+#include <gmock/internal/gmock-internal-utils.h> |
+ |
+namespace testing { |
+ |
+template <typename F> |
+class MockSpec; |
+ |
+namespace internal { |
+ |
+template <typename F> |
+class FunctionMockerBase; |
+ |
+// Note: class FunctionMocker really belongs to the ::testing |
+// namespace. However if we define it in ::testing, MSVC will |
+// complain when classes in ::testing::internal declare it as a |
+// friend class template. To workaround this compiler bug, we define |
+// FunctionMocker in ::testing::internal and import it into ::testing. |
+template <typename F> |
+class FunctionMocker; |
+ |
+ |
+$range i 0..n |
+$for i [[ |
+$range j 1..i |
+$var typename_As = [[$for j [[, typename A$j]]]] |
+$var As = [[$for j, [[A$j]]]] |
+$var as = [[$for j, [[a$j]]]] |
+$var Aas = [[$for j, [[A$j a$j]]]] |
+$var ms = [[$for j, [[m$j]]]] |
+$var matchers = [[$for j, [[const Matcher<A$j>& m$j]]]] |
+template <typename R$typename_As> |
+class FunctionMocker<R($As)> : public |
+ internal::FunctionMockerBase<R($As)> { |
+ public: |
+ typedef R F($As); |
+ typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
+ |
+ MockSpec<F>& With($matchers) { |
+ |
+$if i >= 1 [[ |
+ this->current_spec().SetMatchers(::std::tr1::make_tuple($ms)); |
+ |
+]] |
+ return this->current_spec(); |
+ } |
+ |
+ R Invoke($Aas) { |
+ return InvokeWith(ArgumentTuple($as)); |
+ } |
+}; |
+ |
+ |
+]] |
+} // namespace internal |
+ |
+// The style guide prohibits "using" statements in a namespace scope |
+// inside a header file. However, the FunctionMocker class template |
+// is meant to be defined in the ::testing namespace. The following |
+// line is just a trick for working around a bug in MSVC 8.0, which |
+// cannot handle it if we define FunctionMocker in ::testing. |
+using internal::FunctionMocker; |
+ |
+// The result type of function type F. |
+// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
+#define GMOCK_RESULT_(tn, F) tn ::testing::internal::Function<F>::Result |
+ |
+// The type of argument N of function type F. |
+// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
+#define GMOCK_ARG_(tn, F, N) tn ::testing::internal::Function<F>::Argument##N |
+ |
+// The matcher type for argument N of function type F. |
+// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
+#define GMOCK_MATCHER_(tn, F, N) const ::testing::Matcher<GMOCK_ARG_(tn, F, N)>& |
+ |
+// The variable for mocking the given method. |
+// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
+#define GMOCK_MOCKER_(arity, constness, Method) \ |
+ GMOCK_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) |
+ |
+ |
+$for i [[ |
+$range j 1..i |
+$var arg_as = [[$for j, \ |
+ [[GMOCK_ARG_(tn, F, $j) gmock_a$j]]]] |
+$var as = [[$for j, [[gmock_a$j]]]] |
+$var matcher_as = [[$for j, \ |
+ [[GMOCK_MATCHER_(tn, F, $j) gmock_a$j]]]] |
+// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
+#define GMOCK_METHOD$i[[]]_(tn, constness, ct, Method, F) \ |
+ GMOCK_RESULT_(tn, F) ct Method($arg_as) constness { \ |
+ GMOCK_COMPILE_ASSERT_(::std::tr1::tuple_size< \ |
+ tn ::testing::internal::Function<F>::ArgumentTuple>::value == $i, \ |
+ this_method_does_not_take_$i[[]]_argument[[$if i != 1 [[s]]]]); \ |
+ GMOCK_MOCKER_($i, constness, Method).SetOwnerAndName(this, #Method); \ |
+ return GMOCK_MOCKER_($i, constness, Method).Invoke($as); \ |
+ } \ |
+ ::testing::MockSpec<F>& \ |
+ gmock_##Method($matcher_as) constness { \ |
+ return GMOCK_MOCKER_($i, constness, Method).RegisterOwner(this).With($as); \ |
+ } \ |
+ mutable ::testing::FunctionMocker<F> GMOCK_MOCKER_($i, constness, Method) |
+ |
+ |
+]] |
+$for i [[ |
+#define MOCK_METHOD$i(m, F) GMOCK_METHOD$i[[]]_(, , , m, F) |
+ |
+]] |
+ |
+ |
+$for i [[ |
+#define MOCK_CONST_METHOD$i(m, F) GMOCK_METHOD$i[[]]_(, const, , m, F) |
+ |
+]] |
+ |
+ |
+$for i [[ |
+#define MOCK_METHOD$i[[]]_T(m, F) GMOCK_METHOD$i[[]]_(typename, , , m, F) |
+ |
+]] |
+ |
+ |
+$for i [[ |
+#define MOCK_CONST_METHOD$i[[]]_T(m, F) [[]] |
+GMOCK_METHOD$i[[]]_(typename, const, , m, F) |
+ |
+]] |
+ |
+ |
+$for i [[ |
+#define MOCK_METHOD$i[[]]_WITH_CALLTYPE(ct, m, F) [[]] |
+GMOCK_METHOD$i[[]]_(, , ct, m, F) |
+ |
+]] |
+ |
+ |
+$for i [[ |
+#define MOCK_CONST_METHOD$i[[]]_WITH_CALLTYPE(ct, m, F) \ |
+ GMOCK_METHOD$i[[]]_(, const, ct, m, F) |
+ |
+]] |
+ |
+ |
+$for i [[ |
+#define MOCK_METHOD$i[[]]_T_WITH_CALLTYPE(ct, m, F) \ |
+ GMOCK_METHOD$i[[]]_(typename, , ct, m, F) |
+ |
+]] |
+ |
+ |
+$for i [[ |
+#define MOCK_CONST_METHOD$i[[]]_T_WITH_CALLTYPE(ct, m, F) \ |
+ GMOCK_METHOD$i[[]]_(typename, const, ct, m, F) |
+ |
+]] |
+ |
+} // namespace testing |
+ |
+#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ |