diff options
| author | Josh Bodily <joshbodily@gmail.com> | 2017-12-12 10:36:37 -0700 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-12-12 10:36:37 -0700 | 
| commit | 3e2cb75446e0f56f226f0fb259e032bb4d014002 (patch) | |
| tree | 4d945ff84ee3affb3187acb1fbb8ba9d300718d8 /googlemock/test | |
| parent | cf85f56b2159d7c964dacb3e311163a6f9520688 (diff) | |
| parent | 0fe96607d85cf3a25ac40da369db62bbee2939a5 (diff) | |
| download | googletest-3e2cb75446e0f56f226f0fb259e032bb4d014002.tar.gz googletest-3e2cb75446e0f56f226f0fb259e032bb4d014002.tar.bz2 googletest-3e2cb75446e0f56f226f0fb259e032bb4d014002.zip | |
Merge branch 'master' into josh/fix_scoped_class2
Diffstat (limited to 'googlemock/test')
| -rw-r--r-- | googlemock/test/BUILD.bazel | 2 | ||||
| -rw-r--r-- | googlemock/test/gmock-cardinalities_test.cc | 2 | ||||
| -rw-r--r-- | googlemock/test/gmock-generated-matchers_test.cc | 8 | ||||
| -rw-r--r-- | googlemock/test/gmock-internal-utils_test.cc | 2 | ||||
| -rw-r--r-- | googlemock/test/gmock-matchers_test.cc | 32 | ||||
| -rw-r--r-- | googlemock/test/gmock-nice-strict_test.cc | 23 | ||||
| -rw-r--r-- | googlemock/test/gmock-spec-builders_test.cc | 60 | ||||
| -rw-r--r-- | googlemock/test/gmock_test.cc | 41 | 
8 files changed, 161 insertions, 9 deletions
| diff --git a/googlemock/test/BUILD.bazel b/googlemock/test/BUILD.bazel index 6e67f187..9f1a64d8 100644 --- a/googlemock/test/BUILD.bazel +++ b/googlemock/test/BUILD.bazel @@ -32,6 +32,8 @@  #     #   Bazel Build for Google C++ Testing Framework(Google Test)-googlemock +licenses(["notice"]) +  """ gmock own tests """  cc_test( diff --git a/googlemock/test/gmock-cardinalities_test.cc b/googlemock/test/gmock-cardinalities_test.cc index 64815e57..04c792b5 100644 --- a/googlemock/test/gmock-cardinalities_test.cc +++ b/googlemock/test/gmock-cardinalities_test.cc @@ -391,7 +391,7 @@ TEST(ExactlyTest, HasCorrectBounds) {    EXPECT_EQ(3, c.ConservativeUpperBound());  } -// Tests that a user can make his own cardinality by implementing +// Tests that a user can make their own cardinality by implementing  // CardinalityInterface and calling MakeCardinality().  class EvenCardinality : public CardinalityInterface { diff --git a/googlemock/test/gmock-generated-matchers_test.cc b/googlemock/test/gmock-generated-matchers_test.cc index 8234858d..6cba726d 100644 --- a/googlemock/test/gmock-generated-matchers_test.cc +++ b/googlemock/test/gmock-generated-matchers_test.cc @@ -120,7 +120,7 @@ TEST(ArgsTest, AcceptsOneTemplateArg) {  }  TEST(ArgsTest, AcceptsTwoTemplateArgs) { -  const tuple<short, int, long> t(4, 5, 6L);  // NOLINT +  const tuple<short, int, long> t(static_cast<short>(4), 5, 6L);  // NOLINT    EXPECT_THAT(t, (Args<0, 1>(Lt())));    EXPECT_THAT(t, (Args<1, 2>(Lt()))); @@ -128,13 +128,13 @@ TEST(ArgsTest, AcceptsTwoTemplateArgs) {  }  TEST(ArgsTest, AcceptsRepeatedTemplateArgs) { -  const tuple<short, int, long> t(4, 5, 6L);  // NOLINT +  const tuple<short, int, long> t(static_cast<short>(4), 5, 6L);  // NOLINT    EXPECT_THAT(t, (Args<0, 0>(Eq())));    EXPECT_THAT(t, Not(Args<1, 1>(Ne())));  }  TEST(ArgsTest, AcceptsDecreasingTemplateArgs) { -  const tuple<short, int, long> t(4, 5, 6L);  // NOLINT +  const tuple<short, int, long> t(static_cast<short>(4), 5, 6L);  // NOLINT    EXPECT_THAT(t, (Args<2, 0>(Gt())));    EXPECT_THAT(t, Not(Args<2, 1>(Lt())));  } @@ -159,7 +159,7 @@ TEST(ArgsTest, AcceptsMoreTemplateArgsThanArityOfOriginalTuple) {  }  TEST(ArgsTest, CanBeNested) { -  const tuple<short, int, long, int> t(4, 5, 6L, 6);  // NOLINT +  const tuple<short, int, long, int> t(static_cast<short>(4), 5, 6L, 6);  // NOLINT    EXPECT_THAT(t, (Args<1, 2, 3>(Args<1, 2>(Eq()))));    EXPECT_THAT(t, (Args<0, 1, 3>(Args<0, 2>(Lt()))));  } diff --git a/googlemock/test/gmock-internal-utils_test.cc b/googlemock/test/gmock-internal-utils_test.cc index 9c2423ec..72d9a854 100644 --- a/googlemock/test/gmock-internal-utils_test.cc +++ b/googlemock/test/gmock-internal-utils_test.cc @@ -49,7 +49,7 @@  // implementation.  It must come before gtest-internal-inl.h is  // included, or there will be a compiler error.  This trick is to  // prevent a user from accidentally including gtest-internal-inl.h in -// his code. +// their code.  #define GTEST_IMPLEMENTATION_ 1  #include "src/gtest-internal-inl.h"  #undef GTEST_IMPLEMENTATION_ diff --git a/googlemock/test/gmock-matchers_test.cc b/googlemock/test/gmock-matchers_test.cc index f5ab7c81..4beaec4c 100644 --- a/googlemock/test/gmock-matchers_test.cc +++ b/googlemock/test/gmock-matchers_test.cc @@ -58,6 +58,11 @@  # include <forward_list>  // NOLINT  #endif +// Disable MSVC2015 warning for std::pair: "decorated name length exceeded, name was truncated". +#if defined(_MSC_VER) && (_MSC_VER == 1900) +# pragma warning(disable:4503) +#endif +  namespace testing {  namespace internal { @@ -3588,10 +3593,15 @@ class AClass {    // A getter that returns a reference to const.    const std::string& s() const { return s_; } +#if GTEST_LANG_CXX11 +  const std::string& s_ref() const & { return s_; } +#endif +    void set_s(const std::string& new_s) { s_ = new_s; }    // A getter that returns a reference to non-const.    double& x() const { return x_; } +   private:    int n_;    std::string s_; @@ -3635,6 +3645,21 @@ TEST(PropertyTest, WorksForReferenceToConstProperty) {    EXPECT_FALSE(m.Matches(a));  } +#if GTEST_LANG_CXX11 +// Tests that Property(&Foo::property, ...) works when property() is +// ref-qualified. +TEST(PropertyTest, WorksForRefQualifiedProperty) { +  Matcher<const AClass&> m = Property(&AClass::s_ref, StartsWith("hi")); + +  AClass a; +  a.set_s("hill"); +  EXPECT_TRUE(m.Matches(a)); + +  a.set_s("hole"); +  EXPECT_FALSE(m.Matches(a)); +} +#endif +  // Tests that Property(&Foo::property, ...) works when property()  // returns a reference to non-const.  TEST(PropertyTest, WorksForReferenceToNonConstProperty) { @@ -3911,8 +3936,11 @@ TEST(ResultOfTest, WorksForFunctionReferences) {  // Tests that ResultOf(f, ...) compiles and works as expected when f is a  // function object. -struct Functor : public ::std::unary_function<int, std::string> { -  result_type operator()(argument_type input) const { +struct Functor { +  typedef std::string result_type; +  typedef int argument_type; + +  std::string operator()(int input) const {      return IntToStringFunction(input);    }  }; diff --git a/googlemock/test/gmock-nice-strict_test.cc b/googlemock/test/gmock-nice-strict_test.cc index 5d6ccc4f..0eac6439 100644 --- a/googlemock/test/gmock-nice-strict_test.cc +++ b/googlemock/test/gmock-nice-strict_test.cc @@ -62,6 +62,12 @@ using testing::internal::CaptureStdout;  using testing::internal::GetCapturedStdout;  #endif +// Class without default constructor. +class NotDefaultConstructible { + public: +  explicit NotDefaultConstructible(int) {} +}; +  // Defines some mock classes needed by the tests.  class Foo { @@ -79,6 +85,7 @@ class MockFoo : public Foo {    MOCK_METHOD0(DoThis, void());    MOCK_METHOD1(DoThat, int(bool flag)); +  MOCK_METHOD0(ReturnNonDefaultConstructible, NotDefaultConstructible());   private:    GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFoo); @@ -207,6 +214,22 @@ TEST(NiceMockTest, AllowsExpectedCall) {    nice_foo.DoThis();  } +// Tests that an unexpected call on a nice mock which returns a not-default-constructible +// type throws an exception and the exception contains the method's name. +TEST(NiceMockTest, ThrowsExceptionForUnknownReturnTypes) { +  NiceMock<MockFoo> nice_foo; +#if GTEST_HAS_EXCEPTIONS +  try { +    nice_foo.ReturnNonDefaultConstructible(); +    FAIL(); +  } catch (const std::runtime_error& ex) { +    EXPECT_THAT(ex.what(), HasSubstr("ReturnNonDefaultConstructible")); +  } +#else +  EXPECT_DEATH_IF_SUPPORTED({ nice_foo.ReturnNonDefaultConstructible(); }, ""); +#endif +} +  // Tests that an unexpected call on a nice mock fails.  TEST(NiceMockTest, UnexpectedCallFails) {    NiceMock<MockFoo> nice_foo; diff --git a/googlemock/test/gmock-spec-builders_test.cc b/googlemock/test/gmock-spec-builders_test.cc index 389e0709..a7bf03e5 100644 --- a/googlemock/test/gmock-spec-builders_test.cc +++ b/googlemock/test/gmock-spec-builders_test.cc @@ -93,8 +93,11 @@ using testing::Sequence;  using testing::SetArgPointee;  using testing::internal::ExpectationTester;  using testing::internal::FormatFileLocation; +using testing::internal::kAllow;  using testing::internal::kErrorVerbosity; +using testing::internal::kFail;  using testing::internal::kInfoVerbosity; +using testing::internal::kWarn;  using testing::internal::kWarningVerbosity;  using testing::internal::linked_ptr; @@ -691,6 +694,61 @@ TEST(ExpectCallSyntaxTest, WarnsOnTooFewActions) {    b.DoB();  } +TEST(ExpectCallSyntaxTest, WarningIsErrorWithFlag) { +  int original_behavior = testing::GMOCK_FLAG(default_mock_behavior); + +  testing::GMOCK_FLAG(default_mock_behavior) = kAllow; +  CaptureStdout(); +  { +    MockA a; +    a.DoA(0); +  } +  std::string output = GetCapturedStdout(); +  EXPECT_TRUE(output.empty()) << output; + +  testing::GMOCK_FLAG(default_mock_behavior) = kWarn; +  CaptureStdout(); +  { +    MockA a; +    a.DoA(0); +  } +  std::string warning_output = GetCapturedStdout(); +  EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", warning_output); +  EXPECT_PRED_FORMAT2(IsSubstring, "Uninteresting mock function call", +                      warning_output); + +  testing::GMOCK_FLAG(default_mock_behavior) = kFail; +  EXPECT_NONFATAL_FAILURE({ +    MockA a; +    a.DoA(0); +  }, "Uninteresting mock function call"); + +  // Out of bounds values are converted to kWarn +  testing::GMOCK_FLAG(default_mock_behavior) = -1; +  CaptureStdout(); +  { +    MockA a; +    a.DoA(0); +  } +  warning_output = GetCapturedStdout(); +  EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", warning_output); +  EXPECT_PRED_FORMAT2(IsSubstring, "Uninteresting mock function call", +                      warning_output); +  testing::GMOCK_FLAG(default_mock_behavior) = 3; +  CaptureStdout(); +  { +    MockA a; +    a.DoA(0); +  } +  warning_output = GetCapturedStdout(); +  EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", warning_output); +  EXPECT_PRED_FORMAT2(IsSubstring, "Uninteresting mock function call", +                      warning_output); + +  testing::GMOCK_FLAG(default_mock_behavior) = original_behavior; +} + +  #endif  // GTEST_HAS_STREAM_REDIRECTION  // Tests the semantics of ON_CALL(). @@ -2624,7 +2682,7 @@ TEST(SynchronizationTest, CanCallMockMethodInAction) {  }  // namespace -// Allows the user to define his own main and then invoke gmock_main +// Allows the user to define their own main and then invoke gmock_main  // from it. This might be necessary on some platforms which require  // specific setup and teardown.  #if GMOCK_RENAME_MAIN diff --git a/googlemock/test/gmock_test.cc b/googlemock/test/gmock_test.cc index d8d0c57b..28995345 100644 --- a/googlemock/test/gmock_test.cc +++ b/googlemock/test/gmock_test.cc @@ -40,6 +40,7 @@  #if !defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) +using testing::GMOCK_FLAG(default_mock_behavior);  using testing::GMOCK_FLAG(verbose);  using testing::InitGoogleMock; @@ -103,6 +104,26 @@ TEST(InitGoogleMockTest, ParsesSingleFlag) {    TestInitGoogleMock(argv, new_argv, "info");  } +TEST(InitGoogleMockTest, ParsesMultipleFlags) { +  int old_default_behavior = GMOCK_FLAG(default_mock_behavior); +  const wchar_t* argv[] = { +    L"foo.exe", +    L"--gmock_verbose=info", +    L"--gmock_default_mock_behavior=2", +    NULL +  }; + +  const wchar_t* new_argv[] = { +    L"foo.exe", +    NULL +  }; + +  TestInitGoogleMock(argv, new_argv, "info"); +  EXPECT_EQ(2, GMOCK_FLAG(default_mock_behavior)); +  EXPECT_NE(2, old_default_behavior); +  GMOCK_FLAG(default_mock_behavior) = old_default_behavior; +} +  TEST(InitGoogleMockTest, ParsesUnrecognizedFlag) {    const char* argv[] = {      "foo.exe", @@ -177,6 +198,26 @@ TEST(WideInitGoogleMockTest, ParsesSingleFlag) {    TestInitGoogleMock(argv, new_argv, "info");  } +TEST(WideInitGoogleMockTest, ParsesMultipleFlags) { +  int old_default_behavior = GMOCK_FLAG(default_mock_behavior); +  const wchar_t* argv[] = { +    L"foo.exe", +    L"--gmock_verbose=info", +    L"--gmock_default_mock_behavior=2", +    NULL +  }; + +  const wchar_t* new_argv[] = { +    L"foo.exe", +    NULL +  }; + +  TestInitGoogleMock(argv, new_argv, "info"); +  EXPECT_EQ(2, GMOCK_FLAG(default_mock_behavior)); +  EXPECT_NE(2, old_default_behavior); +  GMOCK_FLAG(default_mock_behavior) = old_default_behavior; +} +  TEST(WideInitGoogleMockTest, ParsesUnrecognizedFlag) {    const wchar_t* argv[] = {      L"foo.exe", | 
