00001 // Copyright 2009, Google Inc. 00002 // All rights reserved. 00003 // 00004 // Redistribution and use in source and binary forms, with or without 00005 // modification, are permitted provided that the following conditions are 00006 // met: 00007 // 00008 // * Redistributions of source code must retain the above copyright 00009 // notice, this list of conditions and the following disclaimer. 00010 // * Redistributions in binary form must reproduce the above 00011 // copyright notice, this list of conditions and the following disclaimer 00012 // in the documentation and/or other materials provided with the 00013 // distribution. 00014 // * Neither the name of Google Inc. nor the names of its 00015 // contributors may be used to endorse or promote products derived from 00016 // this software without specific prior written permission. 00017 // 00018 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00019 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00020 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00021 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00022 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00023 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00024 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00025 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00026 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00027 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00028 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 // 00030 // Author: wan@google.com (Zhanyong Wan) 00031 00032 // Google Mock - a framework for writing C++ mock classes. 00033 // 00034 // This program is for verifying that a leaked mock object can be 00035 // caught by Google Mock's leak detector. 00036 00037 #include "gmock/gmock.h" 00038 00039 namespace { 00040 00041 using ::testing::Return; 00042 00043 class FooInterface { 00044 public: 00045 virtual ~FooInterface() {} 00046 virtual void DoThis() = 0; 00047 }; 00048 00049 class MockFoo : public FooInterface { 00050 public: 00051 MockFoo() {} 00052 00053 MOCK_METHOD0(DoThis, void()); 00054 00055 private: 00056 GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFoo); 00057 }; 00058 00059 TEST(LeakTest, LeakedMockWithExpectCallCausesFailureWhenLeakCheckingIsEnabled) { 00060 MockFoo* foo = new MockFoo; 00061 00062 EXPECT_CALL(*foo, DoThis()); 00063 foo->DoThis(); 00064 00065 // In order to test the leak detector, we deliberately leak foo. 00066 00067 // Makes sure Google Mock's leak detector can change the exit code 00068 // to 1 even when the code is already exiting with 0. 00069 exit(0); 00070 } 00071 00072 TEST(LeakTest, LeakedMockWithOnCallCausesFailureWhenLeakCheckingIsEnabled) { 00073 MockFoo* foo = new MockFoo; 00074 00075 ON_CALL(*foo, DoThis()).WillByDefault(Return()); 00076 00077 // In order to test the leak detector, we deliberately leak foo. 00078 00079 // Makes sure Google Mock's leak detector can change the exit code 00080 // to 1 even when the code is already exiting with 0. 00081 exit(0); 00082 } 00083 00084 TEST(LeakTest, CatchesMultipleLeakedMockObjects) { 00085 MockFoo* foo1 = new MockFoo; 00086 MockFoo* foo2 = new MockFoo; 00087 00088 ON_CALL(*foo1, DoThis()).WillByDefault(Return()); 00089 EXPECT_CALL(*foo2, DoThis()); 00090 foo2->DoThis(); 00091 00092 // In order to test the leak detector, we deliberately leak foo1 and 00093 // foo2. 00094 00095 // Makes sure Google Mock's leak detector can change the exit code 00096 // to 1 even when the code is already exiting with 0. 00097 exit(0); 00098 } 00099 00100 } // namespace