| 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_
|
|
|