1// Copyright 2009, Google Inc. 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: 7// 8// * Redistributions of source code must retain the above copyright 9// notice, this list of conditions and the following disclaimer. 10// * Redistributions in binary form must reproduce the above 11// copyright notice, this list of conditions and the following disclaimer 12// in the documentation and/or other materials provided with the 13// distribution. 14// * Neither the name of Google Inc. nor the names of its 15// contributors may be used to endorse or promote products derived from 16// this software without specific prior written permission. 17// 18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 30 31// Google Mock - a framework for writing C++ mock classes. 32// 33// This program is for verifying that a leaked mock object can be 34// caught by Google Mock's leak detector. 35 36#include "gmock/gmock.h" 37 38namespace { 39 40using ::testing::Return; 41 42class FooInterface { 43 public: 44 virtual ~FooInterface() {} 45 virtual void DoThis() = 0; 46}; 47 48class MockFoo : public FooInterface { 49 public: 50 MockFoo() {} 51 52 MOCK_METHOD0(DoThis, void()); 53 54 private: 55 GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFoo); 56}; 57 58TEST(LeakTest, LeakedMockWithExpectCallCausesFailureWhenLeakCheckingIsEnabled) { 59 MockFoo* foo = new MockFoo; 60 61 EXPECT_CALL(*foo, DoThis()); 62 foo->DoThis(); 63 64 // In order to test the leak detector, we deliberately leak foo. 65 66 // Makes sure Google Mock's leak detector can change the exit code 67 // to 1 even when the code is already exiting with 0. 68 exit(0); 69} 70 71TEST(LeakTest, LeakedMockWithOnCallCausesFailureWhenLeakCheckingIsEnabled) { 72 MockFoo* foo = new MockFoo; 73 74 ON_CALL(*foo, DoThis()).WillByDefault(Return()); 75 76 // In order to test the leak detector, we deliberately leak foo. 77 78 // Makes sure Google Mock's leak detector can change the exit code 79 // to 1 even when the code is already exiting with 0. 80 exit(0); 81} 82 83TEST(LeakTest, CatchesMultipleLeakedMockObjects) { 84 MockFoo* foo1 = new MockFoo; 85 MockFoo* foo2 = new MockFoo; 86 87 ON_CALL(*foo1, DoThis()).WillByDefault(Return()); 88 EXPECT_CALL(*foo2, DoThis()); 89 foo2->DoThis(); 90 91 // In order to test the leak detector, we deliberately leak foo1 and 92 // foo2. 93 94 // Makes sure Google Mock's leak detector can change the exit code 95 // to 1 even when the code is already exiting with 0. 96 exit(0); 97} 98 99} // namespace 100