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