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
9e712372
Unverified
Commit
9e712372
authored
Mar 18, 2022
by
Brad Messer
Committed by
GitHub
Mar 18, 2022
Browse files
Merge branch 'main' into promote-inclusive-behavior
parents
794da715
b007c54f
Changes
135
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
796 additions
and
773 deletions
+796
-773
CONTRIBUTORS
CONTRIBUTORS
+1
-0
docs/advanced.md
docs/advanced.md
+17
-4
docs/reference/testing.md
docs/reference/testing.md
+2
-2
googlemock/include/gmock/gmock-actions.h
googlemock/include/gmock/gmock-actions.h
+86
-81
googlemock/include/gmock/gmock-cardinalities.h
googlemock/include/gmock/gmock-cardinalities.h
+3
-1
googlemock/include/gmock/gmock-function-mocker.h
googlemock/include/gmock/gmock-function-mocker.h
+1
-1
googlemock/include/gmock/gmock-more-actions.h
googlemock/include/gmock/gmock-more-actions.h
+342
-254
googlemock/include/gmock/gmock-more-matchers.h
googlemock/include/gmock/gmock-more-matchers.h
+5
-6
googlemock/include/gmock/gmock-spec-builders.h
googlemock/include/gmock/gmock-spec-builders.h
+88
-120
googlemock/include/gmock/internal/gmock-internal-utils.h
googlemock/include/gmock/internal/gmock-internal-utils.h
+36
-35
googlemock/include/gmock/internal/gmock-port.h
googlemock/include/gmock/internal/gmock-port.h
+15
-8
googlemock/src/gmock-cardinalities.cc
googlemock/src/gmock-cardinalities.cc
+4
-5
googlemock/src/gmock-internal-utils.cc
googlemock/src/gmock-internal-utils.cc
+9
-15
googlemock/src/gmock-matchers.cc
googlemock/src/gmock-matchers.cc
+0
-1
googlemock/src/gmock-spec-builders.cc
googlemock/src/gmock-spec-builders.cc
+29
-33
googlemock/src/gmock.cc
googlemock/src/gmock.cc
+1
-1
googlemock/src/gmock_main.cc
googlemock/src/gmock_main.cc
+2
-2
googlemock/test/gmock-actions_test.cc
googlemock/test/gmock-actions_test.cc
+73
-95
googlemock/test/gmock-cardinalities_test.cc
googlemock/test/gmock-cardinalities_test.cc
+50
-58
googlemock/test/gmock-function-mocker_test.cc
googlemock/test/gmock-function-mocker_test.cc
+32
-51
No files found.
CONTRIBUTORS
View file @
9e712372
...
...
@@ -56,6 +56,7 @@ Russ Rufer <russ@pentad.com>
Sean Mcafee <eefacm@gmail.com>
Sigurður Ásgeirsson <siggi@google.com>
Sverre Sundsdal <sundsdal@gmail.com>
Szymon Sobik <sobik.szymon@gmail.com>
Takeshi Yoshino <tyoshino@google.com>
Tracy Bialik <tracy@pentad.com>
Vadim Berman <vadimb@google.com>
...
...
docs/advanced.md
View file @
9e712372
...
...
@@ -839,7 +839,7 @@ will output XML like this:
```
xml
...
<testcase
name=
"MinAndMaxWidgets"
status=
"run"
time=
"0.006"
classname=
"WidgetUsageTest"
MaximumWidgets=
"12"
MinimumWidgets=
"9"
/>
<testcase
name=
"MinAndMaxWidgets"
file=
"test.cpp"
line=
"1"
status=
"run"
time=
"0.006"
classname=
"WidgetUsageTest"
MaximumWidgets=
"12"
MinimumWidgets=
"9"
/>
...
```
...
...
@@ -2082,15 +2082,15 @@ could generate this report:
<?xml version="1.0" encoding="UTF-8"?>
<testsuites
tests=
"3"
failures=
"1"
errors=
"0"
time=
"0.035"
timestamp=
"2011-10-31T18:52:42"
name=
"AllTests"
>
<testsuite
name=
"MathTest"
tests=
"2"
failures=
"1"
errors=
"0"
time=
"0.015"
>
<testcase
name=
"Addition"
status=
"run"
time=
"0.007"
classname=
""
>
<testcase
name=
"Addition"
file=
"test.cpp"
line=
"1"
status=
"run"
time=
"0.007"
classname=
""
>
<failure
message=
"Value of: add(1, 1)
 Actual: 3
Expected: 2"
type=
""
>
...
</failure>
<failure
message=
"Value of: add(1, -1)
 Actual: 1
Expected: 0"
type=
""
>
...
</failure>
</testcase>
<testcase
name=
"Subtraction"
status=
"run"
time=
"0.005"
classname=
""
>
<testcase
name=
"Subtraction"
file=
"test.cpp"
line=
"2"
status=
"run"
time=
"0.005"
classname=
""
>
</testcase>
</testsuite>
<testsuite
name=
"LogicTest"
tests=
"1"
failures=
"0"
errors=
"0"
time=
"0.005"
>
<testcase
name=
"NonContradiction"
status=
"run"
time=
"0.005"
classname=
""
>
<testcase
name=
"NonContradiction"
file=
"test.cpp"
line=
"3"
status=
"run"
time=
"0.005"
classname=
""
>
</testcase>
</testsuite>
</testsuites>
...
...
@@ -2108,6 +2108,9 @@ Things to note:
*
The
`timestamp`
attribute records the local date and time of the test
execution.
*
The
`file`
and
`line`
attributes record the source file location, where the
test was defined.
*
Each
`<failure>`
element corresponds to a single failed googletest
assertion.
...
...
@@ -2147,6 +2150,8 @@ The report format conforms to the following JSON Schema:
"type"
:
"object"
,
"properties"
:
{
"name"
:
{
"type"
:
"string"
},
"file"
:
{
"type"
:
"string"
},
"line"
:
{
"type"
:
"integer"
},
"status"
:
{
"type"
:
"string"
,
"enum"
:
[
"RUN"
,
"NOTRUN"
]
...
...
@@ -2224,6 +2229,8 @@ message TestCase {
message
TestInfo
{
string
name
=
1
;
string
file
=
6
;
int32
line
=
7
;
enum
Status
{
RUN
=
0
;
NOTRUN
=
1
;
...
...
@@ -2267,6 +2274,8 @@ could generate this report:
"testsuite"
:
[
{
"name"
:
"Addition"
,
"file"
:
"test.cpp"
,
"line"
:
1
,
"status"
:
"RUN"
,
"time"
:
"0.007s"
,
"classname"
:
""
,
...
...
@@ -2283,6 +2292,8 @@ could generate this report:
},
{
"name"
:
"Subtraction"
,
"file"
:
"test.cpp"
,
"line"
:
2
,
"status"
:
"RUN"
,
"time"
:
"0.005s"
,
"classname"
:
""
...
...
@@ -2298,6 +2309,8 @@ could generate this report:
"testsuite"
:
[
{
"name"
:
"NonContradiction"
,
"file"
:
"test.cpp"
,
"line"
:
3
,
"status"
:
"RUN"
,
"time"
:
"0.005s"
,
"classname"
:
""
...
...
docs/reference/testing.md
View file @
9e712372
...
...
@@ -518,8 +518,8 @@ Logs a property for the current test, test suite, or entire invocation of the
test program. Only the last value for a given key is logged.
The key must be a valid XML attribute name, and cannot conflict with the ones
already used by GoogleTest (
`name`
,
`
status
`
,
`
tim
e`
,
`
classname`
,
`type_param
`
,
and
`value_param`
).
already used by GoogleTest (
`name`
,
`
file
`
,
`
lin
e`
,
`
status`
,
`time
`
,
`classname`
,
`type_param`
,
and
`value_param`
).
`RecordProperty`
is
`public static`
so it can be called from utility functions
that are not members of the test fixture.
...
...
googlemock/include/gmock/gmock-actions.h
View file @
9e712372
...
...
@@ -131,7 +131,7 @@
#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
#ifndef _WIN32_WCE
#
include <errno.h>
#include <errno.h>
#endif
#include <algorithm>
...
...
@@ -147,8 +147,8 @@
#include "gmock/internal/gmock-pp.h"
#ifdef _MSC_VER
#
pragma warning(push)
#
pragma warning(disable
:
4100)
#pragma warning(push)
#pragma warning(disable
:
4100)
#endif
namespace
testing
{
...
...
@@ -196,9 +196,7 @@ class BuiltInDefaultValue {
public:
// This function returns true if and only if type T has a built-in default
// value.
static
bool
Exists
()
{
return
::
std
::
is_default_constructible
<
T
>::
value
;
}
static
bool
Exists
()
{
return
::
std
::
is_default_constructible
<
T
>::
value
;
}
static
T
Get
()
{
return
BuiltInDefaultValueGetter
<
...
...
@@ -227,11 +225,11 @@ class BuiltInDefaultValue<T*> {
// The following specializations define the default values for
// specific types we care about.
#define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \
template <> \
class BuiltInDefaultValue<type> { \
public: \
static bool Exists() { return true; } \
static type Get() { return value; } \
template <>
\
class BuiltInDefaultValue<type> {
\
public:
\
static bool Exists() { return true; }
\
static type Get() { return value; }
\
}
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
void
,
);
// NOLINT
...
...
@@ -255,10 +253,10 @@ GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned short, 0U); // NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
signed
short
,
0
);
// NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
unsigned
int
,
0U
);
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
signed
int
,
0
);
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
unsigned
long
,
0UL
);
// NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
signed
long
,
0L
);
// NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
unsigned
long
,
0UL
);
// NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
signed
long
,
0L
);
// NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
unsigned
long
long
,
0
);
// NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
signed
long
long
,
0
);
// NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
signed
long
long
,
0
);
// NOLINT
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
float
,
0
);
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
(
double
,
0
);
...
...
@@ -839,7 +837,7 @@ class ReturnRoundRobinAction {
template
<
typename
...
Args
>
T
operator
()(
Args
&&
...)
const
{
return
state_
->
Next
();
return
state_
->
Next
();
}
private:
...
...
@@ -862,7 +860,9 @@ class DoDefaultAction {
// This template type conversion operator allows DoDefault() to be
// used in any function.
template
<
typename
F
>
operator
Action
<
F
>
()
const
{
return
Action
<
F
>
();
}
// NOLINT
operator
Action
<
F
>
()
const
{
return
Action
<
F
>
();
}
// NOLINT
};
// Implements the Assign action to set a given pointer referent to a
...
...
@@ -890,8 +890,7 @@ template <typename T>
class
SetErrnoAndReturnAction
{
public:
SetErrnoAndReturnAction
(
int
errno_value
,
T
result
)
:
errno_
(
errno_value
),
result_
(
result
)
{}
:
errno_
(
errno_value
),
result_
(
result
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
const
{
errno
=
errno_
;
...
...
@@ -1002,8 +1001,8 @@ class IgnoreResultAction {
private:
// Type OriginalFunction is the same as F except that its return
// type is IgnoredValue.
typedef
typename
internal
::
Function
<
F
>::
MakeResultIgnoredValue
OriginalFunction
;
typedef
typename
internal
::
Function
<
F
>::
MakeResultIgnoredValue
OriginalFunction
;
const
Action
<
OriginalFunction
>
action_
;
};
...
...
@@ -1020,12 +1019,12 @@ struct WithArgsAction {
template
<
typename
R
,
typename
...
Args
>
operator
Action
<
R
(
Args
...)
>
()
const
{
// NOLINT
using
TupleType
=
std
::
tuple
<
Args
...
>
;
Action
<
R
(
typename
std
::
tuple_element
<
I
,
TupleType
>::
type
...)
>
converted
(
action
);
Action
<
R
(
typename
std
::
tuple_element
<
I
,
TupleType
>::
type
...)
>
converted
(
action
);
return
[
converted
](
Args
...
args
)
->
R
{
return
converted
.
Perform
(
std
::
forward_as_tuple
(
std
::
get
<
I
>
(
std
::
forward_as_tuple
(
std
::
forward
<
Args
>
(
args
)...))...));
std
::
get
<
I
>
(
std
::
forward_as_tuple
(
std
::
forward
<
Args
>
(
args
)...))...));
};
}
};
...
...
@@ -1212,8 +1211,8 @@ internal::DoAllAction<typename std::decay<Action>::type...> DoAll(
// multiple arguments. For convenience, we also provide
// WithArgs<k>(an_action) (defined below) as a synonym.
template
<
size_t
k
,
typename
InnerAction
>
internal
::
WithArgsAction
<
typename
std
::
decay
<
InnerAction
>::
type
,
k
>
WithArg
(
InnerAction
&&
action
)
{
internal
::
WithArgsAction
<
typename
std
::
decay
<
InnerAction
>::
type
,
k
>
WithArg
(
InnerAction
&&
action
)
{
return
{
std
::
forward
<
InnerAction
>
(
action
)};
}
...
...
@@ -1232,8 +1231,8 @@ WithArgs(InnerAction&& action) {
// argument. In other words, it adapts an action accepting no
// argument to one that accepts (and ignores) arguments.
template
<
typename
InnerAction
>
internal
::
WithArgsAction
<
typename
std
::
decay
<
InnerAction
>::
type
>
WithoutArgs
(
InnerAction
&&
action
)
{
internal
::
WithArgsAction
<
typename
std
::
decay
<
InnerAction
>::
type
>
WithoutArgs
(
InnerAction
&&
action
)
{
return
{
std
::
forward
<
InnerAction
>
(
action
)};
}
...
...
@@ -1319,7 +1318,7 @@ internal::SetArgumentPointeeAction<N, T> SetArgumentPointee(T value) {
// Creates an action that sets a pointer referent to a given value.
template
<
typename
T1
,
typename
T2
>
PolymorphicAction
<
internal
::
AssignAction
<
T1
,
T2
>
>
Assign
(
T1
*
ptr
,
T2
val
)
{
PolymorphicAction
<
internal
::
AssignAction
<
T1
,
T2
>>
Assign
(
T1
*
ptr
,
T2
val
)
{
return
MakePolymorphicAction
(
internal
::
AssignAction
<
T1
,
T2
>
(
ptr
,
val
));
}
...
...
@@ -1327,8 +1326,8 @@ PolymorphicAction<internal::AssignAction<T1, T2> > Assign(T1* ptr, T2 val) {
// Creates an action that sets errno and returns the appropriate error.
template
<
typename
T
>
PolymorphicAction
<
internal
::
SetErrnoAndReturnAction
<
T
>
>
SetErrnoAndReturn
(
int
errval
,
T
result
)
{
PolymorphicAction
<
internal
::
SetErrnoAndReturnAction
<
T
>>
SetErrnoAndReturn
(
int
errval
,
T
result
)
{
return
MakePolymorphicAction
(
internal
::
SetErrnoAndReturnAction
<
T
>
(
errval
,
result
));
}
...
...
@@ -1482,7 +1481,8 @@ struct ExcessiveArg {};
// Builds an implementation of an Action<> for some particular signature, using
// a class defined by an ACTION* macro.
template
<
typename
F
,
typename
Impl
>
struct
ActionImpl
;
template
<
typename
F
,
typename
Impl
>
struct
ActionImpl
;
template
<
typename
Impl
>
struct
ImplBase
{
...
...
@@ -1502,7 +1502,7 @@ struct ActionImpl<R(Args...), Impl> : ImplBase<Impl>::type {
using
args_type
=
std
::
tuple
<
Args
...
>
;
ActionImpl
()
=
default
;
// Only defined if appropriate for Base.
explicit
ActionImpl
(
std
::
shared_ptr
<
Impl
>
impl
)
:
Base
{
std
::
move
(
impl
)}
{
}
explicit
ActionImpl
(
std
::
shared_ptr
<
Impl
>
impl
)
:
Base
{
std
::
move
(
impl
)}
{}
R
operator
()(
Args
&&
...
arg
)
const
{
static
constexpr
size_t
kMaxArgs
=
...
...
@@ -1521,12 +1521,14 @@ struct ActionImpl<R(Args...), Impl> : ImplBase<Impl>::type {
// args_type get passed, followed by a dummy of unspecified type for the
// remainder up to 10 explicit args.
static
constexpr
ExcessiveArg
kExcessArg
{};
return
static_cast
<
const
Impl
&>
(
*
this
).
template
gmock_PerformImpl
<
/*function_type=*/
function_type
,
/*return_type=*/
R
,
/*args_type=*/
args_type
,
/*argN_type=*/
typename
std
::
tuple_element
<
arg_id
,
args_type
>
::
type
...
>
(
/*args=*/
args
,
std
::
get
<
arg_id
>
(
args
)...,
((
void
)
excess_id
,
kExcessArg
)...);
return
static_cast
<
const
Impl
&>
(
*
this
)
.
template
gmock_PerformImpl
<
/*function_type=*/
function_type
,
/*return_type=*/
R
,
/*args_type=*/
args_type
,
/*argN_type=*/
typename
std
::
tuple_element
<
arg_id
,
args_type
>
::
type
...
>
(
/*args=*/
args
,
std
::
get
<
arg_id
>
(
args
)...,
((
void
)
excess_id
,
kExcessArg
)...);
}
};
...
...
@@ -1545,7 +1547,7 @@ template <typename F, typename Impl>
#define GMOCK_INTERNAL_ARG_UNUSED(i, data, el) \
, const arg##i##_type& arg##i GTEST_ATTRIBUTE_UNUSED_
#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_ \
#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_
\
const args_type& args GTEST_ATTRIBUTE_UNUSED_ GMOCK_PP_REPEAT( \
GMOCK_INTERNAL_ARG_UNUSED, , 10)
...
...
@@ -1584,45 +1586,47 @@ template <typename F, typename Impl>
#define GMOCK_ACTION_FIELD_PARAMS_(params) \
GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_FIELD_PARAM, , params)
#define GMOCK_INTERNAL_ACTION(name, full_name, params) \
template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
class full_name { \
public: \
explicit full_name(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
: impl_(std::make_shared<gmock_Impl>( \
GMOCK_ACTION_GVALUE_PARAMS_(params))) { } \
full_name(const full_name&) = default; \
full_name(full_name&&) noexcept = default; \
template <typename F> \
operator ::testing::Action<F>() const { \
return ::testing::internal::MakeAction<F>(impl_); \
} \
private: \
class gmock_Impl { \
public: \
explicit gmock_Impl(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
: GMOCK_ACTION_INIT_PARAMS_(params) {} \
template <typename function_type, typename return_type, \
typename args_type, GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \
GMOCK_ACTION_FIELD_PARAMS_(params) \
}; \
std::shared_ptr<const gmock_Impl> impl_; \
}; \
template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
inline full_name<GMOCK_ACTION_TYPE_PARAMS_(params)> name( \
GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) GTEST_MUST_USE_RESULT_; \
template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
inline full_name<GMOCK_ACTION_TYPE_PARAMS_(params)> name( \
GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) { \
return full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>( \
GMOCK_ACTION_GVALUE_PARAMS_(params)); \
} \
template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
template <typename function_type, typename return_type, typename args_type, \
GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
return_type full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>::gmock_Impl:: \
gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
#define GMOCK_INTERNAL_ACTION(name, full_name, params) \
template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
class full_name { \
public: \
explicit full_name(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
: impl_(std::make_shared<gmock_Impl>( \
GMOCK_ACTION_GVALUE_PARAMS_(params))) {} \
full_name(const full_name&) = default; \
full_name(full_name&&) noexcept = default; \
template <typename F> \
operator ::testing::Action<F>() const { \
return ::testing::internal::MakeAction<F>(impl_); \
} \
\
private: \
class gmock_Impl { \
public: \
explicit gmock_Impl(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
: GMOCK_ACTION_INIT_PARAMS_(params) {} \
template <typename function_type, typename return_type, \
typename args_type, GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \
GMOCK_ACTION_FIELD_PARAMS_(params) \
}; \
std::shared_ptr<const gmock_Impl> impl_; \
}; \
template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
inline full_name<GMOCK_ACTION_TYPE_PARAMS_(params)> name( \
GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) GTEST_MUST_USE_RESULT_; \
template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
inline full_name<GMOCK_ACTION_TYPE_PARAMS_(params)> name( \
GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) { \
return full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>( \
GMOCK_ACTION_GVALUE_PARAMS_(params)); \
} \
template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
template <typename function_type, typename return_type, typename args_type, \
GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
return_type \
full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>::gmock_Impl::gmock_PerformImpl( \
GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
}
// namespace internal
...
...
@@ -1630,12 +1634,13 @@ template <typename F, typename Impl>
#define ACTION(name) \
class name##Action { \
public: \
explicit name##Action() noexcept {}
\
name##Action(const name##Action&) noexcept {}
\
explicit name##Action() noexcept {} \
name##Action(const name##Action&) noexcept {} \
template <typename F> \
operator ::testing::Action<F>() const { \
return ::testing::internal::MakeAction<F, gmock_Impl>(); \
} \
\
private: \
class gmock_Impl { \
public: \
...
...
@@ -1684,7 +1689,7 @@ template <typename F, typename Impl>
}
// namespace testing
#ifdef _MSC_VER
#
pragma warning(pop)
#pragma warning(pop)
#endif
#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
googlemock/include/gmock/gmock-cardinalities.h
View file @
9e712372
...
...
@@ -40,8 +40,10 @@
#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_
#include <limits.h>
#include <memory>
#include <ostream> // NOLINT
#include "gmock/internal/gmock-port.h"
#include "gtest/gtest.h"
...
...
@@ -116,7 +118,7 @@ class GTEST_API_ Cardinality {
// cardinality, i.e. exceed the maximum number of allowed calls.
bool
IsOverSaturatedByCallCount
(
int
call_count
)
const
{
return
impl_
->
IsSaturatedByCallCount
(
call_count
)
&&
!
impl_
->
IsSatisfiedByCallCount
(
call_count
);
!
impl_
->
IsSatisfiedByCallCount
(
call_count
);
}
// Describes self to an ostream
...
...
googlemock/include/gmock/gmock-function-mocker.h
View file @
9e712372
...
...
@@ -201,7 +201,7 @@ using internal::FunctionMocker;
GMOCK_INTERNAL_A_MATCHER_ARGUMENT, _Signature, _N)); \
} \
mutable ::testing::FunctionMocker<GMOCK_PP_REMOVE_PARENS(_Signature)> \
GMOCK_MOCKER_(_N, _Constness, _MethodName)
GMOCK_MOCKER_(_N, _Constness, _MethodName)
#define GMOCK_INTERNAL_EXPAND(...) __VA_ARGS__
...
...
googlemock/include/gmock/gmock-more-actions.h
View file @
9e712372
...
...
@@ -129,170 +129,207 @@
// Declares the template parameters.
#define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0
#define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \
name1)
kind0 name0, kind1 name1
#define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1,
name1)
\
kind0 name0, kind1 name1
#define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2) kind0 name0, kind1 name1, kind2 name2
kind2, name2) \
kind0 name0, kind1 name1, kind2 name2
#define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3) kind0 name0, kind1 name1, kind2 name2,
\
kind3 name3
#define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(
kind0, name0, kind1, name1,
\
kind2, name2, kind3, name3, kind4, name4)
kind0 name0, kind1 name1,
\
kind2 name2, kind3 name3, kind4 name4
kind2, name2, kind3, name3)
\
kind0 name0, kind1 name1, kind2 name2,
kind3 name3
#define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(
\
kind0, name0, kind1, name1,
kind2, name2, kind3, name3, kind4, name4) \
kind0 name0, kind1 name1,
kind2 name2, kind3 name3, kind4 name4
#define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4, kind5, name5) kind0 name0, \
kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5
#define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
name6) kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \
kind5 name5, kind6 name6
#define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
kind7, name7) kind0 name0, kind1 name1, kind2 name2, kind3 name3, \
kind4 name4, kind5 name5, kind6 name6, kind7 name7
#define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
kind7, name7, kind8, name8) kind0 name0, kind1 name1, kind2 name2, \
kind3 name3, kind4 name4, kind5 name5, kind6 name6, kind7 name7, \
kind8 name8
#define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \
name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
name6, kind7, name7, kind8, name8, kind9, name9) kind0 name0, \
kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5, \
kind6 name6, kind7 name7, kind8 name8, kind9 name9
kind2, name2, kind3, name3, \
kind4, name4, kind5, name5) \
kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5
#define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \
kind5, name5, kind6, name6) \
kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \
kind5 name5, kind6 name6
#define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \
kind5, name5, kind6, name6, kind7, name7) \
kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \
kind5 name5, kind6 name6, kind7 name7
#define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \
kind5, name5, kind6, name6, kind7, name7, kind8, name8) \
kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \
kind5 name5, kind6 name6, kind7 name7, kind8 name8
#define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \
kind5, name5, kind6, name6, kind7, name7, kind8, name8, kind9, name9) \
kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \
kind5 name5, kind6 name6, kind7 name7, kind8 name8, kind9 name9
// Lists the template parameters.
#define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0
#define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \
name1)
name0, name1
#define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1,
name1)
\
name0, name1
#define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2) name0, name1, name2
kind2, name2) \
name0, name1, name2
#define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3) name0, name1, name2, name3
#define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4) name0, name1, name2, name3, \
name4
kind2, name2, kind3, name3) \
name0, name1, name2, name3
#define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4) \
name0, name1, name2, name3, name4
#define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4, kind5, name5) name0, name1, \
name2, name3, name4, name5
#define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
name6) name0, name1, name2, name3, name4, name5, name6
#define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
kind7, name7) name0, name1, name2, name3, name4, name5, name6, name7
#define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \
kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \
kind7, name7, kind8, name8) name0, name1, name2, name3, name4, name5, \
name6, name7, name8
#define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \
name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \
name6, kind7, name7, kind8, name8, kind9, name9) name0, name1, name2, \
name3, name4, name5, name6, name7, name8, name9
kind2, name2, kind3, name3, \
kind4, name4, kind5, name5) \
name0, name1, name2, name3, name4, name5
#define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \
kind5, name5, kind6, name6) \
name0, name1, name2, name3, name4, name5, name6
#define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \
kind5, name5, kind6, name6, kind7, name7) \
name0, name1, name2, name3, name4, name5, name6, name7
#define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \
kind5, name5, kind6, name6, kind7, name7, kind8, name8) \
name0, name1, name2, name3, name4, name5, name6, name7, name8
#define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS( \
kind0, name0, kind1, name1, kind2, name2, kind3, name3, kind4, name4, \
kind5, name5, kind6, name6, kind7, name7, kind8, name8, kind9, name9) \
name0, name1, name2, name3, name4, name5, name6, name7, name8, name9
// Declares the types of value parameters.
#define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS()
#define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1)
,
\
typename p0##_type, typename p1##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2)
,
\
typename p0##_type, typename p1##_type, typename p2##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3)
,
\
typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)
,
\
typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)
,
\
typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type, typename p5##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) \
,
typename p0##_type, typename p1##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) \
,
typename p0##_type, typename p1##_type, typename p2##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \
,
typename p0##_type, typename p1##_type, typename p2##_type,
\
typename p3##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \
,
typename p0##_type, typename p1##_type, typename p2##_type,
\
typename p3##_type, typename p4##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \
,
typename p0##_type, typename p1##_type, typename p2##_type,
\
typename p3##_type, typename p4##_type, typename p5##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6) , typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type, typename p5##_type, \
typename p6##_type
p6) \
, typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type, typename p5##_type, \
typename p6##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6, p7) , typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type, typename p5##_type, \
typename p6##_type, typename p7##_type
p6, p7) \
, typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type, typename p5##_type, \
typename p6##_type, typename p7##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6, p7, p8) , typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type, typename p5##_type, \
typename p6##_type, typename p7##_type, typename p8##_type
p6, p7, p8) \
, typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type, typename p5##_type, \
typename p6##_type, typename p7##_type, typename p8##_type
#define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6, p7, p8, p9) , typename p0##_type, typename p1##_type, \
typename p2##_type, typename p3##_type, typename p4##_type, \
typename p5##_type, typename p6##_type, typename p7##_type, \
typename p8##_type, typename p9##_type
p6, p7, p8, p9) \
, typename p0##_type, typename p1##_type, typename p2##_type, \
typename p3##_type, typename p4##_type, typename p5##_type, \
typename p6##_type, typename p7##_type, typename p8##_type, \
typename p9##_type
// Initializes the value parameters.
#define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS()\
()
#define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0)\
(p0##_type gmock_p0) : p0(::std::move(gmock_p0))
#define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1)\
(p0##_type gmock_p0, p1##_type gmock_p1) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1))
#define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2)\
(p0##_type gmock_p0, p1##_type gmock_p1, \
p2##_type gmock_p2) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2))
#define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3)\
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
#define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS() ()
#define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0) \
(p0##_type gmock_p0) : p0(::std::move(gmock_p0))
#define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1) \
(p0##_type gmock_p0, p1##_type gmock_p1) \
: p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1))
#define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2) \
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2) \
: p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), \
p2(::std::move(gmock_p2))
#define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3) \
: p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), \
p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3))
#define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)\
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4))
#define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)\
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, \
p5##_type gmock_p5) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
#define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4) \
: p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), \
p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), \
p4(::std::move(gmock_p4))
#define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5) \
: p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), \
p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), \
p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5))
#define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)\
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
p6##_type gmock_p6) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6))
#define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)\
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
p6##_type gmock_p6, p7##_type gmock_p7) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \
#define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) \
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
p6##_type gmock_p6) \
: p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), \
p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), \
p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5)), \
p6(::std::move(gmock_p6))
#define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7) \
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
p6##_type gmock_p6, p7##_type gmock_p7) \
: p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), \
p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), \
p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5)), \
p6(::std::move(gmock_p6)), \
p7(::std::move(gmock_p7))
#define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8)\
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
p6##_type gmock_p6, p7##_type gmock_p7, \
p8##_type gmock_p8) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \
p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8))
#define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, \
p8) \
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8) \
: p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), \
p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), \
p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5)), \
p6(::std::move(gmock_p6)), \
p7(::std::move(gmock_p7)), \
p8(::std::move(gmock_p8))
#define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8, p9)\
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \
p9##_type gmock_p9) : p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \
p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)), \
p7, p8, p9) \
(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \
p9##_type gmock_p9) \
: p0(::std::move(gmock_p0)), \
p1(::std::move(gmock_p1)), \
p2(::std::move(gmock_p2)), \
p3(::std::move(gmock_p3)), \
p4(::std::move(gmock_p4)), \
p5(::std::move(gmock_p5)), \
p6(::std::move(gmock_p6)), \
p7(::std::move(gmock_p7)), \
p8(::std::move(gmock_p8)), \
p9(::std::move(gmock_p9))
// Defines the copy constructor
#define GMOCK_INTERNAL_DEFN_COPY_AND_0_VALUE_PARAMS() \
{} // Avoid https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134
{} // Avoid https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134
#define GMOCK_INTERNAL_DEFN_COPY_AND_1_VALUE_PARAMS(...) = default;
#define GMOCK_INTERNAL_DEFN_COPY_AND_2_VALUE_PARAMS(...) = default;
#define GMOCK_INTERNAL_DEFN_COPY_AND_3_VALUE_PARAMS(...) = default;
...
...
@@ -307,30 +344,71 @@
// Declares the fields for storing the value parameters.
#define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS()
#define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0;
#define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0; \
p1##_type p1;
#define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0; \
p1##_type p1; p2##_type p2;
#define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0; \
p1##_type p1; p2##_type p2; p3##_type p3;
#define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \
p4) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4;
#define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \
p5) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
p5##_type p5;
#define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
p5##_type p5; p6##_type p6;
#define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \
p5##_type p5; p6##_type p6; p7##_type p7;
#define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \
p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8;
#define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) \
p0##_type p0; \
p1##_type p1;
#define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) \
p0##_type p0; \
p1##_type p1; \
p2##_type p2;
#define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \
p0##_type p0; \
p1##_type p1; \
p2##_type p2; \
p3##_type p3;
#define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \
p0##_type p0; \
p1##_type p1; \
p2##_type p2; \
p3##_type p3; \
p4##_type p4;
#define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \
p0##_type p0; \
p1##_type p1; \
p2##_type p2; \
p3##_type p3; \
p4##_type p4; \
p5##_type p5;
#define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) \
p0##_type p0; \
p1##_type p1; \
p2##_type p2; \
p3##_type p3; \
p4##_type p4; \
p5##_type p5; \
p6##_type p6;
#define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7) \
p0##_type p0; \
p1##_type p1; \
p2##_type p2; \
p3##_type p3; \
p4##_type p4; \
p5##_type p5; \
p6##_type p6; \
p7##_type p7;
#define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, \
p8) \
p0##_type p0; \
p1##_type p1; \
p2##_type p2; \
p3##_type p3; \
p4##_type p4; \
p5##_type p5; \
p6##_type p6; \
p7##_type p7; \
p8##_type p8;
#define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8, p9) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \
p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; \
p9##_type p9;
p7, p8, p9) \
p0##_type p0; \
p1##_type p1; \
p2##_type p2; \
p3##_type p3; \
p4##_type p4; \
p5##_type p5; \
p6##_type p6; \
p7##_type p7; \
p8##_type p8; \
p9##_type p9;
// Lists the value parameters.
#define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS()
...
...
@@ -338,72 +416,78 @@
#define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1
#define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2
#define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3
#define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) p0, p1, \
p2, p3, p4
#define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) p0, \
p1, p2, p3, p4, p5
#define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6) p0, p1, p2, p3, p4, p5, p6
#define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7) p0, p1, p2, p3, p4, p5, p6, p7
#define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8) p0, p1, p2, p3, p4, p5, p6, p7, p8
#define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \
p0, p1, p2, p3, p4
#define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \
p0, p1, p2, p3, p4, p5
#define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) \
p0, p1, p2, p3, p4, p5, p6
#define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7) \
p0, p1, p2, p3, p4, p5, p6, p7
#define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, \
p8) \
p0, p1, p2, p3, p4, p5, p6, p7, p8
#define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8, p9) p0, p1, p2, p3, p4, p5, p6, p7, p8, p9
p7, p8, p9) \
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9
// Lists the value parameter types.
#define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS()
#define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1)
, p0##_type,
\
p1##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2)
, p0##_type,
\
p1##_type, p2##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3)
,
\
p0##_type, p1##_type, p2##_type, p3##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)
,
\
p0##_type, p1##_type, p2##_type, p3##_type, p4##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)
,
\
p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) \
, p0##_type,
p1##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) \
, p0##_type,
p1##_type, p2##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \
,
p0##_type, p1##_type, p2##_type, p3##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \
,
p0##_type, p1##_type, p2##_type, p3##_type, p4##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \
,
p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type,
\
p6##_type
p6)
\
, p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type,
p6##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6, p7) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
p5##_type, p6##_type, p7##_type
p6, p7) \
, p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \
p6##_type, p7##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6, p7, p8) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
p5##_type, p6##_type, p7##_type, p8##_type
p6, p7, p8) \
, p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \
p6##_type, p7##_type, p8##_type
#define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6, p7, p8, p9) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
p5##_type, p6##_type, p7##_type, p8##_type, p9##_type
p6, p7, p8, p9) \
, p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \
p6##_type, p7##_type, p8##_type, p9##_type
// Declares the value parameters.
#define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS()
#define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0
#define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0, \
p1##_type p1
#define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0, \
p1##_type p1, p2##_type p2
#define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0, \
p1##_type p1, p2##_type p2, p3##_type p3
#define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \
p4) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4
#define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \
p5) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
p5##_type p5
#define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \
p6) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
p5##_type p5, p6##_type p6
#define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
p5##_type p5, p6##_type p6, p7##_type p7
#define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8
#define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) \
p0##_type p0, p1##_type p1
#define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) \
p0##_type p0, p1##_type p1, p2##_type p2
#define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) \
p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3
#define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) \
p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4
#define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) \
p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
p5##_type p5
#define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) \
p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
p5##_type p5, p6##_type p6
#define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7) \
p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
p5##_type p5, p6##_type p6, p7##_type p7
#define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, \
p8) \
p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \
p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8
#define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8, p9) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3,
\
p
4
##_type p
4
, p
5
##_type p
5
, p
6
##_type p
6
, p
7
##_type p
7
, p
8
##_type p
8,
\
p9##_type p9
p7, p8, p9)
\
p
0
##_type p
0
, p
1
##_type p
1
, p
2
##_type p
2
, p
3
##_type p
3
, p
4
##_type p
4,
\
p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8,
p9##_type p9
// The suffix of the class template implementing the action template.
#define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS()
...
...
@@ -415,40 +499,43 @@
#define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6
#define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7
#define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7) P8
p7) \
P8
#define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8) P9
p7, p8) \
P9
#define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \
p7, p8, p9) P10
p7, p8, p9) \
P10
// The name of the class template implementing the action template.
#define GMOCK_ACTION_CLASS_(name, value_params)\
GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params)
#define GMOCK_ACTION_CLASS_(name, value_params)
\
GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params)
#define ACTION_TEMPLATE(name, template_params, value_params) \
template <GMOCK_INTERNAL_DECL_##template_params \
GMOCK_INTERNAL_DECL_TYPE_##value_params>
\
GMOCK_INTERNAL_DECL_TYPE_##value_params> \
class GMOCK_ACTION_CLASS_(name, value_params) { \
public: \
explicit GMOCK_ACTION_CLASS_(name, value_params)( \
GMOCK_INTERNAL_DECL_##value_params) \
GMOCK_PP_IF(GMOCK_PP_IS_EMPTY(GMOCK_INTERNAL_COUNT_##value_params), \
= default; , \
= default; \
, \
: impl_(std::make_shared<gmock_Impl>( \
GMOCK_INTERNAL_LIST_##value_params)) { }) \
GMOCK_ACTION_CLASS_(name, value_params)( \
const GMOCK_ACTION_CLASS_(name, value_params)&) noexcept \
GMOCK_INTERNAL_DEFN_COPY_##value_params \
GMOCK_ACTION_CLASS_(name, value_params)( \
GMOCK_ACTION_CLASS_(name, value_params)&&) noexcept \
GMOCK_INTERNAL_DEFN_COPY_##value_params \
template <typename F> \
operator ::testing::Action<F>() const { \
GMOCK_INTERNAL_LIST_##value_params)){}) \
GMOCK_ACTION_CLASS_(name, value_params)(const GMOCK_ACTION_CLASS_( \
name, value_params) &) noexcept GMOCK_INTERNAL_DEFN_COPY_ \
##value_params GMOCK_ACTION_CLASS_(name, value_params)( \
GMOCK_ACTION_CLASS_(name, value_params) &&) noexcept \
GMOCK_INTERNAL_DEFN_COPY_##value_params template <typename F> \
operator ::testing::Action<F>() const { \
return GMOCK_PP_IF( \
GMOCK_PP_IS_EMPTY(GMOCK_INTERNAL_COUNT_##value_params), \
(::testing::internal::MakeAction<F, gmock_Impl>()), \
(::testing::internal::MakeAction<F>(impl_))); \
(::testing::internal::MakeAction<F, gmock_Impl>()),
\
(::testing::internal::MakeAction<F>(impl_)));
\
} \
\
private: \
class gmock_Impl { \
public: \
...
...
@@ -458,34 +545,35 @@
return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \
GMOCK_INTERNAL_DEFN_##value_params \
}; \
GMOCK_PP_IF(GMOCK_PP_IS_EMPTY(GMOCK_INTERNAL_COUNT_##value_params),
\
,
std::shared_ptr<const gmock_Impl> impl_;) \
GMOCK_PP_IF(GMOCK_PP_IS_EMPTY(GMOCK_INTERNAL_COUNT_##value_params),
,
\
std::shared_ptr<const gmock_Impl> impl_;)
\
}; \
template <GMOCK_INTERNAL_DECL_##template_params \
GMOCK_INTERNAL_DECL_TYPE_##value_params>
\
GMOCK_ACTION_CLASS_(
name, value_params)<
\
GMOCK_INTERNAL_LIST_##template_params
\
GMOCK_INTERNAL_LIST_TYPE_##value_params>
name(
\
GMOCK_INTERNAL_DECL_##value_params) GTEST_MUST_USE_RESULT_;
\
GMOCK_INTERNAL_DECL_TYPE_##value_params> \
GMOCK_ACTION_CLASS_(
\
name, value_params)<
GMOCK_INTERNAL_LIST_##template_params \
GMOCK_INTERNAL_LIST_TYPE_##value_params> \
name(
GMOCK_INTERNAL_DECL_##value_params) GTEST_MUST_USE_RESULT_; \
template <GMOCK_INTERNAL_DECL_##template_params \
GMOCK_INTERNAL_DECL_TYPE_##value_params>
\
inline GMOCK_ACTION_CLASS_(
name, value_params)<
\
GMOCK_INTERNAL_LIST_##template_params
\
GMOCK_INTERNAL_LIST_TYPE_##value_params>
name(
\
GMOCK_INTERNAL_DECL_##value_params) { \
return GMOCK_ACTION_CLASS_(
name, value_params)<
\
GMOCK_INTERNAL_LIST_##template_params
\
GMOCK_INTERNAL_LIST_TYPE_##value_params>(
\
GMOCK_INTERNAL_LIST_##value_params); \
GMOCK_INTERNAL_DECL_TYPE_##value_params> \
inline GMOCK_ACTION_CLASS_(
\
name, value_params)<
GMOCK_INTERNAL_LIST_##template_params \
GMOCK_INTERNAL_LIST_TYPE_##value_params> \
name(
GMOCK_INTERNAL_DECL_##value_params) {
\
return GMOCK_ACTION_CLASS_(
\
name, value_params)<
GMOCK_INTERNAL_LIST_##template_params \
GMOCK_INTERNAL_LIST_TYPE_##value_params>( \
GMOCK_INTERNAL_LIST_##value_params);
\
} \
template <GMOCK_INTERNAL_DECL_##template_params \
GMOCK_INTERNAL_DECL_TYPE_##value_params>
\
GMOCK_INTERNAL_DECL_TYPE_##value_params> \
template <typename function_type, typename return_type, typename args_type, \
GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
return_type GMOCK_ACTION_CLASS_(name, value_params)< \
GMOCK_INTERNAL_LIST_##template_params \
GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl::gmock_PerformImpl( \
GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
return_type GMOCK_ACTION_CLASS_( \
name, value_params)<GMOCK_INTERNAL_LIST_##template_params \
GMOCK_INTERNAL_LIST_TYPE_##value_params>:: \
gmock_Impl::gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) \
const
namespace
testing
{
...
...
@@ -495,8 +583,8 @@ namespace testing {
// is expanded and macro expansion cannot contain #pragma. Therefore
// we suppress them here.
#ifdef _MSC_VER
#
pragma warning(push)
#
pragma warning(disable
:
4100)
#pragma warning(push)
#pragma warning(disable
:
4100)
#endif
namespace
internal
{
...
...
@@ -565,7 +653,7 @@ InvokeArgument(Params&&... params) {
}
#ifdef _MSC_VER
#
pragma warning(pop)
#pragma warning(pop)
#endif
}
// namespace testing
...
...
googlemock/include/gmock/gmock-more-matchers.h
View file @
9e712372
...
...
@@ -47,13 +47,13 @@ namespace testing {
// Silence C4100 (unreferenced formal
// parameter) for MSVC
#ifdef _MSC_VER
#
pragma warning(push)
#
pragma warning(disable
:
4100)
#pragma warning(push)
#pragma warning(disable
:
4100)
#if (_MSC_VER == 1900)
// and silence C4800 (C4800: 'int *const ': forcing value
// to bool 'true' or 'false') for MSVC 14
#
pragma warning(disable
:
4800)
#endif
#pragma warning(disable
:
4800)
#endif
#endif
// Defines a matcher that matches an empty container. The container must
...
...
@@ -83,10 +83,9 @@ MATCHER(IsFalse, negation ? "is true" : "is false") {
}
#ifdef _MSC_VER
#
pragma warning(pop)
#pragma warning(pop)
#endif
}
// namespace testing
#endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_MATCHERS_H_
googlemock/include/gmock/gmock-spec-builders.h
View file @
9e712372
...
...
@@ -70,6 +70,7 @@
#include <type_traits>
#include <utility>
#include <vector>
#include "gmock/gmock-actions.h"
#include "gmock/gmock-cardinalities.h"
#include "gmock/gmock-matchers.h"
...
...
@@ -78,7 +79,7 @@
#include "gtest/gtest.h"
#if GTEST_HAS_EXCEPTIONS
#
include <stdexcept> // NOLINT
#include <stdexcept> // NOLINT
#endif
GTEST_DISABLE_MSC_WARNINGS_PUSH_
(
4251
\
...
...
@@ -97,13 +98,15 @@ class ExpectationSet;
namespace
internal
{
// Implements a mock function.
template
<
typename
F
>
class
FunctionMocker
;
template
<
typename
F
>
class
FunctionMocker
;
// Base class for expectations.
class
ExpectationBase
;
// Implements an expectation.
template
<
typename
F
>
class
TypedExpectation
;
template
<
typename
F
>
class
TypedExpectation
;
// Helper class for testing the Expectation class template.
class
ExpectationTester
;
...
...
@@ -171,10 +174,9 @@ class GTEST_API_ UntypedFunctionMockerBase {
// Writes a message that the call is uninteresting (i.e. neither
// explicitly expected nor explicitly unexpected) to the given
// ostream.
virtual
void
UntypedDescribeUninterestingCall
(
const
void
*
untyped_args
,
::
std
::
ostream
*
os
)
const
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
)
=
0
;
virtual
void
UntypedDescribeUninterestingCall
(
const
void
*
untyped_args
,
::
std
::
ostream
*
os
)
const
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
)
=
0
;
// Returns the expectation that matches the given function arguments
// (or NULL is there's no match); when a match is found,
...
...
@@ -183,10 +185,9 @@ class GTEST_API_ UntypedFunctionMockerBase {
// is_excessive is modified to indicate whether the call exceeds the
// expected number.
virtual
const
ExpectationBase
*
UntypedFindMatchingExpectation
(
const
void
*
untyped_args
,
const
void
**
untyped_action
,
bool
*
is_excessive
,
const
void
*
untyped_args
,
const
void
**
untyped_action
,
bool
*
is_excessive
,
::
std
::
ostream
*
what
,
::
std
::
ostream
*
why
)
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
)
=
0
;
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
)
=
0
;
// Prints the given function arguments to the ostream.
virtual
void
UntypedPrintArgs
(
const
void
*
untyped_args
,
...
...
@@ -196,8 +197,7 @@ class GTEST_API_ UntypedFunctionMockerBase {
// this information in the global mock registry. Will be called
// whenever an EXPECT_CALL() or ON_CALL() is executed on this mock
// method.
void
RegisterOwner
(
const
void
*
mock_obj
)
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
);
void
RegisterOwner
(
const
void
*
mock_obj
)
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
);
// Sets the mock object this mock method belongs to, and sets the
// name of the mock function. Will be called upon each invocation
...
...
@@ -208,13 +208,11 @@ class GTEST_API_ UntypedFunctionMockerBase {
// Returns the mock object this mock method belongs to. Must be
// called after RegisterOwner() or SetOwnerAndName() has been
// called.
const
void
*
MockObject
()
const
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
);
const
void
*
MockObject
()
const
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
);
// Returns the name of this mock method. Must be called after
// SetOwnerAndName() has been called.
const
char
*
Name
()
const
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
);
const
char
*
Name
()
const
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
);
// Returns the result of invoking this mock function with the given
// arguments. This function can be safely called from multiple
...
...
@@ -451,8 +449,7 @@ class GTEST_API_ Mock {
// Returns the reaction Google Mock will have on uninteresting calls
// made on the given mock object.
static
internal
::
CallReaction
GetReactionOnUninterestingCalls
(
const
void
*
mock_obj
)
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
);
const
void
*
mock_obj
)
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
);
// Verifies that all expectations on the given mock object have been
// satisfied. Reports one or more Google Test non-fatal failures
...
...
@@ -465,17 +462,16 @@ class GTEST_API_ Mock {
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
internal
::
g_gmock_mutex
);
// Registers a mock object and a mock method it owns.
static
void
Register
(
const
void
*
mock_obj
,
internal
::
UntypedFunctionMockerBase
*
mocker
)
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
);
static
void
Register
(
const
void
*
mock_obj
,
internal
::
UntypedFunctionMockerBase
*
mocker
)
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
);
// Tells Google Mock where in the source code mock_obj is used in an
// ON_CALL or EXPECT_CALL. In case mock_obj is leaked, this
// information helps the user identify which object it is.
static
void
RegisterUseByOnCallOrExpectCall
(
const
void
*
mock_obj
,
const
char
*
file
,
int
line
)
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
);
static
void
RegisterUseByOnCallOrExpectCall
(
const
void
*
mock_obj
,
const
char
*
file
,
int
line
)
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
);
// Unregisters a mock method; removes the owning mock object from
// the registry when the last mock method associated with it has
...
...
@@ -632,7 +628,6 @@ class ExpectationSet {
Expectation
::
Set
expectations_
;
};
// Sequence objects are used by a user to specify the relative order
// in which the expectations should match. They are copyable (we rely
// on the compiler-defined copy constructor and assignment operator).
...
...
@@ -678,6 +673,7 @@ class GTEST_API_ InSequence {
public:
InSequence
();
~
InSequence
();
private:
bool
sequence_created_
;
...
...
@@ -784,40 +780,34 @@ class GTEST_API_ ExpectationBase {
// the current thread.
// Retires all pre-requisites of this expectation.
void
RetireAllPreRequisites
()
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
);
void
RetireAllPreRequisites
()
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
);
// Returns true if and only if this expectation is retired.
bool
is_retired
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
bool
is_retired
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
return
retired_
;
}
// Retires this expectation.
void
Retire
()
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
void
Retire
()
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
retired_
=
true
;
}
// Returns true if and only if this expectation is satisfied.
bool
IsSatisfied
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
bool
IsSatisfied
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
return
cardinality
().
IsSatisfiedByCallCount
(
call_count_
);
}
// Returns true if and only if this expectation is saturated.
bool
IsSaturated
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
bool
IsSaturated
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
return
cardinality
().
IsSaturatedByCallCount
(
call_count_
);
}
// Returns true if and only if this expectation is over-saturated.
bool
IsOverSaturated
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
bool
IsOverSaturated
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
return
cardinality
().
IsOverSaturatedByCallCount
(
call_count_
);
}
...
...
@@ -832,15 +822,13 @@ class GTEST_API_ ExpectationBase {
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
);
// Returns the number this expectation has been invoked.
int
call_count
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
int
call_count
()
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
return
call_count_
;
}
// Increments the number this expectation has been invoked.
void
IncrementCallCount
()
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
void
IncrementCallCount
()
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
call_count_
++
;
}
...
...
@@ -849,8 +837,7 @@ class GTEST_API_ ExpectationBase {
// WillRepeatedly() clauses) against the cardinality if this hasn't
// been done before. Prints a warning if there are too many or too
// few actions.
void
CheckActionCountIfNotDone
()
const
GTEST_LOCK_EXCLUDED_
(
mutex_
);
void
CheckActionCountIfNotDone
()
const
GTEST_LOCK_EXCLUDED_
(
mutex_
);
friend
class
::
testing
::
Sequence
;
friend
class
::
testing
::
internal
::
ExpectationTester
;
...
...
@@ -863,12 +850,12 @@ class GTEST_API_ ExpectationBase {
// This group of fields are part of the spec and won't change after
// an EXPECT_CALL() statement finishes.
const
char
*
file_
;
// The file that contains the expectation.
int
line_
;
// The line number of the expectation.
const
char
*
file_
;
// The file that contains the expectation.
int
line_
;
// The line number of the expectation.
const
std
::
string
source_text_
;
// The EXPECT_CALL(...) source text.
// True if and only if the cardinality is specified explicitly.
bool
cardinality_specified_
;
Cardinality
cardinality_
;
// The cardinality of the expectation.
Cardinality
cardinality_
;
// The cardinality of the expectation.
// The immediate pre-requisites (i.e. expectations that must be
// satisfied before this expectation can be matched) of this
// expectation. We use std::shared_ptr in the set because we want an
...
...
@@ -887,8 +874,8 @@ class GTEST_API_ ExpectationBase {
bool
retires_on_saturation_
;
Clause
last_clause_
;
mutable
bool
action_count_checked_
;
// Under mutex_.
mutable
Mutex
mutex_
;
// Protects action_count_checked_.
};
// class ExpectationBase
mutable
Mutex
mutex_
;
// Protects action_count_checked_.
};
// class ExpectationBase
// Implements an expectation for the given function type.
template
<
typename
F
>
...
...
@@ -945,9 +932,7 @@ class TypedExpectation : public ExpectationBase {
}
// Implements the .Times() clause.
TypedExpectation
&
Times
(
int
n
)
{
return
Times
(
Exactly
(
n
));
}
TypedExpectation
&
Times
(
int
n
)
{
return
Times
(
Exactly
(
n
));
}
// Implements the .InSequence() clause.
TypedExpectation
&
InSequence
(
const
Sequence
&
s
)
{
...
...
@@ -1062,9 +1047,7 @@ class TypedExpectation : public ExpectationBase {
// Returns the matchers for the arguments as specified inside the
// EXPECT_CALL() macro.
const
ArgumentMatcherTuple
&
matchers
()
const
{
return
matchers_
;
}
const
ArgumentMatcherTuple
&
matchers
()
const
{
return
matchers_
;
}
// Returns the matcher specified by the .With() clause.
const
Matcher
<
const
ArgumentTuple
&>&
extra_matcher
()
const
{
...
...
@@ -1119,10 +1102,8 @@ class TypedExpectation : public ExpectationBase {
// Describes the result of matching the arguments against this
// expectation to the given ostream.
void
ExplainMatchResultTo
(
const
ArgumentTuple
&
args
,
::
std
::
ostream
*
os
)
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
void
ExplainMatchResultTo
(
const
ArgumentTuple
&
args
,
::
std
::
ostream
*
os
)
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
if
(
is_retired
())
{
...
...
@@ -1181,9 +1162,9 @@ class TypedExpectation : public ExpectationBase {
::
std
::
stringstream
ss
;
DescribeLocationTo
(
&
ss
);
ss
<<
"Actions ran out in "
<<
source_text
()
<<
"...
\n
"
<<
"Called "
<<
count
<<
" times, but only "
<<
action_count
<<
" WillOnce()"
<<
(
action_count
==
1
?
" is"
:
"s are"
)
<<
" specified - "
;
<<
"Called "
<<
count
<<
" times, but only "
<<
action_count
<<
" WillOnce()"
<<
(
action_count
==
1
?
" is"
:
"s are"
)
<<
" specified - "
;
mocker
->
DescribeDefaultActionTo
(
args
,
&
ss
);
Log
(
kWarning
,
ss
.
str
(),
1
);
}
...
...
@@ -1225,7 +1206,7 @@ class TypedExpectation : public ExpectationBase {
}
// Must be done after IncrementCount()!
*
what
<<
"Mock function call matches "
<<
source_text
()
<<
"...
\n
"
;
*
what
<<
"Mock function call matches "
<<
source_text
()
<<
"...
\n
"
;
return
&
(
GetCurrentAction
(
mocker
,
args
));
}
...
...
@@ -1258,8 +1239,8 @@ template <typename F>
class
MockSpec
{
public:
typedef
typename
internal
::
Function
<
F
>::
ArgumentTuple
ArgumentTuple
;
typedef
typename
internal
::
Function
<
F
>::
ArgumentMatcherTuple
ArgumentMatcherTuple
;
typedef
typename
internal
::
Function
<
F
>::
ArgumentMatcherTuple
ArgumentMatcherTuple
;
// Constructs a MockSpec object, given the function mocker object
// that the spec is associated with.
...
...
@@ -1269,8 +1250,9 @@ class MockSpec {
// Adds a new default action spec to the function mocker and returns
// the newly created spec.
internal
::
OnCallSpec
<
F
>&
InternalDefaultActionSetAt
(
const
char
*
file
,
int
line
,
const
char
*
obj
,
const
char
*
call
)
{
internal
::
OnCallSpec
<
F
>&
InternalDefaultActionSetAt
(
const
char
*
file
,
int
line
,
const
char
*
obj
,
const
char
*
call
)
{
LogWithLocation
(
internal
::
kInfo
,
file
,
line
,
std
::
string
(
"ON_CALL("
)
+
obj
+
", "
+
call
+
") invoked"
);
return
function_mocker_
->
AddNewOnCallSpec
(
file
,
line
,
matchers_
);
...
...
@@ -1278,13 +1260,14 @@ class MockSpec {
// Adds a new expectation spec to the function mocker and returns
// the newly created spec.
internal
::
TypedExpectation
<
F
>&
InternalExpectedAt
(
const
char
*
file
,
int
line
,
const
char
*
obj
,
const
char
*
call
)
{
internal
::
TypedExpectation
<
F
>&
InternalExpectedAt
(
const
char
*
file
,
int
line
,
const
char
*
obj
,
const
char
*
call
)
{
const
std
::
string
source_text
(
std
::
string
(
"EXPECT_CALL("
)
+
obj
+
", "
+
call
+
")"
);
LogWithLocation
(
internal
::
kInfo
,
file
,
line
,
source_text
+
" invoked"
);
return
function_mocker_
->
AddNewExpectation
(
file
,
line
,
source_text
,
matchers_
);
return
function_mocker_
->
AddNewExpectation
(
file
,
line
,
source_text
,
matchers_
);
}
// This operator overload is used to swallow the superfluous parameter list
...
...
@@ -1317,9 +1300,7 @@ template <typename T>
class
ReferenceOrValueWrapper
{
public:
// Constructs a wrapper from the given value/reference.
explicit
ReferenceOrValueWrapper
(
T
value
)
:
value_
(
std
::
move
(
value
))
{
}
explicit
ReferenceOrValueWrapper
(
T
value
)
:
value_
(
std
::
move
(
value
))
{}
// Unwraps and returns the underlying value/reference, exactly as
// originally passed. The behavior of calling this more than once on
...
...
@@ -1330,9 +1311,7 @@ class ReferenceOrValueWrapper {
// Always returns a const reference (more precisely,
// const std::add_lvalue_reference<T>::type). The behavior of calling this
// after calling Unwrap on the same object is unspecified.
const
T
&
Peek
()
const
{
return
value_
;
}
const
T
&
Peek
()
const
{
return
value_
;
}
private:
T
value_
;
...
...
@@ -1346,8 +1325,7 @@ class ReferenceOrValueWrapper<T&> {
// Workaround for debatable pass-by-reference lint warning (c-library-team
// policy precludes NOLINT in this context)
typedef
T
&
reference
;
explicit
ReferenceOrValueWrapper
(
reference
ref
)
:
value_ptr_
(
&
ref
)
{}
explicit
ReferenceOrValueWrapper
(
reference
ref
)
:
value_ptr_
(
&
ref
)
{}
T
&
Unwrap
()
{
return
*
value_ptr_
;
}
const
T
&
Peek
()
const
{
return
*
value_ptr_
;
}
...
...
@@ -1377,9 +1355,7 @@ template <typename T>
class
ActionResultHolder
:
public
UntypedActionResultHolderBase
{
public:
// Returns the held value. Must not be called more than once.
T
Unwrap
()
{
return
result_
.
Unwrap
();
}
T
Unwrap
()
{
return
result_
.
Unwrap
();
}
// Prints the held value as an action's result to os.
void
PrintAsActionResult
(
::
std
::
ostream
*
os
)
const
override
{
...
...
@@ -1395,8 +1371,8 @@ class ActionResultHolder : public UntypedActionResultHolderBase {
const
FunctionMocker
<
F
>*
func_mocker
,
typename
Function
<
F
>::
ArgumentTuple
&&
args
,
const
std
::
string
&
call_description
)
{
return
new
ActionResultHolder
(
Wrapper
(
func_mocker
->
PerformDefaultAction
(
std
::
move
(
args
),
call_description
)));
return
new
ActionResultHolder
(
Wrapper
(
func_mocker
->
PerformDefaultAction
(
std
::
move
(
args
),
call_description
)));
}
// Performs the given action and returns the result in a new-ed
...
...
@@ -1404,16 +1380,13 @@ class ActionResultHolder : public UntypedActionResultHolderBase {
template
<
typename
F
>
static
ActionResultHolder
*
PerformAction
(
const
Action
<
F
>&
action
,
typename
Function
<
F
>::
ArgumentTuple
&&
args
)
{
return
new
ActionResultHolder
(
Wrapper
(
action
.
Perform
(
std
::
move
(
args
))));
return
new
ActionResultHolder
(
Wrapper
(
action
.
Perform
(
std
::
move
(
args
))));
}
private:
typedef
ReferenceOrValueWrapper
<
T
>
Wrapper
;
explicit
ActionResultHolder
(
Wrapper
result
)
:
result_
(
std
::
move
(
result
))
{
}
explicit
ActionResultHolder
(
Wrapper
result
)
:
result_
(
std
::
move
(
result
))
{}
Wrapper
result_
;
...
...
@@ -1424,7 +1397,7 @@ class ActionResultHolder : public UntypedActionResultHolderBase {
template
<
>
class
ActionResultHolder
<
void
>
:
public
UntypedActionResultHolderBase
{
public:
void
Unwrap
()
{
}
void
Unwrap
()
{}
void
PrintAsActionResult
(
::
std
::
ostream
*
/* os */
)
const
override
{}
...
...
@@ -1495,14 +1468,12 @@ class FunctionMocker<R(Args...)> final : public UntypedFunctionMockerBase {
// Returns the ON_CALL spec that matches this mock function with the
// given arguments; returns NULL if no matching ON_CALL is found.
// L = *
const
OnCallSpec
<
F
>*
FindOnCallSpec
(
const
ArgumentTuple
&
args
)
const
{
for
(
UntypedOnCallSpecs
::
const_reverse_iterator
it
=
untyped_on_call_specs_
.
rbegin
();
const
OnCallSpec
<
F
>*
FindOnCallSpec
(
const
ArgumentTuple
&
args
)
const
{
for
(
UntypedOnCallSpecs
::
const_reverse_iterator
it
=
untyped_on_call_specs_
.
rbegin
();
it
!=
untyped_on_call_specs_
.
rend
();
++
it
)
{
const
OnCallSpec
<
F
>*
spec
=
static_cast
<
const
OnCallSpec
<
F
>*>
(
*
it
);
if
(
spec
->
Matches
(
args
))
return
spec
;
if
(
spec
->
Matches
(
args
))
return
spec
;
}
return
nullptr
;
...
...
@@ -1517,8 +1488,7 @@ class FunctionMocker<R(Args...)> final : public UntypedFunctionMockerBase {
// L = *
Result
PerformDefaultAction
(
ArgumentTuple
&&
args
,
const
std
::
string
&
call_description
)
const
{
const
OnCallSpec
<
F
>*
const
spec
=
this
->
FindOnCallSpec
(
args
);
const
OnCallSpec
<
F
>*
const
spec
=
this
->
FindOnCallSpec
(
args
);
if
(
spec
!=
nullptr
)
{
return
spec
->
GetAction
().
Perform
(
std
::
move
(
args
));
}
...
...
@@ -1579,8 +1549,7 @@ class FunctionMocker<R(Args...)> final : public UntypedFunctionMockerBase {
untyped_on_call_specs_
.
swap
(
specs_to_delete
);
g_gmock_mutex
.
Unlock
();
for
(
UntypedOnCallSpecs
::
const_iterator
it
=
specs_to_delete
.
begin
();
for
(
UntypedOnCallSpecs
::
const_iterator
it
=
specs_to_delete
.
begin
();
it
!=
specs_to_delete
.
end
();
++
it
)
{
delete
static_cast
<
const
OnCallSpec
<
F
>*>
(
*
it
);
}
...
...
@@ -1611,10 +1580,9 @@ class FunctionMocker<R(Args...)> final : public UntypedFunctionMockerBase {
typedef
ActionResultHolder
<
Result
>
ResultHolder
;
// Adds and returns a default action spec for this mock function.
OnCallSpec
<
F
>&
AddNewOnCallSpec
(
const
char
*
file
,
int
line
,
const
ArgumentMatcherTuple
&
m
)
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
)
{
OnCallSpec
<
F
>&
AddNewOnCallSpec
(
const
char
*
file
,
int
line
,
const
ArgumentMatcherTuple
&
m
)
GTEST_LOCK_EXCLUDED_
(
g_gmock_mutex
)
{
Mock
::
RegisterUseByOnCallOrExpectCall
(
MockObject
(),
file
,
line
);
OnCallSpec
<
F
>*
const
on_call_spec
=
new
OnCallSpec
<
F
>
(
file
,
line
,
m
);
untyped_on_call_specs_
.
push_back
(
on_call_spec
);
...
...
@@ -1644,7 +1612,8 @@ class FunctionMocker<R(Args...)> final : public UntypedFunctionMockerBase {
}
private:
template
<
typename
Func
>
friend
class
TypedExpectation
;
template
<
typename
Func
>
friend
class
TypedExpectation
;
// Some utilities needed for implementing UntypedInvokeWith().
...
...
@@ -1728,9 +1697,8 @@ class FunctionMocker<R(Args...)> final : public UntypedFunctionMockerBase {
// Returns the expectation that matches the arguments, or NULL if no
// expectation matches them.
TypedExpectation
<
F
>*
FindMatchingExpectationLocked
(
const
ArgumentTuple
&
args
)
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
TypedExpectation
<
F
>*
FindMatchingExpectationLocked
(
const
ArgumentTuple
&
args
)
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
// See the definition of untyped_expectations_ for why access to
// it is unprotected here.
...
...
@@ -1747,11 +1715,10 @@ class FunctionMocker<R(Args...)> final : public UntypedFunctionMockerBase {
}
// Returns a message that the arguments don't match any expectation.
void
FormatUnexpectedCallMessageLocked
(
const
ArgumentTuple
&
args
,
::
std
::
ostream
*
os
,
::
std
::
ostream
*
why
)
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
void
FormatUnexpectedCallMessageLocked
(
const
ArgumentTuple
&
args
,
::
std
::
ostream
*
os
,
::
std
::
ostream
*
why
)
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
*
os
<<
"
\n
Unexpected mock function call - "
;
DescribeDefaultActionTo
(
args
,
os
);
...
...
@@ -1760,15 +1727,14 @@ class FunctionMocker<R(Args...)> final : public UntypedFunctionMockerBase {
// Prints a list of expectations that have been tried against the
// current mock function call.
void
PrintTriedExpectationsLocked
(
const
ArgumentTuple
&
args
,
::
std
::
ostream
*
why
)
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
void
PrintTriedExpectationsLocked
(
const
ArgumentTuple
&
args
,
::
std
::
ostream
*
why
)
const
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
const
size_t
count
=
untyped_expectations_
.
size
();
*
why
<<
"Google Mock tried the following "
<<
count
<<
" "
<<
(
count
==
1
?
"expectation, but it didn't match"
:
"expectations, but none matched"
)
<<
(
count
==
1
?
"expectation, but it didn't match"
:
"expectations, but none matched"
)
<<
":
\n
"
;
for
(
size_t
i
=
0
;
i
<
count
;
i
++
)
{
TypedExpectation
<
F
>*
const
expectation
=
...
...
@@ -1952,7 +1918,9 @@ using internal::MockSpec;
// // Expects a call to const MockFoo::Bar().
// EXPECT_CALL(Const(foo), Bar());
template
<
typename
T
>
inline
const
T
&
Const
(
const
T
&
x
)
{
return
x
;
}
inline
const
T
&
Const
(
const
T
&
x
)
{
return
x
;
}
// Constructs an Expectation object that references and co-owns exp.
inline
Expectation
::
Expectation
(
internal
::
ExpectationBase
&
exp
)
// NOLINT
...
...
googlemock/include/gmock/internal/gmock-internal-utils.h
View file @
9e712372
...
...
@@ -59,9 +59,9 @@ namespace internal {
// Silence MSVC C4100 (unreferenced formal parameter) and
// C4805('==': unsafe mix of type 'const int' and type 'const bool')
#ifdef _MSC_VER
#
pragma warning(push)
#
pragma warning(disable
:
4100)
#
pragma warning(disable
:
4805)
#pragma warning(push)
#pragma warning(disable
:
4100)
#pragma warning(disable
:
4805)
#endif
// Joins a vector of strings as if they are fields of a tuple; returns
...
...
@@ -91,7 +91,9 @@ inline const Element* GetRawPointer(const std::reference_wrapper<Element>& r) {
// This overloaded version is for the raw pointer case.
template
<
typename
Element
>
inline
Element
*
GetRawPointer
(
Element
*
p
)
{
return
p
;
}
inline
Element
*
GetRawPointer
(
Element
*
p
)
{
return
p
;
}
// MSVC treats wchar_t as a native type usually, but treats it as the
// same as unsigned short when the compiler option /Zc:wchar_t- is
...
...
@@ -100,7 +102,7 @@ inline Element* GetRawPointer(Element* p) { return p; }
#if defined(_MSC_VER) && !defined(_NATIVE_WCHAR_T_DEFINED)
// wchar_t is a typedef.
#else
#
define GMOCK_WCHAR_T_IS_NATIVE_ 1
#define GMOCK_WCHAR_T_IS_NATIVE_ 1
#endif
// In what follows, we use the term "kind" to indicate whether a type
...
...
@@ -108,18 +110,20 @@ inline Element* GetRawPointer(Element* p) { return p; }
// or none of them. This categorization is useful for determining
// when a matcher argument type can be safely converted to another
// type in the implementation of SafeMatcherCast.
enum
TypeKind
{
kBool
,
kInteger
,
kFloatingPoint
,
kOther
};
enum
TypeKind
{
kBool
,
kInteger
,
kFloatingPoint
,
kOther
};
// KindOf<T>::value is the kind of type T.
template
<
typename
T
>
struct
KindOf
{
template
<
typename
T
>
struct
KindOf
{
enum
{
value
=
kOther
};
// The default kind.
};
// This macro declares that the kind of 'type' is 'kind'.
#define GMOCK_DECLARE_KIND_(type, kind) \
template <> struct KindOf<type> { enum { value = kind }; }
template <> \
struct KindOf<type> { \
enum { value = kind }; \
}
GMOCK_DECLARE_KIND_
(
bool
,
kBool
);
...
...
@@ -127,13 +131,13 @@ GMOCK_DECLARE_KIND_(bool, kBool);
GMOCK_DECLARE_KIND_
(
char
,
kInteger
);
GMOCK_DECLARE_KIND_
(
signed
char
,
kInteger
);
GMOCK_DECLARE_KIND_
(
unsigned
char
,
kInteger
);
GMOCK_DECLARE_KIND_
(
short
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
short
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
unsigned
short
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
int
,
kInteger
);
GMOCK_DECLARE_KIND_
(
unsigned
int
,
kInteger
);
GMOCK_DECLARE_KIND_
(
long
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
unsigned
long
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
long
long
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
long
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
unsigned
long
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
long
long
,
kInteger
);
// NOLINT
GMOCK_DECLARE_KIND_
(
unsigned
long
long
,
kInteger
);
// NOLINT
#if GMOCK_WCHAR_T_IS_NATIVE_
...
...
@@ -148,7 +152,7 @@ GMOCK_DECLARE_KIND_(long double, kFloatingPoint);
#undef GMOCK_DECLARE_KIND_
// Evaluates to the kind of 'type'.
#define GMOCK_KIND_OF_(type) \
#define GMOCK_KIND_OF_(type)
\
static_cast< ::testing::internal::TypeKind>( \
::testing::internal::KindOf<type>::value)
...
...
@@ -204,9 +208,7 @@ using LosslessArithmeticConvertible =
class
FailureReporterInterface
{
public:
// The type of a failure (either non-fatal or fatal).
enum
FailureType
{
kNonfatal
,
kFatal
};
enum
FailureType
{
kNonfatal
,
kFatal
};
virtual
~
FailureReporterInterface
()
{}
...
...
@@ -226,8 +228,8 @@ GTEST_API_ FailureReporterInterface* GetFailureReporter();
inline
void
Assert
(
bool
condition
,
const
char
*
file
,
int
line
,
const
std
::
string
&
msg
)
{
if
(
!
condition
)
{
GetFailureReporter
()
->
ReportFailure
(
FailureReporterInterface
::
kFatal
,
file
,
line
,
msg
);
GetFailureReporter
()
->
ReportFailure
(
FailureReporterInterface
::
kFatal
,
file
,
line
,
msg
);
}
}
inline
void
Assert
(
bool
condition
,
const
char
*
file
,
int
line
)
{
...
...
@@ -248,10 +250,7 @@ inline void Expect(bool condition, const char* file, int line) {
}
// Severity level of a log.
enum
LogSeverity
{
kInfo
=
0
,
kWarning
=
1
};
enum
LogSeverity
{
kInfo
=
0
,
kWarning
=
1
};
// Valid values for the --gmock_verbose flag.
...
...
@@ -294,8 +293,8 @@ GTEST_API_ WithoutMatchers GetWithoutMatchers();
// Disable MSVC warnings for infinite recursion, since in this case the
// recursion is unreachable.
#ifdef _MSC_VER
#
pragma warning(push)
#
pragma warning(disable
:
4717)
#pragma warning(push)
#pragma warning(disable
:
4717)
#endif
// Invalid<T>() is usable as an expression of type T, but will terminate
...
...
@@ -313,7 +312,7 @@ inline T Invalid() {
}
#ifdef _MSC_VER
#
pragma warning(pop)
#pragma warning(pop)
#endif
// Given a raw type (i.e. having no top-level reference or const
...
...
@@ -392,7 +391,8 @@ class StlContainerView< ::std::tuple<ElementPointer, Size> > {
// The following specialization prevents the user from instantiating
// StlContainer with a reference type.
template
<
typename
T
>
class
StlContainerView
<
T
&>
;
template
<
typename
T
>
class
StlContainerView
<
T
&>
;
// A type transform to remove constness from the first part of a pair.
// Pairs like that are used as the value_type of associative containers,
...
...
@@ -413,17 +413,18 @@ struct RemoveConstFromKey<std::pair<const K, V> > {
GTEST_API_
void
IllegalDoDefault
(
const
char
*
file
,
int
line
);
template
<
typename
F
,
typename
Tuple
,
size_t
...
Idx
>
auto
ApplyImpl
(
F
&&
f
,
Tuple
&&
args
,
IndexSequence
<
Idx
...
>
)
->
decltype
(
std
::
forward
<
F
>
(
f
)(
std
::
get
<
Idx
>
(
std
::
forward
<
Tuple
>
(
args
))...))
{
auto
ApplyImpl
(
F
&&
f
,
Tuple
&&
args
,
IndexSequence
<
Idx
...
>
)
->
decltype
(
std
::
forward
<
F
>
(
f
)(
std
::
get
<
Idx
>
(
std
::
forward
<
Tuple
>
(
args
))...))
{
return
std
::
forward
<
F
>
(
f
)(
std
::
get
<
Idx
>
(
std
::
forward
<
Tuple
>
(
args
))...);
}
// Apply the function to a tuple of arguments.
template
<
typename
F
,
typename
Tuple
>
auto
Apply
(
F
&&
f
,
Tuple
&&
args
)
->
decltype
(
ApplyImpl
(
std
::
forward
<
F
>
(
f
),
std
::
forward
<
Tuple
>
(
args
),
MakeIndexSequence
<
std
::
tuple_size
<
typename
std
::
remove_reference
<
Tuple
>::
type
>::
value
>
()))
{
auto
Apply
(
F
&&
f
,
Tuple
&&
args
)
->
decltype
(
ApplyImpl
(
std
::
forward
<
F
>
(
f
),
std
::
forward
<
Tuple
>
(
args
),
MakeIndexSequence
<
std
::
tuple_size
<
typename
std
::
remove_reference
<
Tuple
>::
type
>::
value
>
()))
{
return
ApplyImpl
(
std
::
forward
<
F
>
(
f
),
std
::
forward
<
Tuple
>
(
args
),
MakeIndexSequence
<
std
::
tuple_size
<
typename
std
::
remove_reference
<
Tuple
>::
type
>::
value
>
());
...
...
@@ -463,7 +464,7 @@ constexpr size_t Function<R(Args...)>::ArgumentCount;
bool
Base64Unescape
(
const
std
::
string
&
encoded
,
std
::
string
*
decoded
);
#ifdef _MSC_VER
#
pragma warning(pop)
#pragma warning(pop)
#endif
}
// namespace internal
...
...
googlemock/include/gmock/internal/gmock-port.h
View file @
9e712372
...
...
@@ -42,6 +42,7 @@
#include <assert.h>
#include <stdlib.h>
#include <cstdint>
#include <iostream>
...
...
@@ -53,13 +54,13 @@
// here, as Google Mock depends on Google Test. Only add a utility
// here if it's truly specific to Google Mock.
#include "gtest/internal/gtest-port.h"
#include "gmock/internal/custom/gmock-port.h"
#include "gtest/internal/gtest-port.h"
// For MS Visual C++, check the compiler version. At least VS 2015 is
// required to compile Google Mock.
#if defined(_MSC_VER) && _MSC_VER < 1900
#
error "At least Visual C++ 2015 (14.0) is required to compile Google Mock."
#error "At least Visual C++ 2015 (14.0) is required to compile Google Mock."
#endif
// Macro for referencing flags. This is public as we want the user to
...
...
@@ -72,29 +73,35 @@
#define GMOCK_DECLARE_bool_(name) \
namespace testing { \
GTEST_API_ extern bool GMOCK_FLAG(name); \
} static_assert(true, "no-op to require trailing semicolon")
} \
static_assert(true, "no-op to require trailing semicolon")
#define GMOCK_DECLARE_int32_(name) \
namespace testing { \
GTEST_API_ extern int32_t GMOCK_FLAG(name); \
} static_assert(true, "no-op to require trailing semicolon")
} \
static_assert(true, "no-op to require trailing semicolon")
#define GMOCK_DECLARE_string_(name) \
namespace testing { \
GTEST_API_ extern ::std::string GMOCK_FLAG(name); \
} static_assert(true, "no-op to require trailing semicolon")
} \
static_assert(true, "no-op to require trailing semicolon")
// Macros for defining flags.
#define GMOCK_DEFINE_bool_(name, default_val, doc) \
namespace testing { \
GTEST_API_ bool GMOCK_FLAG(name) = (default_val); \
} static_assert(true, "no-op to require trailing semicolon")
} \
static_assert(true, "no-op to require trailing semicolon")
#define GMOCK_DEFINE_int32_(name, default_val, doc) \
namespace testing { \
GTEST_API_ int32_t GMOCK_FLAG(name) = (default_val); \
} static_assert(true, "no-op to require trailing semicolon")
} \
static_assert(true, "no-op to require trailing semicolon")
#define GMOCK_DEFINE_string_(name, default_val, doc) \
namespace testing { \
GTEST_API_ ::std::string GMOCK_FLAG(name) = (default_val); \
} static_assert(true, "no-op to require trailing semicolon")
} \
static_assert(true, "no-op to require trailing semicolon")
#endif // !defined(GMOCK_DECLARE_bool_)
#if !defined(GMOCK_FLAG_GET)
...
...
googlemock/src/gmock-cardinalities.cc
View file @
9e712372
...
...
@@ -27,7 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Google Mock - a framework for writing C++ mock classes.
//
// This file implements cardinalities.
...
...
@@ -35,9 +34,11 @@
#include "gmock/gmock-cardinalities.h"
#include <limits.h>
#include <ostream> // NOLINT
#include <sstream>
#include <string>
#include "gmock/internal/gmock-internal-utils.h"
#include "gtest/gtest.h"
...
...
@@ -49,8 +50,7 @@ namespace {
class
BetweenCardinalityImpl
:
public
CardinalityInterface
{
public:
BetweenCardinalityImpl
(
int
min
,
int
max
)
:
min_
(
min
>=
0
?
min
:
0
),
max_
(
max
>=
min_
?
max
:
min_
)
{
:
min_
(
min
>=
0
?
min
:
0
),
max_
(
max
>=
min_
?
max
:
min_
)
{
std
::
stringstream
ss
;
if
(
min
<
0
)
{
ss
<<
"The invocation lower bound must be >= 0, "
...
...
@@ -62,8 +62,7 @@ class BetweenCardinalityImpl : public CardinalityInterface {
internal
::
Expect
(
false
,
__FILE__
,
__LINE__
,
ss
.
str
());
}
else
if
(
min
>
max
)
{
ss
<<
"The invocation upper bound ("
<<
max
<<
") must be >= the invocation lower bound ("
<<
min
<<
")."
;
<<
") must be >= the invocation lower bound ("
<<
min
<<
")."
;
internal
::
Expect
(
false
,
__FILE__
,
__LINE__
,
ss
.
str
());
}
}
...
...
googlemock/src/gmock-internal-utils.cc
View file @
9e712372
...
...
@@ -27,7 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Google Mock - a framework for writing C++ mock classes.
//
// This file defines some utilities useful for implementing Google
...
...
@@ -84,12 +83,11 @@ GTEST_API_ std::string ConvertIdentifierNameToWords(const char* id_name) {
// We don't care about the current locale as the input is
// guaranteed to be a valid C++ identifier name.
const
bool
starts_new_word
=
IsUpper
(
*
p
)
||
(
!
IsAlpha
(
prev_char
)
&&
IsLower
(
*
p
))
||
(
!
IsDigit
(
prev_char
)
&&
IsDigit
(
*
p
));
(
!
IsAlpha
(
prev_char
)
&&
IsLower
(
*
p
))
||
(
!
IsDigit
(
prev_char
)
&&
IsDigit
(
*
p
));
if
(
IsAlNum
(
*
p
))
{
if
(
starts_new_word
&&
result
!=
""
)
result
+=
' '
;
if
(
starts_new_word
&&
result
!=
""
)
result
+=
' '
;
result
+=
ToLower
(
*
p
);
}
}
...
...
@@ -103,12 +101,9 @@ class GoogleTestFailureReporter : public FailureReporterInterface {
public:
void
ReportFailure
(
FailureType
type
,
const
char
*
file
,
int
line
,
const
std
::
string
&
message
)
override
{
AssertHelper
(
type
==
kFatal
?
TestPartResult
::
kFatalFailure
:
TestPartResult
::
kNonFatalFailure
,
file
,
line
,
message
.
c_str
())
=
Message
();
AssertHelper
(
type
==
kFatal
?
TestPartResult
::
kFatalFailure
:
TestPartResult
::
kNonFatalFailure
,
file
,
line
,
message
.
c_str
())
=
Message
();
if
(
type
==
kFatal
)
{
posix
::
Abort
();
}
...
...
@@ -156,8 +151,7 @@ GTEST_API_ bool LogIsVisible(LogSeverity severity) {
// conservative.
GTEST_API_
void
Log
(
LogSeverity
severity
,
const
std
::
string
&
message
,
int
stack_frames_to_skip
)
{
if
(
!
LogIsVisible
(
severity
))
return
;
if
(
!
LogIsVisible
(
severity
))
return
;
// Ensures that logs from different threads don't interleave.
MutexLock
l
(
&
g_log_mutex
);
...
...
@@ -186,8 +180,8 @@ GTEST_API_ void Log(LogSeverity severity, const std::string& message,
std
::
cout
<<
"
\n
"
;
}
std
::
cout
<<
"Stack trace:
\n
"
<<
::
testing
::
internal
::
GetCurrentOsStackTraceExceptTop
(
::
testing
::
UnitTest
::
GetInstance
(),
actual_to_skip
);
<<
::
testing
::
internal
::
GetCurrentOsStackTraceExceptTop
(
::
testing
::
UnitTest
::
GetInstance
(),
actual_to_skip
);
}
std
::
cout
<<
::
std
::
flush
;
}
...
...
googlemock/src/gmock-matchers.cc
View file @
9e712372
...
...
@@ -27,7 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Google Mock - a framework for writing C++ mock classes.
//
// This file implements Matcher<const string&>, Matcher<string>, and
...
...
googlemock/src/gmock-spec-builders.cc
View file @
9e712372
...
...
@@ -27,7 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Google Mock - a framework for writing C++ mock classes.
//
// This file implements the spec builder syntax (ON_CALL and
...
...
@@ -49,15 +48,15 @@
#include "gtest/internal/gtest-port.h"
#if GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC
#
include <unistd.h> // NOLINT
#include <unistd.h> // NOLINT
#endif
// Silence C4800 (C4800: 'int *const ': forcing value
// to bool 'true' or 'false') for MSVC 15
#ifdef _MSC_VER
#if _MSC_VER == 1900
#
pragma warning(push)
#
pragma warning(disable
:
4800)
#pragma warning(push)
#pragma warning(disable
:
4800)
#endif
#endif
...
...
@@ -195,11 +194,12 @@ void ExpectationBase::DescribeCallCountTo(::std::ostream* os) const
// Describes the state of the expectation (e.g. is it satisfied?
// is it active?).
*
os
<<
" - "
<<
(
IsOverSaturated
()
?
"over-saturated"
:
IsSaturated
()
?
"saturated"
:
IsSatisfied
()
?
"satisfied"
:
"unsatisfied"
)
<<
" and "
<<
(
is_retired
()
?
"retired"
:
"active"
);
*
os
<<
" - "
<<
(
IsOverSaturated
()
?
"over-saturated"
:
IsSaturated
()
?
"saturated"
:
IsSatisfied
()
?
"satisfied"
:
"unsatisfied"
)
<<
" and "
<<
(
is_retired
()
?
"retired"
:
"active"
);
}
// Checks the action count (i.e. the number of WillOnce() and
...
...
@@ -242,13 +242,12 @@ void ExpectationBase::CheckActionCountIfNotDone() const
::
std
::
stringstream
ss
;
DescribeLocationTo
(
&
ss
);
ss
<<
"Too "
<<
(
too_many
?
"many"
:
"few"
)
<<
" actions specified in "
<<
source_text
()
<<
"...
\n
"
ss
<<
"Too "
<<
(
too_many
?
"many"
:
"few"
)
<<
" actions specified in "
<<
source_text
()
<<
"...
\n
"
<<
"Expected to be "
;
cardinality
().
DescribeTo
(
&
ss
);
ss
<<
", but has "
<<
(
too_many
?
""
:
"only "
)
<<
action_count
<<
" WillOnce()"
<<
(
action_count
==
1
?
""
:
"s"
);
ss
<<
", but has "
<<
(
too_many
?
""
:
"only "
)
<<
action_count
<<
" WillOnce()"
<<
(
action_count
==
1
?
""
:
"s"
);
if
(
repeated_action_specified_
)
{
ss
<<
" and a WillRepeatedly()"
;
}
...
...
@@ -398,11 +397,11 @@ UntypedActionResultHolderBase* UntypedFunctionMockerBase::UntypedInvokeWith(
// If the user wants this to be a warning, we print
// it only when they want to see warnings.
reaction
==
kWarn
?
LogIsVisible
(
kWarning
)
:
// Otherwise, the user wants this to be an error, and we
// should always print detailed information in the error.
true
;
?
LogIsVisible
(
kWarning
)
:
// Otherwise, the user wants this to be an error, and we
// should always print detailed information in the error.
true
;
if
(
!
need_to_report_uninteresting_call
)
{
// Perform the action without printing the call information.
...
...
@@ -505,8 +504,7 @@ UntypedActionResultHolderBase* UntypedFunctionMockerBase::UntypedInvokeWith(
Expectation
UntypedFunctionMockerBase
::
GetHandleOf
(
ExpectationBase
*
exp
)
{
// See the definition of untyped_expectations_ for why access to it
// is unprotected here.
for
(
UntypedExpectations
::
const_iterator
it
=
untyped_expectations_
.
begin
();
for
(
UntypedExpectations
::
const_iterator
it
=
untyped_expectations_
.
begin
();
it
!=
untyped_expectations_
.
end
();
++
it
)
{
if
(
it
->
get
()
==
exp
)
{
return
Expectation
(
*
it
);
...
...
@@ -526,8 +524,7 @@ bool UntypedFunctionMockerBase::VerifyAndClearExpectationsLocked()
GTEST_EXCLUSIVE_LOCK_REQUIRED_
(
g_gmock_mutex
)
{
g_gmock_mutex
.
AssertHeld
();
bool
expectations_met
=
true
;
for
(
UntypedExpectations
::
const_iterator
it
=
untyped_expectations_
.
begin
();
for
(
UntypedExpectations
::
const_iterator
it
=
untyped_expectations_
.
begin
();
it
!=
untyped_expectations_
.
end
();
++
it
)
{
ExpectationBase
*
const
untyped_expectation
=
it
->
get
();
if
(
untyped_expectation
->
IsOverSaturated
())
{
...
...
@@ -538,15 +535,15 @@ bool UntypedFunctionMockerBase::VerifyAndClearExpectationsLocked()
}
else
if
(
!
untyped_expectation
->
IsSatisfied
())
{
expectations_met
=
false
;
::
std
::
stringstream
ss
;
ss
<<
"Actual function call count doesn't match "
<<
untyped_expectation
->
source_text
()
<<
"...
\n
"
;
ss
<<
"Actual function call count doesn't match "
<<
untyped_expectation
->
source_text
()
<<
"...
\n
"
;
// No need to show the source file location of the expectation
// in the description, as the Expect() call that follows already
// takes care of it.
untyped_expectation
->
MaybeDescribeExtraMatcherTo
(
&
ss
);
untyped_expectation
->
DescribeCallCountTo
(
&
ss
);
Expect
(
false
,
untyped_expectation
->
file
(),
untyped_expectation
->
line
(),
ss
.
str
());
Expect
(
false
,
untyped_expectation
->
file
(),
untyped_expectation
->
line
(),
ss
.
str
());
}
}
...
...
@@ -633,7 +630,7 @@ class MockObjectRegistry {
<<
state
.
first_used_test
<<
")"
;
}
std
::
cout
<<
" should be deleted but never is. Its address is @"
<<
it
->
first
<<
"."
;
<<
it
->
first
<<
"."
;
leaked_count
++
;
}
if
(
leaked_count
>
0
)
{
...
...
@@ -712,8 +709,7 @@ void Mock::UnregisterCallReaction(const void* mock_obj)
// Returns the reaction Google Mock will have on uninteresting calls
// made on the given mock object.
internal
::
CallReaction
Mock
::
GetReactionOnUninterestingCalls
(
const
void
*
mock_obj
)
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
)
{
const
void
*
mock_obj
)
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
)
{
internal
::
MutexLock
l
(
&
internal
::
g_gmock_mutex
);
return
(
g_uninteresting_call_reaction
.
count
(
mock_obj
)
==
0
)
?
internal
::
intToCallReaction
(
...
...
@@ -873,8 +869,8 @@ Expectation::~Expectation() {}
void
Sequence
::
AddExpectation
(
const
Expectation
&
expectation
)
const
{
if
(
*
last_expectation_
!=
expectation
)
{
if
(
last_expectation_
->
expectation_base
()
!=
nullptr
)
{
expectation
.
expectation_base
()
->
immediate_prerequisites_
+=
*
last_expectation_
;
expectation
.
expectation_base
()
->
immediate_prerequisites_
+=
*
last_expectation_
;
}
*
last_expectation_
=
expectation
;
}
...
...
@@ -903,6 +899,6 @@ InSequence::~InSequence() {
#ifdef _MSC_VER
#if _MSC_VER == 1900
#
pragma warning(pop)
#pragma warning(pop)
#endif
#endif
googlemock/src/gmock.cc
View file @
9e712372
...
...
@@ -27,8 +27,8 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "gmock/gmock.h"
#include "gmock/internal/gmock-port.h"
GMOCK_DEFINE_bool_
(
catch_leaked_mocks
,
true
,
...
...
googlemock/src/gmock_main.cc
View file @
9e712372
...
...
@@ -27,8 +27,8 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <iostream>
#include "gmock/gmock.h"
#include "gtest/gtest.h"
...
...
@@ -56,7 +56,7 @@ void loop() { RUN_ALL_TESTS(); }
// https://web.archive.org/web/20170912203238/connect.microsoft.com/VisualStudio/feedback/details/394464/wmain-link-error-in-the-static-library
// // NOLINT
#if GTEST_OS_WINDOWS_MOBILE
#
include <tchar.h> // NOLINT
#include <tchar.h> // NOLINT
GTEST_API_
int
_tmain
(
int
argc
,
TCHAR
**
argv
)
{
#else
...
...
googlemock/test/gmock-actions_test.cc
View file @
9e712372
...
...
@@ -27,32 +27,33 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Google Mock - a framework for writing C++ mock classes.
//
// This file tests the built-in actions.
// Silence C4100 (unreferenced formal parameter) for MSVC
#ifdef _MSC_VER
#
pragma warning(push)
#
pragma warning(disable
:
4100)
#pragma warning(push)
#pragma warning(disable
:
4100)
#if _MSC_VER == 1900
// and silence C4800 (C4800: 'int *const ': forcing value
// to bool 'true' or 'false') for MSVC 15
#
pragma warning(disable
:
4800)
#pragma warning(disable
:
4800)
#endif
#endif
#include "gmock/gmock-actions.h"
#include <algorithm>
#include <iterator>
#include <memory>
#include <string>
#include <type_traits>
#include "gmock/gmock.h"
#include "gmock/internal/gmock-port.h"
#include "gtest/gtest.h"
#include "gtest/gtest-spi.h"
#include "gtest/gtest.h"
namespace
{
...
...
@@ -114,17 +115,17 @@ TEST(BuiltInDefaultValueTest, IsZeroForNumericTypes) {
#endif
#endif
EXPECT_EQ
(
0U
,
BuiltInDefaultValue
<
unsigned
short
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
signed
short
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
short
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
signed
short
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
short
>::
Get
());
// NOLINT
EXPECT_EQ
(
0U
,
BuiltInDefaultValue
<
unsigned
int
>::
Get
());
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
signed
int
>::
Get
());
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
int
>::
Get
());
EXPECT_EQ
(
0U
,
BuiltInDefaultValue
<
unsigned
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
signed
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0U
,
BuiltInDefaultValue
<
unsigned
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
signed
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0U
,
BuiltInDefaultValue
<
unsigned
long
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
signed
long
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
long
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
signed
long
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
long
long
>::
Get
());
// NOLINT
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
float
>::
Get
());
EXPECT_EQ
(
0
,
BuiltInDefaultValue
<
double
>::
Get
());
}
...
...
@@ -139,17 +140,17 @@ TEST(BuiltInDefaultValueTest, ExistsForNumericTypes) {
EXPECT_TRUE
(
BuiltInDefaultValue
<
wchar_t
>::
Exists
());
#endif
EXPECT_TRUE
(
BuiltInDefaultValue
<
unsigned
short
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
signed
short
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
short
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
signed
short
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
short
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
unsigned
int
>::
Exists
());
EXPECT_TRUE
(
BuiltInDefaultValue
<
signed
int
>::
Exists
());
EXPECT_TRUE
(
BuiltInDefaultValue
<
int
>::
Exists
());
EXPECT_TRUE
(
BuiltInDefaultValue
<
unsigned
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
signed
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
unsigned
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
signed
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
unsigned
long
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
signed
long
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
long
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
signed
long
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
long
long
>::
Exists
());
// NOLINT
EXPECT_TRUE
(
BuiltInDefaultValue
<
float
>::
Exists
());
EXPECT_TRUE
(
BuiltInDefaultValue
<
double
>::
Exists
());
}
...
...
@@ -167,13 +168,13 @@ TEST(BuiltInDefaultValueTest, BoolExists) {
// Tests that BuiltInDefaultValue<T>::Get() returns "" when T is a
// string type.
TEST
(
BuiltInDefaultValueTest
,
IsEmptyStringForString
)
{
EXPECT_EQ
(
""
,
BuiltInDefaultValue
<
::
std
::
string
>::
Get
());
EXPECT_EQ
(
""
,
BuiltInDefaultValue
<::
std
::
string
>::
Get
());
}
// Tests that BuiltInDefaultValue<T>::Exists() returns true when T is a
// string type.
TEST
(
BuiltInDefaultValueTest
,
ExistsForString
)
{
EXPECT_TRUE
(
BuiltInDefaultValue
<
::
std
::
string
>::
Exists
());
EXPECT_TRUE
(
BuiltInDefaultValue
<::
std
::
string
>::
Exists
());
}
// Tests that BuiltInDefaultValue<const T>::Get() returns the same
...
...
@@ -208,7 +209,6 @@ class MyNonDefaultConstructible {
int
value_
;
};
TEST
(
BuiltInDefaultValueTest
,
ExistsForDefaultConstructibleType
)
{
EXPECT_TRUE
(
BuiltInDefaultValue
<
MyDefaultConstructible
>::
Exists
());
}
...
...
@@ -217,25 +217,19 @@ TEST(BuiltInDefaultValueTest, IsDefaultConstructedForDefaultConstructibleType) {
EXPECT_EQ
(
42
,
BuiltInDefaultValue
<
MyDefaultConstructible
>::
Get
().
value
());
}
TEST
(
BuiltInDefaultValueTest
,
DoesNotExistForNonDefaultConstructibleType
)
{
EXPECT_FALSE
(
BuiltInDefaultValue
<
MyNonDefaultConstructible
>::
Exists
());
}
// Tests that BuiltInDefaultValue<T&>::Get() aborts the program.
TEST
(
BuiltInDefaultValueDeathTest
,
IsUndefinedForReferences
)
{
EXPECT_DEATH_IF_SUPPORTED
({
BuiltInDefaultValue
<
int
&>::
Get
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
BuiltInDefaultValue
<
const
char
&>::
Get
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
BuiltInDefaultValue
<
int
&>::
Get
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
BuiltInDefaultValue
<
const
char
&>::
Get
();
},
""
);
}
TEST
(
BuiltInDefaultValueDeathTest
,
IsUndefinedForNonDefaultConstructibleType
)
{
EXPECT_DEATH_IF_SUPPORTED
({
BuiltInDefaultValue
<
MyNonDefaultConstructible
>::
Get
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
(
{
BuiltInDefaultValue
<
MyNonDefaultConstructible
>::
Get
();
},
""
);
}
// Tests that DefaultValue<T>::IsSet() is false initially.
...
...
@@ -281,26 +275,22 @@ TEST(DefaultValueDeathTest, GetReturnsBuiltInDefaultValueWhenUnset) {
EXPECT_EQ
(
0
,
DefaultValue
<
int
>::
Get
());
EXPECT_DEATH_IF_SUPPORTED
({
DefaultValue
<
MyNonDefaultConstructible
>::
Get
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
DefaultValue
<
MyNonDefaultConstructible
>::
Get
();
},
""
);
}
TEST
(
DefaultValueTest
,
GetWorksForMoveOnlyIfSet
)
{
EXPECT_TRUE
(
DefaultValue
<
std
::
unique_ptr
<
int
>>::
Exists
());
EXPECT_TRUE
(
DefaultValue
<
std
::
unique_ptr
<
int
>>::
Get
()
==
nullptr
);
DefaultValue
<
std
::
unique_ptr
<
int
>>::
SetFactory
([]
{
return
std
::
unique_ptr
<
int
>
(
new
int
(
42
));
});
DefaultValue
<
std
::
unique_ptr
<
int
>>::
SetFactory
(
[]
{
return
std
::
unique_ptr
<
int
>
(
new
int
(
42
));
});
EXPECT_TRUE
(
DefaultValue
<
std
::
unique_ptr
<
int
>>::
Exists
());
std
::
unique_ptr
<
int
>
i
=
DefaultValue
<
std
::
unique_ptr
<
int
>>::
Get
();
EXPECT_EQ
(
42
,
*
i
);
}
// Tests that DefaultValue<void>::Get() returns void.
TEST
(
DefaultValueTest
,
GetWorksForVoid
)
{
return
DefaultValue
<
void
>::
Get
();
}
TEST
(
DefaultValueTest
,
GetWorksForVoid
)
{
return
DefaultValue
<
void
>::
Get
();
}
// Tests using DefaultValue with a reference type.
...
...
@@ -348,12 +338,9 @@ TEST(DefaultValueOfReferenceDeathTest, GetReturnsBuiltInDefaultValueWhenUnset) {
EXPECT_FALSE
(
DefaultValue
<
int
&>::
IsSet
());
EXPECT_FALSE
(
DefaultValue
<
MyNonDefaultConstructible
&>::
IsSet
());
EXPECT_DEATH_IF_SUPPORTED
({
DefaultValue
<
int
&>::
Get
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
DefaultValue
<
MyNonDefaultConstructible
>::
Get
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
DefaultValue
<
int
&>::
Get
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
DefaultValue
<
MyNonDefaultConstructible
>::
Get
();
},
""
);
}
// Tests that ActionInterface can be implemented by defining the
...
...
@@ -433,7 +420,7 @@ class IsNotZero : public ActionInterface<bool(int)> { // NOLINT
};
TEST
(
ActionTest
,
CanBeConvertedToOtherActionType
)
{
const
Action
<
bool
(
int
)
>
a1
(
new
IsNotZero
);
// NOLINT
const
Action
<
bool
(
int
)
>
a1
(
new
IsNotZero
);
// NOLINT
const
Action
<
int
(
char
)
>
a2
=
Action
<
int
(
char
)
>
(
a1
);
// NOLINT
EXPECT_EQ
(
1
,
a2
.
Perform
(
std
::
make_tuple
(
'a'
)));
EXPECT_EQ
(
0
,
a2
.
Perform
(
std
::
make_tuple
(
'\0'
)));
...
...
@@ -528,7 +515,7 @@ TEST(ReturnTest, AcceptsStringLiteral) {
// Test struct which wraps a vector of integers. Used in
// 'SupportsWrapperReturnType' test.
struct
IntegerVectorWrapper
{
std
::
vector
<
int
>
*
v
;
std
::
vector
<
int
>*
v
;
IntegerVectorWrapper
(
std
::
vector
<
int
>&
_v
)
:
v
(
&
_v
)
{}
// NOLINT
};
...
...
@@ -648,7 +635,9 @@ TEST(ReturnRefTest, IsCovariant) {
}
template
<
typename
T
,
typename
=
decltype
(
ReturnRef
(
std
::
declval
<
T
&&
>()))
>
bool
CanCallReturnRef
(
T
&&
)
{
return
true
;
}
bool
CanCallReturnRef
(
T
&&
)
{
return
true
;
}
bool
CanCallReturnRef
(
Unused
)
{
return
false
;
}
// Tests that ReturnRef(v) is working with non-temporaries (T&)
...
...
@@ -668,7 +657,7 @@ TEST(ReturnRefTest, WorksForNonTemporary) {
// Tests that ReturnRef(v) is not working with temporaries (T&&)
TEST
(
ReturnRefTest
,
DoesNotWorkForTemporary
)
{
auto
scalar_value
=
[]()
->
int
{
return
123
;
};
auto
scalar_value
=
[]()
->
int
{
return
123
;
};
EXPECT_FALSE
(
CanCallReturnRef
(
scalar_value
()));
auto
non_scalar_value
=
[]()
->
std
::
string
{
return
"ABC"
;
};
...
...
@@ -754,8 +743,7 @@ class MockClass {
// return type by default.
TEST
(
DoDefaultTest
,
ReturnsBuiltInDefaultValueByDefault
)
{
MockClass
mock
;
EXPECT_CALL
(
mock
,
IntFunc
(
_
))
.
WillOnce
(
DoDefault
());
EXPECT_CALL
(
mock
,
IntFunc
(
_
)).
WillOnce
(
DoDefault
());
EXPECT_EQ
(
0
,
mock
.
IntFunc
(
true
));
}
...
...
@@ -763,14 +751,11 @@ TEST(DoDefaultTest, ReturnsBuiltInDefaultValueByDefault) {
// the process when there is no built-in default value for the return type.
TEST
(
DoDefaultDeathTest
,
DiesForUnknowType
)
{
MockClass
mock
;
EXPECT_CALL
(
mock
,
Foo
())
.
WillRepeatedly
(
DoDefault
());
EXPECT_CALL
(
mock
,
Foo
()).
WillRepeatedly
(
DoDefault
());
#if GTEST_HAS_EXCEPTIONS
EXPECT_ANY_THROW
(
mock
.
Foo
());
#else
EXPECT_DEATH_IF_SUPPORTED
({
mock
.
Foo
();
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
mock
.
Foo
();
},
""
);
#endif
}
...
...
@@ -782,16 +767,13 @@ void VoidFunc(bool /* flag */) {}
TEST
(
DoDefaultDeathTest
,
DiesIfUsedInCompositeAction
)
{
MockClass
mock
;
EXPECT_CALL
(
mock
,
IntFunc
(
_
))
.
WillRepeatedly
(
DoAll
(
Invoke
(
VoidFunc
),
DoDefault
()));
.
WillRepeatedly
(
DoAll
(
Invoke
(
VoidFunc
),
DoDefault
()));
// Ideally we should verify the error message as well. Sadly,
// EXPECT_DEATH() can only capture stderr, while Google Mock's
// errors are printed on stdout. Therefore we have to settle for
// not verifying the message.
EXPECT_DEATH_IF_SUPPORTED
({
mock
.
IntFunc
(
true
);
},
""
);
EXPECT_DEATH_IF_SUPPORTED
({
mock
.
IntFunc
(
true
);
},
""
);
}
// Tests that DoDefault() returns the default value set by
...
...
@@ -799,8 +781,7 @@ TEST(DoDefaultDeathTest, DiesIfUsedInCompositeAction) {
TEST
(
DoDefaultTest
,
ReturnsUserSpecifiedPerTypeDefaultValueWhenThereIsOne
)
{
DefaultValue
<
int
>::
Set
(
1
);
MockClass
mock
;
EXPECT_CALL
(
mock
,
IntFunc
(
_
))
.
WillOnce
(
DoDefault
());
EXPECT_CALL
(
mock
,
IntFunc
(
_
)).
WillOnce
(
DoDefault
());
EXPECT_EQ
(
1
,
mock
.
IntFunc
(
false
));
DefaultValue
<
int
>::
Clear
();
}
...
...
@@ -808,20 +789,19 @@ TEST(DoDefaultTest, ReturnsUserSpecifiedPerTypeDefaultValueWhenThereIsOne) {
// Tests that DoDefault() does the action specified by ON_CALL().
TEST
(
DoDefaultTest
,
DoesWhatOnCallSpecifies
)
{
MockClass
mock
;
ON_CALL
(
mock
,
IntFunc
(
_
))
.
WillByDefault
(
Return
(
2
));
EXPECT_CALL
(
mock
,
IntFunc
(
_
))
.
WillOnce
(
DoDefault
());
ON_CALL
(
mock
,
IntFunc
(
_
)).
WillByDefault
(
Return
(
2
));
EXPECT_CALL
(
mock
,
IntFunc
(
_
)).
WillOnce
(
DoDefault
());
EXPECT_EQ
(
2
,
mock
.
IntFunc
(
false
));
}
// Tests that using DoDefault() in ON_CALL() leads to a run-time failure.
TEST
(
DoDefaultTest
,
CannotBeUsedInOnCall
)
{
MockClass
mock
;
EXPECT_NONFATAL_FAILURE
({
// NOLINT
ON_CALL
(
mock
,
IntFunc
(
_
))
.
WillByDefault
(
DoDefault
());
},
"DoDefault() cannot be used in ON_CALL()"
);
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
ON_CALL
(
mock
,
IntFunc
(
_
)).
WillByDefault
(
DoDefault
());
},
"DoDefault() cannot be used in ON_CALL()"
);
}
// Tests that SetArgPointee<N>(v) sets the variable pointed to by
...
...
@@ -868,7 +848,7 @@ TEST(SetArgPointeeTest, AcceptsWideStringLiteral) {
a
.
Perform
(
std
::
make_tuple
(
&
ptr
));
EXPECT_STREQ
(
L"world"
,
ptr
);
#
if GTEST_HAS_STD_WSTRING
#if GTEST_HAS_STD_WSTRING
typedef
void
MyStringFunction
(
std
::
wstring
*
);
Action
<
MyStringFunction
>
a2
=
SetArgPointee
<
0
>
(
L"world"
);
...
...
@@ -876,7 +856,7 @@ TEST(SetArgPointeeTest, AcceptsWideStringLiteral) {
a2
.
Perform
(
std
::
make_tuple
(
&
str
));
EXPECT_EQ
(
L"world"
,
str
);
#
endif
#endif
}
// Tests that SetArgPointee<N>() accepts a char pointer.
...
...
@@ -907,7 +887,7 @@ TEST(SetArgPointeeTest, AcceptsWideCharPointer) {
a
.
Perform
(
std
::
make_tuple
(
true
,
&
ptr
));
EXPECT_EQ
(
hi
,
ptr
);
#
if GTEST_HAS_STD_WSTRING
#if GTEST_HAS_STD_WSTRING
typedef
void
MyStringFunction
(
bool
,
std
::
wstring
*
);
wchar_t
world_array
[]
=
L"world"
;
...
...
@@ -916,7 +896,7 @@ TEST(SetArgPointeeTest, AcceptsWideCharPointer) {
std
::
wstring
str
;
a2
.
Perform
(
std
::
make_tuple
(
true
,
&
str
));
EXPECT_EQ
(
world_array
,
str
);
#
endif
#endif
}
// Tests that SetArgumentPointee<N>(v) sets the variable pointed to by
...
...
@@ -1079,7 +1059,6 @@ TEST(AssignTest, CompatibleTypes) {
EXPECT_DOUBLE_EQ
(
5
,
x
);
}
// Tests using WithArgs and with an action that takes 1 argument.
TEST
(
WithArgsTest
,
OneArg
)
{
Action
<
bool
(
double
x
,
int
n
)
>
a
=
WithArgs
<
1
>
(
Invoke
(
Unary
));
// NOLINT
...
...
@@ -1235,7 +1214,7 @@ TEST(ByRefTest, IsCopyable) {
TEST
(
ByRefTest
,
ConstValue
)
{
const
int
n
=
0
;
// int& ref = ByRef(n); // This shouldn't compile - we have a
// negative compilation test to catch it.
// negative compilation test to catch it.
const
int
&
const_ref
=
ByRef
(
n
);
EXPECT_EQ
(
&
n
,
&
const_ref
);
}
...
...
@@ -1260,7 +1239,7 @@ TEST(ByRefTest, ExplicitType) {
EXPECT_EQ
(
&
n
,
&
r1
);
// ByRef<char>(n); // This shouldn't compile - we have a negative
// compilation test to catch it.
// compilation test to catch it.
Derived
d
;
Derived
&
r2
=
ByRef
<
Derived
>
(
d
);
...
...
@@ -1375,9 +1354,10 @@ TEST(MockMethodTest, CanReturnMoveOnlyValue_DoAllReturn) {
MockClass
mock
;
std
::
unique_ptr
<
int
>
i
(
new
int
(
19
));
EXPECT_CALL
(
mock_function
,
Call
());
EXPECT_CALL
(
mock
,
MakeUnique
()).
WillOnce
(
DoAll
(
InvokeWithoutArgs
(
&
mock_function
,
&
testing
::
MockFunction
<
void
()
>::
Call
),
Return
(
ByMove
(
std
::
move
(
i
)))));
EXPECT_CALL
(
mock
,
MakeUnique
())
.
WillOnce
(
DoAll
(
InvokeWithoutArgs
(
&
mock_function
,
&
testing
::
MockFunction
<
void
()
>::
Call
),
Return
(
ByMove
(
std
::
move
(
i
)))));
std
::
unique_ptr
<
int
>
result1
=
mock
.
MakeUnique
();
EXPECT_EQ
(
19
,
*
result1
);
...
...
@@ -1387,9 +1367,8 @@ TEST(MockMethodTest, CanReturnMoveOnlyValue_Invoke) {
MockClass
mock
;
// Check default value
DefaultValue
<
std
::
unique_ptr
<
int
>>::
SetFactory
([]
{
return
std
::
unique_ptr
<
int
>
(
new
int
(
42
));
});
DefaultValue
<
std
::
unique_ptr
<
int
>>::
SetFactory
(
[]
{
return
std
::
unique_ptr
<
int
>
(
new
int
(
42
));
});
EXPECT_EQ
(
42
,
*
mock
.
MakeUnique
());
EXPECT_CALL
(
mock
,
MakeUnique
()).
WillRepeatedly
(
Invoke
(
UniquePtrSource
));
...
...
@@ -1449,7 +1428,6 @@ TEST(MockMethodTest, CanTakeMoveOnlyValue) {
EXPECT_EQ
(
42
,
*
saved
);
}
// Tests for std::function based action.
int
Add
(
int
val
,
int
&
ref
,
int
*
ptr
)
{
// NOLINT
...
...
@@ -1463,7 +1441,9 @@ int Deref(std::unique_ptr<int> ptr) { return *ptr; }
struct
Double
{
template
<
typename
T
>
T
operator
()(
T
t
)
{
return
2
*
t
;
}
T
operator
()(
T
t
)
{
return
2
*
t
;
}
};
std
::
unique_ptr
<
int
>
UniqueInt
(
int
i
)
{
...
...
@@ -1532,8 +1512,9 @@ TEST(FunctorActionTest, TypeConversion) {
TEST
(
FunctorActionTest
,
UnusedArguments
)
{
// Verify that users can ignore uninteresting arguments.
Action
<
int
(
int
,
double
y
,
double
z
)
>
a
=
[](
int
i
,
Unused
,
Unused
)
{
return
2
*
i
;
};
Action
<
int
(
int
,
double
y
,
double
z
)
>
a
=
[](
int
i
,
Unused
,
Unused
)
{
return
2
*
i
;
};
std
::
tuple
<
int
,
double
,
double
>
dummy
=
std
::
make_tuple
(
3
,
7.3
,
9.44
);
EXPECT_EQ
(
6
,
a
.
Perform
(
dummy
));
}
...
...
@@ -1552,9 +1533,7 @@ TEST(MoveOnlyArgumentsTest, ReturningActions) {
EXPECT_EQ
(
x
,
3
);
}
ACTION
(
ReturnArity
)
{
return
std
::
tuple_size
<
args_type
>::
value
;
}
ACTION
(
ReturnArity
)
{
return
std
::
tuple_size
<
args_type
>::
value
;
}
TEST
(
ActionMacro
,
LargeArity
)
{
EXPECT_EQ
(
...
...
@@ -1577,7 +1556,6 @@ TEST(ActionMacro, LargeArity) {
#ifdef _MSC_VER
#if _MSC_VER == 1900
#
pragma warning(pop)
#pragma warning(pop)
#endif
#endif
googlemock/test/gmock-cardinalities_test.cc
View file @
9e712372
...
...
@@ -27,14 +27,13 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Google Mock - a framework for writing C++ mock classes.
//
// This file tests the built-in cardinalities.
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "gtest/gtest-spi.h"
#include "gtest/gtest.h"
namespace
{
...
...
@@ -59,9 +58,7 @@ class MockFoo {
};
// Tests that Cardinality objects can be default constructed.
TEST
(
CardinalityTest
,
IsDefaultConstructable
)
{
Cardinality
c
;
}
TEST
(
CardinalityTest
,
IsDefaultConstructable
)
{
Cardinality
c
;
}
// Tests that Cardinality objects are copyable.
TEST
(
CardinalityTest
,
IsCopyable
)
{
...
...
@@ -119,8 +116,7 @@ TEST(AnyNumber, Works) {
stringstream
ss
;
c
.
DescribeTo
(
&
ss
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called any number of times"
,
ss
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called any number of times"
,
ss
.
str
());
}
TEST
(
AnyNumberTest
,
HasCorrectBounds
)
{
...
...
@@ -132,9 +128,11 @@ TEST(AnyNumberTest, HasCorrectBounds) {
// Tests AtLeast(n).
TEST
(
AtLeastTest
,
OnNegativeNumber
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
AtLeast
(
-
1
);
},
"The invocation lower bound must be >= 0"
);
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
AtLeast
(
-
1
);
},
"The invocation lower bound must be >= 0"
);
}
TEST
(
AtLeastTest
,
OnZero
)
{
...
...
@@ -147,8 +145,7 @@ TEST(AtLeastTest, OnZero) {
stringstream
ss
;
c
.
DescribeTo
(
&
ss
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"any number of times"
,
ss
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"any number of times"
,
ss
.
str
());
}
TEST
(
AtLeastTest
,
OnPositiveNumber
)
{
...
...
@@ -164,18 +161,15 @@ TEST(AtLeastTest, OnPositiveNumber) {
stringstream
ss1
;
AtLeast
(
1
).
DescribeTo
(
&
ss1
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"at least once"
,
ss1
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"at least once"
,
ss1
.
str
());
stringstream
ss2
;
c
.
DescribeTo
(
&
ss2
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"at least twice"
,
ss2
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"at least twice"
,
ss2
.
str
());
stringstream
ss3
;
AtLeast
(
3
).
DescribeTo
(
&
ss3
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"at least 3 times"
,
ss3
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"at least 3 times"
,
ss3
.
str
());
}
TEST
(
AtLeastTest
,
HasCorrectBounds
)
{
...
...
@@ -187,9 +181,11 @@ TEST(AtLeastTest, HasCorrectBounds) {
// Tests AtMost(n).
TEST
(
AtMostTest
,
OnNegativeNumber
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
AtMost
(
-
1
);
},
"The invocation upper bound must be >= 0"
);
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
AtMost
(
-
1
);
},
"The invocation upper bound must be >= 0"
);
}
TEST
(
AtMostTest
,
OnZero
)
{
...
...
@@ -202,8 +198,7 @@ TEST(AtMostTest, OnZero) {
stringstream
ss
;
c
.
DescribeTo
(
&
ss
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"never called"
,
ss
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"never called"
,
ss
.
str
());
}
TEST
(
AtMostTest
,
OnPositiveNumber
)
{
...
...
@@ -219,18 +214,15 @@ TEST(AtMostTest, OnPositiveNumber) {
stringstream
ss1
;
AtMost
(
1
).
DescribeTo
(
&
ss1
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called at most once"
,
ss1
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called at most once"
,
ss1
.
str
());
stringstream
ss2
;
c
.
DescribeTo
(
&
ss2
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called at most twice"
,
ss2
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called at most twice"
,
ss2
.
str
());
stringstream
ss3
;
AtMost
(
3
).
DescribeTo
(
&
ss3
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called at most 3 times"
,
ss3
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called at most 3 times"
,
ss3
.
str
());
}
TEST
(
AtMostTest
,
HasCorrectBounds
)
{
...
...
@@ -242,22 +234,28 @@ TEST(AtMostTest, HasCorrectBounds) {
// Tests Between(m, n).
TEST
(
BetweenTest
,
OnNegativeStart
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
Between
(
-
1
,
2
);
},
"The invocation lower bound must be >= 0, but is actually -1"
);
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
Between
(
-
1
,
2
);
},
"The invocation lower bound must be >= 0, but is actually -1"
);
}
TEST
(
BetweenTest
,
OnNegativeEnd
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
Between
(
1
,
-
2
);
},
"The invocation upper bound must be >= 0, but is actually -2"
);
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
Between
(
1
,
-
2
);
},
"The invocation upper bound must be >= 0, but is actually -2"
);
}
TEST
(
BetweenTest
,
OnStartBiggerThanEnd
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
Between
(
2
,
1
);
},
"The invocation upper bound (1) must be >= "
"the invocation lower bound (2)"
);
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
Between
(
2
,
1
);
},
"The invocation upper bound (1) must be >= "
"the invocation lower bound (2)"
);
}
TEST
(
BetweenTest
,
OnZeroStartAndZeroEnd
)
{
...
...
@@ -271,8 +269,7 @@ TEST(BetweenTest, OnZeroStartAndZeroEnd) {
stringstream
ss
;
c
.
DescribeTo
(
&
ss
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"never called"
,
ss
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"never called"
,
ss
.
str
());
}
TEST
(
BetweenTest
,
OnZeroStartAndNonZeroEnd
)
{
...
...
@@ -289,8 +286,7 @@ TEST(BetweenTest, OnZeroStartAndNonZeroEnd) {
stringstream
ss
;
c
.
DescribeTo
(
&
ss
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called at most twice"
,
ss
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called at most twice"
,
ss
.
str
());
}
TEST
(
BetweenTest
,
OnSameStartAndEnd
)
{
...
...
@@ -307,8 +303,7 @@ TEST(BetweenTest, OnSameStartAndEnd) {
stringstream
ss
;
c
.
DescribeTo
(
&
ss
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called 3 times"
,
ss
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called 3 times"
,
ss
.
str
());
}
TEST
(
BetweenTest
,
OnDifferentStartAndEnd
)
{
...
...
@@ -328,8 +323,7 @@ TEST(BetweenTest, OnDifferentStartAndEnd) {
stringstream
ss
;
c
.
DescribeTo
(
&
ss
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called between 3 and 5 times"
,
ss
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called between 3 and 5 times"
,
ss
.
str
());
}
TEST
(
BetweenTest
,
HasCorrectBounds
)
{
...
...
@@ -341,9 +335,11 @@ TEST(BetweenTest, HasCorrectBounds) {
// Tests Exactly(n).
TEST
(
ExactlyTest
,
OnNegativeNumber
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
Exactly
(
-
1
);
},
"The invocation lower bound must be >= 0"
);
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
Exactly
(
-
1
);
},
"The invocation lower bound must be >= 0"
);
}
TEST
(
ExactlyTest
,
OnZero
)
{
...
...
@@ -356,8 +352,7 @@ TEST(ExactlyTest, OnZero) {
stringstream
ss
;
c
.
DescribeTo
(
&
ss
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"never called"
,
ss
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"never called"
,
ss
.
str
());
}
TEST
(
ExactlyTest
,
OnPositiveNumber
)
{
...
...
@@ -370,18 +365,15 @@ TEST(ExactlyTest, OnPositiveNumber) {
stringstream
ss1
;
Exactly
(
1
).
DescribeTo
(
&
ss1
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called once"
,
ss1
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called once"
,
ss1
.
str
());
stringstream
ss2
;
c
.
DescribeTo
(
&
ss2
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called twice"
,
ss2
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called twice"
,
ss2
.
str
());
stringstream
ss3
;
Exactly
(
3
).
DescribeTo
(
&
ss3
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called 3 times"
,
ss3
.
str
());
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"called 3 times"
,
ss3
.
str
());
}
TEST
(
ExactlyTest
,
HasCorrectBounds
)
{
...
...
googlemock/test/gmock-function-mocker_test.cc
View file @
9e712372
...
...
@@ -27,7 +27,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Google Mock - a framework for writing C++ mock classes.
//
// This file tests the function mocker classes.
...
...
@@ -37,7 +36,7 @@
// MSDN says the header file to be included for STDMETHOD is BaseTyps.h but
// we are getting compiler errors if we use basetyps.h, hence including
// objbase.h for definition of STDMETHOD.
#
include <objbase.h>
#include <objbase.h>
#endif // GTEST_OS_WINDOWS
#include <functional>
...
...
@@ -65,7 +64,7 @@ using testing::Return;
using
testing
::
ReturnRef
;
using
testing
::
TypedEq
;
template
<
typename
T
>
template
<
typename
T
>
class
TemplatedCopyable
{
public:
TemplatedCopyable
()
{}
...
...
@@ -82,7 +81,7 @@ class FooInterface {
virtual
int
Nullary
()
=
0
;
virtual
bool
Unary
(
int
x
)
=
0
;
virtual
long
Binary
(
short
x
,
int
y
)
=
0
;
// NOLINT
virtual
long
Binary
(
short
x
,
int
y
)
=
0
;
// NOLINT
virtual
int
Decimal
(
bool
b
,
char
c
,
short
d
,
int
e
,
long
f
,
// NOLINT
float
g
,
double
h
,
unsigned
i
,
char
*
j
,
const
std
::
string
&
k
)
=
0
;
...
...
@@ -133,8 +132,8 @@ class FooInterface {
// signature. This was fixed in Visual Studio 2008. However, the compiler
// still emits a warning that alerts about this change in behavior.
#ifdef _MSC_VER
#
pragma warning(push)
#
pragma warning(disable : 4373)
#pragma warning(push)
#pragma warning(disable : 4373)
#endif
class
MockFoo
:
public
FooInterface
{
public:
...
...
@@ -279,7 +278,7 @@ class LegacyMockFoo : public FooInterface {
};
#ifdef _MSC_VER
#
pragma warning(pop)
#pragma warning(pop)
#endif
template
<
class
T
>
...
...
@@ -595,10 +594,8 @@ TYPED_TEST(TemplateMockTest, Works) {
.
WillOnce
(
Return
(
0
));
EXPECT_CALL
(
mock
,
Push
(
_
));
int
n
=
5
;
EXPECT_CALL
(
mock
,
GetTop
())
.
WillOnce
(
ReturnRef
(
n
));
EXPECT_CALL
(
mock
,
Pop
())
.
Times
(
AnyNumber
());
EXPECT_CALL
(
mock
,
GetTop
()).
WillOnce
(
ReturnRef
(
n
));
EXPECT_CALL
(
mock
,
Pop
()).
Times
(
AnyNumber
());
EXPECT_EQ
(
0
,
mock
.
GetSize
());
mock
.
Push
(
5
);
...
...
@@ -612,10 +609,8 @@ TYPED_TEST(TemplateMockTest, MethodWithCommaInReturnTypeWorks) {
TypeParam
mock
;
const
std
::
map
<
int
,
int
>
a_map
;
EXPECT_CALL
(
mock
,
ReturnTypeWithComma
())
.
WillOnce
(
Return
(
a_map
));
EXPECT_CALL
(
mock
,
ReturnTypeWithComma
(
1
))
.
WillOnce
(
Return
(
a_map
));
EXPECT_CALL
(
mock
,
ReturnTypeWithComma
()).
WillOnce
(
Return
(
a_map
));
EXPECT_CALL
(
mock
,
ReturnTypeWithComma
(
1
)).
WillOnce
(
Return
(
a_map
));
EXPECT_EQ
(
a_map
,
mock
.
ReturnTypeWithComma
());
EXPECT_EQ
(
a_map
,
mock
.
ReturnTypeWithComma
(
1
));
...
...
@@ -685,10 +680,8 @@ TYPED_TEST(TemplateMockTestWithCallType, Works) {
.
WillOnce
(
Return
(
0
));
EXPECT_CALL
(
mock
,
Push
(
_
));
int
n
=
5
;
EXPECT_CALL
(
mock
,
GetTop
())
.
WillOnce
(
ReturnRef
(
n
));
EXPECT_CALL
(
mock
,
Pop
())
.
Times
(
AnyNumber
());
EXPECT_CALL
(
mock
,
GetTop
()).
WillOnce
(
ReturnRef
(
n
));
EXPECT_CALL
(
mock
,
Pop
()).
Times
(
AnyNumber
());
EXPECT_EQ
(
0
,
mock
.
GetSize
());
mock
.
Push
(
5
);
...
...
@@ -747,9 +740,9 @@ TYPED_TEST(OverloadedMockMethodTest, CanOverloadOnArgNumberInMacroBody) {
EXPECT_TRUE
(
mock
.
Overloaded
(
true
,
1
));
}
#define MY_MOCK_METHODS2_ \
MOCK_CONST_METHOD1(Overloaded, int(int n)); \
MOCK_METHOD1(Overloaded, int(int n))
#define MY_MOCK_METHODS2_
\
MOCK_CONST_METHOD1(Overloaded, int(int n)); \
MOCK_METHOD1(Overloaded, int(int n))
class
MockOverloadedOnConstness
{
public:
...
...
@@ -779,9 +772,7 @@ TEST(MockMethodMockFunctionTest, WorksForVoidNullary) {
TEST
(
MockMethodMockFunctionTest
,
WorksForNonVoidNullary
)
{
MockFunction
<
int
()
>
foo
;
EXPECT_CALL
(
foo
,
Call
())
.
WillOnce
(
Return
(
1
))
.
WillOnce
(
Return
(
2
));
EXPECT_CALL
(
foo
,
Call
()).
WillOnce
(
Return
(
1
)).
WillOnce
(
Return
(
2
));
EXPECT_EQ
(
1
,
foo
.
Call
());
EXPECT_EQ
(
2
,
foo
.
Call
());
}
...
...
@@ -794,19 +785,17 @@ TEST(MockMethodMockFunctionTest, WorksForVoidUnary) {
TEST
(
MockMethodMockFunctionTest
,
WorksForNonVoidBinary
)
{
MockFunction
<
int
(
bool
,
int
)
>
foo
;
EXPECT_CALL
(
foo
,
Call
(
false
,
42
))
.
WillOnce
(
Return
(
1
))
.
WillOnce
(
Return
(
2
));
EXPECT_CALL
(
foo
,
Call
(
true
,
Ge
(
100
)))
.
WillOnce
(
Return
(
3
));
EXPECT_CALL
(
foo
,
Call
(
false
,
42
)).
WillOnce
(
Return
(
1
)).
WillOnce
(
Return
(
2
));
EXPECT_CALL
(
foo
,
Call
(
true
,
Ge
(
100
))).
WillOnce
(
Return
(
3
));
EXPECT_EQ
(
1
,
foo
.
Call
(
false
,
42
));
EXPECT_EQ
(
2
,
foo
.
Call
(
false
,
42
));
EXPECT_EQ
(
3
,
foo
.
Call
(
true
,
120
));
}
TEST
(
MockMethodMockFunctionTest
,
WorksFor10Arguments
)
{
MockFunction
<
int
(
bool
a0
,
char
a1
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
int
a6
,
char
a7
,
int
a8
,
bool
a9
)
>
foo
;
MockFunction
<
int
(
bool
a0
,
char
a1
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
int
a6
,
char
a7
,
int
a8
,
bool
a9
)
>
foo
;
EXPECT_CALL
(
foo
,
Call
(
_
,
'a'
,
_
,
_
,
_
,
_
,
_
,
_
,
_
,
_
))
.
WillOnce
(
Return
(
1
))
.
WillOnce
(
Return
(
2
));
...
...
@@ -816,9 +805,7 @@ TEST(MockMethodMockFunctionTest, WorksFor10Arguments) {
TEST
(
MockMethodMockFunctionTest
,
AsStdFunction
)
{
MockFunction
<
int
(
int
)
>
foo
;
auto
call
=
[](
const
std
::
function
<
int
(
int
)
>
&
f
,
int
i
)
{
return
f
(
i
);
};
auto
call
=
[](
const
std
::
function
<
int
(
int
)
>&
f
,
int
i
)
{
return
f
(
i
);
};
EXPECT_CALL
(
foo
,
Call
(
1
)).
WillOnce
(
Return
(
-
1
));
EXPECT_CALL
(
foo
,
Call
(
2
)).
WillOnce
(
Return
(
-
2
));
EXPECT_EQ
(
-
1
,
call
(
foo
.
AsStdFunction
(),
1
));
...
...
@@ -836,10 +823,8 @@ TEST(MockMethodMockFunctionTest, AsStdFunctionReturnsReference) {
}
TEST
(
MockMethodMockFunctionTest
,
AsStdFunctionWithReferenceParameter
)
{
MockFunction
<
int
(
int
&
)
>
foo
;
auto
call
=
[](
const
std
::
function
<
int
(
int
&
)
>
&
f
,
int
&
i
)
{
return
f
(
i
);
};
MockFunction
<
int
(
int
&
)
>
foo
;
auto
call
=
[](
const
std
::
function
<
int
(
int
&
)
>&
f
,
int
&
i
)
{
return
f
(
i
);
};
int
i
=
42
;
EXPECT_CALL
(
foo
,
Call
(
i
)).
WillOnce
(
Return
(
-
1
));
EXPECT_EQ
(
-
1
,
call
(
foo
.
AsStdFunction
(),
i
));
...
...
@@ -888,8 +873,7 @@ TYPED_TEST(
}
template
<
typename
F
>
struct
AlternateCallable
{
};
struct
AlternateCallable
{};
TYPED_TEST
(
MockMethodMockFunctionSignatureTest
,
IsMockFunctionTemplateArgumentDeducedForAlternateCallable
)
{
...
...
@@ -898,16 +882,14 @@ TYPED_TEST(MockMethodMockFunctionSignatureTest,
EXPECT_TRUE
(
IsMockFunctionTemplateArgumentDeducedTo
<
TypeParam
>
(
foo
));
}
TYPED_TEST
(
MockMethodMockFunctionSignatureTest
,
IsMockFunctionCallMethodSignatureTheSameForAlternateCallable
)
{
TYPED_TEST
(
MockMethodMockFunctionSignatureTest
,
IsMockFunctionCallMethodSignatureTheSameForAlternateCallable
)
{
using
ForRawSignature
=
decltype
(
&
MockFunction
<
TypeParam
>::
Call
);
using
ForStdFunction
=
decltype
(
&
MockFunction
<
std
::
function
<
TypeParam
>>::
Call
);
EXPECT_TRUE
((
std
::
is_same
<
ForRawSignature
,
ForStdFunction
>::
value
));
}
struct
MockMethodSizes0
{
MOCK_METHOD
(
void
,
func
,
());
};
...
...
@@ -925,22 +907,21 @@ struct MockMethodSizes4 {
};
struct
LegacyMockMethodSizes0
{
MOCK_METHOD0
(
func
,
void
());
MOCK_METHOD0
(
func
,
void
());
};
struct
LegacyMockMethodSizes1
{
MOCK_METHOD1
(
func
,
void
(
int
));
MOCK_METHOD1
(
func
,
void
(
int
));
};
struct
LegacyMockMethodSizes2
{
MOCK_METHOD2
(
func
,
void
(
int
,
int
));
MOCK_METHOD2
(
func
,
void
(
int
,
int
));
};
struct
LegacyMockMethodSizes3
{
MOCK_METHOD3
(
func
,
void
(
int
,
int
,
int
));
MOCK_METHOD3
(
func
,
void
(
int
,
int
,
int
));
};
struct
LegacyMockMethodSizes4
{
MOCK_METHOD4
(
func
,
void
(
int
,
int
,
int
,
int
));
MOCK_METHOD4
(
func
,
void
(
int
,
int
,
int
,
int
));
};
TEST
(
MockMethodMockFunctionTest
,
MockMethodSizeOverhead
)
{
EXPECT_EQ
(
sizeof
(
MockMethodSizes0
),
sizeof
(
MockMethodSizes1
));
EXPECT_EQ
(
sizeof
(
MockMethodSizes0
),
sizeof
(
MockMethodSizes2
));
...
...
Prev
1
2
3
4
5
…
7
Next
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