diff options
-rw-r--r-- | googlemock/Makefile.am | 4 | ||||
-rw-r--r-- | googlemock/test/gmock_doctor_nc.cc | 294 | ||||
-rwxr-xr-x | googlemock/test/gmock_doctor_test.py | 242 |
3 files changed, 0 insertions, 540 deletions
diff --git a/googlemock/Makefile.am b/googlemock/Makefile.am index c77ef2b..4d4c965 100644 --- a/googlemock/Makefile.am +++ b/googlemock/Makefile.am @@ -157,10 +157,6 @@ EXTRA_DIST += \ scripts/generator/cpp/utils.py \ scripts/generator/gmock_gen.py -# Script for diagnosing compiler errors in programs that use Google -# Mock. -EXTRA_DIST += scripts/gmock_doctor.py - # CMake scripts. EXTRA_DIST += \ CMakeLists.txt diff --git a/googlemock/test/gmock_doctor_nc.cc b/googlemock/test/gmock_doctor_nc.cc deleted file mode 100644 index e20f4dc..0000000 --- a/googlemock/test/gmock_doctor_nc.cc +++ /dev/null @@ -1,294 +0,0 @@ -// Copyright 2008, 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. - - -#include "gmock/gmock.h" - -bool Overloaded(int n) { return n > 0; } -bool Overloaded(double x) { return x > 0; } - -class Foo { - public: - virtual ~Foo() {} - virtual int IntFunc(bool* p) = 0; - virtual void VoidFunc(int n) = 0; - virtual int& GetIntRef() = 0; - virtual Foo* GetPointer() = 0; - virtual int Do(void (*fp)()) = 0; -}; - -class MockFoo : public Foo { - public: - MOCK_METHOD1(IntFunc, int(bool* p)); - MOCK_METHOD1(VoidFunc, void(int n)); - MOCK_METHOD0(GetIntRef, int&()); - MOCK_METHOD0(GetPointer, Foo*()); - MOCK_METHOD1(Do, int(void (*fp)())); -}; - -class Bar { - public: - virtual ~Bar() {} - int Overloaded() { return 1; } - virtual void Overloaded(int n) {} -}; - -#if defined(TEST_MOP) - -using ::testing::_; -using ::testing::Return; - -// Tests that Google Mock Doctor can diagnose the Mock Object Pointer -// disease. -void Test() { - MockFoo foo; - ON_CALL(&foo, IntFunc(_)).WillByDefault(Return(0)); - EXPECT_CALL(&foo, VoidFunc(_)); -} - -#elif defined(TEST_NRS1) - -using ::testing::_; -using ::testing::SetArgPointee; - -// Tests that Google Mock Doctor can diagnose the Need to Return -// Something disease. -void Test() { - MockFoo foo; - EXPECT_CALL(foo, IntFunc(_)) - .WillOnce(SetArgPointee<0>(true)); -} - -#elif defined(TEST_NRS2) - -using ::testing::_; -using ::testing::Return; - -// Tests that Google Mock Doctor can diagnose the Need to Return -// Something disease. -void Test() { - MockFoo foo; - EXPECT_CALL(foo, IntFunc(_)) - .WillOnce(Return()); -} - -#elif defined(TEST_NRS3) - -using ::testing::_; -using ::testing::InvokeArgument; - -// Tests that Google Mock Doctor can diagnose the Need to Return -// Something disease. -void Test() { - MockFoo foo; - EXPECT_CALL(foo, Do(_)) - .WillOnce(InvokeArgument<0>()); -} - -#elif defined(TEST_IBRA) - -// Tests that Google Mock Doctor can diagnose the Incomplete -// By-Reference Argument Type disease. - -class Incomplete; - -class MockBar { - public: - MOCK_METHOD1(ByRefFunc, void(const Incomplete&)); -}; - -void Test() { - MockBar bar; -} - -#elif defined(TEST_OFM) - -// Tests that Google Mock Doctor can diagnose the Overloaded Function -// Matcher disease. -void Test() { - using ::testing::Matcher; - using ::testing::Truly; - - Matcher<int> m = Truly(Overloaded); -} - -#elif defined(TEST_NO_NUS_FOR_NON_GMOCK_SYMBOL) - -// Tests that Google Mock Doctor doesn't report the Need to Use Symbol -// disease when the undeclared symbol is not from Google Mock. -void Test() { - MockFoo foo; - EXPECT_CALL(foo, IntFunc(NonGMockMatcher())); -} - -#elif defined(TEST_NUS_VARIABLE) - -// Tests that Google Mock Doctor can diagnose the Need to Use Symbol -// disease when the undeclared symbol is a variable. -void Test() { - MockFoo foo; - EXPECT_CALL(foo, IntFunc(_)); -} - -#elif defined(TEST_NUS_FUNCTION) - -// Tests that Google Mock Doctor can diagnose the Need to Use Symbol -// disease when the undeclared symbol is a function. -void Test() { - MockFoo foo; - EXPECT_CALL(foo, IntFunc(NULL)) - .Times(AtLeast(1)); -} - -#elif defined(TEST_NUS_FUNCTION_TEMPLATE) - -// Tests that Google Mock Doctor can diagnose the Need to Use Symbol -// disease when the undeclared symbol is a function template with no -// explicit template argument. -void Test() { - MockFoo foo; - EXPECT_CALL(foo, IntFunc(NULL)) - .WillOnce(Return(1)); -} - -#elif defined(TEST_NUS_FUNCTION_TEMPLATE_WITH_TYPE_ARG) - -// Tests that Google Mock Doctor can diagnose the Need to Use Symbol -// disease when the undeclared symbol is a function template with an -// explicit template type argument. -void Test() { - MockFoo foo; - EXPECT_CALL(foo, IntFunc(A<bool*>())); -} - -#elif defined(TEST_NUS_FUNCTION_TEMPLATE_WITH_NONTYPE_ARG) - -// Tests that Google Mock Doctor can diagnose the Need to Use Symbol -// disease when the undeclared symbol is a function template with an -// explicit template non-type argument. -using ::testing::_; - -void Test() { - MockFoo foo; - int n; - EXPECT_CALL(foo, VoidFunc(_)).WillOnce(SaveArg<0>(&n)); -} - -#elif defined(TEST_NUS_CLASS) - -// Tests that Google Mock Doctor can diagnose the Need to Use Symbol -// disease when the undeclared symbol is a class. -void Test() { - MockFoo foo; - Sequence s; - Mock::VerifyAndClear(&foo); -} - -#elif defined(TEST_NRR) - -using ::testing::Return; - -// Tests that Google Mock Doctor can diagnose the Need to Return -// Reference disease (using Return() when ReturnRef() should be used). -void Test() { - int n = 0; - MockFoo foo; - EXPECT_CALL(foo, GetIntRef()) - .WillOnce(Return(n)); -} - -#elif defined(TEST_MULTI_OCCURRENCES_OF_SAME_DISEASE) - -// Tests that Google Mock Doctor can diagnose multiple occurrences of -// the same disease in the same code. - -class Incomplete; -class Incomplete2; - -class MockBar { - public: - MOCK_METHOD1(ByRefFunc, void(const Incomplete&)); - MOCK_METHOD1(ByRefFunc, void(const Incomplete2&)); -}; - -MockBar bar; - -#elif defined(TEST_NRNULL) - -using ::testing::Return; - -// Tests that gMock Doctor can diagnose the Need to use ReturnNull -// disease (using Return(NULL) when ReturnNull() should be used). -void Test() { - MockFoo foo; - EXPECT_CALL(foo, GetPointer()) - .WillOnce(Return(NULL)); -} - -#elif defined(TEST_WPP) - -using ::testing::_; -using ::testing::Return; - -// Tests that gMock doctor can diagnose the Wrong Parenthesis Position -// disease. -void Test() { - MockFoo foo; - - ON_CALL(foo, IntFunc(_).WillByDefault(Return(0))); - EXPECT_CALL(foo, VoidFunc(_).Times(1)); - EXPECT_CALL(foo, VoidFunc(_).WillOnce(Return())); -} - -#elif defined(TEST_TTB) - -template <typename T> -class Stack { - public: - typedef unsigned int SomeType; -}; - -// Tests that gMock doctor can diagnose the Type in Template Base -// disease. -template <typename T> -class MockStack : public Stack<T> { - public: - // typedef typename Stack<T>::SomeType SomeType; would fix the errors. - - // Uses a type from Stack<T> as the mock function's return type. - MOCK_METHOD0_T(IsEmpty, SomeType()); - - // Uses a type from Stack<T> as the sole parameter of the mock function. - MOCK_CONST_METHOD1_T(IsOK1, bool(SomeType)); - - // Uses a type from Stack<T> as one of the parameters of the mock function. - MOCK_CONST_METHOD3_T(IsOK2, bool(int, int, SomeType)); -}; - -#endif diff --git a/googlemock/test/gmock_doctor_test.py b/googlemock/test/gmock_doctor_test.py deleted file mode 100755 index 24a2ec4..0000000 --- a/googlemock/test/gmock_doctor_test.py +++ /dev/null @@ -1,242 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2008, 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 for gmock_doctor.py.""" - -import os -import sys - -IS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux' -if not IS_LINUX: - sys.stderr.write( - 'WARNING: Negative compilation tests are not supported on this platform') - sys.exit(0) - -# Suppresses the 'Import not at the top of the file' lint complaint. -# pylint: disable-msg=C6204 -import google3.third_party.googletest.googlemock.scripts.gmock_doctor -gmock_doctor = google3.third_party.googletest.googlemock.scripts.gmock_doctor -from google3.testing.pybase import fake_target_util -from google3.testing.pybase import googletest -# pylint: enable-msg=C6204 - - -def GetCompilerCommand(): - """Returns the command used for compiling gmock_doctor_nc.cc.""" - - # Parses the fake output generated by the cc_fake_binary rule. - target = fake_target_util.ParseFakeTargetFile( - 'google3/third_party/googletest/googlemock/test/gmock_doctor_nc') - - # Looks up the command for making the desired target. - command = target.CommandMap()['gmock_doctor_nc.o'] - - # Looks up where Makefile is. - makefile_dir = target.MakefileDir() - - # Changes the current directory to where Makefile is - the - # compilation must be done there. - os.chdir(makefile_dir) - - return command - - -def CompileSection(section_name): - """Compiles the given section in gmock_doctor_nc.cc. - - The error messages from the compiler will be printed on stdout such that - they can be easily piped to the Google Mock Doctor. - - Args: - section_name: Name of the section in gmock_doctor_nc.cc that should - be compiled. - """ - - command = GetCompilerCommand() - (_, compiler_errors) = googletest.GetCommandStderr( - command + ' -DTEST_' + section_name, - env = {'TEST_TMPDIR': os.environ['TEST_TMPDIR']}) - print compiler_errors - - -class GMockDoctorTest(googletest.TestCase): - def setUp(self): - self.command = GetCompilerCommand() - - def CheckDiagnoses(self, test_name, diseases): - """Checks the diagnoses for the given compiler output. - - Args: - test_name: Name of the section in gmock_doctor_nc.cc that should - be compiled. - - diseases: A list of disease short names that Google Mock Doctor - should diagnose. - """ - - _, compiler_errors = googletest.GetCommandStderr( - self.command + ' -DTEST_' + test_name, - env = {'TEST_TMPDIR': os.environ['TEST_TMPDIR']}) - - self.CheckDiagnosesForOutput(compiler_errors, diseases) - - def CheckDiagnosesForOutput(self, compiler_errors, diseases): - """Checks the diagnoses for the given test. - - Args: - compiler_errors: The compiler diagnostics to check for diseases. - - diseases: A list of disease short names that Google Mock Doctor - should diagnose. - """ - - diagnoses = gmock_doctor.Diagnose(compiler_errors) - num_diseases = len(diseases) - num_diagnoses = len(diagnoses) - - for i in range(min(num_diseases, num_diagnoses)): - self.assert_(('[' + diseases[i] + ' ') in diagnoses[i], - ('Compiler error message:\n\n' - '%sgmock_doctor.py\'s diagnoses:\n%s\n\n' - 'Failed to diagnose the %s disease.') - % (compiler_errors, diagnoses[i], diseases[i])) - - self.assertEquals(num_diseases, num_diagnoses, - ('%d diseases, but %d diagnoses, where the ' - 'compiler errors are:\n%s\n' - 'and where the diseases are:\n%s\n' - 'and where the diagnoses are:\n%s\n') - % (num_diseases, num_diagnoses, compiler_errors, - str(diseases), str(diagnoses))) - - def testMOP(self): - self.CheckDiagnoses('MOP', 2 * ['MOP']) - - def testNRS1(self): - self.CheckDiagnoses('NRS1', ['NRS']) - - def testNRS2(self): - self.CheckDiagnoses('NRS2', ['NRS']) - - def testNRS3(self): - self.CheckDiagnoses('NRS3', ['NRS']) - - def testIBRA(self): - self.CheckDiagnoses('IBRA', ['IBRA']) - - def testOFM(self): - self.CheckDiagnoses('OFM', ['OFM']) - - def testNoNUSForNonGMockSymbol(self): - self.CheckDiagnoses('NO_NUS_FOR_NON_GMOCK_SYMBOL', []) - - def testNUSVariable(self): - self.CheckDiagnoses('NUS_VARIABLE', ['NUS']) - - def testNUSFunction(self): - self.CheckDiagnoses('NUS_FUNCTION', ['NUS']) - - def testNUSFunctionTemplate(self): - self.CheckDiagnoses('NUS_FUNCTION_TEMPLATE', ['NUS']) - - def testNUSFunctionTemplateWithTypeArg(self): - self.CheckDiagnoses('NUS_FUNCTION_TEMPLATE_WITH_TYPE_ARG', ['NUS']) - - def testNUSFunctionTemplateWithNontypeArg(self): - self.CheckDiagnoses('NUS_FUNCTION_TEMPLATE_WITH_NONTYPE_ARG', ['NUS']) - - def testNUSClass(self): - self.CheckDiagnoses('NUS_CLASS', 2 * ['NUS']) - - def testNRR(self): - self.CheckDiagnoses('NRR', ['NRR']) - - def testMultipleOccurrences(self): - self.CheckDiagnoses('MULTI_OCCURRENCES_OF_SAME_DISEASE', 2 * ['IBRA']) - - def testNRNULL(self): - self.CheckDiagnoses('NRNULL', ['NRNULL']) - - def testWPP(self): - self.CheckDiagnoses('WPP', 3 * ['WPP']) - - def testTTB(self): - self.CheckDiagnoses('TTB', 3 * ['TTB']) - - def testUnderstandsCharaterPositionsInGcc(self): - # We cannot guarantee that the system compiler will output character - # positions so we inject the compiler output. - compiler_errors = ( - 'In file included from /usr/include/gmock/gmock.h:58:0,\n' - ' from foo.cpp:4:\n' - '/usr/include/gmock/gmock-actions.h: In member function' - " 'testing::internal::ReturnAction<R>::operator testing::Action<Func>()" - ' const [with F = const std::complex<double>&(unsigned int),' - " R = std::complex<double>]':\n" - 'foo.cpp:116:28: instantiated from here\n' - '/usr/include/gmock/gmock-actions.h:449:5: error:' - " creating array with negative size ('-0x00000000000000001')") - self.CheckDiagnosesForOutput(compiler_errors, ['NRR']) - - def testUnderstandsLeftAndRightSingleQuotes(self): - # We cannot guarantee that the system compiler will output single quote - # characters so we inject the compiler output. - compiler_errors = ( - 'In file included from /usr/include/gmock/gmock.h:58,\n' - ' from foo.cpp:4:\n' - '/usr/include/gmock/gmock-actions.h: In member function' - ' \xe2\x80\x98testing::internal::ReturnAction<R>::operator' - ' testing::Action<Func>() const' - ' [with F = const std::complex<double>&(unsigned int),' - ' R = std::complex<double>]\xe2\x80\x99:\n' - 'foo.cpp:116: instantiated from here\n' - '/usr/include/gmock/gmock-actions.h:449: error:' - ' creating array with negative size' - ' (\xe2\x80\x98-0x00000000000000001\xe2\x80\x99)') - self.CheckDiagnosesForOutput(compiler_errors, ['NRR']) - - -if __name__ == '__main__': - if len(sys.argv) == 1: - googletest.main() - else: - # To make it easy for a user to see Google Mock Doctor in action, - # we compile the given section in gmock_doctor_nc.cc and direct - # the error messages to stdout, when the test is run with a - # section name on the command line. Then the user can pipe the - # output to Google Mock Doctor and see what the diagnoses are - # like. For example, to demo how Google Mock Doctor diagnoses the - # NRN disease: - # - # $ blaze build third_party/googletest/googlemock/test:gmock_doctor_test - # $ blaze-bin/third_party/googletest/googlemock/test/gmock_doctor_test NRN | \ - # third_party/googletest/googlemock/scripts/gmock_doctor.py - CompileSection(sys.argv[1]) |