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
Expand all
Show 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
<
...
...
@@ -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,8 +1019,8 @@ 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
(
...
...
@@ -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,10 +1521,12 @@ 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
<
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
...
>
(
/*argN_type=*/
typename
std
::
tuple_element
<
arg_id
,
args_type
>
::
type
...
>
(
/*args=*/
args
,
std
::
get
<
arg_id
>
(
args
)...,
((
void
)
excess_id
,
kExcessArg
)...);
}
...
...
@@ -1590,13 +1592,14 @@ template <typename F, typename Impl>
public: \
explicit full_name(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
: impl_(std::make_shared<gmock_Impl>( \
GMOCK_ACTION_GVALUE_PARAMS_(params))) {
} \
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: \
...
...
@@ -1621,8 +1624,9 @@ template <typename F, typename Impl>
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
return_type \
full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>::gmock_Impl::gmock_PerformImpl( \
GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
}
// namespace internal
...
...
@@ -1636,6 +1640,7 @@ template <typename F, typename Impl>
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"
...
...
googlemock/include/gmock/gmock-function-mocker.h
View file @
9e712372
googlemock/include/gmock/gmock-more-actions.h
View file @
9e712372
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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
);
...
...
@@ -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,15 +413,16 @@ 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
),
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
),
...
...
@@ -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
...
...
@@ -88,8 +87,7 @@ GTEST_API_ std::string ConvertIdentifierNameToWords(const char* id_name) {
(
!
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
);
...
...
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()"
;
}
...
...
@@ -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
())
{
...
...
@@ -545,8 +542,8 @@ bool UntypedFunctionMockerBase::VerifyAndClearExpectationsLocked()
// 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
());
}
}
...
...
@@ -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
{
...
...
@@ -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
...
...
@@ -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&)
...
...
@@ -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
...
...
@@ -1375,8 +1354,9 @@ 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
),
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
();
...
...
@@ -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
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
AtLeast
(
-
1
);
},
"The invocation lower bound must be >= 0"
);
},
"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
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
AtMost
(
-
1
);
},
"The invocation upper bound must be >= 0"
);
},
"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,21 +234,27 @@ TEST(AtMostTest, HasCorrectBounds) {
// Tests Between(m, n).
TEST
(
BetweenTest
,
OnNegativeStart
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
Between
(
-
1
,
2
);
},
"The invocation lower bound must be >= 0, but is actually -1"
);
},
"The invocation lower bound must be >= 0, but is actually -1"
);
}
TEST
(
BetweenTest
,
OnNegativeEnd
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
Between
(
1
,
-
2
);
},
"The invocation upper bound must be >= 0, but is actually -2"
);
},
"The invocation upper bound must be >= 0, but is actually -2"
);
}
TEST
(
BetweenTest
,
OnStartBiggerThanEnd
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
Between
(
2
,
1
);
},
"The invocation upper bound (1) must be >= "
},
"The invocation upper bound (1) must be >= "
"the invocation lower bound (2)"
);
}
...
...
@@ -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
EXPECT_NONFATAL_FAILURE
(
{
// NOLINT
Exactly
(
-
1
);
},
"The invocation lower bound must be >= 0"
);
},
"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
()
{}
...
...
@@ -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
);
...
...
@@ -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,8 +882,7 @@ TYPED_TEST(MockMethodMockFunctionSignatureTest,
EXPECT_TRUE
(
IsMockFunctionTemplateArgumentDeducedTo
<
TypeParam
>
(
foo
));
}
TYPED_TEST
(
MockMethodMockFunctionSignatureTest
,
TYPED_TEST
(
MockMethodMockFunctionSignatureTest
,
IsMockFunctionCallMethodSignatureTheSameForAlternateCallable
)
{
using
ForRawSignature
=
decltype
(
&
MockFunction
<
TypeParam
>::
Call
);
using
ForStdFunction
=
...
...
@@ -907,7 +890,6 @@ TYPED_TEST(
EXPECT_TRUE
((
std
::
is_same
<
ForRawSignature
,
ForStdFunction
>::
value
));
}
struct
MockMethodSizes0
{
MOCK_METHOD
(
void
,
func
,
());
};
...
...
@@ -940,7 +922,6 @@ struct LegacyMockMethodSizes4 {
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