parent
1c8eb1c059
commit
df35a763b9
17 changed files with 681 additions and 43 deletions
@ -0,0 +1,205 @@ |
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?> |
||||||
|
<VisualStudioProject |
||||||
|
ProjectType="Visual C++" |
||||||
|
Version="8.00" |
||||||
|
Name="gmock-spec-builders_test" |
||||||
|
ProjectGUID="{46972604-5BE0-4493-BAE3-878DB825FDCB}" |
||||||
|
RootNamespace="gmockspecbuilders_test" |
||||||
|
Keyword="Win32Proj" |
||||||
|
> |
||||||
|
<Platforms> |
||||||
|
<Platform |
||||||
|
Name="Win32" |
||||||
|
/> |
||||||
|
</Platforms> |
||||||
|
<ToolFiles> |
||||||
|
</ToolFiles> |
||||||
|
<Configurations> |
||||||
|
<Configuration |
||||||
|
Name="Debug|Win32" |
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)" |
||||||
|
IntermediateDirectory="$(ConfigurationName)" |
||||||
|
ConfigurationType="1" |
||||||
|
InheritedPropertySheets=".\gmock_config.vsprops" |
||||||
|
CharacterSet="1" |
||||||
|
> |
||||||
|
<Tool |
||||||
|
Name="VCPreBuildEventTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCCustomBuildTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCXMLDataGeneratorTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCWebServiceProxyGeneratorTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCMIDLTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCCLCompilerTool" |
||||||
|
Optimization="0" |
||||||
|
AdditionalIncludeDirectories="../include" |
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" |
||||||
|
MinimalRebuild="true" |
||||||
|
BasicRuntimeChecks="3" |
||||||
|
RuntimeLibrary="1" |
||||||
|
UsePrecompiledHeader="0" |
||||||
|
WarningLevel="3" |
||||||
|
Detect64BitPortabilityProblems="true" |
||||||
|
DebugInformationFormat="4" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCManagedResourceCompilerTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCResourceCompilerTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCPreLinkEventTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCLinkerTool" |
||||||
|
LinkIncremental="2" |
||||||
|
GenerateDebugInformation="true" |
||||||
|
SubSystem="1" |
||||||
|
TargetMachine="1" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCALinkTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCManifestTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCXDCMakeTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCBscMakeTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCFxCopTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCAppVerifierTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCWebDeploymentTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCPostBuildEventTool" |
||||||
|
/> |
||||||
|
</Configuration> |
||||||
|
<Configuration |
||||||
|
Name="Release|Win32" |
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)" |
||||||
|
IntermediateDirectory="$(ConfigurationName)" |
||||||
|
ConfigurationType="1" |
||||||
|
InheritedPropertySheets=".\gmock_config.vsprops" |
||||||
|
CharacterSet="1" |
||||||
|
WholeProgramOptimization="1" |
||||||
|
> |
||||||
|
<Tool |
||||||
|
Name="VCPreBuildEventTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCCustomBuildTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCXMLDataGeneratorTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCWebServiceProxyGeneratorTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCMIDLTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCCLCompilerTool" |
||||||
|
AdditionalIncludeDirectories="../include" |
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" |
||||||
|
RuntimeLibrary="0" |
||||||
|
UsePrecompiledHeader="0" |
||||||
|
WarningLevel="3" |
||||||
|
Detect64BitPortabilityProblems="true" |
||||||
|
DebugInformationFormat="3" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCManagedResourceCompilerTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCResourceCompilerTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCPreLinkEventTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCLinkerTool" |
||||||
|
LinkIncremental="1" |
||||||
|
GenerateDebugInformation="true" |
||||||
|
SubSystem="1" |
||||||
|
OptimizeReferences="2" |
||||||
|
EnableCOMDATFolding="2" |
||||||
|
TargetMachine="1" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCALinkTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCManifestTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCXDCMakeTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCBscMakeTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCFxCopTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCAppVerifierTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCWebDeploymentTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCPostBuildEventTool" |
||||||
|
/> |
||||||
|
</Configuration> |
||||||
|
</Configurations> |
||||||
|
<References> |
||||||
|
<ProjectReference |
||||||
|
ReferencedProjectIdentifier="{34681F0D-CE45-415D-B5F2-5C662DFE3BD5}" |
||||||
|
RelativePathToProject=".\gmock.vcproj" |
||||||
|
/> |
||||||
|
</References> |
||||||
|
<Files> |
||||||
|
<Filter |
||||||
|
Name="Source Files" |
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |
||||||
|
> |
||||||
|
<File |
||||||
|
RelativePath="..\test\gmock-spec-builders_test.cc" |
||||||
|
> |
||||||
|
</File> |
||||||
|
</Filter> |
||||||
|
<Filter |
||||||
|
Name="Header Files" |
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd" |
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |
||||||
|
> |
||||||
|
</Filter> |
||||||
|
<Filter |
||||||
|
Name="Resource Files" |
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |
||||||
|
> |
||||||
|
</Filter> |
||||||
|
</Files> |
||||||
|
<Globals> |
||||||
|
</Globals> |
||||||
|
</VisualStudioProject> |
@ -0,0 +1,84 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# |
||||||
|
# Copyright 2009, Google Inc. |
||||||
|
# All rights reserved. |
||||||
|
# |
||||||
|
# Redistribution and use in source and binary forms, with or without |
||||||
|
# modification, are permitted provided that the following conditions are |
||||||
|
# met: |
||||||
|
# |
||||||
|
# * Redistributions of source code must retain the above copyright |
||||||
|
# notice, this list of conditions and the following disclaimer. |
||||||
|
# * Redistributions in binary form must reproduce the above |
||||||
|
# copyright notice, this list of conditions and the following disclaimer |
||||||
|
# in the documentation and/or other materials provided with the |
||||||
|
# distribution. |
||||||
|
# * Neither the name of Google Inc. nor the names of its |
||||||
|
# contributors may be used to endorse or promote products derived from |
||||||
|
# this software without specific prior written permission. |
||||||
|
# |
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||||
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||||
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||||
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||||
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
|
||||||
|
"""Tests that leaked mock objects can be caught be Google Mock.""" |
||||||
|
|
||||||
|
__author__ = 'wan@google.com (Zhanyong Wan)' |
||||||
|
|
||||||
|
import gmock_test_utils |
||||||
|
import os |
||||||
|
import unittest |
||||||
|
|
||||||
|
IS_WINDOWS = os.name == 'nt' |
||||||
|
|
||||||
|
if IS_WINDOWS: |
||||||
|
# TODO(wan@google.com): test the opt build too. We should do it |
||||||
|
# when Vlad Losev's work on Google Test's Python test driver is |
||||||
|
# done, such that we can reuse the work. |
||||||
|
PROGRAM = r'..\build.dbg\gmock_leak_test_.exe' |
||||||
|
else: |
||||||
|
PROGRAM = 'gmock_leak_test_' |
||||||
|
|
||||||
|
PROGRAM_PATH = os.path.join(gmock_test_utils.GetBuildDir(), PROGRAM) |
||||||
|
TEST_WITH_EXPECT_CALL = PROGRAM_PATH + ' --gtest_filter=*ExpectCall*' |
||||||
|
TEST_WITH_ON_CALL = PROGRAM_PATH + ' --gtest_filter=*OnCall*' |
||||||
|
TEST_MULTIPLE_LEAKS = PROGRAM_PATH + ' --gtest_filter=*MultipleLeaked*' |
||||||
|
|
||||||
|
|
||||||
|
class GMockLeakTest(unittest.TestCase): |
||||||
|
|
||||||
|
def testDoesNotCatchLeakedMockByDefault(self): |
||||||
|
self.assertEquals(0, os.system(TEST_WITH_EXPECT_CALL)) |
||||||
|
self.assertEquals(0, os.system(TEST_WITH_ON_CALL)) |
||||||
|
|
||||||
|
def testDoesNotCatchLeakedMockWhenDisabled(self): |
||||||
|
self.assertEquals( |
||||||
|
0, os.system(TEST_WITH_EXPECT_CALL + ' --gmock_catch_leaked_mocks=0')) |
||||||
|
self.assertEquals( |
||||||
|
0, os.system(TEST_WITH_ON_CALL + ' --gmock_catch_leaked_mocks=0')) |
||||||
|
|
||||||
|
def testCatchesLeakedMockWhenEnabled(self): |
||||||
|
self.assertNotEqual( |
||||||
|
os.system(TEST_WITH_EXPECT_CALL + ' --gmock_catch_leaked_mocks'), 0) |
||||||
|
self.assertNotEqual( |
||||||
|
os.system(TEST_WITH_ON_CALL + ' --gmock_catch_leaked_mocks'), 0) |
||||||
|
|
||||||
|
def testCatchesLeakedMockWhenEnabledWithExplictFlagValue(self): |
||||||
|
self.assertNotEqual( |
||||||
|
os.system(TEST_WITH_EXPECT_CALL + ' --gmock_catch_leaked_mocks=1'), 0) |
||||||
|
|
||||||
|
def testCatchesMultipleLeakedMocks(self): |
||||||
|
self.assertNotEqual( |
||||||
|
os.system(TEST_MULTIPLE_LEAKS + ' --gmock_catch_leaked_mocks'), 0) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
gmock_test_utils.Main() |
@ -0,0 +1,95 @@ |
|||||||
|
// Copyright 2009, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Author: wan@google.com (Zhanyong Wan)
|
||||||
|
|
||||||
|
// Google Mock - a framework for writing C++ mock classes.
|
||||||
|
//
|
||||||
|
// This program is for verifying that a leaked mock object can be
|
||||||
|
// caught by Google Mock's leak detector.
|
||||||
|
|
||||||
|
#include <gmock/gmock.h> |
||||||
|
|
||||||
|
namespace { |
||||||
|
|
||||||
|
using ::testing::Return; |
||||||
|
|
||||||
|
class FooInterface { |
||||||
|
public: |
||||||
|
virtual ~FooInterface() {} |
||||||
|
virtual void DoThis() = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
class MockFoo : public FooInterface { |
||||||
|
public: |
||||||
|
MOCK_METHOD0(DoThis, void()); |
||||||
|
}; |
||||||
|
|
||||||
|
TEST(LeakTest, LeakedMockWithExpectCallCausesFailureWhenLeakCheckingIsEnabled) { |
||||||
|
MockFoo* foo = new MockFoo; |
||||||
|
|
||||||
|
EXPECT_CALL(*foo, DoThis()); |
||||||
|
foo->DoThis(); |
||||||
|
|
||||||
|
// In order to test the leak detector, we deliberately leak foo.
|
||||||
|
|
||||||
|
// Makes sure Google Mock's leak detector can change the exit code
|
||||||
|
// to 1 even when the code is already exiting with 0.
|
||||||
|
exit(0); |
||||||
|
} |
||||||
|
|
||||||
|
TEST(LeakTest, LeakedMockWithOnCallCausesFailureWhenLeakCheckingIsEnabled) { |
||||||
|
MockFoo* foo = new MockFoo; |
||||||
|
|
||||||
|
ON_CALL(*foo, DoThis()).WillByDefault(Return()); |
||||||
|
|
||||||
|
// In order to test the leak detector, we deliberately leak foo.
|
||||||
|
|
||||||
|
// Makes sure Google Mock's leak detector can change the exit code
|
||||||
|
// to 1 even when the code is already exiting with 0.
|
||||||
|
exit(0); |
||||||
|
} |
||||||
|
|
||||||
|
TEST(LeakTest, CatchesMultipleLeakedMockObjects) { |
||||||
|
MockFoo* foo1 = new MockFoo; |
||||||
|
MockFoo* foo2 = new MockFoo; |
||||||
|
|
||||||
|
ON_CALL(*foo1, DoThis()).WillByDefault(Return()); |
||||||
|
EXPECT_CALL(*foo2, DoThis()); |
||||||
|
foo2->DoThis(); |
||||||
|
|
||||||
|
// In order to test the leak detector, we deliberately leak foo1 and
|
||||||
|
// foo2.
|
||||||
|
|
||||||
|
// Makes sure Google Mock's leak detector can change the exit code
|
||||||
|
// to 1 even when the code is already exiting with 0.
|
||||||
|
exit(0); |
||||||
|
} |
||||||
|
|
||||||
|
} // namespace
|
Loading…
Reference in new issue