1*481dde66SAndroid Build Coastguard Worker // Copyright 2008, Google Inc.
2*481dde66SAndroid Build Coastguard Worker // All rights reserved.
3*481dde66SAndroid Build Coastguard Worker //
4*481dde66SAndroid Build Coastguard Worker // Redistribution and use in source and binary forms, with or without
5*481dde66SAndroid Build Coastguard Worker // modification, are permitted provided that the following conditions are
6*481dde66SAndroid Build Coastguard Worker // met:
7*481dde66SAndroid Build Coastguard Worker //
8*481dde66SAndroid Build Coastguard Worker // * Redistributions of source code must retain the above copyright
9*481dde66SAndroid Build Coastguard Worker // notice, this list of conditions and the following disclaimer.
10*481dde66SAndroid Build Coastguard Worker // * Redistributions in binary form must reproduce the above
11*481dde66SAndroid Build Coastguard Worker // copyright notice, this list of conditions and the following disclaimer
12*481dde66SAndroid Build Coastguard Worker // in the documentation and/or other materials provided with the
13*481dde66SAndroid Build Coastguard Worker // distribution.
14*481dde66SAndroid Build Coastguard Worker // * Neither the name of Google Inc. nor the names of its
15*481dde66SAndroid Build Coastguard Worker // contributors may be used to endorse or promote products derived from
16*481dde66SAndroid Build Coastguard Worker // this software without specific prior written permission.
17*481dde66SAndroid Build Coastguard Worker //
18*481dde66SAndroid Build Coastguard Worker // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19*481dde66SAndroid Build Coastguard Worker // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20*481dde66SAndroid Build Coastguard Worker // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21*481dde66SAndroid Build Coastguard Worker // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22*481dde66SAndroid Build Coastguard Worker // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23*481dde66SAndroid Build Coastguard Worker // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24*481dde66SAndroid Build Coastguard Worker // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25*481dde66SAndroid Build Coastguard Worker // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26*481dde66SAndroid Build Coastguard Worker // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27*481dde66SAndroid Build Coastguard Worker // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28*481dde66SAndroid Build Coastguard Worker // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*481dde66SAndroid Build Coastguard Worker
30*481dde66SAndroid Build Coastguard Worker // Google Mock - a framework for writing C++ mock classes.
31*481dde66SAndroid Build Coastguard Worker //
32*481dde66SAndroid Build Coastguard Worker // This file tests code in gmock.cc.
33*481dde66SAndroid Build Coastguard Worker
34*481dde66SAndroid Build Coastguard Worker #include "gmock/gmock.h"
35*481dde66SAndroid Build Coastguard Worker
36*481dde66SAndroid Build Coastguard Worker #include <string>
37*481dde66SAndroid Build Coastguard Worker
38*481dde66SAndroid Build Coastguard Worker #include "gtest/gtest.h"
39*481dde66SAndroid Build Coastguard Worker #include "gtest/internal/custom/gtest.h"
40*481dde66SAndroid Build Coastguard Worker
41*481dde66SAndroid Build Coastguard Worker #if !defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
42*481dde66SAndroid Build Coastguard Worker
43*481dde66SAndroid Build Coastguard Worker using testing::InitGoogleMock;
44*481dde66SAndroid Build Coastguard Worker
45*481dde66SAndroid Build Coastguard Worker // Verifies that calling InitGoogleMock() on argv results in new_argv,
46*481dde66SAndroid Build Coastguard Worker // and the gmock_verbose flag's value is set to expected_gmock_verbose.
47*481dde66SAndroid Build Coastguard Worker template <typename Char, int M, int N>
TestInitGoogleMock(const Char * (& argv)[M],const Char * (& new_argv)[N],const::std::string & expected_gmock_verbose)48*481dde66SAndroid Build Coastguard Worker void TestInitGoogleMock(const Char* (&argv)[M], const Char* (&new_argv)[N],
49*481dde66SAndroid Build Coastguard Worker const ::std::string& expected_gmock_verbose) {
50*481dde66SAndroid Build Coastguard Worker const ::std::string old_verbose = GMOCK_FLAG_GET(verbose);
51*481dde66SAndroid Build Coastguard Worker
52*481dde66SAndroid Build Coastguard Worker int argc = M - 1;
53*481dde66SAndroid Build Coastguard Worker InitGoogleMock(&argc, const_cast<Char**>(argv));
54*481dde66SAndroid Build Coastguard Worker ASSERT_EQ(N - 1, argc) << "The new argv has wrong number of elements.";
55*481dde66SAndroid Build Coastguard Worker
56*481dde66SAndroid Build Coastguard Worker for (int i = 0; i < N; i++) {
57*481dde66SAndroid Build Coastguard Worker EXPECT_STREQ(new_argv[i], argv[i]);
58*481dde66SAndroid Build Coastguard Worker }
59*481dde66SAndroid Build Coastguard Worker
60*481dde66SAndroid Build Coastguard Worker EXPECT_EQ(expected_gmock_verbose, GMOCK_FLAG_GET(verbose));
61*481dde66SAndroid Build Coastguard Worker GMOCK_FLAG_SET(verbose, old_verbose); // Restores the gmock_verbose flag.
62*481dde66SAndroid Build Coastguard Worker }
63*481dde66SAndroid Build Coastguard Worker
TEST(InitGoogleMockTest,ParsesInvalidCommandLine)64*481dde66SAndroid Build Coastguard Worker TEST(InitGoogleMockTest, ParsesInvalidCommandLine) {
65*481dde66SAndroid Build Coastguard Worker const char* argv[] = {nullptr};
66*481dde66SAndroid Build Coastguard Worker
67*481dde66SAndroid Build Coastguard Worker const char* new_argv[] = {nullptr};
68*481dde66SAndroid Build Coastguard Worker
69*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, GMOCK_FLAG_GET(verbose));
70*481dde66SAndroid Build Coastguard Worker }
71*481dde66SAndroid Build Coastguard Worker
TEST(InitGoogleMockTest,ParsesEmptyCommandLine)72*481dde66SAndroid Build Coastguard Worker TEST(InitGoogleMockTest, ParsesEmptyCommandLine) {
73*481dde66SAndroid Build Coastguard Worker const char* argv[] = {"foo.exe", nullptr};
74*481dde66SAndroid Build Coastguard Worker
75*481dde66SAndroid Build Coastguard Worker const char* new_argv[] = {"foo.exe", nullptr};
76*481dde66SAndroid Build Coastguard Worker
77*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, GMOCK_FLAG_GET(verbose));
78*481dde66SAndroid Build Coastguard Worker }
79*481dde66SAndroid Build Coastguard Worker
TEST(InitGoogleMockTest,ParsesSingleFlag)80*481dde66SAndroid Build Coastguard Worker TEST(InitGoogleMockTest, ParsesSingleFlag) {
81*481dde66SAndroid Build Coastguard Worker const char* argv[] = {"foo.exe", "--gmock_verbose=info", nullptr};
82*481dde66SAndroid Build Coastguard Worker
83*481dde66SAndroid Build Coastguard Worker const char* new_argv[] = {"foo.exe", nullptr};
84*481dde66SAndroid Build Coastguard Worker
85*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, "info");
86*481dde66SAndroid Build Coastguard Worker }
87*481dde66SAndroid Build Coastguard Worker
TEST(InitGoogleMockTest,ParsesMultipleFlags)88*481dde66SAndroid Build Coastguard Worker TEST(InitGoogleMockTest, ParsesMultipleFlags) {
89*481dde66SAndroid Build Coastguard Worker int old_default_behavior = GMOCK_FLAG_GET(default_mock_behavior);
90*481dde66SAndroid Build Coastguard Worker const wchar_t* argv[] = {L"foo.exe", L"--gmock_verbose=info",
91*481dde66SAndroid Build Coastguard Worker L"--gmock_default_mock_behavior=2", nullptr};
92*481dde66SAndroid Build Coastguard Worker
93*481dde66SAndroid Build Coastguard Worker const wchar_t* new_argv[] = {L"foo.exe", nullptr};
94*481dde66SAndroid Build Coastguard Worker
95*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, "info");
96*481dde66SAndroid Build Coastguard Worker EXPECT_EQ(2, GMOCK_FLAG_GET(default_mock_behavior));
97*481dde66SAndroid Build Coastguard Worker EXPECT_NE(2, old_default_behavior);
98*481dde66SAndroid Build Coastguard Worker GMOCK_FLAG_SET(default_mock_behavior, old_default_behavior);
99*481dde66SAndroid Build Coastguard Worker }
100*481dde66SAndroid Build Coastguard Worker
TEST(InitGoogleMockTest,ParsesUnrecognizedFlag)101*481dde66SAndroid Build Coastguard Worker TEST(InitGoogleMockTest, ParsesUnrecognizedFlag) {
102*481dde66SAndroid Build Coastguard Worker const char* argv[] = {"foo.exe", "--non_gmock_flag=blah", nullptr};
103*481dde66SAndroid Build Coastguard Worker
104*481dde66SAndroid Build Coastguard Worker const char* new_argv[] = {"foo.exe", "--non_gmock_flag=blah", nullptr};
105*481dde66SAndroid Build Coastguard Worker
106*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, GMOCK_FLAG_GET(verbose));
107*481dde66SAndroid Build Coastguard Worker }
108*481dde66SAndroid Build Coastguard Worker
TEST(InitGoogleMockTest,ParsesGoogleMockFlagAndUnrecognizedFlag)109*481dde66SAndroid Build Coastguard Worker TEST(InitGoogleMockTest, ParsesGoogleMockFlagAndUnrecognizedFlag) {
110*481dde66SAndroid Build Coastguard Worker const char* argv[] = {"foo.exe", "--non_gmock_flag=blah",
111*481dde66SAndroid Build Coastguard Worker "--gmock_verbose=error", nullptr};
112*481dde66SAndroid Build Coastguard Worker
113*481dde66SAndroid Build Coastguard Worker const char* new_argv[] = {"foo.exe", "--non_gmock_flag=blah", nullptr};
114*481dde66SAndroid Build Coastguard Worker
115*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, "error");
116*481dde66SAndroid Build Coastguard Worker }
117*481dde66SAndroid Build Coastguard Worker
TEST(WideInitGoogleMockTest,ParsesInvalidCommandLine)118*481dde66SAndroid Build Coastguard Worker TEST(WideInitGoogleMockTest, ParsesInvalidCommandLine) {
119*481dde66SAndroid Build Coastguard Worker const wchar_t* argv[] = {nullptr};
120*481dde66SAndroid Build Coastguard Worker
121*481dde66SAndroid Build Coastguard Worker const wchar_t* new_argv[] = {nullptr};
122*481dde66SAndroid Build Coastguard Worker
123*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, GMOCK_FLAG_GET(verbose));
124*481dde66SAndroid Build Coastguard Worker }
125*481dde66SAndroid Build Coastguard Worker
TEST(WideInitGoogleMockTest,ParsesEmptyCommandLine)126*481dde66SAndroid Build Coastguard Worker TEST(WideInitGoogleMockTest, ParsesEmptyCommandLine) {
127*481dde66SAndroid Build Coastguard Worker const wchar_t* argv[] = {L"foo.exe", nullptr};
128*481dde66SAndroid Build Coastguard Worker
129*481dde66SAndroid Build Coastguard Worker const wchar_t* new_argv[] = {L"foo.exe", nullptr};
130*481dde66SAndroid Build Coastguard Worker
131*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, GMOCK_FLAG_GET(verbose));
132*481dde66SAndroid Build Coastguard Worker }
133*481dde66SAndroid Build Coastguard Worker
TEST(WideInitGoogleMockTest,ParsesSingleFlag)134*481dde66SAndroid Build Coastguard Worker TEST(WideInitGoogleMockTest, ParsesSingleFlag) {
135*481dde66SAndroid Build Coastguard Worker const wchar_t* argv[] = {L"foo.exe", L"--gmock_verbose=info", nullptr};
136*481dde66SAndroid Build Coastguard Worker
137*481dde66SAndroid Build Coastguard Worker const wchar_t* new_argv[] = {L"foo.exe", nullptr};
138*481dde66SAndroid Build Coastguard Worker
139*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, "info");
140*481dde66SAndroid Build Coastguard Worker }
141*481dde66SAndroid Build Coastguard Worker
TEST(WideInitGoogleMockTest,ParsesMultipleFlags)142*481dde66SAndroid Build Coastguard Worker TEST(WideInitGoogleMockTest, ParsesMultipleFlags) {
143*481dde66SAndroid Build Coastguard Worker int old_default_behavior = GMOCK_FLAG_GET(default_mock_behavior);
144*481dde66SAndroid Build Coastguard Worker const wchar_t* argv[] = {L"foo.exe", L"--gmock_verbose=info",
145*481dde66SAndroid Build Coastguard Worker L"--gmock_default_mock_behavior=2", nullptr};
146*481dde66SAndroid Build Coastguard Worker
147*481dde66SAndroid Build Coastguard Worker const wchar_t* new_argv[] = {L"foo.exe", nullptr};
148*481dde66SAndroid Build Coastguard Worker
149*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, "info");
150*481dde66SAndroid Build Coastguard Worker EXPECT_EQ(2, GMOCK_FLAG_GET(default_mock_behavior));
151*481dde66SAndroid Build Coastguard Worker EXPECT_NE(2, old_default_behavior);
152*481dde66SAndroid Build Coastguard Worker GMOCK_FLAG_SET(default_mock_behavior, old_default_behavior);
153*481dde66SAndroid Build Coastguard Worker }
154*481dde66SAndroid Build Coastguard Worker
TEST(WideInitGoogleMockTest,ParsesUnrecognizedFlag)155*481dde66SAndroid Build Coastguard Worker TEST(WideInitGoogleMockTest, ParsesUnrecognizedFlag) {
156*481dde66SAndroid Build Coastguard Worker const wchar_t* argv[] = {L"foo.exe", L"--non_gmock_flag=blah", nullptr};
157*481dde66SAndroid Build Coastguard Worker
158*481dde66SAndroid Build Coastguard Worker const wchar_t* new_argv[] = {L"foo.exe", L"--non_gmock_flag=blah", nullptr};
159*481dde66SAndroid Build Coastguard Worker
160*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, GMOCK_FLAG_GET(verbose));
161*481dde66SAndroid Build Coastguard Worker }
162*481dde66SAndroid Build Coastguard Worker
TEST(WideInitGoogleMockTest,ParsesGoogleMockFlagAndUnrecognizedFlag)163*481dde66SAndroid Build Coastguard Worker TEST(WideInitGoogleMockTest, ParsesGoogleMockFlagAndUnrecognizedFlag) {
164*481dde66SAndroid Build Coastguard Worker const wchar_t* argv[] = {L"foo.exe", L"--non_gmock_flag=blah",
165*481dde66SAndroid Build Coastguard Worker L"--gmock_verbose=error", nullptr};
166*481dde66SAndroid Build Coastguard Worker
167*481dde66SAndroid Build Coastguard Worker const wchar_t* new_argv[] = {L"foo.exe", L"--non_gmock_flag=blah", nullptr};
168*481dde66SAndroid Build Coastguard Worker
169*481dde66SAndroid Build Coastguard Worker TestInitGoogleMock(argv, new_argv, "error");
170*481dde66SAndroid Build Coastguard Worker }
171*481dde66SAndroid Build Coastguard Worker
172*481dde66SAndroid Build Coastguard Worker #endif // !defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
173*481dde66SAndroid Build Coastguard Worker
174*481dde66SAndroid Build Coastguard Worker // Makes sure Google Mock flags can be accessed in code.
TEST(FlagTest,IsAccessibleInCode)175*481dde66SAndroid Build Coastguard Worker TEST(FlagTest, IsAccessibleInCode) {
176*481dde66SAndroid Build Coastguard Worker bool dummy =
177*481dde66SAndroid Build Coastguard Worker GMOCK_FLAG_GET(catch_leaked_mocks) && GMOCK_FLAG_GET(verbose).empty();
178*481dde66SAndroid Build Coastguard Worker (void)dummy; // Avoids the "unused local variable" warning.
179*481dde66SAndroid Build Coastguard Worker }
180