1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#!/usr/bin/env python 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Copyright 2009, Google Inc. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# All rights reserved. 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Redistribution and use in source and binary forms, with or without 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# modification, are permitted provided that the following conditions are 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# met: 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# * Redistributions of source code must retain the above copyright 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# notice, this list of conditions and the following disclaimer. 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# * Redistributions in binary form must reproduce the above 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# copyright notice, this list of conditions and the following disclaimer 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# in the documentation and/or other materials provided with the 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# distribution. 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# * Neither the name of Google Inc. nor the names of its 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# contributors may be used to endorse or promote products derived from 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# this software without specific prior written permission. 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch"""Tests that leaked mock objects can be caught be Google Mock.""" 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch__author__ = 'wan@google.com (Zhanyong Wan)' 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochimport gmock_test_utils 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochPROGRAM_PATH = gmock_test_utils.GetTestExecutablePath('gmock_leak_test_') 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_WITH_EXPECT_CALL = [PROGRAM_PATH, '--gtest_filter=*ExpectCall*'] 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_WITH_ON_CALL = [PROGRAM_PATH, '--gtest_filter=*OnCall*'] 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_MULTIPLE_LEAKS = [PROGRAM_PATH, '--gtest_filter=*MultipleLeaked*'] 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GMockLeakTest(gmock_test_utils.TestCase): 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testCatchesLeakedMockByDefault(self): 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertNotEqual( 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Subprocess(TEST_WITH_EXPECT_CALL).exit_code) 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertNotEqual( 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Subprocess(TEST_WITH_ON_CALL).exit_code) 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testDoesNotCatchLeakedMockWhenDisabled(self): 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertEquals( 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Subprocess(TEST_WITH_EXPECT_CALL + 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ['--gmock_catch_leaked_mocks=0']).exit_code) 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertEquals( 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Subprocess(TEST_WITH_ON_CALL + 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ['--gmock_catch_leaked_mocks=0']).exit_code) 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testCatchesLeakedMockWhenEnabled(self): 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertNotEqual( 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Subprocess(TEST_WITH_EXPECT_CALL + 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ['--gmock_catch_leaked_mocks']).exit_code) 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertNotEqual( 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Subprocess(TEST_WITH_ON_CALL + 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ['--gmock_catch_leaked_mocks']).exit_code) 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testCatchesLeakedMockWhenEnabledWithExplictFlagValue(self): 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertNotEqual( 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Subprocess(TEST_WITH_EXPECT_CALL + 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ['--gmock_catch_leaked_mocks=1']).exit_code) 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testCatchesMultipleLeakedMocks(self): 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertNotEqual( 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Subprocess(TEST_MULTIPLE_LEAKS + 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ['--gmock_catch_leaked_mocks']).exit_code) 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochif __name__ == '__main__': 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gmock_test_utils.Main() 91