xref: /aosp_15_r20/external/googletest/googlemock/test/gmock-nice-strict_test.cc (revision 481dde660366d6f317d242b6974ef1b20adb843c)
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 #include "gmock/gmock-nice-strict.h"
31*481dde66SAndroid Build Coastguard Worker 
32*481dde66SAndroid Build Coastguard Worker #include <string>
33*481dde66SAndroid Build Coastguard Worker #include <utility>
34*481dde66SAndroid Build Coastguard Worker 
35*481dde66SAndroid Build Coastguard Worker #include "gmock/gmock.h"
36*481dde66SAndroid Build Coastguard Worker #include "gtest/gtest-spi.h"
37*481dde66SAndroid Build Coastguard Worker #include "gtest/gtest.h"
38*481dde66SAndroid Build Coastguard Worker 
39*481dde66SAndroid Build Coastguard Worker // This must not be defined inside the ::testing namespace, or it will
40*481dde66SAndroid Build Coastguard Worker // clash with ::testing::Mock.
41*481dde66SAndroid Build Coastguard Worker class Mock {
42*481dde66SAndroid Build Coastguard Worker  public:
43*481dde66SAndroid Build Coastguard Worker   Mock() = default;
44*481dde66SAndroid Build Coastguard Worker 
45*481dde66SAndroid Build Coastguard Worker   MOCK_METHOD0(DoThis, void());
46*481dde66SAndroid Build Coastguard Worker 
47*481dde66SAndroid Build Coastguard Worker  private:
48*481dde66SAndroid Build Coastguard Worker   Mock(const Mock&) = delete;
49*481dde66SAndroid Build Coastguard Worker   Mock& operator=(const Mock&) = delete;
50*481dde66SAndroid Build Coastguard Worker };
51*481dde66SAndroid Build Coastguard Worker 
52*481dde66SAndroid Build Coastguard Worker namespace testing {
53*481dde66SAndroid Build Coastguard Worker namespace gmock_nice_strict_test {
54*481dde66SAndroid Build Coastguard Worker 
55*481dde66SAndroid Build Coastguard Worker using testing::HasSubstr;
56*481dde66SAndroid Build Coastguard Worker using testing::NaggyMock;
57*481dde66SAndroid Build Coastguard Worker using testing::NiceMock;
58*481dde66SAndroid Build Coastguard Worker using testing::StrictMock;
59*481dde66SAndroid Build Coastguard Worker 
60*481dde66SAndroid Build Coastguard Worker #if GTEST_HAS_STREAM_REDIRECTION
61*481dde66SAndroid Build Coastguard Worker using testing::internal::CaptureStdout;
62*481dde66SAndroid Build Coastguard Worker using testing::internal::GetCapturedStdout;
63*481dde66SAndroid Build Coastguard Worker #endif
64*481dde66SAndroid Build Coastguard Worker 
65*481dde66SAndroid Build Coastguard Worker // Class without default constructor.
66*481dde66SAndroid Build Coastguard Worker class NotDefaultConstructible {
67*481dde66SAndroid Build Coastguard Worker  public:
NotDefaultConstructible(int)68*481dde66SAndroid Build Coastguard Worker   explicit NotDefaultConstructible(int) {}
69*481dde66SAndroid Build Coastguard Worker };
70*481dde66SAndroid Build Coastguard Worker 
71*481dde66SAndroid Build Coastguard Worker class CallsMockMethodInDestructor {
72*481dde66SAndroid Build Coastguard Worker  public:
~CallsMockMethodInDestructor()73*481dde66SAndroid Build Coastguard Worker   ~CallsMockMethodInDestructor() { OnDestroy(); }
74*481dde66SAndroid Build Coastguard Worker   MOCK_METHOD(void, OnDestroy, ());
75*481dde66SAndroid Build Coastguard Worker };
76*481dde66SAndroid Build Coastguard Worker 
77*481dde66SAndroid Build Coastguard Worker // Defines some mock classes needed by the tests.
78*481dde66SAndroid Build Coastguard Worker 
79*481dde66SAndroid Build Coastguard Worker class Foo {
80*481dde66SAndroid Build Coastguard Worker  public:
81*481dde66SAndroid Build Coastguard Worker   virtual ~Foo() = default;
82*481dde66SAndroid Build Coastguard Worker 
83*481dde66SAndroid Build Coastguard Worker   virtual void DoThis() = 0;
84*481dde66SAndroid Build Coastguard Worker   virtual int DoThat(bool flag) = 0;
85*481dde66SAndroid Build Coastguard Worker };
86*481dde66SAndroid Build Coastguard Worker 
87*481dde66SAndroid Build Coastguard Worker class MockFoo : public Foo {
88*481dde66SAndroid Build Coastguard Worker  public:
89*481dde66SAndroid Build Coastguard Worker   MockFoo() = default;
Delete()90*481dde66SAndroid Build Coastguard Worker   void Delete() { delete this; }
91*481dde66SAndroid Build Coastguard Worker 
92*481dde66SAndroid Build Coastguard Worker   MOCK_METHOD0(DoThis, void());
93*481dde66SAndroid Build Coastguard Worker   MOCK_METHOD1(DoThat, int(bool flag));
94*481dde66SAndroid Build Coastguard Worker   MOCK_METHOD0(ReturnNonDefaultConstructible, NotDefaultConstructible());
95*481dde66SAndroid Build Coastguard Worker 
96*481dde66SAndroid Build Coastguard Worker  private:
97*481dde66SAndroid Build Coastguard Worker   MockFoo(const MockFoo&) = delete;
98*481dde66SAndroid Build Coastguard Worker   MockFoo& operator=(const MockFoo&) = delete;
99*481dde66SAndroid Build Coastguard Worker };
100*481dde66SAndroid Build Coastguard Worker 
101*481dde66SAndroid Build Coastguard Worker class MockBar {
102*481dde66SAndroid Build Coastguard Worker  public:
MockBar(const std::string & s)103*481dde66SAndroid Build Coastguard Worker   explicit MockBar(const std::string& s) : str_(s) {}
104*481dde66SAndroid Build Coastguard Worker 
MockBar(char a1,char a2,std::string a3,std::string a4,int a5,int a6,const std::string & a7,const std::string & a8,bool a9,bool a10)105*481dde66SAndroid Build Coastguard Worker   MockBar(char a1, char a2, std::string a3, std::string a4, int a5, int a6,
106*481dde66SAndroid Build Coastguard Worker           const std::string& a7, const std::string& a8, bool a9, bool a10) {
107*481dde66SAndroid Build Coastguard Worker     str_ = std::string() + a1 + a2 + a3 + a4 + static_cast<char>(a5) +
108*481dde66SAndroid Build Coastguard Worker            static_cast<char>(a6) + a7 + a8 + (a9 ? 'T' : 'F') +
109*481dde66SAndroid Build Coastguard Worker            (a10 ? 'T' : 'F');
110*481dde66SAndroid Build Coastguard Worker   }
111*481dde66SAndroid Build Coastguard Worker 
112*481dde66SAndroid Build Coastguard Worker   virtual ~MockBar() = default;
113*481dde66SAndroid Build Coastguard Worker 
str() const114*481dde66SAndroid Build Coastguard Worker   const std::string& str() const { return str_; }
115*481dde66SAndroid Build Coastguard Worker 
116*481dde66SAndroid Build Coastguard Worker   MOCK_METHOD0(This, int());
117*481dde66SAndroid Build Coastguard Worker   MOCK_METHOD2(That, std::string(int, bool));
118*481dde66SAndroid Build Coastguard Worker 
119*481dde66SAndroid Build Coastguard Worker  private:
120*481dde66SAndroid Build Coastguard Worker   std::string str_;
121*481dde66SAndroid Build Coastguard Worker 
122*481dde66SAndroid Build Coastguard Worker   MockBar(const MockBar&) = delete;
123*481dde66SAndroid Build Coastguard Worker   MockBar& operator=(const MockBar&) = delete;
124*481dde66SAndroid Build Coastguard Worker };
125*481dde66SAndroid Build Coastguard Worker 
126*481dde66SAndroid Build Coastguard Worker class MockBaz {
127*481dde66SAndroid Build Coastguard Worker  public:
128*481dde66SAndroid Build Coastguard Worker   class MoveOnly {
129*481dde66SAndroid Build Coastguard Worker    public:
130*481dde66SAndroid Build Coastguard Worker     MoveOnly() = default;
131*481dde66SAndroid Build Coastguard Worker 
132*481dde66SAndroid Build Coastguard Worker     MoveOnly(const MoveOnly&) = delete;
133*481dde66SAndroid Build Coastguard Worker     MoveOnly& operator=(const MoveOnly&) = delete;
134*481dde66SAndroid Build Coastguard Worker 
135*481dde66SAndroid Build Coastguard Worker     MoveOnly(MoveOnly&&) = default;
136*481dde66SAndroid Build Coastguard Worker     MoveOnly& operator=(MoveOnly&&) = default;
137*481dde66SAndroid Build Coastguard Worker   };
138*481dde66SAndroid Build Coastguard Worker 
MockBaz(MoveOnly)139*481dde66SAndroid Build Coastguard Worker   MockBaz(MoveOnly) {}
140*481dde66SAndroid Build Coastguard Worker };
141*481dde66SAndroid Build Coastguard Worker 
142*481dde66SAndroid Build Coastguard Worker #if GTEST_HAS_STREAM_REDIRECTION
143*481dde66SAndroid Build Coastguard Worker 
144*481dde66SAndroid Build Coastguard Worker // Tests that a raw mock generates warnings for uninteresting calls.
TEST(RawMockTest,WarningForUninterestingCall)145*481dde66SAndroid Build Coastguard Worker TEST(RawMockTest, WarningForUninterestingCall) {
146*481dde66SAndroid Build Coastguard Worker   const std::string saved_flag = GMOCK_FLAG_GET(verbose);
147*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, "warning");
148*481dde66SAndroid Build Coastguard Worker 
149*481dde66SAndroid Build Coastguard Worker   MockFoo raw_foo;
150*481dde66SAndroid Build Coastguard Worker 
151*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
152*481dde66SAndroid Build Coastguard Worker   raw_foo.DoThis();
153*481dde66SAndroid Build Coastguard Worker   raw_foo.DoThat(true);
154*481dde66SAndroid Build Coastguard Worker   EXPECT_THAT(GetCapturedStdout(),
155*481dde66SAndroid Build Coastguard Worker               HasSubstr("Uninteresting mock function call"));
156*481dde66SAndroid Build Coastguard Worker 
157*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, saved_flag);
158*481dde66SAndroid Build Coastguard Worker }
159*481dde66SAndroid Build Coastguard Worker 
160*481dde66SAndroid Build Coastguard Worker // Tests that a raw mock generates warnings for uninteresting calls
161*481dde66SAndroid Build Coastguard Worker // that delete the mock object.
TEST(RawMockTest,WarningForUninterestingCallAfterDeath)162*481dde66SAndroid Build Coastguard Worker TEST(RawMockTest, WarningForUninterestingCallAfterDeath) {
163*481dde66SAndroid Build Coastguard Worker   const std::string saved_flag = GMOCK_FLAG_GET(verbose);
164*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, "warning");
165*481dde66SAndroid Build Coastguard Worker 
166*481dde66SAndroid Build Coastguard Worker   MockFoo* const raw_foo = new MockFoo;
167*481dde66SAndroid Build Coastguard Worker 
168*481dde66SAndroid Build Coastguard Worker   ON_CALL(*raw_foo, DoThis()).WillByDefault(Invoke(raw_foo, &MockFoo::Delete));
169*481dde66SAndroid Build Coastguard Worker 
170*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
171*481dde66SAndroid Build Coastguard Worker   raw_foo->DoThis();
172*481dde66SAndroid Build Coastguard Worker   EXPECT_THAT(GetCapturedStdout(),
173*481dde66SAndroid Build Coastguard Worker               HasSubstr("Uninteresting mock function call"));
174*481dde66SAndroid Build Coastguard Worker 
175*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, saved_flag);
176*481dde66SAndroid Build Coastguard Worker }
177*481dde66SAndroid Build Coastguard Worker 
178*481dde66SAndroid Build Coastguard Worker // Tests that a raw mock generates informational logs for
179*481dde66SAndroid Build Coastguard Worker // uninteresting calls.
TEST(RawMockTest,InfoForUninterestingCall)180*481dde66SAndroid Build Coastguard Worker TEST(RawMockTest, InfoForUninterestingCall) {
181*481dde66SAndroid Build Coastguard Worker   MockFoo raw_foo;
182*481dde66SAndroid Build Coastguard Worker 
183*481dde66SAndroid Build Coastguard Worker   const std::string saved_flag = GMOCK_FLAG_GET(verbose);
184*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, "info");
185*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
186*481dde66SAndroid Build Coastguard Worker   raw_foo.DoThis();
187*481dde66SAndroid Build Coastguard Worker   EXPECT_THAT(GetCapturedStdout(),
188*481dde66SAndroid Build Coastguard Worker               HasSubstr("Uninteresting mock function call"));
189*481dde66SAndroid Build Coastguard Worker 
190*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, saved_flag);
191*481dde66SAndroid Build Coastguard Worker }
192*481dde66SAndroid Build Coastguard Worker 
TEST(RawMockTest,IsNaggy_IsNice_IsStrict)193*481dde66SAndroid Build Coastguard Worker TEST(RawMockTest, IsNaggy_IsNice_IsStrict) {
194*481dde66SAndroid Build Coastguard Worker   MockFoo raw_foo;
195*481dde66SAndroid Build Coastguard Worker   EXPECT_TRUE(Mock::IsNaggy(&raw_foo));
196*481dde66SAndroid Build Coastguard Worker   EXPECT_FALSE(Mock::IsNice(&raw_foo));
197*481dde66SAndroid Build Coastguard Worker   EXPECT_FALSE(Mock::IsStrict(&raw_foo));
198*481dde66SAndroid Build Coastguard Worker }
199*481dde66SAndroid Build Coastguard Worker 
200*481dde66SAndroid Build Coastguard Worker // Tests that a nice mock generates no warning for uninteresting calls.
TEST(NiceMockTest,NoWarningForUninterestingCall)201*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, NoWarningForUninterestingCall) {
202*481dde66SAndroid Build Coastguard Worker   NiceMock<MockFoo> nice_foo;
203*481dde66SAndroid Build Coastguard Worker 
204*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
205*481dde66SAndroid Build Coastguard Worker   nice_foo.DoThis();
206*481dde66SAndroid Build Coastguard Worker   nice_foo.DoThat(true);
207*481dde66SAndroid Build Coastguard Worker   EXPECT_EQ("", GetCapturedStdout());
208*481dde66SAndroid Build Coastguard Worker }
209*481dde66SAndroid Build Coastguard Worker 
210*481dde66SAndroid Build Coastguard Worker // Tests that a nice mock generates no warning for uninteresting calls
211*481dde66SAndroid Build Coastguard Worker // that delete the mock object.
TEST(NiceMockTest,NoWarningForUninterestingCallAfterDeath)212*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, NoWarningForUninterestingCallAfterDeath) {
213*481dde66SAndroid Build Coastguard Worker   NiceMock<MockFoo>* const nice_foo = new NiceMock<MockFoo>;
214*481dde66SAndroid Build Coastguard Worker 
215*481dde66SAndroid Build Coastguard Worker   ON_CALL(*nice_foo, DoThis())
216*481dde66SAndroid Build Coastguard Worker       .WillByDefault(Invoke(nice_foo, &MockFoo::Delete));
217*481dde66SAndroid Build Coastguard Worker 
218*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
219*481dde66SAndroid Build Coastguard Worker   nice_foo->DoThis();
220*481dde66SAndroid Build Coastguard Worker   EXPECT_EQ("", GetCapturedStdout());
221*481dde66SAndroid Build Coastguard Worker }
222*481dde66SAndroid Build Coastguard Worker 
223*481dde66SAndroid Build Coastguard Worker // Tests that a nice mock generates informational logs for
224*481dde66SAndroid Build Coastguard Worker // uninteresting calls.
TEST(NiceMockTest,InfoForUninterestingCall)225*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, InfoForUninterestingCall) {
226*481dde66SAndroid Build Coastguard Worker   NiceMock<MockFoo> nice_foo;
227*481dde66SAndroid Build Coastguard Worker 
228*481dde66SAndroid Build Coastguard Worker   const std::string saved_flag = GMOCK_FLAG_GET(verbose);
229*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, "info");
230*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
231*481dde66SAndroid Build Coastguard Worker   nice_foo.DoThis();
232*481dde66SAndroid Build Coastguard Worker   EXPECT_THAT(GetCapturedStdout(),
233*481dde66SAndroid Build Coastguard Worker               HasSubstr("Uninteresting mock function call"));
234*481dde66SAndroid Build Coastguard Worker 
235*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, saved_flag);
236*481dde66SAndroid Build Coastguard Worker }
237*481dde66SAndroid Build Coastguard Worker 
238*481dde66SAndroid Build Coastguard Worker #endif  // GTEST_HAS_STREAM_REDIRECTION
239*481dde66SAndroid Build Coastguard Worker 
240*481dde66SAndroid Build Coastguard Worker // Tests that a nice mock allows expected calls.
TEST(NiceMockTest,AllowsExpectedCall)241*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, AllowsExpectedCall) {
242*481dde66SAndroid Build Coastguard Worker   NiceMock<MockFoo> nice_foo;
243*481dde66SAndroid Build Coastguard Worker 
244*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(nice_foo, DoThis());
245*481dde66SAndroid Build Coastguard Worker   nice_foo.DoThis();
246*481dde66SAndroid Build Coastguard Worker }
247*481dde66SAndroid Build Coastguard Worker 
248*481dde66SAndroid Build Coastguard Worker // Tests that an unexpected call on a nice mock which returns a
249*481dde66SAndroid Build Coastguard Worker // not-default-constructible type throws an exception and the exception contains
250*481dde66SAndroid Build Coastguard Worker // the method's name.
TEST(NiceMockTest,ThrowsExceptionForUnknownReturnTypes)251*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, ThrowsExceptionForUnknownReturnTypes) {
252*481dde66SAndroid Build Coastguard Worker   NiceMock<MockFoo> nice_foo;
253*481dde66SAndroid Build Coastguard Worker #if GTEST_HAS_EXCEPTIONS
254*481dde66SAndroid Build Coastguard Worker   try {
255*481dde66SAndroid Build Coastguard Worker     nice_foo.ReturnNonDefaultConstructible();
256*481dde66SAndroid Build Coastguard Worker     FAIL();
257*481dde66SAndroid Build Coastguard Worker   } catch (const std::runtime_error& ex) {
258*481dde66SAndroid Build Coastguard Worker     EXPECT_THAT(ex.what(), HasSubstr("ReturnNonDefaultConstructible"));
259*481dde66SAndroid Build Coastguard Worker   }
260*481dde66SAndroid Build Coastguard Worker #else
261*481dde66SAndroid Build Coastguard Worker   EXPECT_DEATH_IF_SUPPORTED({ nice_foo.ReturnNonDefaultConstructible(); }, "");
262*481dde66SAndroid Build Coastguard Worker #endif
263*481dde66SAndroid Build Coastguard Worker }
264*481dde66SAndroid Build Coastguard Worker 
265*481dde66SAndroid Build Coastguard Worker // Tests that an unexpected call on a nice mock fails.
TEST(NiceMockTest,UnexpectedCallFails)266*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, UnexpectedCallFails) {
267*481dde66SAndroid Build Coastguard Worker   NiceMock<MockFoo> nice_foo;
268*481dde66SAndroid Build Coastguard Worker 
269*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(nice_foo, DoThis()).Times(0);
270*481dde66SAndroid Build Coastguard Worker   EXPECT_NONFATAL_FAILURE(nice_foo.DoThis(), "called more times than expected");
271*481dde66SAndroid Build Coastguard Worker }
272*481dde66SAndroid Build Coastguard Worker 
273*481dde66SAndroid Build Coastguard Worker // Tests that NiceMock works with a mock class that has a non-default
274*481dde66SAndroid Build Coastguard Worker // constructor.
TEST(NiceMockTest,NonDefaultConstructor)275*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, NonDefaultConstructor) {
276*481dde66SAndroid Build Coastguard Worker   NiceMock<MockBar> nice_bar("hi");
277*481dde66SAndroid Build Coastguard Worker   EXPECT_EQ("hi", nice_bar.str());
278*481dde66SAndroid Build Coastguard Worker 
279*481dde66SAndroid Build Coastguard Worker   nice_bar.This();
280*481dde66SAndroid Build Coastguard Worker   nice_bar.That(5, true);
281*481dde66SAndroid Build Coastguard Worker }
282*481dde66SAndroid Build Coastguard Worker 
283*481dde66SAndroid Build Coastguard Worker // Tests that NiceMock works with a mock class that has a 10-ary
284*481dde66SAndroid Build Coastguard Worker // non-default constructor.
TEST(NiceMockTest,NonDefaultConstructor10)285*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, NonDefaultConstructor10) {
286*481dde66SAndroid Build Coastguard Worker   NiceMock<MockBar> nice_bar('a', 'b', "c", "d", 'e', 'f', "g", "h", true,
287*481dde66SAndroid Build Coastguard Worker                              false);
288*481dde66SAndroid Build Coastguard Worker   EXPECT_EQ("abcdefghTF", nice_bar.str());
289*481dde66SAndroid Build Coastguard Worker 
290*481dde66SAndroid Build Coastguard Worker   nice_bar.This();
291*481dde66SAndroid Build Coastguard Worker   nice_bar.That(5, true);
292*481dde66SAndroid Build Coastguard Worker }
293*481dde66SAndroid Build Coastguard Worker 
TEST(NiceMockTest,AllowLeak)294*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, AllowLeak) {
295*481dde66SAndroid Build Coastguard Worker   NiceMock<MockFoo>* leaked = new NiceMock<MockFoo>;
296*481dde66SAndroid Build Coastguard Worker   Mock::AllowLeak(leaked);
297*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(*leaked, DoThis());
298*481dde66SAndroid Build Coastguard Worker   leaked->DoThis();
299*481dde66SAndroid Build Coastguard Worker }
300*481dde66SAndroid Build Coastguard Worker 
TEST(NiceMockTest,MoveOnlyConstructor)301*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, MoveOnlyConstructor) {
302*481dde66SAndroid Build Coastguard Worker   NiceMock<MockBaz> nice_baz(MockBaz::MoveOnly{});
303*481dde66SAndroid Build Coastguard Worker }
304*481dde66SAndroid Build Coastguard Worker 
305*481dde66SAndroid Build Coastguard Worker // Tests that NiceMock<Mock> compiles where Mock is a user-defined
306*481dde66SAndroid Build Coastguard Worker // class (as opposed to ::testing::Mock).
TEST(NiceMockTest,AcceptsClassNamedMock)307*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, AcceptsClassNamedMock) {
308*481dde66SAndroid Build Coastguard Worker   NiceMock< ::Mock> nice;
309*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(nice, DoThis());
310*481dde66SAndroid Build Coastguard Worker   nice.DoThis();
311*481dde66SAndroid Build Coastguard Worker }
312*481dde66SAndroid Build Coastguard Worker 
TEST(NiceMockTest,IsNiceInDestructor)313*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, IsNiceInDestructor) {
314*481dde66SAndroid Build Coastguard Worker   {
315*481dde66SAndroid Build Coastguard Worker     NiceMock<CallsMockMethodInDestructor> nice_on_destroy;
316*481dde66SAndroid Build Coastguard Worker     // Don't add an expectation for the call before the mock goes out of scope.
317*481dde66SAndroid Build Coastguard Worker   }
318*481dde66SAndroid Build Coastguard Worker }
319*481dde66SAndroid Build Coastguard Worker 
TEST(NiceMockTest,IsNaggy_IsNice_IsStrict)320*481dde66SAndroid Build Coastguard Worker TEST(NiceMockTest, IsNaggy_IsNice_IsStrict) {
321*481dde66SAndroid Build Coastguard Worker   NiceMock<MockFoo> nice_foo;
322*481dde66SAndroid Build Coastguard Worker   EXPECT_FALSE(Mock::IsNaggy(&nice_foo));
323*481dde66SAndroid Build Coastguard Worker   EXPECT_TRUE(Mock::IsNice(&nice_foo));
324*481dde66SAndroid Build Coastguard Worker   EXPECT_FALSE(Mock::IsStrict(&nice_foo));
325*481dde66SAndroid Build Coastguard Worker }
326*481dde66SAndroid Build Coastguard Worker 
327*481dde66SAndroid Build Coastguard Worker #if GTEST_HAS_STREAM_REDIRECTION
328*481dde66SAndroid Build Coastguard Worker 
329*481dde66SAndroid Build Coastguard Worker // Tests that a naggy mock generates warnings for uninteresting calls.
TEST(NaggyMockTest,WarningForUninterestingCall)330*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, WarningForUninterestingCall) {
331*481dde66SAndroid Build Coastguard Worker   const std::string saved_flag = GMOCK_FLAG_GET(verbose);
332*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, "warning");
333*481dde66SAndroid Build Coastguard Worker 
334*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockFoo> naggy_foo;
335*481dde66SAndroid Build Coastguard Worker 
336*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
337*481dde66SAndroid Build Coastguard Worker   naggy_foo.DoThis();
338*481dde66SAndroid Build Coastguard Worker   naggy_foo.DoThat(true);
339*481dde66SAndroid Build Coastguard Worker   EXPECT_THAT(GetCapturedStdout(),
340*481dde66SAndroid Build Coastguard Worker               HasSubstr("Uninteresting mock function call"));
341*481dde66SAndroid Build Coastguard Worker 
342*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, saved_flag);
343*481dde66SAndroid Build Coastguard Worker }
344*481dde66SAndroid Build Coastguard Worker 
345*481dde66SAndroid Build Coastguard Worker // Tests that a naggy mock generates a warning for an uninteresting call
346*481dde66SAndroid Build Coastguard Worker // that deletes the mock object.
TEST(NaggyMockTest,WarningForUninterestingCallAfterDeath)347*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, WarningForUninterestingCallAfterDeath) {
348*481dde66SAndroid Build Coastguard Worker   const std::string saved_flag = GMOCK_FLAG_GET(verbose);
349*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, "warning");
350*481dde66SAndroid Build Coastguard Worker 
351*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockFoo>* const naggy_foo = new NaggyMock<MockFoo>;
352*481dde66SAndroid Build Coastguard Worker 
353*481dde66SAndroid Build Coastguard Worker   ON_CALL(*naggy_foo, DoThis())
354*481dde66SAndroid Build Coastguard Worker       .WillByDefault(Invoke(naggy_foo, &MockFoo::Delete));
355*481dde66SAndroid Build Coastguard Worker 
356*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
357*481dde66SAndroid Build Coastguard Worker   naggy_foo->DoThis();
358*481dde66SAndroid Build Coastguard Worker   EXPECT_THAT(GetCapturedStdout(),
359*481dde66SAndroid Build Coastguard Worker               HasSubstr("Uninteresting mock function call"));
360*481dde66SAndroid Build Coastguard Worker 
361*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, saved_flag);
362*481dde66SAndroid Build Coastguard Worker }
363*481dde66SAndroid Build Coastguard Worker 
364*481dde66SAndroid Build Coastguard Worker #endif  // GTEST_HAS_STREAM_REDIRECTION
365*481dde66SAndroid Build Coastguard Worker 
366*481dde66SAndroid Build Coastguard Worker // Tests that a naggy mock allows expected calls.
TEST(NaggyMockTest,AllowsExpectedCall)367*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, AllowsExpectedCall) {
368*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockFoo> naggy_foo;
369*481dde66SAndroid Build Coastguard Worker 
370*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(naggy_foo, DoThis());
371*481dde66SAndroid Build Coastguard Worker   naggy_foo.DoThis();
372*481dde66SAndroid Build Coastguard Worker }
373*481dde66SAndroid Build Coastguard Worker 
374*481dde66SAndroid Build Coastguard Worker // Tests that an unexpected call on a naggy mock fails.
TEST(NaggyMockTest,UnexpectedCallFails)375*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, UnexpectedCallFails) {
376*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockFoo> naggy_foo;
377*481dde66SAndroid Build Coastguard Worker 
378*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(naggy_foo, DoThis()).Times(0);
379*481dde66SAndroid Build Coastguard Worker   EXPECT_NONFATAL_FAILURE(naggy_foo.DoThis(),
380*481dde66SAndroid Build Coastguard Worker                           "called more times than expected");
381*481dde66SAndroid Build Coastguard Worker }
382*481dde66SAndroid Build Coastguard Worker 
383*481dde66SAndroid Build Coastguard Worker // Tests that NaggyMock works with a mock class that has a non-default
384*481dde66SAndroid Build Coastguard Worker // constructor.
TEST(NaggyMockTest,NonDefaultConstructor)385*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, NonDefaultConstructor) {
386*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockBar> naggy_bar("hi");
387*481dde66SAndroid Build Coastguard Worker   EXPECT_EQ("hi", naggy_bar.str());
388*481dde66SAndroid Build Coastguard Worker 
389*481dde66SAndroid Build Coastguard Worker   naggy_bar.This();
390*481dde66SAndroid Build Coastguard Worker   naggy_bar.That(5, true);
391*481dde66SAndroid Build Coastguard Worker }
392*481dde66SAndroid Build Coastguard Worker 
393*481dde66SAndroid Build Coastguard Worker // Tests that NaggyMock works with a mock class that has a 10-ary
394*481dde66SAndroid Build Coastguard Worker // non-default constructor.
TEST(NaggyMockTest,NonDefaultConstructor10)395*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, NonDefaultConstructor10) {
396*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockBar> naggy_bar('0', '1', "2", "3", '4', '5', "6", "7", true,
397*481dde66SAndroid Build Coastguard Worker                                false);
398*481dde66SAndroid Build Coastguard Worker   EXPECT_EQ("01234567TF", naggy_bar.str());
399*481dde66SAndroid Build Coastguard Worker 
400*481dde66SAndroid Build Coastguard Worker   naggy_bar.This();
401*481dde66SAndroid Build Coastguard Worker   naggy_bar.That(5, true);
402*481dde66SAndroid Build Coastguard Worker }
403*481dde66SAndroid Build Coastguard Worker 
TEST(NaggyMockTest,AllowLeak)404*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, AllowLeak) {
405*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockFoo>* leaked = new NaggyMock<MockFoo>;
406*481dde66SAndroid Build Coastguard Worker   Mock::AllowLeak(leaked);
407*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(*leaked, DoThis());
408*481dde66SAndroid Build Coastguard Worker   leaked->DoThis();
409*481dde66SAndroid Build Coastguard Worker }
410*481dde66SAndroid Build Coastguard Worker 
TEST(NaggyMockTest,MoveOnlyConstructor)411*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, MoveOnlyConstructor) {
412*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockBaz> naggy_baz(MockBaz::MoveOnly{});
413*481dde66SAndroid Build Coastguard Worker }
414*481dde66SAndroid Build Coastguard Worker 
415*481dde66SAndroid Build Coastguard Worker // Tests that NaggyMock<Mock> compiles where Mock is a user-defined
416*481dde66SAndroid Build Coastguard Worker // class (as opposed to ::testing::Mock).
TEST(NaggyMockTest,AcceptsClassNamedMock)417*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, AcceptsClassNamedMock) {
418*481dde66SAndroid Build Coastguard Worker   NaggyMock< ::Mock> naggy;
419*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(naggy, DoThis());
420*481dde66SAndroid Build Coastguard Worker   naggy.DoThis();
421*481dde66SAndroid Build Coastguard Worker }
422*481dde66SAndroid Build Coastguard Worker 
TEST(NaggyMockTest,IsNaggyInDestructor)423*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, IsNaggyInDestructor) {
424*481dde66SAndroid Build Coastguard Worker   const std::string saved_flag = GMOCK_FLAG_GET(verbose);
425*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, "warning");
426*481dde66SAndroid Build Coastguard Worker   CaptureStdout();
427*481dde66SAndroid Build Coastguard Worker 
428*481dde66SAndroid Build Coastguard Worker   {
429*481dde66SAndroid Build Coastguard Worker     NaggyMock<CallsMockMethodInDestructor> naggy_on_destroy;
430*481dde66SAndroid Build Coastguard Worker     // Don't add an expectation for the call before the mock goes out of scope.
431*481dde66SAndroid Build Coastguard Worker   }
432*481dde66SAndroid Build Coastguard Worker 
433*481dde66SAndroid Build Coastguard Worker   EXPECT_THAT(GetCapturedStdout(),
434*481dde66SAndroid Build Coastguard Worker               HasSubstr("Uninteresting mock function call"));
435*481dde66SAndroid Build Coastguard Worker 
436*481dde66SAndroid Build Coastguard Worker   GMOCK_FLAG_SET(verbose, saved_flag);
437*481dde66SAndroid Build Coastguard Worker }
438*481dde66SAndroid Build Coastguard Worker 
TEST(NaggyMockTest,IsNaggy_IsNice_IsStrict)439*481dde66SAndroid Build Coastguard Worker TEST(NaggyMockTest, IsNaggy_IsNice_IsStrict) {
440*481dde66SAndroid Build Coastguard Worker   NaggyMock<MockFoo> naggy_foo;
441*481dde66SAndroid Build Coastguard Worker   EXPECT_TRUE(Mock::IsNaggy(&naggy_foo));
442*481dde66SAndroid Build Coastguard Worker   EXPECT_FALSE(Mock::IsNice(&naggy_foo));
443*481dde66SAndroid Build Coastguard Worker   EXPECT_FALSE(Mock::IsStrict(&naggy_foo));
444*481dde66SAndroid Build Coastguard Worker }
445*481dde66SAndroid Build Coastguard Worker 
446*481dde66SAndroid Build Coastguard Worker // Tests that a strict mock allows expected calls.
TEST(StrictMockTest,AllowsExpectedCall)447*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, AllowsExpectedCall) {
448*481dde66SAndroid Build Coastguard Worker   StrictMock<MockFoo> strict_foo;
449*481dde66SAndroid Build Coastguard Worker 
450*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(strict_foo, DoThis());
451*481dde66SAndroid Build Coastguard Worker   strict_foo.DoThis();
452*481dde66SAndroid Build Coastguard Worker }
453*481dde66SAndroid Build Coastguard Worker 
454*481dde66SAndroid Build Coastguard Worker // Tests that an unexpected call on a strict mock fails.
TEST(StrictMockTest,UnexpectedCallFails)455*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, UnexpectedCallFails) {
456*481dde66SAndroid Build Coastguard Worker   StrictMock<MockFoo> strict_foo;
457*481dde66SAndroid Build Coastguard Worker 
458*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(strict_foo, DoThis()).Times(0);
459*481dde66SAndroid Build Coastguard Worker   EXPECT_NONFATAL_FAILURE(strict_foo.DoThis(),
460*481dde66SAndroid Build Coastguard Worker                           "called more times than expected");
461*481dde66SAndroid Build Coastguard Worker }
462*481dde66SAndroid Build Coastguard Worker 
463*481dde66SAndroid Build Coastguard Worker // Tests that an uninteresting call on a strict mock fails.
TEST(StrictMockTest,UninterestingCallFails)464*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, UninterestingCallFails) {
465*481dde66SAndroid Build Coastguard Worker   StrictMock<MockFoo> strict_foo;
466*481dde66SAndroid Build Coastguard Worker 
467*481dde66SAndroid Build Coastguard Worker   EXPECT_NONFATAL_FAILURE(strict_foo.DoThis(),
468*481dde66SAndroid Build Coastguard Worker                           "Uninteresting mock function call");
469*481dde66SAndroid Build Coastguard Worker }
470*481dde66SAndroid Build Coastguard Worker 
471*481dde66SAndroid Build Coastguard Worker // Tests that an uninteresting call on a strict mock fails, even if
472*481dde66SAndroid Build Coastguard Worker // the call deletes the mock object.
TEST(StrictMockTest,UninterestingCallFailsAfterDeath)473*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, UninterestingCallFailsAfterDeath) {
474*481dde66SAndroid Build Coastguard Worker   StrictMock<MockFoo>* const strict_foo = new StrictMock<MockFoo>;
475*481dde66SAndroid Build Coastguard Worker 
476*481dde66SAndroid Build Coastguard Worker   ON_CALL(*strict_foo, DoThis())
477*481dde66SAndroid Build Coastguard Worker       .WillByDefault(Invoke(strict_foo, &MockFoo::Delete));
478*481dde66SAndroid Build Coastguard Worker 
479*481dde66SAndroid Build Coastguard Worker   EXPECT_NONFATAL_FAILURE(strict_foo->DoThis(),
480*481dde66SAndroid Build Coastguard Worker                           "Uninteresting mock function call");
481*481dde66SAndroid Build Coastguard Worker }
482*481dde66SAndroid Build Coastguard Worker 
483*481dde66SAndroid Build Coastguard Worker // Tests that StrictMock works with a mock class that has a
484*481dde66SAndroid Build Coastguard Worker // non-default constructor.
TEST(StrictMockTest,NonDefaultConstructor)485*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, NonDefaultConstructor) {
486*481dde66SAndroid Build Coastguard Worker   StrictMock<MockBar> strict_bar("hi");
487*481dde66SAndroid Build Coastguard Worker   EXPECT_EQ("hi", strict_bar.str());
488*481dde66SAndroid Build Coastguard Worker 
489*481dde66SAndroid Build Coastguard Worker   EXPECT_NONFATAL_FAILURE(strict_bar.That(5, true),
490*481dde66SAndroid Build Coastguard Worker                           "Uninteresting mock function call");
491*481dde66SAndroid Build Coastguard Worker }
492*481dde66SAndroid Build Coastguard Worker 
493*481dde66SAndroid Build Coastguard Worker // Tests that StrictMock works with a mock class that has a 10-ary
494*481dde66SAndroid Build Coastguard Worker // non-default constructor.
TEST(StrictMockTest,NonDefaultConstructor10)495*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, NonDefaultConstructor10) {
496*481dde66SAndroid Build Coastguard Worker   StrictMock<MockBar> strict_bar('a', 'b', "c", "d", 'e', 'f', "g", "h", true,
497*481dde66SAndroid Build Coastguard Worker                                  false);
498*481dde66SAndroid Build Coastguard Worker   EXPECT_EQ("abcdefghTF", strict_bar.str());
499*481dde66SAndroid Build Coastguard Worker 
500*481dde66SAndroid Build Coastguard Worker   EXPECT_NONFATAL_FAILURE(strict_bar.That(5, true),
501*481dde66SAndroid Build Coastguard Worker                           "Uninteresting mock function call");
502*481dde66SAndroid Build Coastguard Worker }
503*481dde66SAndroid Build Coastguard Worker 
TEST(StrictMockTest,AllowLeak)504*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, AllowLeak) {
505*481dde66SAndroid Build Coastguard Worker   StrictMock<MockFoo>* leaked = new StrictMock<MockFoo>;
506*481dde66SAndroid Build Coastguard Worker   Mock::AllowLeak(leaked);
507*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(*leaked, DoThis());
508*481dde66SAndroid Build Coastguard Worker   leaked->DoThis();
509*481dde66SAndroid Build Coastguard Worker }
510*481dde66SAndroid Build Coastguard Worker 
TEST(StrictMockTest,MoveOnlyConstructor)511*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, MoveOnlyConstructor) {
512*481dde66SAndroid Build Coastguard Worker   StrictMock<MockBaz> strict_baz(MockBaz::MoveOnly{});
513*481dde66SAndroid Build Coastguard Worker }
514*481dde66SAndroid Build Coastguard Worker 
515*481dde66SAndroid Build Coastguard Worker // Tests that StrictMock<Mock> compiles where Mock is a user-defined
516*481dde66SAndroid Build Coastguard Worker // class (as opposed to ::testing::Mock).
TEST(StrictMockTest,AcceptsClassNamedMock)517*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, AcceptsClassNamedMock) {
518*481dde66SAndroid Build Coastguard Worker   StrictMock< ::Mock> strict;
519*481dde66SAndroid Build Coastguard Worker   EXPECT_CALL(strict, DoThis());
520*481dde66SAndroid Build Coastguard Worker   strict.DoThis();
521*481dde66SAndroid Build Coastguard Worker }
522*481dde66SAndroid Build Coastguard Worker 
TEST(StrictMockTest,IsStrictInDestructor)523*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, IsStrictInDestructor) {
524*481dde66SAndroid Build Coastguard Worker   EXPECT_NONFATAL_FAILURE(
525*481dde66SAndroid Build Coastguard Worker       {
526*481dde66SAndroid Build Coastguard Worker         StrictMock<CallsMockMethodInDestructor> strict_on_destroy;
527*481dde66SAndroid Build Coastguard Worker         // Don't add an expectation for the call before the mock goes out of
528*481dde66SAndroid Build Coastguard Worker         // scope.
529*481dde66SAndroid Build Coastguard Worker       },
530*481dde66SAndroid Build Coastguard Worker       "Uninteresting mock function call");
531*481dde66SAndroid Build Coastguard Worker }
532*481dde66SAndroid Build Coastguard Worker 
TEST(StrictMockTest,IsNaggy_IsNice_IsStrict)533*481dde66SAndroid Build Coastguard Worker TEST(StrictMockTest, IsNaggy_IsNice_IsStrict) {
534*481dde66SAndroid Build Coastguard Worker   StrictMock<MockFoo> strict_foo;
535*481dde66SAndroid Build Coastguard Worker   EXPECT_FALSE(Mock::IsNaggy(&strict_foo));
536*481dde66SAndroid Build Coastguard Worker   EXPECT_FALSE(Mock::IsNice(&strict_foo));
537*481dde66SAndroid Build Coastguard Worker   EXPECT_TRUE(Mock::IsStrict(&strict_foo));
538*481dde66SAndroid Build Coastguard Worker }
539*481dde66SAndroid Build Coastguard Worker 
540*481dde66SAndroid Build Coastguard Worker }  // namespace gmock_nice_strict_test
541*481dde66SAndroid Build Coastguard Worker }  // namespace testing
542