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
7f4c2c0f
Commit
7f4c2c0f
authored
Feb 19, 2009
by
zhanyong.wan
Browse files
Adds two actions: SaveArg and SetArgReferee.
parent
38ca64dd
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
177 additions
and
31 deletions
+177
-31
include/gmock/gmock-generated-actions.h
include/gmock/gmock-generated-actions.h
+77
-30
include/gmock/gmock-generated-actions.h.pump
include/gmock/gmock-generated-actions.h.pump
+39
-1
test/gmock-generated-actions_test.cc
test/gmock-generated-actions_test.cc
+61
-0
No files found.
include/gmock/gmock-generated-actions.h
View file @
7f4c2c0f
...
@@ -998,51 +998,57 @@ class ActionHelper {
...
@@ -998,51 +998,57 @@ class ActionHelper {
public:
public:
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<>&
args
)
{
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
ExcessiveArg
(),
ExcessiveArg
(),
return
impl
->
template
gmock_PerformImpl
<
>
(
args
,
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
}
}
template
<
typename
A0
>
template
<
typename
A0
>
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
>&
args
)
{
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
ExcessiveArg
(),
return
impl
->
template
gmock_PerformImpl
<
A0
>(
args
,
get
<
0
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
>
template
<
typename
A0
,
typename
A1
>
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
>&
args
)
{
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
>(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
,
typename
A2
>
template
<
typename
A0
,
typename
A1
,
typename
A2
>
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
>&
args
)
{
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
,
A2
>(
args
,
get
<
0
>
(
args
),
get
<
2
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
get
<
1
>
(
args
),
get
<
2
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
>
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
>
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
>&
args
)
{
A3
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
,
A2
,
A3
>(
args
,
get
<
0
>
(
args
),
get
<
2
>
(
args
),
get
<
3
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
get
<
1
>
(
args
),
get
<
2
>
(
args
),
get
<
3
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
>
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
>
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
>&
args
)
{
A4
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
,
A2
,
A3
,
A4
>(
args
,
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
ExcessiveArg
(),
get
<
0
>
(
args
),
get
<
1
>
(
args
),
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
...
@@ -1050,9 +1056,10 @@ class ActionHelper {
...
@@ -1050,9 +1056,10 @@ class ActionHelper {
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
>&
args
)
{
A5
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
>(
args
,
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
get
<
5
>
(
args
),
ExcessiveArg
(),
get
<
0
>
(
args
),
get
<
1
>
(
args
),
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
get
<
5
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
...
@@ -1060,9 +1067,10 @@ class ActionHelper {
...
@@ -1060,9 +1067,10 @@ class ActionHelper {
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
>&
args
)
{
A5
,
A6
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
>(
args
,
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
get
<
5
>
(
args
),
get
<
6
>
(
args
),
get
<
0
>
(
args
),
get
<
1
>
(
args
),
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
get
<
5
>
(
args
),
get
<
6
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
(),
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
...
@@ -1070,9 +1078,10 @@ class ActionHelper {
...
@@ -1070,9 +1078,10 @@ class ActionHelper {
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
>&
args
)
{
A5
,
A6
,
A7
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
get
<
5
>
(
args
),
get
<
6
>
(
args
),
A7
>(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
7
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
());
get
<
4
>
(
args
),
get
<
5
>
(
args
),
get
<
6
>
(
args
),
get
<
7
>
(
args
),
ExcessiveArg
(),
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
...
@@ -1080,9 +1089,10 @@ class ActionHelper {
...
@@ -1080,9 +1089,10 @@ class ActionHelper {
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
>&
args
)
{
A5
,
A6
,
A7
,
A8
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
get
<
5
>
(
args
),
get
<
6
>
(
args
),
A8
>(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
7
>
(
args
),
get
<
8
>
(
args
),
ExcessiveArg
());
get
<
4
>
(
args
),
get
<
5
>
(
args
),
get
<
6
>
(
args
),
get
<
7
>
(
args
),
get
<
8
>
(
args
),
ExcessiveArg
());
}
}
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
template
<
typename
A0
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
...
@@ -1090,9 +1100,10 @@ class ActionHelper {
...
@@ -1090,9 +1100,10 @@ class ActionHelper {
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
,
A9
>&
args
)
{
A5
,
A6
,
A7
,
A8
,
A9
>&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
return
impl
->
template
gmock_PerformImpl
<
A0
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
,
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
4
>
(
args
),
get
<
5
>
(
args
),
get
<
6
>
(
args
),
A9
>(
args
,
get
<
0
>
(
args
),
get
<
1
>
(
args
),
get
<
2
>
(
args
),
get
<
3
>
(
args
),
get
<
7
>
(
args
),
get
<
8
>
(
args
),
get
<
9
>
(
args
));
get
<
4
>
(
args
),
get
<
5
>
(
args
),
get
<
6
>
(
args
),
get
<
7
>
(
args
),
get
<
8
>
(
args
),
get
<
9
>
(
args
));
}
}
};
};
...
@@ -2303,8 +2314,44 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6,
...
@@ -2303,8 +2314,44 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6,
arg4_type arg4, arg5_type arg5, arg6_type arg6, arg7_type arg7, \
arg4_type arg4, arg5_type arg5, arg6_type arg6, arg7_type arg7, \
arg8_type arg8, arg9_type arg9) const
arg8_type arg8, arg9_type arg9) const
// TODO(wan@google.com): move the following to a different .h file
// such that we don't have to run 'pump' every time the code is
// updated.
namespace
testing
{
namespace
testing
{
namespace
internal
{
// Saves argument #0 to where the pointer points.
ACTION_P
(
SaveArg0
,
pointer
)
{
*
pointer
=
arg0
;
}
// Assigns 'value' to the variable referenced by argument #0.
ACTION_P
(
SetArg0Referee
,
value
)
{
// Ensures that argument #0 is a reference. If you get a compiler
// error on the next line, you are using SetArgReferee<k>(value) in
// a mock function whose k-th (0-based) argument is not a reference.
GMOCK_COMPILE_ASSERT_
(
internal
::
is_reference
<
arg0_type
>::
value
,
SetArgReferee_must_be_used_with_a_reference_argument
);
arg0
=
value
;
}
}
// namespace internal
// Action SaveArg<k>(pointer) saves the k-th (0-based) argument of the
// mock function to *pointer.
template
<
int
k
,
typename
Pointer
>
inline
internal
::
WithArgsAction
<
internal
::
SaveArg0ActionP
<
Pointer
>
,
k
>
SaveArg
(
const
Pointer
&
pointer
)
{
return
WithArg
<
k
>
(
internal
::
SaveArg0
(
pointer
));
}
// Action SetArgReferee<k>(value) assigns 'value' to the variable
// referenced by the k-th (0-based) argument of the mock function.
template
<
int
k
,
typename
Value
>
inline
internal
::
WithArgsAction
<
internal
::
SetArg0RefereeActionP
<
Value
>
,
k
>
SetArgReferee
(
const
Value
&
value
)
{
return
WithArg
<
k
>
(
internal
::
SetArg0Referee
(
value
));
}
// Action Throw(exception) can be used in a mock function of any type
// Action Throw(exception) can be used in a mock function of any type
// to throw the given exception. Any copyable value can be thrown.
// to throw the given exception. Any copyable value can be thrown.
#if GTEST_HAS_EXCEPTIONS
#if GTEST_HAS_EXCEPTIONS
...
...
include/gmock/gmock-generated-actions.h.pump
View file @
7f4c2c0f
...
@@ -436,7 +436,7 @@ $var arg_list = [[$if (i==0) | (i==n) [[$as$eas]] $else [[$as, $eas]]]]
...
@@ -436,7 +436,7 @@ $var arg_list = [[$if (i==0) | (i==n) [[$as$eas]] $else [[$as, $eas]]]]
$
template
$
template
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
$
As
>
&
args
)
{
static
Result
Perform
(
Impl
*
impl
,
const
::
std
::
tr1
::
tuple
<
$
As
>
&
args
)
{
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
get
;
return
impl
->
gmock_PerformImpl
(
args
,
$
arg_list
);
return
impl
->
template
gmock_PerformImpl
<
$
As
>
(
args
,
$
arg_list
);
}
}
]]
]]
...
@@ -774,10 +774,48 @@ $arg_types_and_names) const;\$param_field_decls
...
@@ -774,10 +774,48 @@ $arg_types_and_names) const;\$param_field_decls
gmock_Impl
<
F
>::
gmock_PerformImpl
(
const
args_type
&
args
,
[[]]
gmock_Impl
<
F
>::
gmock_PerformImpl
(
const
args_type
&
args
,
[[]]
$
arg_types_and_names
)
const
$
arg_types_and_names
)
const
]]
]]
$$
}
// This meta comment fixes auto-indentation in Emacs. It won't
$$
// show up in the generated code.
// TODO(wan@google.com): move the following to a different .h file
// such that we don't have to run 'pump' every time the code is
// updated.
namespace
testing
{
namespace
testing
{
namespace
internal
{
// Saves argument #0 to where the pointer points.
ACTION_P
(
SaveArg0
,
pointer
)
{
*
pointer
=
arg0
;
}
// Assigns 'value' to the variable referenced by argument #0.
ACTION_P
(
SetArg0Referee
,
value
)
{
// Ensures that argument #0 is a reference. If you get a compiler
// error on the next line, you are using SetArgReferee<k>(value) in
// a mock function whose k-th (0-based) argument is not a reference.
GMOCK_COMPILE_ASSERT_
(
internal
::
is_reference
<
arg0_type
>::
value
,
SetArgReferee_must_be_used_with_a_reference_argument
);
arg0
=
value
;
}
}
// namespace internal
// Action SaveArg<k>(pointer) saves the k-th (0-based) argument of the
// mock function to *pointer.
template
<
int
k
,
typename
Pointer
>
inline
internal
::
WithArgsAction
<
internal
::
SaveArg0ActionP
<
Pointer
>
,
k
>
SaveArg
(
const
Pointer
&
pointer
)
{
return
WithArg
<
k
>
(
internal
::
SaveArg0
(
pointer
));
}
// Action SetArgReferee<k>(value) assigns 'value' to the variable
// referenced by the k-th (0-based) argument of the mock function.
template
<
int
k
,
typename
Value
>
inline
internal
::
WithArgsAction
<
internal
::
SetArg0RefereeActionP
<
Value
>
,
k
>
SetArgReferee
(
const
Value
&
value
)
{
return
WithArg
<
k
>
(
internal
::
SetArg0Referee
(
value
));
}
// Action Throw(exception) can be used in a mock function of any type
// Action Throw(exception) can be used in a mock function of any type
// to throw the given exception. Any copyable value can be thrown.
// to throw the given exception. Any copyable value can be thrown.
#if GTEST_HAS_EXCEPTIONS
#if GTEST_HAS_EXCEPTIONS
...
...
test/gmock-generated-actions_test.cc
View file @
7f4c2c0f
...
@@ -57,6 +57,8 @@ using testing::DoAll;
...
@@ -57,6 +57,8 @@ using testing::DoAll;
using
testing
::
Invoke
;
using
testing
::
Invoke
;
using
testing
::
InvokeArgument
;
using
testing
::
InvokeArgument
;
using
testing
::
Return
;
using
testing
::
Return
;
using
testing
::
SaveArg
;
using
testing
::
SetArgReferee
;
using
testing
::
SetArgumentPointee
;
using
testing
::
SetArgumentPointee
;
using
testing
::
StaticAssertTypeEq
;
using
testing
::
StaticAssertTypeEq
;
using
testing
::
Unused
;
using
testing
::
Unused
;
...
@@ -1026,6 +1028,30 @@ TEST(ActionMacroTest, CanReferenceMockFunctionReturnType) {
...
@@ -1026,6 +1028,30 @@ TEST(ActionMacroTest, CanReferenceMockFunctionReturnType) {
EXPECT_EQ
(
1
,
a1
.
Perform
(
make_tuple
(
false
)));
EXPECT_EQ
(
1
,
a1
.
Perform
(
make_tuple
(
false
)));
}
}
// Tests that ACTION() works for arguments passed by const reference.
ACTION
(
ReturnAddrOfConstBoolReferenceArg
)
{
StaticAssertTypeEq
<
const
bool
&
,
arg1_type
>
();
return
&
arg1
;
}
TEST
(
ActionMacroTest
,
WorksForConstReferenceArg
)
{
Action
<
const
bool
*
(
int
,
const
bool
&
)
>
a
=
ReturnAddrOfConstBoolReferenceArg
();
const
bool
b
=
false
;
EXPECT_EQ
(
&
b
,
a
.
Perform
(
tuple
<
int
,
const
bool
&>
(
0
,
b
)));
}
// Tests that ACTION() works for arguments passed by non-const reference.
ACTION
(
ReturnAddrOfIntReferenceArg
)
{
StaticAssertTypeEq
<
int
&
,
arg0_type
>
();
return
&
arg0
;
}
TEST
(
ActionMacroTest
,
WorksForNonConstReferenceArg
)
{
Action
<
int
*
(
int
&
,
bool
,
int
)
>
a
=
ReturnAddrOfIntReferenceArg
();
int
n
=
0
;
EXPECT_EQ
(
&
n
,
a
.
Perform
(
tuple
<
int
&
,
bool
,
int
>
(
n
,
true
,
1
)));
}
// Tests that ACTION() can be used in a namespace.
// Tests that ACTION() can be used in a namespace.
namespace
action_test
{
namespace
action_test
{
ACTION
(
Sum
)
{
return
arg0
+
arg1
;
}
ACTION
(
Sum
)
{
return
arg0
+
arg1
;
}
...
@@ -1310,6 +1336,41 @@ TEST(ActionPnMacroTest, CanExplicitlyInstantiateWithReferenceTypes) {
...
@@ -1310,6 +1336,41 @@ TEST(ActionPnMacroTest, CanExplicitlyInstantiateWithReferenceTypes) {
EXPECT_EQ
(
55
,
a
.
Perform
(
empty
));
EXPECT_EQ
(
55
,
a
.
Perform
(
empty
));
}
}
TEST
(
SaveArgActionTest
,
WorksForSameType
)
{
int
result
=
0
;
const
Action
<
void
(
int
n
)
>
a1
=
SaveArg
<
0
>
(
&
result
);
a1
.
Perform
(
make_tuple
(
5
));
EXPECT_EQ
(
5
,
result
);
}
TEST
(
SaveArgActionTest
,
WorksForCompatibleType
)
{
int
result
=
0
;
const
Action
<
void
(
bool
,
char
)
>
a1
=
SaveArg
<
1
>
(
&
result
);
a1
.
Perform
(
make_tuple
(
true
,
'a'
));
EXPECT_EQ
(
'a'
,
result
);
}
TEST
(
SetArgRefereeActionTest
,
WorksForSameType
)
{
int
value
=
0
;
const
Action
<
void
(
int
&
)
>
a1
=
SetArgReferee
<
0
>
(
1
);
a1
.
Perform
(
tuple
<
int
&>
(
value
));
EXPECT_EQ
(
1
,
value
);
}
TEST
(
SetArgRefereeActionTest
,
WorksForCompatibleType
)
{
int
value
=
0
;
const
Action
<
void
(
int
,
int
&
)
>
a1
=
SetArgReferee
<
1
>
(
'a'
);
a1
.
Perform
(
tuple
<
int
,
int
&>
(
0
,
value
));
EXPECT_EQ
(
'a'
,
value
);
}
TEST
(
SetArgRefereeActionTest
,
WorksWithExtraArguments
)
{
int
value
=
0
;
const
Action
<
void
(
bool
,
int
,
int
&
,
const
char
*
)
>
a1
=
SetArgReferee
<
2
>
(
'a'
);
a1
.
Perform
(
tuple
<
bool
,
int
,
int
&
,
const
char
*>
(
true
,
0
,
value
,
"hi"
));
EXPECT_EQ
(
'a'
,
value
);
}
#if GTEST_HAS_EXCEPTIONS
#if GTEST_HAS_EXCEPTIONS
TEST
(
ThrowActionTest
,
ThrowsGivenExceptionInVoidFunction
)
{
TEST
(
ThrowActionTest
,
ThrowsGivenExceptionInVoidFunction
)
{
...
...
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