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
6e1970e2
Commit
6e1970e2
authored
Aug 10, 2017
by
Alyssa Wilk
Browse files
Adding a flag option to change the default mock type
parent
b322d1d9
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
102 additions
and
3 deletions
+102
-3
googlemock/include/gmock/gmock-spec-builders.h
googlemock/include/gmock/gmock-spec-builders.h
+0
-1
googlemock/include/gmock/gmock.h
googlemock/include/gmock/gmock.h
+1
-0
googlemock/src/gmock-spec-builders.cc
googlemock/src/gmock-spec-builders.cc
+2
-1
googlemock/src/gmock.cc
googlemock/src/gmock.cc
+23
-1
googlemock/test/gmock-spec-builders_test.cc
googlemock/test/gmock-spec-builders_test.cc
+35
-0
googlemock/test/gmock_test.cc
googlemock/test/gmock_test.cc
+41
-0
No files found.
googlemock/include/gmock/gmock-spec-builders.h
View file @
6e1970e2
...
...
@@ -363,7 +363,6 @@ enum CallReaction {
kAllow
,
kWarn
,
kFail
,
kDefault
=
kWarn
// By default, warn about uninteresting calls.
};
}
// namespace internal
...
...
googlemock/include/gmock/gmock.h
View file @
6e1970e2
...
...
@@ -71,6 +71,7 @@ namespace testing {
// Declares Google Mock flags that we want a user to use programmatically.
GMOCK_DECLARE_bool_
(
catch_leaked_mocks
);
GMOCK_DECLARE_string_
(
verbose
);
GMOCK_DECLARE_int32_
(
default_mock_behavior
);
// Initializes Google Mock. This must be called before running the
// tests. In particular, it parses the command line for the flags
...
...
googlemock/src/gmock-spec-builders.cc
View file @
6e1970e2
...
...
@@ -648,7 +648,8 @@ internal::CallReaction Mock::GetReactionOnUninterestingCalls(
GTEST_LOCK_EXCLUDED_
(
internal
::
g_gmock_mutex
)
{
internal
::
MutexLock
l
(
&
internal
::
g_gmock_mutex
);
return
(
g_uninteresting_call_reaction
.
count
(
mock_obj
)
==
0
)
?
internal
::
kDefault
:
g_uninteresting_call_reaction
[
mock_obj
];
static_cast
<
internal
::
CallReaction
>
(
GMOCK_FLAG
(
default_mock_behavior
))
:
g_uninteresting_call_reaction
[
mock_obj
];
}
// Tells Google Mock to ignore mock_obj when checking for leaked mock
...
...
googlemock/src/gmock.cc
View file @
6e1970e2
...
...
@@ -48,6 +48,13 @@ GMOCK_DEFINE_string_(verbose, internal::kWarningVerbosity,
" warning - prints warnings and errors.
\n
"
" error - prints errors only."
);
GMOCK_DEFINE_int32_
(
default_mock_behavior
,
1
,
"Controls the default behavior of mocks."
" Valid values:
\n
"
" 0 - by default, mocks act as NiceMocks.
\n
"
" 1 - by default, mocks act as NaggyMocks.
\n
"
" 2 - by default, mocks act as StrictMocks."
);
namespace
internal
{
// Parses a string as a command line flag. The string should have the
...
...
@@ -120,6 +127,19 @@ static bool ParseGoogleMockStringFlag(const char* str, const char* flag,
return
true
;
}
static
bool
ParseGoogleMockIntFlag
(
const
char
*
str
,
const
char
*
flag
,
int
*
value
)
{
// Gets the value of the flag as a string.
const
char
*
const
value_str
=
ParseGoogleMockFlagValue
(
str
,
flag
,
true
);
// Aborts if the parsing failed.
if
(
value_str
==
NULL
)
return
false
;
// Sets *value to the value of the flag.
*
value
=
atoi
(
value_str
);
return
true
;
}
// The internal implementation of InitGoogleMock().
//
// The type parameter CharType can be instantiated to either char or
...
...
@@ -138,7 +158,9 @@ void InitGoogleMockImpl(int* argc, CharType** argv) {
// Do we see a Google Mock flag?
if
(
ParseGoogleMockBoolFlag
(
arg
,
"catch_leaked_mocks"
,
&
GMOCK_FLAG
(
catch_leaked_mocks
))
||
ParseGoogleMockStringFlag
(
arg
,
"verbose"
,
&
GMOCK_FLAG
(
verbose
)))
{
ParseGoogleMockStringFlag
(
arg
,
"verbose"
,
&
GMOCK_FLAG
(
verbose
))
||
ParseGoogleMockIntFlag
(
arg
,
"default_mock_behavior"
,
&
GMOCK_FLAG
(
default_mock_behavior
)))
{
// Yes. Shift the remainder of the argv list left by one. Note
// that argv has (*argc + 1) elements, the last one always being
// NULL. The following loop moves the trailing NULL element as
...
...
googlemock/test/gmock-spec-builders_test.cc
View file @
6e1970e2
...
...
@@ -93,8 +93,11 @@ using testing::Sequence;
using
testing
::
SetArgPointee
;
using
testing
::
internal
::
ExpectationTester
;
using
testing
::
internal
::
FormatFileLocation
;
using
testing
::
internal
::
kAllow
;
using
testing
::
internal
::
kErrorVerbosity
;
using
testing
::
internal
::
kFail
;
using
testing
::
internal
::
kInfoVerbosity
;
using
testing
::
internal
::
kWarn
;
using
testing
::
internal
::
kWarningVerbosity
;
using
testing
::
internal
::
linked_ptr
;
...
...
@@ -691,6 +694,38 @@ TEST(ExpectCallSyntaxTest, WarnsOnTooFewActions) {
b
.
DoB
();
}
TEST
(
ExpectCallSyntaxTest
,
WarningIsErrorWithFlag
)
{
int
original_behavior
=
testing
::
GMOCK_FLAG
(
default_mock_behavior
);
testing
::
GMOCK_FLAG
(
default_mock_behavior
)
=
kAllow
;
CaptureStdout
();
{
MockA
a
;
a
.
DoA
(
0
);
}
std
::
string
output
=
GetCapturedStdout
();
EXPECT_TRUE
(
output
.
empty
())
<<
output
;
testing
::
GMOCK_FLAG
(
default_mock_behavior
)
=
kWarn
;
CaptureStdout
();
{
MockA
a
;
a
.
DoA
(
0
);
}
std
::
string
warning_output
=
GetCapturedStdout
();
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"GMOCK WARNING"
,
warning_output
);
EXPECT_PRED_FORMAT2
(
IsSubstring
,
"Uninteresting mock function call"
,
warning_output
);
testing
::
GMOCK_FLAG
(
default_mock_behavior
)
=
kFail
;
EXPECT_NONFATAL_FAILURE
({
MockA
a
;
a
.
DoA
(
0
);
},
"Uninteresting mock function call"
);
testing
::
GMOCK_FLAG
(
default_mock_behavior
)
=
original_behavior
;
}
#endif // GTEST_HAS_STREAM_REDIRECTION
// Tests the semantics of ON_CALL().
...
...
googlemock/test/gmock_test.cc
View file @
6e1970e2
...
...
@@ -40,6 +40,7 @@
#if !defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
using
testing
::
GMOCK_FLAG
(
default_mock_behavior
);
using
testing
::
GMOCK_FLAG
(
verbose
);
using
testing
::
InitGoogleMock
;
...
...
@@ -103,6 +104,26 @@ TEST(InitGoogleMockTest, ParsesSingleFlag) {
TestInitGoogleMock
(
argv
,
new_argv
,
"info"
);
}
TEST
(
InitGoogleMockTest
,
ParsesMultipleFlags
)
{
int
old_default_behavior
=
GMOCK_FLAG
(
default_mock_behavior
);
const
wchar_t
*
argv
[]
=
{
L"foo.exe"
,
L"--gmock_verbose=info"
,
L"--gmock_default_mock_behavior=2"
,
NULL
};
const
wchar_t
*
new_argv
[]
=
{
L"foo.exe"
,
NULL
};
TestInitGoogleMock
(
argv
,
new_argv
,
"info"
);
EXPECT_EQ
(
2
,
GMOCK_FLAG
(
default_mock_behavior
));
EXPECT_NE
(
2
,
old_default_behavior
);
GMOCK_FLAG
(
default_mock_behavior
)
=
old_default_behavior
;
}
TEST
(
InitGoogleMockTest
,
ParsesUnrecognizedFlag
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
...
...
@@ -177,6 +198,26 @@ TEST(WideInitGoogleMockTest, ParsesSingleFlag) {
TestInitGoogleMock
(
argv
,
new_argv
,
"info"
);
}
TEST
(
WideInitGoogleMockTest
,
ParsesMultipleFlags
)
{
int
old_default_behavior
=
GMOCK_FLAG
(
default_mock_behavior
);
const
wchar_t
*
argv
[]
=
{
L"foo.exe"
,
L"--gmock_verbose=info"
,
L"--gmock_default_mock_behavior=2"
,
NULL
};
const
wchar_t
*
new_argv
[]
=
{
L"foo.exe"
,
NULL
};
TestInitGoogleMock
(
argv
,
new_argv
,
"info"
);
EXPECT_EQ
(
2
,
GMOCK_FLAG
(
default_mock_behavior
));
EXPECT_NE
(
2
,
old_default_behavior
);
GMOCK_FLAG
(
default_mock_behavior
)
=
old_default_behavior
;
}
TEST
(
WideInitGoogleMockTest
,
ParsesUnrecognizedFlag
)
{
const
wchar_t
*
argv
[]
=
{
L"foo.exe"
,
...
...
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