Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
googletest
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
googletest
Commits
59214836
Commit
59214836
authored
Oct 05, 2010
by
zhanyong.wan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adds SetArgPointee to replace SetArgumentPointee.
parent
662d8a23
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
182 additions
and
53 deletions
+182
-53
gmock-actions.h
include/gmock/gmock-actions.h
+9
-0
gmock_doctor.py
scripts/gmock_doctor.py
+1
-0
gmock-actions_test.cc
test/gmock-actions_test.cc
+120
-0
gmock-generated-actions_test.cc
test/gmock-generated-actions_test.cc
+46
-46
gmock-more-actions_test.cc
test/gmock-more-actions_test.cc
+0
-1
gmock_link_test.h
test/gmock_link_test.h
+6
-6
No files found.
include/gmock/gmock-actions.h
View file @
59214836
...
...
@@ -1016,6 +1016,15 @@ template <size_t N, typename T>
PolymorphicAction
<
internal
::
SetArgumentPointeeAction
<
N
,
T
,
internal
::
IsAProtocolMessage
<
T
>::
value
>
>
SetArgPointee
(
const
T
&
x
)
{
return
MakePolymorphicAction
(
internal
::
SetArgumentPointeeAction
<
N
,
T
,
internal
::
IsAProtocolMessage
<
T
>::
value
>
(
x
));
}
// The following version is DEPRECATED.
template
<
size_t
N
,
typename
T
>
PolymorphicAction
<
internal
::
SetArgumentPointeeAction
<
N
,
T
,
internal
::
IsAProtocolMessage
<
T
>::
value
>
>
SetArgumentPointee
(
const
T
&
x
)
{
return
MakePolymorphicAction
(
internal
::
SetArgumentPointeeAction
<
N
,
T
,
internal
::
IsAProtocolMessage
<
T
>::
value
>
(
x
));
...
...
scripts/gmock_doctor.py
View file @
59214836
...
...
@@ -102,6 +102,7 @@ _COMMON_GMOCK_SYMBOLS = [
'ReturnRef'
,
'SaveArg'
,
'SetArgReferee'
,
'SetArgPointee'
,
'SetArgumentPointee'
,
'SetArrayArgument'
,
'SetErrnoAndReturn'
,
...
...
test/gmock-actions_test.cc
View file @
59214836
...
...
@@ -69,6 +69,7 @@ using testing::Return;
using
testing
::
ReturnNull
;
using
testing
::
ReturnRef
;
using
testing
::
ReturnRefOfCopy
;
using
testing
::
SetArgPointee
;
using
testing
::
SetArgumentPointee
;
#if !GTEST_OS_WINDOWS_MOBILE
...
...
@@ -694,6 +695,125 @@ TEST(DoDefaultTest, CannotBeUsedInOnCall) {
},
"DoDefault() cannot be used in ON_CALL()"
);
}
// Tests that SetArgPointee<N>(v) sets the variable pointed to by
// the N-th (0-based) argument to v.
TEST
(
SetArgPointeeTest
,
SetsTheNthPointee
)
{
typedef
void
MyFunction
(
bool
,
int
*
,
char
*
);
Action
<
MyFunction
>
a
=
SetArgPointee
<
1
>
(
2
);
int
n
=
0
;
char
ch
=
'\0'
;
a
.
Perform
(
make_tuple
(
true
,
&
n
,
&
ch
));
EXPECT_EQ
(
2
,
n
);
EXPECT_EQ
(
'\0'
,
ch
);
a
=
SetArgPointee
<
2
>
(
'a'
);
n
=
0
;
ch
=
'\0'
;
a
.
Perform
(
make_tuple
(
true
,
&
n
,
&
ch
));
EXPECT_EQ
(
0
,
n
);
EXPECT_EQ
(
'a'
,
ch
);
}
#if GTEST_HAS_PROTOBUF_
// Tests that SetArgPointee<N>(proto_buffer) sets the v1 protobuf
// variable pointed to by the N-th (0-based) argument to proto_buffer.
TEST
(
SetArgPointeeTest
,
SetsTheNthPointeeOfProtoBufferType
)
{
TestMessage
*
const
msg
=
new
TestMessage
;
msg
->
set_member
(
"yes"
);
TestMessage
orig_msg
;
orig_msg
.
CopyFrom
(
*
msg
);
Action
<
void
(
bool
,
TestMessage
*
)
>
a
=
SetArgPointee
<
1
>
(
*
msg
);
// SetArgPointee<N>(proto_buffer) makes a copy of proto_buffer
// s.t. the action works even when the original proto_buffer has
// died. We ensure this behavior by deleting msg before using the
// action.
delete
msg
;
TestMessage
dest
;
EXPECT_FALSE
(
orig_msg
.
Equals
(
dest
));
a
.
Perform
(
make_tuple
(
true
,
&
dest
));
EXPECT_TRUE
(
orig_msg
.
Equals
(
dest
));
}
// Tests that SetArgPointee<N>(proto_buffer) sets the
// ::ProtocolMessage variable pointed to by the N-th (0-based)
// argument to proto_buffer.
TEST
(
SetArgPointeeTest
,
SetsTheNthPointeeOfProtoBufferBaseType
)
{
TestMessage
*
const
msg
=
new
TestMessage
;
msg
->
set_member
(
"yes"
);
TestMessage
orig_msg
;
orig_msg
.
CopyFrom
(
*
msg
);
Action
<
void
(
bool
,
::
ProtocolMessage
*
)
>
a
=
SetArgPointee
<
1
>
(
*
msg
);
// SetArgPointee<N>(proto_buffer) makes a copy of proto_buffer
// s.t. the action works even when the original proto_buffer has
// died. We ensure this behavior by deleting msg before using the
// action.
delete
msg
;
TestMessage
dest
;
::
ProtocolMessage
*
const
dest_base
=
&
dest
;
EXPECT_FALSE
(
orig_msg
.
Equals
(
dest
));
a
.
Perform
(
make_tuple
(
true
,
dest_base
));
EXPECT_TRUE
(
orig_msg
.
Equals
(
dest
));
}
// Tests that SetArgPointee<N>(proto2_buffer) sets the v2
// protobuf variable pointed to by the N-th (0-based) argument to
// proto2_buffer.
TEST
(
SetArgPointeeTest
,
SetsTheNthPointeeOfProto2BufferType
)
{
using
testing
::
internal
::
FooMessage
;
FooMessage
*
const
msg
=
new
FooMessage
;
msg
->
set_int_field
(
2
);
msg
->
set_string_field
(
"hi"
);
FooMessage
orig_msg
;
orig_msg
.
CopyFrom
(
*
msg
);
Action
<
void
(
bool
,
FooMessage
*
)
>
a
=
SetArgPointee
<
1
>
(
*
msg
);
// SetArgPointee<N>(proto2_buffer) makes a copy of
// proto2_buffer s.t. the action works even when the original
// proto2_buffer has died. We ensure this behavior by deleting msg
// before using the action.
delete
msg
;
FooMessage
dest
;
dest
.
set_int_field
(
0
);
a
.
Perform
(
make_tuple
(
true
,
&
dest
));
EXPECT_EQ
(
2
,
dest
.
int_field
());
EXPECT_EQ
(
"hi"
,
dest
.
string_field
());
}
// Tests that SetArgPointee<N>(proto2_buffer) sets the
// proto2::Message variable pointed to by the N-th (0-based) argument
// to proto2_buffer.
TEST
(
SetArgPointeeTest
,
SetsTheNthPointeeOfProto2BufferBaseType
)
{
using
testing
::
internal
::
FooMessage
;
FooMessage
*
const
msg
=
new
FooMessage
;
msg
->
set_int_field
(
2
);
msg
->
set_string_field
(
"hi"
);
FooMessage
orig_msg
;
orig_msg
.
CopyFrom
(
*
msg
);
Action
<
void
(
bool
,
::
proto2
::
Message
*
)
>
a
=
SetArgPointee
<
1
>
(
*
msg
);
// SetArgPointee<N>(proto2_buffer) makes a copy of
// proto2_buffer s.t. the action works even when the original
// proto2_buffer has died. We ensure this behavior by deleting msg
// before using the action.
delete
msg
;
FooMessage
dest
;
dest
.
set_int_field
(
0
);
::
proto2
::
Message
*
const
dest_base
=
&
dest
;
a
.
Perform
(
make_tuple
(
true
,
dest_base
));
EXPECT_EQ
(
2
,
dest
.
int_field
());
EXPECT_EQ
(
"hi"
,
dest
.
string_field
());
}
#endif // GTEST_HAS_PROTOBUF_
// Tests that SetArgumentPointee<N>(v) sets the variable pointed to by
// the N-th (0-based) argument to v.
TEST
(
SetArgumentPointeeTest
,
SetsTheNthPointee
)
{
...
...
test/gmock-generated-actions_test.cc
View file @
59214836
...
...
@@ -58,7 +58,7 @@ using testing::DoAll;
using
testing
::
Invoke
;
using
testing
::
Return
;
using
testing
::
ReturnNew
;
using
testing
::
SetArg
ument
Pointee
;
using
testing
::
SetArgPointee
;
using
testing
::
StaticAssertTypeEq
;
using
testing
::
Unused
;
using
testing
::
WithArgs
;
...
...
@@ -419,7 +419,7 @@ TEST(WithArgsTest, VoidAction) {
// Tests DoAll(a1, a2).
TEST
(
DoAllTest
,
TwoActions
)
{
int
n
=
0
;
Action
<
int
(
int
*
)
>
a
=
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
// NOLINT
Action
<
int
(
int
*
)
>
a
=
DoAll
(
SetArgPointee
<
0
>
(
1
),
// NOLINT
Return
(
2
));
EXPECT_EQ
(
2
,
a
.
Perform
(
make_tuple
(
&
n
)));
EXPECT_EQ
(
1
,
n
);
...
...
@@ -428,8 +428,8 @@ TEST(DoAllTest, TwoActions) {
// Tests DoAll(a1, a2, a3).
TEST
(
DoAllTest
,
ThreeActions
)
{
int
m
=
0
,
n
=
0
;
Action
<
int
(
int
*
,
int
*
)
>
a
=
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
// NOLINT
SetArg
ument
Pointee
<
1
>
(
2
),
Action
<
int
(
int
*
,
int
*
)
>
a
=
DoAll
(
SetArgPointee
<
0
>
(
1
),
// NOLINT
SetArgPointee
<
1
>
(
2
),
Return
(
3
));
EXPECT_EQ
(
3
,
a
.
Perform
(
make_tuple
(
&
m
,
&
n
)));
EXPECT_EQ
(
1
,
m
);
...
...
@@ -441,9 +441,9 @@ TEST(DoAllTest, FourActions) {
int
m
=
0
,
n
=
0
;
char
ch
=
'\0'
;
Action
<
int
(
int
*
,
int
*
,
char
*
)
>
a
=
// NOLINT
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
SetArg
ument
Pointee
<
1
>
(
2
),
SetArg
ument
Pointee
<
2
>
(
'a'
),
DoAll
(
SetArgPointee
<
0
>
(
1
),
SetArgPointee
<
1
>
(
2
),
SetArgPointee
<
2
>
(
'a'
),
Return
(
3
));
EXPECT_EQ
(
3
,
a
.
Perform
(
make_tuple
(
&
m
,
&
n
,
&
ch
)));
EXPECT_EQ
(
1
,
m
);
...
...
@@ -456,10 +456,10 @@ TEST(DoAllTest, FiveActions) {
int
m
=
0
,
n
=
0
;
char
a
=
'\0'
,
b
=
'\0'
;
Action
<
int
(
int
*
,
int
*
,
char
*
,
char
*
)
>
action
=
// NOLINT
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
SetArg
ument
Pointee
<
1
>
(
2
),
SetArg
ument
Pointee
<
2
>
(
'a'
),
SetArg
ument
Pointee
<
3
>
(
'b'
),
DoAll
(
SetArgPointee
<
0
>
(
1
),
SetArgPointee
<
1
>
(
2
),
SetArgPointee
<
2
>
(
'a'
),
SetArgPointee
<
3
>
(
'b'
),
Return
(
3
));
EXPECT_EQ
(
3
,
action
.
Perform
(
make_tuple
(
&
m
,
&
n
,
&
a
,
&
b
)));
EXPECT_EQ
(
1
,
m
);
...
...
@@ -473,11 +473,11 @@ TEST(DoAllTest, SixActions) {
int
m
=
0
,
n
=
0
;
char
a
=
'\0'
,
b
=
'\0'
,
c
=
'\0'
;
Action
<
int
(
int
*
,
int
*
,
char
*
,
char
*
,
char
*
)
>
action
=
// NOLINT
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
SetArg
ument
Pointee
<
1
>
(
2
),
SetArg
ument
Pointee
<
2
>
(
'a'
),
SetArg
ument
Pointee
<
3
>
(
'b'
),
SetArg
ument
Pointee
<
4
>
(
'c'
),
DoAll
(
SetArgPointee
<
0
>
(
1
),
SetArgPointee
<
1
>
(
2
),
SetArgPointee
<
2
>
(
'a'
),
SetArgPointee
<
3
>
(
'b'
),
SetArgPointee
<
4
>
(
'c'
),
Return
(
3
));
EXPECT_EQ
(
3
,
action
.
Perform
(
make_tuple
(
&
m
,
&
n
,
&
a
,
&
b
,
&
c
)));
EXPECT_EQ
(
1
,
m
);
...
...
@@ -492,12 +492,12 @@ TEST(DoAllTest, SevenActions) {
int
m
=
0
,
n
=
0
;
char
a
=
'\0'
,
b
=
'\0'
,
c
=
'\0'
,
d
=
'\0'
;
Action
<
int
(
int
*
,
int
*
,
char
*
,
char
*
,
char
*
,
char
*
)
>
action
=
// NOLINT
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
SetArg
ument
Pointee
<
1
>
(
2
),
SetArg
ument
Pointee
<
2
>
(
'a'
),
SetArg
ument
Pointee
<
3
>
(
'b'
),
SetArg
ument
Pointee
<
4
>
(
'c'
),
SetArg
ument
Pointee
<
5
>
(
'd'
),
DoAll
(
SetArgPointee
<
0
>
(
1
),
SetArgPointee
<
1
>
(
2
),
SetArgPointee
<
2
>
(
'a'
),
SetArgPointee
<
3
>
(
'b'
),
SetArgPointee
<
4
>
(
'c'
),
SetArgPointee
<
5
>
(
'd'
),
Return
(
3
));
EXPECT_EQ
(
3
,
action
.
Perform
(
make_tuple
(
&
m
,
&
n
,
&
a
,
&
b
,
&
c
,
&
d
)));
EXPECT_EQ
(
1
,
m
);
...
...
@@ -514,13 +514,13 @@ TEST(DoAllTest, EightActions) {
char
a
=
'\0'
,
b
=
'\0'
,
c
=
'\0'
,
d
=
'\0'
,
e
=
'\0'
;
Action
<
int
(
int
*
,
int
*
,
char
*
,
char
*
,
char
*
,
char
*
,
// NOLINT
char
*
)
>
action
=
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
SetArg
ument
Pointee
<
1
>
(
2
),
SetArg
ument
Pointee
<
2
>
(
'a'
),
SetArg
ument
Pointee
<
3
>
(
'b'
),
SetArg
ument
Pointee
<
4
>
(
'c'
),
SetArg
ument
Pointee
<
5
>
(
'd'
),
SetArg
ument
Pointee
<
6
>
(
'e'
),
DoAll
(
SetArgPointee
<
0
>
(
1
),
SetArgPointee
<
1
>
(
2
),
SetArgPointee
<
2
>
(
'a'
),
SetArgPointee
<
3
>
(
'b'
),
SetArgPointee
<
4
>
(
'c'
),
SetArgPointee
<
5
>
(
'd'
),
SetArgPointee
<
6
>
(
'e'
),
Return
(
3
));
EXPECT_EQ
(
3
,
action
.
Perform
(
make_tuple
(
&
m
,
&
n
,
&
a
,
&
b
,
&
c
,
&
d
,
&
e
)));
EXPECT_EQ
(
1
,
m
);
...
...
@@ -538,14 +538,14 @@ TEST(DoAllTest, NineActions) {
char
a
=
'\0'
,
b
=
'\0'
,
c
=
'\0'
,
d
=
'\0'
,
e
=
'\0'
,
f
=
'\0'
;
Action
<
int
(
int
*
,
int
*
,
char
*
,
char
*
,
char
*
,
char
*
,
// NOLINT
char
*
,
char
*
)
>
action
=
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
SetArg
ument
Pointee
<
1
>
(
2
),
SetArg
ument
Pointee
<
2
>
(
'a'
),
SetArg
ument
Pointee
<
3
>
(
'b'
),
SetArg
ument
Pointee
<
4
>
(
'c'
),
SetArg
ument
Pointee
<
5
>
(
'd'
),
SetArg
ument
Pointee
<
6
>
(
'e'
),
SetArg
ument
Pointee
<
7
>
(
'f'
),
DoAll
(
SetArgPointee
<
0
>
(
1
),
SetArgPointee
<
1
>
(
2
),
SetArgPointee
<
2
>
(
'a'
),
SetArgPointee
<
3
>
(
'b'
),
SetArgPointee
<
4
>
(
'c'
),
SetArgPointee
<
5
>
(
'd'
),
SetArgPointee
<
6
>
(
'e'
),
SetArgPointee
<
7
>
(
'f'
),
Return
(
3
));
EXPECT_EQ
(
3
,
action
.
Perform
(
make_tuple
(
&
m
,
&
n
,
&
a
,
&
b
,
&
c
,
&
d
,
&
e
,
&
f
)));
EXPECT_EQ
(
1
,
m
);
...
...
@@ -565,15 +565,15 @@ TEST(DoAllTest, TenActions) {
char
e
=
'\0'
,
f
=
'\0'
,
g
=
'\0'
;
Action
<
int
(
int
*
,
int
*
,
char
*
,
char
*
,
char
*
,
char
*
,
// NOLINT
char
*
,
char
*
,
char
*
)
>
action
=
DoAll
(
SetArg
ument
Pointee
<
0
>
(
1
),
SetArg
ument
Pointee
<
1
>
(
2
),
SetArg
ument
Pointee
<
2
>
(
'a'
),
SetArg
ument
Pointee
<
3
>
(
'b'
),
SetArg
ument
Pointee
<
4
>
(
'c'
),
SetArg
ument
Pointee
<
5
>
(
'd'
),
SetArg
ument
Pointee
<
6
>
(
'e'
),
SetArg
ument
Pointee
<
7
>
(
'f'
),
SetArg
ument
Pointee
<
8
>
(
'g'
),
DoAll
(
SetArgPointee
<
0
>
(
1
),
SetArgPointee
<
1
>
(
2
),
SetArgPointee
<
2
>
(
'a'
),
SetArgPointee
<
3
>
(
'b'
),
SetArgPointee
<
4
>
(
'c'
),
SetArgPointee
<
5
>
(
'd'
),
SetArgPointee
<
6
>
(
'e'
),
SetArgPointee
<
7
>
(
'f'
),
SetArgPointee
<
8
>
(
'g'
),
Return
(
3
));
EXPECT_EQ
(
3
,
action
.
Perform
(
make_tuple
(
&
m
,
&
n
,
&
a
,
&
b
,
&
c
,
&
d
,
&
e
,
&
f
,
&
g
)));
EXPECT_EQ
(
1
,
m
);
...
...
test/gmock-more-actions_test.cc
View file @
59214836
...
...
@@ -60,7 +60,6 @@ using testing::ReturnArg;
using
testing
::
ReturnPointee
;
using
testing
::
SaveArg
;
using
testing
::
SetArgReferee
;
using
testing
::
SetArgumentPointee
;
using
testing
::
StaticAssertTypeEq
;
using
testing
::
Unused
;
using
testing
::
WithArg
;
...
...
test/gmock_link_test.h
View file @
59214836
...
...
@@ -44,7 +44,7 @@
// ReturnNull
// ReturnRef
// Assign
// SetArg
ument
Pointee
// SetArgPointee
// SetArrayArgument
// SetErrnoAndReturn
// Invoke(function)
...
...
@@ -164,7 +164,7 @@ using testing::ResultOf;
using
testing
::
Return
;
using
testing
::
ReturnNull
;
using
testing
::
ReturnRef
;
using
testing
::
SetArg
ument
Pointee
;
using
testing
::
SetArgPointee
;
using
testing
::
SetArrayArgument
;
using
testing
::
StartsWith
;
using
testing
::
StrCaseEq
;
...
...
@@ -281,12 +281,12 @@ TEST(LinkTest, TestAssign) {
mock
.
VoidFromString
(
NULL
);
}
// Tests the linkage of the SetArg
ument
Pointee action.
TEST
(
LinkTest
,
TestSetArg
ument
Pointee
)
{
// Tests the linkage of the SetArgPointee action.
TEST
(
LinkTest
,
TestSetArgPointee
)
{
Mock
mock
;
char
ch
=
'x'
;
EXPECT_CALL
(
mock
,
VoidFromString
(
_
)).
WillOnce
(
SetArg
ument
Pointee
<
0
>
(
'y'
));
EXPECT_CALL
(
mock
,
VoidFromString
(
_
)).
WillOnce
(
SetArgPointee
<
0
>
(
'y'
));
mock
.
VoidFromString
(
&
ch
);
}
...
...
@@ -381,7 +381,7 @@ TEST(LinkTest, TestDoAll) {
char
ch
=
'x'
;
EXPECT_CALL
(
mock
,
VoidFromString
(
_
))
.
WillOnce
(
DoAll
(
SetArg
ument
Pointee
<
0
>
(
'y'
),
Return
()));
.
WillOnce
(
DoAll
(
SetArgPointee
<
0
>
(
'y'
),
Return
()));
mock
.
VoidFromString
(
&
ch
);
}
...
...
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