31#include "gmock/gmock.h"
32#include "gmock/internal/gmock-port.h"
36GMOCK_DEFINE_bool_(catch_leaked_mocks,
true,
37 "true if and only if Google Mock should report leaked "
38 "mock objects as failures.");
40GMOCK_DEFINE_string_(verbose, internal::kWarningVerbosity,
41 "Controls how verbose Google Mock's output is."
43 " info - prints all messages.\n"
44 " warning - prints warnings and errors.\n"
45 " error - prints errors only.");
47GMOCK_DEFINE_int32_(default_mock_behavior, 1,
48 "Controls the default behavior of mocks."
50 " 0 - by default, mocks act as NiceMocks.\n"
51 " 1 - by default, mocks act as NaggyMocks.\n"
52 " 2 - by default, mocks act as StrictMocks.");
61static const char* ParseGoogleMockFlagValue(
const char* str,
65 if (str ==
nullptr || flag ==
nullptr)
return nullptr;
68 const std::string flag_str = std::string(
"--gmock_") + flag;
69 const size_t flag_len = flag_str.length();
70 if (strncmp(str, flag_str.c_str(), flag_len) != 0)
return nullptr;
73 const char* flag_end = str + flag_len;
76 if (def_optional && (flag_end[0] ==
'\0')) {
83 if (flag_end[0] !=
'=')
return nullptr;
94static bool ParseGoogleMockBoolFlag(
const char* str,
const char* flag,
97 const char*
const value_str = ParseGoogleMockFlagValue(str, flag,
true);
100 if (value_str ==
nullptr)
return false;
103 *value = !(*value_str ==
'0' || *value_str ==
'f' || *value_str ==
'F');
112template <
typename String>
113static bool ParseGoogleMockStringFlag(
const char* str,
const char* flag,
116 const char*
const value_str = ParseGoogleMockFlagValue(str, flag,
false);
119 if (value_str ==
nullptr)
return false;
126static bool ParseGoogleMockIntFlag(
const char* str,
const char* flag,
129 const char*
const value_str = ParseGoogleMockFlagValue(str, flag,
true);
132 if (value_str ==
nullptr)
return false;
135 return ParseInt32(Message() <<
"The value of flag --" << flag,
143template <
typename CharType>
144void InitGoogleMockImpl(
int* argc, CharType** argv) {
147 InitGoogleTest(argc, argv);
148 if (*argc <= 0)
return;
150 for (
int i = 1; i != *argc; i++) {
151 const std::string arg_string = StreamableToString(argv[i]);
152 const char*
const arg = arg_string.c_str();
155 if (ParseGoogleMockBoolFlag(arg,
"catch_leaked_mocks",
156 &GMOCK_FLAG(catch_leaked_mocks)) ||
157 ParseGoogleMockStringFlag(arg,
"verbose", &GMOCK_FLAG(verbose)) ||
158 ParseGoogleMockIntFlag(arg,
"default_mock_behavior",
159 &GMOCK_FLAG(default_mock_behavior))) {
164 for (
int j = i; j != *argc; j++) {
165 argv[j] = argv[j + 1];
191GTEST_API_
void InitGoogleMock(
int* argc,
char** argv) {
192 internal::InitGoogleMockImpl(argc, argv);
197GTEST_API_
void InitGoogleMock(
int* argc,
wchar_t** argv) {
198 internal::InitGoogleMockImpl(argc, argv);
203GTEST_API_
void InitGoogleMock() {
206 const auto arg0 =
"dummy";
207 char* argv0 =
const_cast<char*
>(arg0);
208 char** argv = &argv0;
210 internal::InitGoogleMockImpl(&argc, argv);