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
1c8eb1c0
Commit
1c8eb1c0
authored
Apr 09, 2009
by
zhanyong.wan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adds actions ReturnNew<T>(...) and DeleteArg<k>(), by Jason Hsueh.
parent
56fe7460
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
513 additions
and
0 deletions
+513
-0
gmock-generated-actions.h
include/gmock/gmock-generated-actions.h
+341
-0
gmock-generated-actions.h.pump
include/gmock/gmock-generated-actions.h.pump
+69
-0
gmock-generated-actions_test.cc
test/gmock-generated-actions_test.cc
+103
-0
No files found.
include/gmock/gmock-generated-actions.h
View file @
1c8eb1c0
...
...
@@ -2320,6 +2320,240 @@ ACTION_P(SetArg0Referee, value) {
arg0
=
value
;
}
// ReturnNewAction<T> creates and returns a new instance of an object each time
// it is performed. It is overloaded to work with constructors that take
// different numbers of arguments.
// Returns a new instance of T using a nullary constructor with the given
// arguments.
template
<
typename
T
>
class
ReturnNewAction0
{
public
:
ReturnNewAction0
()
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
();
}
private
:
};
// Returns a new instance of T using a unary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
>
class
ReturnNewAction1
{
public
:
explicit
ReturnNewAction1
(
A1
a1
)
:
arg1_
(
a1
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
);
}
private
:
const
A1
arg1_
;
};
// Returns a new instance of T using a binary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
>
class
ReturnNewAction2
{
public
:
ReturnNewAction2
(
A1
a1
,
A2
a2
)
:
arg1_
(
a1
),
arg2_
(
a2
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
};
// Returns a new instance of T using a ternary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
>
class
ReturnNewAction3
{
public
:
ReturnNewAction3
(
A1
a1
,
A2
a2
,
A3
a3
)
:
arg1_
(
a1
),
arg2_
(
a2
),
arg3_
(
a3
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
,
arg3_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
const
A3
arg3_
;
};
// Returns a new instance of T using a 4-ary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
>
class
ReturnNewAction4
{
public
:
ReturnNewAction4
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
)
:
arg1_
(
a1
),
arg2_
(
a2
),
arg3_
(
a3
),
arg4_
(
a4
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
,
arg3_
,
arg4_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
const
A3
arg3_
;
const
A4
arg4_
;
};
// Returns a new instance of T using a 5-ary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
>
class
ReturnNewAction5
{
public
:
ReturnNewAction5
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
)
:
arg1_
(
a1
),
arg2_
(
a2
),
arg3_
(
a3
),
arg4_
(
a4
),
arg5_
(
a5
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
,
arg3_
,
arg4_
,
arg5_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
const
A3
arg3_
;
const
A4
arg4_
;
const
A5
arg5_
;
};
// Returns a new instance of T using a 6-ary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
>
class
ReturnNewAction6
{
public
:
ReturnNewAction6
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
)
:
arg1_
(
a1
),
arg2_
(
a2
),
arg3_
(
a3
),
arg4_
(
a4
),
arg5_
(
a5
),
arg6_
(
a6
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
,
arg3_
,
arg4_
,
arg5_
,
arg6_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
const
A3
arg3_
;
const
A4
arg4_
;
const
A5
arg5_
;
const
A6
arg6_
;
};
// Returns a new instance of T using a 7-ary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
,
typename
A7
>
class
ReturnNewAction7
{
public
:
ReturnNewAction7
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
,
A7
a7
)
:
arg1_
(
a1
),
arg2_
(
a2
),
arg3_
(
a3
),
arg4_
(
a4
),
arg5_
(
a5
),
arg6_
(
a6
),
arg7_
(
a7
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
,
arg3_
,
arg4_
,
arg5_
,
arg6_
,
arg7_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
const
A3
arg3_
;
const
A4
arg4_
;
const
A5
arg5_
;
const
A6
arg6_
;
const
A7
arg7_
;
};
// Returns a new instance of T using a 8-ary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
,
typename
A7
,
typename
A8
>
class
ReturnNewAction8
{
public
:
ReturnNewAction8
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
,
A7
a7
,
A8
a8
)
:
arg1_
(
a1
),
arg2_
(
a2
),
arg3_
(
a3
),
arg4_
(
a4
),
arg5_
(
a5
),
arg6_
(
a6
),
arg7_
(
a7
),
arg8_
(
a8
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
,
arg3_
,
arg4_
,
arg5_
,
arg6_
,
arg7_
,
arg8_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
const
A3
arg3_
;
const
A4
arg4_
;
const
A5
arg5_
;
const
A6
arg6_
;
const
A7
arg7_
;
const
A8
arg8_
;
};
// Returns a new instance of T using a 9-ary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
,
typename
A7
,
typename
A8
,
typename
A9
>
class
ReturnNewAction9
{
public
:
ReturnNewAction9
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
,
A7
a7
,
A8
a8
,
A9
a9
)
:
arg1_
(
a1
),
arg2_
(
a2
),
arg3_
(
a3
),
arg4_
(
a4
),
arg5_
(
a5
),
arg6_
(
a6
),
arg7_
(
a7
),
arg8_
(
a8
),
arg9_
(
a9
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
,
arg3_
,
arg4_
,
arg5_
,
arg6_
,
arg7_
,
arg8_
,
arg9_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
const
A3
arg3_
;
const
A4
arg4_
;
const
A5
arg5_
;
const
A6
arg6_
;
const
A7
arg7_
;
const
A8
arg8_
;
const
A9
arg9_
;
};
// Returns a new instance of T using a 10-ary constructor with the given
// arguments.
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
,
typename
A7
,
typename
A8
,
typename
A9
,
typename
A10
>
class
ReturnNewAction10
{
public
:
ReturnNewAction10
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
,
A7
a7
,
A8
a8
,
A9
a9
,
A10
a10
)
:
arg1_
(
a1
),
arg2_
(
a2
),
arg3_
(
a3
),
arg4_
(
a4
),
arg5_
(
a5
),
arg6_
(
a6
),
arg7_
(
a7
),
arg8_
(
a8
),
arg9_
(
a9
),
arg10_
(
a10
)
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
arg1_
,
arg2_
,
arg3_
,
arg4_
,
arg5_
,
arg6_
,
arg7_
,
arg8_
,
arg9_
,
arg10_
);
}
private
:
const
A1
arg1_
;
const
A2
arg2_
;
const
A3
arg3_
;
const
A4
arg4_
;
const
A5
arg5_
;
const
A6
arg6_
;
const
A7
arg7_
;
const
A8
arg8_
;
const
A9
arg9_
;
const
A10
arg10_
;
};
// Deletes the object pointed to by argument #0.
ACTION
(
DeleteArg0
)
{
delete
arg0
;
}
}
// namespace internal
// Action SaveArg<k>(pointer) saves the k-th (0-based) argument of the
...
...
@@ -2338,6 +2572,113 @@ SetArgReferee(const Value& value) {
return
WithArg
<
k
>
(
internal
::
SetArg0Referee
(
value
));
}
// Various overloads for ReturnNew<T>().
//
// The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new
// instance of type T, constructed on the heap with constructor arguments
// a1, a2, ..., and a_k. The caller assumes ownership of the returned value.
template
<
typename
T
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction0
<
T
>
>
ReturnNew
()
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction0
<
T
>
());
}
template
<
typename
T
,
typename
A1
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction1
<
T
,
A1
>
>
ReturnNew
(
A1
a1
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction1
<
T
,
A1
>
(
a1
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction2
<
T
,
A1
,
A2
>
>
ReturnNew
(
A1
a1
,
A2
a2
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction2
<
T
,
A1
,
A2
>
(
a1
,
a2
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction3
<
T
,
A1
,
A2
,
A3
>
>
ReturnNew
(
A1
a1
,
A2
a2
,
A3
a3
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction3
<
T
,
A1
,
A2
,
A3
>
(
a1
,
a2
,
a3
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction4
<
T
,
A1
,
A2
,
A3
,
A4
>
>
ReturnNew
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction4
<
T
,
A1
,
A2
,
A3
,
A4
>
(
a1
,
a2
,
a3
,
a4
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction5
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
>
>
ReturnNew
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction5
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
>
(
a1
,
a2
,
a3
,
a4
,
a5
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction6
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
>
>
ReturnNew
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction6
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
>
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
,
typename
A7
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction7
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
>
>
ReturnNew
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
,
A7
a7
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction7
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
>
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
,
typename
A7
,
typename
A8
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction8
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
>
>
ReturnNew
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
,
A7
a7
,
A8
a8
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction8
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
>
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
,
typename
A7
,
typename
A8
,
typename
A9
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction9
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
,
A9
>
>
ReturnNew
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
,
A7
a7
,
A8
a8
,
A9
a9
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction9
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
,
A9
>
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
));
}
template
<
typename
T
,
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
,
typename
A7
,
typename
A8
,
typename
A9
,
typename
A10
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction10
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
,
A9
,
A10
>
>
ReturnNew
(
A1
a1
,
A2
a2
,
A3
a3
,
A4
a4
,
A5
a5
,
A6
a6
,
A7
a7
,
A8
a8
,
A9
a9
,
A10
a10
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction10
<
T
,
A1
,
A2
,
A3
,
A4
,
A5
,
A6
,
A7
,
A8
,
A9
,
A10
>
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
,
a10
));
}
// Action DeleteArg<k>() deletes the k-th (0-based) argument of the mock
// function.
template
<
int
k
>
inline
internal
::
WithArgsAction
<
internal
::
DeleteArg0Action
,
k
>
DeleteArg
()
{
return
WithArg
<
k
>
(
internal
::
DeleteArg0
());
}
// Action Throw(exception) can be used in a mock function of any type
// to throw the given exception. Any copyable value can be thrown.
#if GTEST_HAS_EXCEPTIONS
...
...
include/gmock/gmock-generated-actions.h.pump
View file @
1c8eb1c0
...
...
@@ -806,6 +806,45 @@ ACTION_P(SetArg0Referee, value) {
arg0
=
value
;
}
// ReturnNewAction<T> creates and returns a new instance of an object each time
// it is performed. It is overloaded to work with constructors that take
// different numbers of arguments.
$
range
i
0.
.
n
$
for
i
[[
$
var
arity
=
[[
$
if
i
==
0
[[
nullary
]]
$
elif
i
==
1
[[
unary
]]
$
elif
i
==
2
[[
binary
]]
$
elif
i
==
3
[[
ternary
]]
$
else
[[
$
i
-
ary
]]]]
$
range
j
1.
.
i
$
var
typename_As
=
[[
$
for
j
[[,
typename
A
$
j
]]]]
$
var
args_
=
[[
$
for
j
,
[[
arg
$
j
[[]]
_
]]]]
// Returns a new instance of T using a $arity constructor with the given
// arguments.
template
<
typename
T
$
typename_As
>
class
ReturnNewAction
$
i
{
public
:
$
if
i
==
1
[[
explicit
]]
ReturnNewAction
$
i
(
$
for
j
,
[[
A
$
j
a
$
j
]])
$
if
i
>
0
[[
:
]]
$
for
j
,
[[
arg
$
j
[[]]
_
(
a
$
j
)]]
{}
template
<
typename
Result
,
typename
ArgumentTuple
>
Result
Perform
(
const
ArgumentTuple
&
/* args */
)
{
return
new
T
(
$
args_
);
}
private
:
$
for
j
[[
const
A
$
j
arg
$
j
[[]]
_
;
]]
};
]]
// Deletes the object pointed to by argument #0.
ACTION
(
DeleteArg0
)
{
delete
arg0
;
}
}
// namespace internal
// Action SaveArg<k>(pointer) saves the k-th (0-based) argument of the
...
...
@@ -824,6 +863,36 @@ SetArgReferee(const Value& value) {
return
WithArg
<
k
>
(
internal
::
SetArg0Referee
(
value
));
}
// Various overloads for ReturnNew<T>().
//
// The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new
// instance of type T, constructed on the heap with constructor arguments
// a1, a2, ..., and a_k. The caller assumes ownership of the returned value.
$
range
i
0.
.
n
$
for
i
[[
$
range
j
1.
.
i
$
var
typename_As
=
[[
$
for
j
[[,
typename
A
$
j
]]]]
$
var
As
=
[[
$
for
j
[[,
A
$
j
]]]]
$
var
Aas
=
[[
$
for
j
,
[[
A
$
j
a
$
j
]]]]
$
var
as
=
[[
$
for
j
,
[[
a
$
j
]]]]
template
<
typename
T
$
typename_As
>
inline
PolymorphicAction
<
internal
::
ReturnNewAction
$
i
<
T
$
As
>
>
ReturnNew
(
$
Aas
)
{
return
MakePolymorphicAction
(
internal
::
ReturnNewAction
$
i
<
T
$
As
>
(
$
as
));
}
]]
// Action DeleteArg<k>() deletes the k-th (0-based) argument of the mock
// function.
template
<
int
k
>
inline
internal
::
WithArgsAction
<
internal
::
DeleteArg0Action
,
k
>
DeleteArg
()
{
return
WithArg
<
k
>
(
internal
::
DeleteArg0
());
}
// Action Throw(exception) can be used in a mock function of any type
// to throw the given exception. Any copyable value can be thrown.
#if GTEST_HAS_EXCEPTIONS
...
...
test/gmock-generated-actions_test.cc
View file @
1c8eb1c0
...
...
@@ -53,10 +53,12 @@ using testing::_;
using
testing
::
Action
;
using
testing
::
ActionInterface
;
using
testing
::
ByRef
;
using
testing
::
DeleteArg
;
using
testing
::
DoAll
;
using
testing
::
Invoke
;
using
testing
::
InvokeArgument
;
using
testing
::
Return
;
using
testing
::
ReturnNew
;
using
testing
::
SaveArg
;
using
testing
::
SetArgReferee
;
using
testing
::
SetArgumentPointee
;
...
...
@@ -1371,6 +1373,107 @@ TEST(SetArgRefereeActionTest, WorksWithExtraArguments) {
EXPECT_EQ
(
'a'
,
value
);
}
class
NullaryConstructorClass
{
public
:
NullaryConstructorClass
()
:
value_
(
123
)
{}
int
value_
;
};
// Tests using ReturnNew() with a nullary constructor.
TEST
(
ReturnNewTest
,
NoArgs
)
{
Action
<
NullaryConstructorClass
*
()
>
a
=
ReturnNew
<
NullaryConstructorClass
>
();
NullaryConstructorClass
*
c
=
a
.
Perform
(
make_tuple
());
EXPECT_EQ
(
123
,
c
->
value_
);
delete
c
;
}
class
UnaryConstructorClass
{
public
:
explicit
UnaryConstructorClass
(
int
value
)
:
value_
(
value
)
{}
int
value_
;
};
// Tests using ReturnNew() with a unary constructor.
TEST
(
ReturnNewTest
,
Unary
)
{
Action
<
UnaryConstructorClass
*
()
>
a
=
ReturnNew
<
UnaryConstructorClass
>
(
4000
);
UnaryConstructorClass
*
c
=
a
.
Perform
(
make_tuple
());
EXPECT_EQ
(
4000
,
c
->
value_
);
delete
c
;
}
TEST
(
ReturnNewTest
,
UnaryWorksWhenMockMethodHasArgs
)
{
Action
<
UnaryConstructorClass
*
(
bool
,
int
)
>
a
=
ReturnNew
<
UnaryConstructorClass
>
(
4000
);
UnaryConstructorClass
*
c
=
a
.
Perform
(
make_tuple
(
false
,
5
));
EXPECT_EQ
(
4000
,
c
->
value_
);
delete
c
;
}
TEST
(
ReturnNewTest
,
UnaryWorksWhenMockMethodReturnsPointerToConst
)
{
Action
<
const
UnaryConstructorClass
*
()
>
a
=
ReturnNew
<
UnaryConstructorClass
>
(
4000
);
const
UnaryConstructorClass
*
c
=
a
.
Perform
(
make_tuple
());
EXPECT_EQ
(
4000
,
c
->
value_
);
delete
c
;
}
class
TenArgConstructorClass
{
public
:
TenArgConstructorClass
(
int
a1
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
int
a6
,
int
a7
,
int
a8
,
int
a9
,
int
a10
)
:
value_
(
a1
+
a2
+
a3
+
a4
+
a5
+
a6
+
a7
+
a8
+
a9
+
a10
)
{
}
int
value_
;
};
// Tests using ReturnNew() with a 10-argument constructor.
TEST
(
ReturnNewTest
,
ConstructorThatTakes10Arguments
)
{
Action
<
TenArgConstructorClass
*
()
>
a
=
ReturnNew
<
TenArgConstructorClass
>
(
1000000000
,
200000000
,
30000000
,
4000000
,
500000
,
60000
,
7000
,
800
,
90
,
0
);
TenArgConstructorClass
*
c
=
a
.
Perform
(
make_tuple
());
EXPECT_EQ
(
1234567890
,
c
->
value_
);
delete
c
;
}
// A class that can be used to verify that its destructor is called: it will set
// the bool provided to the constructor to true when destroyed.
class
DeletionTester
{
public
:
explicit
DeletionTester
(
bool
*
is_deleted
)
:
is_deleted_
(
is_deleted
)
{
// Make sure the bit is set to false.
*
is_deleted_
=
false
;
}
~
DeletionTester
()
{
*
is_deleted_
=
true
;
}
private
:
bool
*
is_deleted_
;
};
TEST
(
DeleteArgActionTest
,
OneArg
)
{
bool
is_deleted
=
false
;
DeletionTester
*
t
=
new
DeletionTester
(
&
is_deleted
);
const
Action
<
void
(
DeletionTester
*
)
>
a1
=
DeleteArg
<
0
>
();
// NOLINT
EXPECT_FALSE
(
is_deleted
);
a1
.
Perform
(
make_tuple
(
t
));
EXPECT_TRUE
(
is_deleted
);
}
TEST
(
DeleteArgActionTest
,
TenArgs
)
{
bool
is_deleted
=
false
;
DeletionTester
*
t
=
new
DeletionTester
(
&
is_deleted
);
const
Action
<
void
(
bool
,
int
,
int
,
const
char
*
,
bool
,
int
,
int
,
int
,
int
,
DeletionTester
*
)
>
a1
=
DeleteArg
<
9
>
();
EXPECT_FALSE
(
is_deleted
);
a1
.
Perform
(
make_tuple
(
true
,
5
,
6
,
"hi"
,
false
,
7
,
8
,
9
,
10
,
t
));
EXPECT_TRUE
(
is_deleted
);
}
#if GTEST_HAS_EXCEPTIONS
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