30#include "gmock/gmock.h"
32#include "gmock/internal/gmock-port.h"
34GMOCK_DEFINE_bool_(catch_leaked_mocks,
true,
35 "true if and only if Google Mock should report leaked "
36 "mock objects as failures.");
38GMOCK_DEFINE_string_(verbose, testing::internal::kWarningVerbosity,
39 "Controls how verbose Google Mock's output is."
41 " info - prints all messages.\n"
42 " warning - prints warnings and errors.\n"
43 " error - prints errors only.");
45GMOCK_DEFINE_int32_(default_mock_behavior, 1,
46 "Controls the default behavior of mocks."
48 " 0 - by default, mocks act as NiceMocks.\n"
49 " 1 - by default, mocks act as NaggyMocks.\n"
50 " 2 - by default, mocks act as StrictMocks.");
60static const char* ParseGoogleMockFlagValue(
const char* str,
61 const char* flag_name,
64 if (str ==
nullptr || flag_name ==
nullptr)
return nullptr;
67 const std::string flag_name_str = std::string(
"--gmock_") + flag_name;
68 const size_t flag_name_len = flag_name_str.length();
69 if (strncmp(str, flag_name_str.c_str(), flag_name_len) != 0)
return nullptr;
72 const char* flag_end = str + flag_name_len;
75 if (def_optional && (flag_end[0] ==
'\0')) {
82 if (flag_end[0] !=
'=')
return nullptr;
93static bool ParseGoogleMockFlag(
const char* str,
const char* flag_name,
96 const char*
const value_str = ParseGoogleMockFlagValue(str, flag_name,
true);
99 if (value_str ==
nullptr)
return false;
102 *value = !(*value_str ==
'0' || *value_str ==
'f' || *value_str ==
'F');
111template <
typename String>
112static bool ParseGoogleMockFlag(
const char* str,
const char* flag_name,
115 const char*
const value_str = ParseGoogleMockFlagValue(str, flag_name,
false);
118 if (value_str ==
nullptr)
return false;
125static bool ParseGoogleMockFlag(
const char* str,
const char* flag_name,
128 const char*
const value_str = ParseGoogleMockFlagValue(str, flag_name,
true);
131 if (value_str ==
nullptr)
return false;
134 return ParseInt32(Message() <<
"The value of flag --" << flag_name, value_str,
142template <
typename CharType>
143void InitGoogleMockImpl(
int* argc, CharType** argv) {
146 InitGoogleTest(argc, argv);
147 if (*argc <= 0)
return;
149 for (
int i = 1; i != *argc; i++) {
150 const std::string arg_string = StreamableToString(argv[i]);
151 const char*
const arg = arg_string.c_str();
154 bool found_gmock_flag =
false;
156#define GMOCK_INTERNAL_PARSE_FLAG(flag_name) \
157 if (!found_gmock_flag) { \
158 auto value = GMOCK_FLAG_GET(flag_name); \
159 if (ParseGoogleMockFlag(arg, #flag_name, &value)) { \
160 GMOCK_FLAG_SET(flag_name, value); \
161 found_gmock_flag = true; \
165 GMOCK_INTERNAL_PARSE_FLAG(catch_leaked_mocks)
166 GMOCK_INTERNAL_PARSE_FLAG(verbose)
167 GMOCK_INTERNAL_PARSE_FLAG(default_mock_behavior)
169 if (found_gmock_flag) {
174 for (
int j = i; j != *argc; j++) {
175 argv[j] = argv[j + 1];
201GTEST_API_
void InitGoogleMock(
int* argc,
char** argv) {
202 internal::InitGoogleMockImpl(argc, argv);
207GTEST_API_
void InitGoogleMock(
int* argc,
wchar_t** argv) {
208 internal::InitGoogleMockImpl(argc, argv);
213GTEST_API_
void InitGoogleMock() {
216 const auto arg0 =
"dummy";
217 char* argv0 =
const_cast<char*
>(arg0);
218 char** argv = &argv0;
220 internal::InitGoogleMockImpl(&argc, argv);