00001
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef MOCKPP_ChainableMockMethod3_H
00032 #define MOCKPP_ChainableMockMethod3_H
00033
00034 #include <mockpp/mockpp.h>
00035
00036 #include <mockpp/chaining/ChainableMockObject.h>
00037 #include <mockpp/chaining/ChainableMockMethod.h>
00038
00039
00040 MOCKPP_NS_START
00041
00042
00047 template <typename RT, typename P1, typename P2, typename P3>
00048 class ChainableMockMethod3Common
00049 : public ChainableMockMethodCommon
00050 , public ChainingMockBuilder <ArgumentsMatchBuilder3<RT, Invocation3<P1, P2, P3> > >
00051 {
00052 public:
00053
00054 typedef Invocation3<P1, P2, P3> InvocationType;
00055
00056 typedef CoreMock<RT, InvocationType> CoreMockType;
00057 typedef RT ReturnType;
00058
00059 typedef ChainingMockBuilder <ArgumentsMatchBuilder3<ReturnType, InvocationType> > Builder;
00060
00065 ChainableMockMethod3Common(const String &name, ChainableMockObject *parent )
00066 : ChainableMockMethodCommon(name, parent)
00067 , Builder(&coremock, this->getChainableMockObject(), this->getMethodName())
00068 , coremock(name + MOCKPP_PCHAR("/coreMock"), this)
00069 {
00070 }
00071
00072 virtual void reset()
00073 {
00074 MockObject::reset();
00075 }
00076
00077 virtual void verify()
00078 {
00079 MockObject::verify();
00080 }
00081
00082 protected:
00083
00087 CoreMockType & getCoreMock() const
00088 {
00089 return coremock;
00090 }
00091
00092 private:
00093
00094 mutable CoreMockType coremock;
00095 };
00096
00097
00101 template <typename RT, typename P1, typename P2, typename P3>
00102 class ChainableMockMethod3
00103 : public ChainableMockMethod3Common<RT, P1, P2, P3>
00104 {
00105 public:
00106
00107 typedef typename ChainableMockMethod3Common<RT, P1, P2, P3>::InvocationType InvocationType;
00108
00113 ChainableMockMethod3(const String &name, ChainableMockObject *parent )
00114 : ChainableMockMethod3Common<RT, P1, P2, P3>(name, parent)
00115 {
00116 }
00117
00125 RT forward(const P1 &p1, const P2 &p2, const P3 &p3) const
00126 {
00127 InvocationType inv(this->getMethodName(), p1, p2, p3);
00128 return this->getCoreMock().invoke(inv);
00129 }
00130 };
00131
00132
00137 template <typename P1, typename P2, typename P3>
00138 class ChainableMockMethod3<void, P1, P2, P3>
00139 : public ChainableMockMethod3Common<void, P1, P2, P3>
00140 {
00141 public:
00142
00143 typedef typename ChainableMockMethod3Common<void, P1, P2, P3>::InvocationType InvocationType;
00144
00149 ChainableMockMethod3(const String &name, ChainableMockObject *parent )
00150 : ChainableMockMethod3Common<void, P1, P2, P3>(name, parent)
00151 {
00152 }
00153
00160 void forward(const P1 &p1, const P2 &p2, const P3 &p3) const
00161 {
00162 InvocationType inv(this->getMethodName(), p1, p2, p3);
00163 this->getCoreMock().invoke(inv);
00164 }
00165 };
00166
00167
00168 MOCKPP_NS_END
00169
00170
00171 #endif // MOCKPP_ChainableMockMethod3_H
00172