1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright 2008, Google Inc.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// All rights reserved.
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Redistribution and use in source and binary forms, with or without
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// modification, are permitted provided that the following conditions are
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// met:
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     * Redistributions of source code must retain the above copyright
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// notice, this list of conditions and the following disclaimer.
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     * Redistributions in binary form must reproduce the above
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// copyright notice, this list of conditions and the following disclaimer
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// in the documentation and/or other materials provided with the
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// distribution.
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     * Neither the name of Google Inc. nor the names of its
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// contributors may be used to endorse or promote products derived from
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// this software without specific prior written permission.
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Author: wan@google.com (Zhanyong Wan)
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Google Mock - a framework for writing C++ mock classes.
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This file tests code in gmock.cc.
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "gmock/gmock.h"
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "gtest/gtest.h"
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::GMOCK_FLAG(verbose);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::InitGoogleMock;
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::internal::g_init_gtest_count;
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Verifies that calling InitGoogleMock() on argv results in new_argv,
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// and the gmock_verbose flag's value is set to expected_gmock_verbose.
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename Char, int M, int N>
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid TestInitGoogleMock(const Char* (&argv)[M], const Char* (&new_argv)[N],
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        const ::std::string& expected_gmock_verbose) {
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const ::std::string old_verbose = GMOCK_FLAG(verbose);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int argc = M;
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  InitGoogleMock(&argc, const_cast<Char**>(argv));
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(N, argc) << "The new argv has wrong number of elements.";
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (int i = 0; i < N; i++) {
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ(new_argv[i], argv[i]);
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(expected_gmock_verbose, GMOCK_FLAG(verbose).c_str());
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GMOCK_FLAG(verbose) = old_verbose;  // Restores the gmock_verbose flag.
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(InitGoogleMockTest, ParsesInvalidCommandLine) {
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* argv[] = {
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* new_argv[] = {
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(InitGoogleMockTest, ParsesEmptyCommandLine) {
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* argv[] = {
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* new_argv[] = {
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(InitGoogleMockTest, ParsesSingleFlag) {
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* argv[] = {
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--gmock_verbose=info",
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* new_argv[] = {
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, "info");
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(InitGoogleMockTest, ParsesUnrecognizedFlag) {
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* argv[] = {
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--non_gmock_flag=blah",
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* new_argv[] = {
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--non_gmock_flag=blah",
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(InitGoogleMockTest, ParsesGoogleMockFlagAndUnrecognizedFlag) {
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* argv[] = {
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--non_gmock_flag=blah",
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--gmock_verbose=error",
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* new_argv[] = {
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--non_gmock_flag=blah",
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, "error");
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(InitGoogleMockTest, CallsInitGoogleTest) {
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int old_init_gtest_count = g_init_gtest_count;
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* argv[] = {
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--non_gmock_flag=blah",
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--gmock_verbose=error",
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* new_argv[] = {
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "foo.exe",
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "--non_gmock_flag=blah",
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, "error");
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(old_init_gtest_count + 1, g_init_gtest_count);
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(WideInitGoogleMockTest, ParsesInvalidCommandLine) {
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* argv[] = {
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* new_argv[] = {
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(WideInitGoogleMockTest, ParsesEmptyCommandLine) {
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* argv[] = {
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* new_argv[] = {
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(WideInitGoogleMockTest, ParsesSingleFlag) {
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* argv[] = {
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--gmock_verbose=info",
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* new_argv[] = {
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, "info");
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(WideInitGoogleMockTest, ParsesUnrecognizedFlag) {
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* argv[] = {
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--non_gmock_flag=blah",
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* new_argv[] = {
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--non_gmock_flag=blah",
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(WideInitGoogleMockTest, ParsesGoogleMockFlagAndUnrecognizedFlag) {
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* argv[] = {
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--non_gmock_flag=blah",
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--gmock_verbose=error",
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* new_argv[] = {
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--non_gmock_flag=blah",
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, "error");
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(WideInitGoogleMockTest, CallsInitGoogleTest) {
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int old_init_gtest_count = g_init_gtest_count;
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* argv[] = {
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--non_gmock_flag=blah",
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--gmock_verbose=error",
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t* new_argv[] = {
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"foo.exe",
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    L"--non_gmock_flag=blah",
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestInitGoogleMock(argv, new_argv, "error");
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(old_init_gtest_count + 1, g_init_gtest_count);
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Makes sure Google Mock flags can be accessed in code.
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FlagTest, IsAccessibleInCode) {
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool dummy = testing::GMOCK_FLAG(catch_leaked_mocks) &&
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      testing::GMOCK_FLAG(verbose) == "";
254dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  (void)dummy;  // Avoids the "unused local variable" warning.
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
256