diff options
author | vslashg <gfalcon@google.com> | 2020-07-15 18:09:20 (GMT) |
---|---|---|
committer | vslashg <gfalcon@google.com> | 2020-07-15 18:09:20 (GMT) |
commit | af287b4ffd20cd3b1cd7cf07314c6f923d38ccec (patch) | |
tree | 5c8c00818d4a64a5d0cc18f70bf6d6672bb05e2c /googlemock | |
parent | 70b90929b1da20580cad9ed996397cf04ef8f16d (diff) | |
parent | 0d2830b283f9e883e88650d3b33ebac6b9184f16 (diff) | |
download | googletest-af287b4ffd20cd3b1cd7cf07314c6f923d38ccec.zip googletest-af287b4ffd20cd3b1cd7cf07314c6f923d38ccec.tar.gz googletest-af287b4ffd20cd3b1cd7cf07314c6f923d38ccec.tar.bz2 |
Merge pull request #2903 from AmatanHead:informative-exception-asserts
PiperOrigin-RevId: 320425648
Diffstat (limited to 'googlemock')
-rw-r--r-- | googlemock/test/gmock-generated-matchers_nc.cc | 72 | ||||
-rwxr-xr-x | googlemock/test/gmock_generated_matchers_nc_test.py | 88 |
2 files changed, 160 insertions, 0 deletions
diff --git a/googlemock/test/gmock-generated-matchers_nc.cc b/googlemock/test/gmock-generated-matchers_nc.cc new file mode 100644 index 0000000..84d9884 --- /dev/null +++ b/googlemock/test/gmock-generated-matchers_nc.cc @@ -0,0 +1,72 @@ +// 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file contains negative compilation tests for script-generated +// Google Mock matchers. + +#include "gmock/gmock.h" + +#if defined(TEST_WRONG_ARG_TYPE_IN_MATCHER_MACRO) + +// Tests using an MATCHER definition to match a value of an +// incompatible type. +MATCHER(WrongArgType, "") { return 10/arg > 2; } + +void Test() { + testing::Matcher<const char*> m = WrongArgType(); +} + +#elif defined(TEST_MATCHER_MACRO_IN_CLASS) + +// Tests using MATCHER in a class scope. +class Foo { + public: + // This won't compile as C++ doesn't allow defining a method of a + // nested class out-of-line in the enclosing class. + MATCHER(Bar, "") { return arg > 0; } +}; + +#elif defined(TEST_MATCHER_MACRO_IN_FUNCTION) + +// Tests using MATCHER in a function body. +void Test() { + // This won't compile as C++ doesn't allow member templates in local + // classes. We may want to revisit this when C++0x is widely + // implemented. + MATCHER(Bar, "") { return arg > 0; } +} + +#else + +// Sanity check - this should compile. + +#endif diff --git a/googlemock/test/gmock_generated_matchers_nc_test.py b/googlemock/test/gmock_generated_matchers_nc_test.py new file mode 100755 index 0000000..1a2b3b8 --- /dev/null +++ b/googlemock/test/gmock_generated_matchers_nc_test.py @@ -0,0 +1,88 @@ +#!/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. + +# Google Mock - a framework for writing C++ mock classes. +# +# This file drives the negative compilation tests for script-generated +# Google Mock matchers. + +"""Driver for the NC tests for script-generated Google Mock matchers.""" + +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 +from google3.testing.pybase import fake_target_util +from google3.testing.pybase import googletest +# pylint: enable-msg=C6204 + + +class GMockGeneratedMatcherTest(googletest.TestCase): + """Negative compilation tests for generated Google Mock matchers.""" + + def testCompilerErrors(self): + """Verifies that erroneous code leads to expected compiler messages.""" + + # Defines a list of test specs, where each element is a tuple + # (test name, list of regexes for matching the compiler errors). + test_specs = [ + ("WRONG_ARG_TYPE_IN_MATCHER_MACRO", + [r"invalid operands", + ]), + ("MATCHER_MACRO_IN_CLASS", + [r"cannot define member function.*Bar.*within.*Foo", # GCC + r"MATCHER\(Bar, .*\)", # Clang + ]), + ("MATCHER_MACRO_IN_FUNCTION", + [r"invalid declaration of member template in local class", # GCC + r"templates cannot be declared inside of a local class", # Clang + ]), + ("SANITY", + None), + ] + + fake_target_util.AssertCcCompilerErrors( + self, # The current test case. + "google3/third_party/googletest/googlemock/test/" + "gmock-generated-matchers_nc", # The fake target file. + "gmock-generated-matchers_nc.o", # The sub-target to build. + test_specs # List of test specs. + ) + +if __name__ == "__main__": + googletest.main() |