Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
d0de1180
Commit
d0de1180
authored
Apr 09, 2018
by
Gennadiy Civil
Browse files
Merge branch 'master' of github.com:google/googletest
parents
dbd206e3
7529698f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
60 additions
and
30 deletions
+60
-30
googlemock/include/gmock/gmock-generated-nice-strict.h.pump
googlemock/include/gmock/gmock-generated-nice-strict.h.pump
+60
-30
No files found.
googlemock/include/gmock/gmock-generated-nice-strict.h.pump
View file @
d0de1180
...
@@ -52,10 +52,9 @@ $var n = 10 $$ The maximum arity we support.
...
@@ -52,10 +52,9 @@ $var n = 10 $$ The maximum arity we support.
// NiceMock<MockFoo>.
// NiceMock<MockFoo>.
//
//
// NiceMock, NaggyMock, and StrictMock "inherit" the constructors of
// NiceMock, NaggyMock, and StrictMock "inherit" the constructors of
// their respective base class, with up-to $n arguments. Therefore
// their respective base class. Therefore you can write
// you can write NiceMock<MockFoo>(5, "a") to construct a nice mock
// NiceMock<MockFoo>(5, "a") to construct a nice mock where MockFoo
// where MockFoo has a constructor that accepts (int, const char*),
// has a constructor that accepts (int, const char*), for example.
// for example.
//
//
// A known limitation is that NiceMock<MockFoo>, NaggyMock<MockFoo>,
// A known limitation is that NiceMock<MockFoo>, NaggyMock<MockFoo>,
// and StrictMock<MockFoo> only works for mock methods defined using
// and StrictMock<MockFoo> only works for mock methods defined using
...
@@ -64,10 +63,6 @@ $var n = 10 $$ The maximum arity we support.
...
@@ -64,10 +63,6 @@ $var n = 10 $$ The maximum arity we support.
// or "strict" modifier may not affect it, depending on the compiler.
// or "strict" modifier may not affect it, depending on the compiler.
// In particular, nesting NiceMock, NaggyMock, and StrictMock is NOT
// In particular, nesting NiceMock, NaggyMock, and StrictMock is NOT
// supported.
// supported.
//
// Another known limitation is that the constructors of the base mock
// cannot have arguments passed by non-const reference, which are
// banned by the Google C++ style guide anyway.
#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_
#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_
#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_
#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_
...
@@ -88,44 +83,79 @@ $var method=[[$if kind==0 [[AllowUninterestingCalls]]
...
@@ -88,44 +83,79 @@ $var method=[[$if kind==0 [[AllowUninterestingCalls]]
$
elif
kind
==
1
[[
WarnUninterestingCalls
]]
$
elif
kind
==
1
[[
WarnUninterestingCalls
]]
$
else
[[
FailUninterestingCalls
]]]]
$
else
[[
FailUninterestingCalls
]]]]
namespace
internal
{
// $clazz[[]]Base serves as a mix-in to establish the "uninteresting call"
// behavior for $clazz on construction. It accomplishes this via CRTP to get
// access to the derived MockClass.
template
<
class
MockClass
>
class
$
clazz
[[]]
Base
{
protected:
$
clazz
[[]]
Base
();
~
$
clazz
[[]]
Base
();
};
}
// namespace internal
template
<
class
MockClass
>
template
<
class
MockClass
>
class
$
clazz
:
public
MockClass
{
class
$
clazz
:
public
MockClass
,
public
internal
::
$
clazz
[[]]
Base
<
MockClass
>
{
public:
public:
// We don't factor out the constructor body to a common method, as
$
clazz
()
:
MockClass
()
{}
// we have to avoid a possible clash with members of MockClass.
$
clazz
()
{
#if GTEST_LANG_CXX11
::
testing
::
Mock
::
$
method
(
// Ideally, we would inherit base class's constructors through a using
internal
::
ImplicitCast_
<
MockClass
*>
(
this
));
// declaration, which would preserve their visibility. However, many existing
}
// tests rely on the fact that current implementation reexports protected
// constructors as public. These tests would need to be cleaned up first.
// C++ doesn't (yet) allow inheritance of constructors, so we have
// to define it for each arity.
// Single argument constructor is special-cased so that it can be
// made explicit.
template
<
typename
A
>
explicit
$
clazz
(
A
&&
arg
)
:
MockClass
(
std
::
forward
<
A
>
(
arg
))
{}
template
<
typename
A1
,
typename
A2
,
typename
...
An
>
$
clazz
(
A1
&&
arg1
,
A2
&&
arg2
,
An
&&
...
args
)
:
MockClass
(
std
::
forward
<
A1
>
(
arg1
),
std
::
forward
<
A2
>
(
arg2
),
std
::
forward
<
An
>
(
args
)...)
{}
#else
// C++98 doesn't have variadic templates, so we have to define one
// for each arity.
template
<
typename
A1
>
template
<
typename
A1
>
explicit
$
clazz
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
explicit
$
clazz
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{}
::
testing
::
Mock
::
$
method
(
internal
::
ImplicitCast_
<
MockClass
*>
(
this
));
}
$
range
i
2.
.
n
$
range
i
2.
.
n
$
for
i
[[
$
for
i
[[
$
range
j
1.
.
i
$
range
j
1.
.
i
template
<
$
for
j
,
[[
typename
A
$
j
]]>
template
<
$
for
j
,
[[
typename
A
$
j
]]>
$
clazz
(
$
for
j
,
[[
const
A
$
j
&
a
$
j
]])
:
MockClass
(
$
for
j
,
[[
a
$
j
]])
{
$
clazz
(
$
for
j
,
[[
const
A
$
j
&
a
$
j
]])
:
MockClass
(
$
for
j
,
[[
a
$
j
]])
{}
::
testing
::
Mock
::
$
method
(
internal
::
ImplicitCast_
<
MockClass
*>
(
this
));
}
]]
]]
virtual
~
$
clazz
()
{
#endif // GTEST_LANG_CXX11
::
testing
::
Mock
::
UnregisterCallReaction
(
internal
::
ImplicitCast_
<
MockClass
*>
(
this
));
}
private:
private:
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
$
clazz
);
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
$
clazz
);
};
};
namespace
internal
{
template
<
typename
MockClass
>
$
clazz
[[]]
Base
<
MockClass
>::
$
clazz
[[]]
Base
()
{
::
testing
::
Mock
::
$
method
(
internal
::
ImplicitCast_
<
MockClass
*>
(
static_cast
<
$
clazz
<
MockClass
>
*>
(
this
)));
}
template
<
typename
MockClass
>
$
clazz
[[]]
Base
<
MockClass
>::~
$
clazz
[[]]
Base
()
{
::
testing
::
Mock
::
UnregisterCallReaction
(
internal
::
ImplicitCast_
<
MockClass
*>
(
static_cast
<
$
clazz
<
MockClass
>*>
(
this
)));
}
}
// namespace internal
]]
]]
// The following specializations catch some (relatively more common)
// The following specializations catch some (relatively more common)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment