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
4bd79e4f
"vscode:/vscode.git/clone" did not exist on "2dc576ec55aede9e8a5df571cf60d42de5a48105"
Commit
4bd79e4f
authored
Sep 16, 2009
by
zhanyong.wan
Browse files
Simplifies the definition of NativeArray. Works around a VC bug in StrictMock & NiceMock.
parent
f5e1ce5b
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
117 additions
and
81 deletions
+117
-81
include/gmock/gmock-generated-nice-strict.h
include/gmock/gmock-generated-nice-strict.h
+48
-24
include/gmock/gmock-generated-nice-strict.h.pump
include/gmock/gmock-generated-nice-strict.h.pump
+16
-8
include/gmock/internal/gmock-internal-utils.h
include/gmock/internal/gmock-internal-utils.h
+9
-19
test/gmock-internal-utils_test.cc
test/gmock-internal-utils_test.cc
+11
-26
test/gmock-nice-strict_test.cc
test/gmock-nice-strict_test.cc
+29
-0
test/gmock-printers_test.cc
test/gmock-printers_test.cc
+4
-4
No files found.
include/gmock/gmock-generated-nice-strict.h
View file @
4bd79e4f
...
@@ -70,42 +70,49 @@ class NiceMock : public MockClass {
...
@@ -70,42 +70,49 @@ class NiceMock : public MockClass {
// We don't factor out the constructor body to a common method, as
// We don't factor out the constructor body to a common method, as
// we have to avoid a possible clash with members of MockClass.
// we have to avoid a possible clash with members of MockClass.
NiceMock
()
{
NiceMock
()
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
// C++ doesn't (yet) allow inheritance of constructors, so we have
// C++ doesn't (yet) allow inheritance of constructors, so we have
// to define it for each arity.
// to define it for each arity.
template
<
typename
A1
>
template
<
typename
A1
>
explicit
NiceMock
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
explicit
NiceMock
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
>
template
<
typename
A1
,
typename
A2
>
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
)
:
MockClass
(
a1
,
a2
)
{
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
)
:
MockClass
(
a1
,
a2
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
>
template
<
typename
A1
,
typename
A2
,
typename
A3
>
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
)
:
MockClass
(
a1
,
a2
,
a3
)
{
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
)
:
MockClass
(
a1
,
a2
,
a3
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
>
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
>
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
)
{
const
A4
&
a4
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
>
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
>
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
)
{
const
A5
&
a5
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
>
typename
A6
>
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
)
{
const
A5
&
a5
,
const
A6
&
a6
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
...
@@ -113,7 +120,8 @@ class NiceMock : public MockClass {
...
@@ -113,7 +120,8 @@ class NiceMock : public MockClass {
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
)
{
a6
,
a7
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
...
@@ -121,7 +129,8 @@ class NiceMock : public MockClass {
...
@@ -121,7 +129,8 @@ class NiceMock : public MockClass {
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
)
:
MockClass
(
a1
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
)
{
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
...
@@ -129,7 +138,8 @@ class NiceMock : public MockClass {
...
@@ -129,7 +138,8 @@ class NiceMock : public MockClass {
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
,
const
A9
&
a9
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
)
{
const
A9
&
a9
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
...
@@ -137,11 +147,13 @@ class NiceMock : public MockClass {
...
@@ -137,11 +147,13 @@ class NiceMock : public MockClass {
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
NiceMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
,
const
A9
&
a9
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
,
const
A9
&
a9
,
const
A10
&
a10
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
,
a10
)
{
const
A10
&
a10
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
,
a10
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
virtual
~
NiceMock
()
{
virtual
~
NiceMock
()
{
Mock
::
UnregisterCallReaction
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
UnregisterCallReaction
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
};
};
...
@@ -151,40 +163,47 @@ class StrictMock : public MockClass {
...
@@ -151,40 +163,47 @@ class StrictMock : public MockClass {
// We don't factor out the constructor body to a common method, as
// We don't factor out the constructor body to a common method, as
// we have to avoid a possible clash with members of MockClass.
// we have to avoid a possible clash with members of MockClass.
StrictMock
()
{
StrictMock
()
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
>
template
<
typename
A1
>
explicit
StrictMock
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
explicit
StrictMock
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
>
template
<
typename
A1
,
typename
A2
>
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
)
:
MockClass
(
a1
,
a2
)
{
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
)
:
MockClass
(
a1
,
a2
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
>
template
<
typename
A1
,
typename
A2
,
typename
A3
>
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
)
:
MockClass
(
a1
,
a2
,
a3
)
{
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
)
:
MockClass
(
a1
,
a2
,
a3
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
>
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
>
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
)
{
const
A4
&
a4
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
>
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
>
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
)
{
const
A5
&
a5
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
typename
A6
>
typename
A6
>
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
)
{
const
A5
&
a5
,
const
A6
&
a6
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
...
@@ -192,7 +211,8 @@ class StrictMock : public MockClass {
...
@@ -192,7 +211,8 @@ class StrictMock : public MockClass {
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
)
{
a6
,
a7
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
...
@@ -200,7 +220,8 @@ class StrictMock : public MockClass {
...
@@ -200,7 +220,8 @@ class StrictMock : public MockClass {
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
)
:
MockClass
(
a1
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
)
{
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
...
@@ -208,7 +229,8 @@ class StrictMock : public MockClass {
...
@@ -208,7 +229,8 @@ class StrictMock : public MockClass {
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
,
const
A9
&
a9
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
)
{
const
A9
&
a9
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
template
<
typename
A1
,
typename
A2
,
typename
A3
,
typename
A4
,
typename
A5
,
...
@@ -216,11 +238,13 @@ class StrictMock : public MockClass {
...
@@ -216,11 +238,13 @@ class StrictMock : public MockClass {
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
StrictMock
(
const
A1
&
a1
,
const
A2
&
a2
,
const
A3
&
a3
,
const
A4
&
a4
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
,
const
A9
&
a9
,
const
A5
&
a5
,
const
A6
&
a6
,
const
A7
&
a7
,
const
A8
&
a8
,
const
A9
&
a9
,
const
A10
&
a10
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
,
a10
)
{
const
A10
&
a10
)
:
MockClass
(
a1
,
a2
,
a3
,
a4
,
a5
,
a6
,
a7
,
a8
,
a9
,
a10
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
virtual
~
StrictMock
()
{
virtual
~
StrictMock
()
{
Mock
::
UnregisterCallReaction
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
UnregisterCallReaction
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
};
};
...
...
include/gmock/gmock-generated-nice-strict.h.pump
View file @
4bd79e4f
...
@@ -73,14 +73,16 @@ class NiceMock : public MockClass {
...
@@ -73,14 +73,16 @@ class NiceMock : public MockClass {
// We don't factor out the constructor body to a common method, as
// We don't factor out the constructor body to a common method, as
// we have to avoid a possible clash with members of MockClass.
// we have to avoid a possible clash with members of MockClass.
NiceMock
()
{
NiceMock
()
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
// C++ doesn't (yet) allow inheritance of constructors, so we have
// C++ doesn't (yet) allow inheritance of constructors, so we have
// to define it for each arity.
// to define it for each arity.
template
<
typename
A1
>
template
<
typename
A1
>
explicit
NiceMock
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
explicit
NiceMock
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
$
range
i
2.
.
n
$
range
i
2.
.
n
...
@@ -88,13 +90,15 @@ $for i [[
...
@@ -88,13 +90,15 @@ $for i [[
$
range
j
1.
.
i
$
range
j
1.
.
i
template
<
$
for
j
,
[[
typename
A
$
j
]]>
template
<
$
for
j
,
[[
typename
A
$
j
]]>
NiceMock
(
$
for
j
,
[[
const
A
$
j
&
a
$
j
]])
:
MockClass
(
$
for
j
,
[[
a
$
j
]])
{
NiceMock
(
$
for
j
,
[[
const
A
$
j
&
a
$
j
]])
:
MockClass
(
$
for
j
,
[[
a
$
j
]])
{
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
AllowUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
]]
]]
virtual
~
NiceMock
()
{
virtual
~
NiceMock
()
{
Mock
::
UnregisterCallReaction
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
UnregisterCallReaction
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
};
};
...
@@ -104,25 +108,29 @@ class StrictMock : public MockClass {
...
@@ -104,25 +108,29 @@ class StrictMock : public MockClass {
// We don't factor out the constructor body to a common method, as
// We don't factor out the constructor body to a common method, as
// we have to avoid a possible clash with members of MockClass.
// we have to avoid a possible clash with members of MockClass.
StrictMock
()
{
StrictMock
()
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
template
<
typename
A1
>
template
<
typename
A1
>
explicit
StrictMock
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
explicit
StrictMock
(
const
A1
&
a1
)
:
MockClass
(
a1
)
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
$
for
i
[[
$
for
i
[[
$
range
j
1.
.
i
$
range
j
1.
.
i
template
<
$
for
j
,
[[
typename
A
$
j
]]>
template
<
$
for
j
,
[[
typename
A
$
j
]]>
StrictMock
(
$
for
j
,
[[
const
A
$
j
&
a
$
j
]])
:
MockClass
(
$
for
j
,
[[
a
$
j
]])
{
StrictMock
(
$
for
j
,
[[
const
A
$
j
&
a
$
j
]])
:
MockClass
(
$
for
j
,
[[
a
$
j
]])
{
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
FailUninterestingCalls
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
]]
]]
virtual
~
StrictMock
()
{
virtual
~
StrictMock
()
{
Mock
::
UnregisterCallReaction
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
::
testing
::
Mock
::
UnregisterCallReaction
(
internal
::
implicit_cast
<
MockClass
*>
(
this
));
}
}
};
};
...
...
include/gmock/internal/gmock-internal-utils.h
View file @
4bd79e4f
...
@@ -581,21 +581,9 @@ class NativeArray {
...
@@ -581,21 +581,9 @@ class NativeArray {
typedef
Element
value_type
;
typedef
Element
value_type
;
typedef
const
Element
*
const_iterator
;
typedef
const
Element
*
const_iterator
;
// Constructs from a native array passed by reference.
// Constructs from a native array.
template
<
size_t
N
>
NativeArray
(
const
Element
*
array
,
size_t
count
,
RelationToSource
relation
)
{
NativeArray
(
const
Element
(
&
array
)[
N
],
RelationToSource
relation
)
{
Init
(
array
,
count
,
relation
);
Init
(
array
,
N
,
relation
);
}
// Constructs from a native array passed by a pointer and a size.
// For generality we don't artificially restrict the types of the
// pointer and the size.
template
<
typename
Pointer
,
typename
Size
>
NativeArray
(
const
::
std
::
tr1
::
tuple
<
Pointer
,
Size
>&
array
,
RelationToSource
relation
)
{
Init
(
internal
::
GetRawPointer
(
::
std
::
tr1
::
get
<
0
>
(
array
)),
::
std
::
tr1
::
get
<
1
>
(
array
),
relation
);
}
}
// Copy constructor.
// Copy constructor.
...
@@ -691,10 +679,10 @@ class StlContainerView<Element[N]> {
...
@@ -691,10 +679,10 @@ class StlContainerView<Element[N]> {
static
const_reference
ConstReference
(
const
Element
(
&
array
)[
N
])
{
static
const_reference
ConstReference
(
const
Element
(
&
array
)[
N
])
{
// Ensures that Element is not a const type.
// Ensures that Element is not a const type.
testing
::
StaticAssertTypeEq
<
Element
,
RawElement
>
();
testing
::
StaticAssertTypeEq
<
Element
,
RawElement
>
();
return
type
(
array
,
kReference
);
return
type
(
array
,
N
,
kReference
);
}
}
static
type
Copy
(
const
Element
(
&
array
)[
N
])
{
static
type
Copy
(
const
Element
(
&
array
)[
N
])
{
return
type
(
array
,
kCopy
);
return
type
(
array
,
N
,
kCopy
);
}
}
};
};
...
@@ -710,10 +698,12 @@ class StlContainerView< ::std::tr1::tuple<ElementPointer, Size> > {
...
@@ -710,10 +698,12 @@ class StlContainerView< ::std::tr1::tuple<ElementPointer, Size> > {
static
const_reference
ConstReference
(
static
const_reference
ConstReference
(
const
::
std
::
tr1
::
tuple
<
ElementPointer
,
Size
>&
array
)
{
const
::
std
::
tr1
::
tuple
<
ElementPointer
,
Size
>&
array
)
{
return
type
(
array
,
kReference
);
using
::
std
::
tr1
::
get
;
return
type
(
get
<
0
>
(
array
),
get
<
1
>
(
array
),
kReference
);
}
}
static
type
Copy
(
const
::
std
::
tr1
::
tuple
<
ElementPointer
,
Size
>&
array
)
{
static
type
Copy
(
const
::
std
::
tr1
::
tuple
<
ElementPointer
,
Size
>&
array
)
{
return
type
(
array
,
kCopy
);
using
::
std
::
tr1
::
get
;
return
type
(
get
<
0
>
(
array
),
get
<
1
>
(
array
),
kCopy
);
}
}
};
};
...
...
test/gmock-internal-utils_test.cc
View file @
4bd79e4f
...
@@ -815,34 +815,19 @@ TEST(CopyArrayTest, WorksForTwoDimensionalArrays) {
...
@@ -815,34 +815,19 @@ TEST(CopyArrayTest, WorksForTwoDimensionalArrays) {
// Tests NativeArray.
// Tests NativeArray.
TEST
(
NativeArrayTest
,
ConstructorFromArray
Reference
Works
)
{
TEST
(
NativeArrayTest
,
ConstructorFromArrayWorks
)
{
const
int
a
[
3
]
=
{
0
,
1
,
2
};
const
int
a
[
3
]
=
{
0
,
1
,
2
};
NativeArray
<
int
>
na
(
a
,
kReference
);
NativeArray
<
int
>
na
(
a
,
3
,
kReference
);
EXPECT_EQ
(
3
,
na
.
size
());
EXPECT_EQ
(
3
,
na
.
size
());
EXPECT_EQ
(
a
,
na
.
begin
());
EXPECT_EQ
(
a
,
na
.
begin
());
}
}
TEST
(
NativeArrayTest
,
ConstructorFromTupleWorks
)
{
int
a
[
3
]
=
{
0
,
1
,
2
};
int
*
const
p
=
a
;
// Tests with a plain pointer.
NativeArray
<
int
>
na
(
make_tuple
(
p
,
3U
),
kReference
);
EXPECT_EQ
(
a
,
na
.
begin
());
const
linked_ptr
<
char
>
b
(
new
char
);
*
b
=
'a'
;
// Tests with a smart pointer.
NativeArray
<
char
>
nb
(
make_tuple
(
b
,
1
),
kCopy
);
EXPECT_NE
(
b
.
get
(),
nb
.
begin
());
EXPECT_EQ
(
'a'
,
nb
.
begin
()[
0
]);
}
TEST
(
NativeArrayTest
,
CreatesAndDeletesCopyOfArrayWhenAskedTo
)
{
TEST
(
NativeArrayTest
,
CreatesAndDeletesCopyOfArrayWhenAskedTo
)
{
typedef
int
Array
[
2
];
typedef
int
Array
[
2
];
Array
*
a
=
new
Array
[
1
];
Array
*
a
=
new
Array
[
1
];
(
*
a
)[
0
]
=
0
;
(
*
a
)[
0
]
=
0
;
(
*
a
)[
1
]
=
1
;
(
*
a
)[
1
]
=
1
;
NativeArray
<
int
>
na
(
*
a
,
kCopy
);
NativeArray
<
int
>
na
(
*
a
,
2
,
kCopy
);
EXPECT_NE
(
*
a
,
na
.
begin
());
EXPECT_NE
(
*
a
,
na
.
begin
());
delete
[]
a
;
delete
[]
a
;
EXPECT_EQ
(
0
,
na
.
begin
()[
0
]);
EXPECT_EQ
(
0
,
na
.
begin
()[
0
]);
...
@@ -861,8 +846,8 @@ TEST(NativeArrayTest, TypeMembersAreCorrect) {
...
@@ -861,8 +846,8 @@ TEST(NativeArrayTest, TypeMembersAreCorrect) {
}
}
TEST
(
NativeArrayTest
,
MethodsWork
)
{
TEST
(
NativeArrayTest
,
MethodsWork
)
{
const
int
a
[]
=
{
0
,
1
,
2
};
const
int
a
[
3
]
=
{
0
,
1
,
2
};
NativeArray
<
int
>
na
(
a
,
kCopy
);
NativeArray
<
int
>
na
(
a
,
3
,
kCopy
);
ASSERT_EQ
(
3
,
na
.
size
());
ASSERT_EQ
(
3
,
na
.
size
());
EXPECT_EQ
(
3
,
na
.
end
()
-
na
.
begin
());
EXPECT_EQ
(
3
,
na
.
end
()
-
na
.
begin
());
...
@@ -877,18 +862,18 @@ TEST(NativeArrayTest, MethodsWork) {
...
@@ -877,18 +862,18 @@ TEST(NativeArrayTest, MethodsWork) {
EXPECT_THAT
(
na
,
Eq
(
na
));
EXPECT_THAT
(
na
,
Eq
(
na
));
NativeArray
<
int
>
na2
(
a
,
kReference
);
NativeArray
<
int
>
na2
(
a
,
3
,
kReference
);
EXPECT_THAT
(
na
,
Eq
(
na2
));
EXPECT_THAT
(
na
,
Eq
(
na2
));
const
int
b1
[]
=
{
0
,
1
,
1
};
const
int
b1
[
3
]
=
{
0
,
1
,
1
};
const
int
b2
[]
=
{
0
,
1
,
2
,
3
};
const
int
b2
[
4
]
=
{
0
,
1
,
2
,
3
};
EXPECT_THAT
(
na
,
Not
(
Eq
(
NativeArray
<
int
>
(
b1
,
kReference
))));
EXPECT_THAT
(
na
,
Not
(
Eq
(
NativeArray
<
int
>
(
b1
,
3
,
kReference
))));
EXPECT_THAT
(
na
,
Not
(
Eq
(
NativeArray
<
int
>
(
b2
,
kCopy
))));
EXPECT_THAT
(
na
,
Not
(
Eq
(
NativeArray
<
int
>
(
b2
,
4
,
kCopy
))));
}
}
TEST
(
NativeArrayTest
,
WorksForTwoDimensionalArray
)
{
TEST
(
NativeArrayTest
,
WorksForTwoDimensionalArray
)
{
const
char
a
[
2
][
3
]
=
{
"hi"
,
"lo"
};
const
char
a
[
2
][
3
]
=
{
"hi"
,
"lo"
};
NativeArray
<
char
[
3
]
>
na
(
a
,
kReference
);
NativeArray
<
char
[
3
]
>
na
(
a
,
2
,
kReference
);
ASSERT_EQ
(
2
,
na
.
size
());
ASSERT_EQ
(
2
,
na
.
size
());
EXPECT_EQ
(
a
,
na
.
begin
());
EXPECT_EQ
(
a
,
na
.
begin
());
}
}
...
...
test/gmock-nice-strict_test.cc
View file @
4bd79e4f
...
@@ -36,6 +36,13 @@
...
@@ -36,6 +36,13 @@
#include <gtest/gtest.h>
#include <gtest/gtest.h>
#include <gtest/gtest-spi.h>
#include <gtest/gtest-spi.h>
// This must not be defined inside the ::testing namespace, or it will
// clash with ::testing::Mock.
class
Mock
{
public:
MOCK_METHOD0
(
DoThis
,
void
());
};
namespace
testing
{
namespace
testing
{
namespace
gmock_nice_strict_test
{
namespace
gmock_nice_strict_test
{
...
@@ -166,6 +173,17 @@ TEST(NiceMockTest, NonDefaultConstructor10) {
...
@@ -166,6 +173,17 @@ TEST(NiceMockTest, NonDefaultConstructor10) {
nice_bar
.
That
(
5
,
true
);
nice_bar
.
That
(
5
,
true
);
}
}
// Tests that NiceMock<Mock> compiles where Mock is a user-defined
// class (as opposed to ::testing::Mock). We had to workaround an
// MSVC 8.0 bug that caused the symbol Mock used in the definition of
// NiceMock to be looked up in the wrong context, and this test
// ensures that our fix works.
TEST
(
NiceMockTest
,
AcceptsClassNamedMock
)
{
NiceMock
<
::
Mock
>
nice
;
EXPECT_CALL
(
nice
,
DoThis
());
nice
.
DoThis
();
}
// Tests that a strict mock allows expected calls.
// Tests that a strict mock allows expected calls.
TEST
(
StrictMockTest
,
AllowsExpectedCall
)
{
TEST
(
StrictMockTest
,
AllowsExpectedCall
)
{
StrictMock
<
MockFoo
>
strict_foo
;
StrictMock
<
MockFoo
>
strict_foo
;
...
@@ -224,5 +242,16 @@ TEST(StrictMockTest, NonDefaultConstructor10) {
...
@@ -224,5 +242,16 @@ TEST(StrictMockTest, NonDefaultConstructor10) {
"Uninteresting mock function call"
);
"Uninteresting mock function call"
);
}
}
// Tests that StrictMock<Mock> compiles where Mock is a user-defined
// class (as opposed to ::testing::Mock). We had to workaround an
// MSVC 8.0 bug that caused the symbol Mock used in the definition of
// StrictMock to be looked up in the wrong context, and this test
// ensures that our fix works.
TEST
(
StrictMockTest
,
AcceptsClassNamedMock
)
{
StrictMock
<
::
Mock
>
nice
;
EXPECT_CALL
(
nice
,
DoThis
());
nice
.
DoThis
();
}
}
// namespace gmock_nice_strict_test
}
// namespace gmock_nice_strict_test
}
// namespace testing
}
// namespace testing
test/gmock-printers_test.cc
View file @
4bd79e4f
...
@@ -790,14 +790,14 @@ TEST(PrintStlContainerTest, NestedContainer) {
...
@@ -790,14 +790,14 @@ TEST(PrintStlContainerTest, NestedContainer) {
}
}
TEST
(
PrintStlContainerTest
,
OneDimensionalNativeArray
)
{
TEST
(
PrintStlContainerTest
,
OneDimensionalNativeArray
)
{
const
int
a
[]
=
{
1
,
2
,
3
};
const
int
a
[
3
]
=
{
1
,
2
,
3
};
NativeArray
<
int
>
b
(
a
,
kReference
);
NativeArray
<
int
>
b
(
a
,
3
,
kReference
);
EXPECT_EQ
(
"{ 1, 2, 3 }"
,
Print
(
b
));
EXPECT_EQ
(
"{ 1, 2, 3 }"
,
Print
(
b
));
}
}
TEST
(
PrintStlContainerTest
,
TwoDimensionalNativeArray
)
{
TEST
(
PrintStlContainerTest
,
TwoDimensionalNativeArray
)
{
const
int
a
[][
3
]
=
{
{
1
,
2
,
3
},
{
4
,
5
,
6
}
};
const
int
a
[
2
][
3
]
=
{
{
1
,
2
,
3
},
{
4
,
5
,
6
}
};
NativeArray
<
int
[
3
]
>
b
(
a
,
kReference
);
NativeArray
<
int
[
3
]
>
b
(
a
,
2
,
kReference
);
EXPECT_EQ
(
"{ { 1, 2, 3 }, { 4, 5, 6 } }"
,
Print
(
b
));
EXPECT_EQ
(
"{ { 1, 2, 3 }, { 4, 5, 6 } }"
,
Print
(
b
));
}
}
...
...
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