From f4274520da256a3e8dd4fe2aa2e714f44ad89d18 Mon Sep 17 00:00:00 2001 From: "zhanyong.wan" Date: Wed, 24 Apr 2013 02:49:43 +0000 Subject: [PATCH] Makes EXPECT_THAT typesafe; updates CHANGES for 1.7.0; pulls in gtest r653 --- CHANGES | 22 +++++++++++++++++++++- include/gmock/gmock-matchers.h | 6 ++++-- test/gmock-matchers_test.cc | 9 +++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 4ccabf6d..d20b50b7 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,26 @@ Changes for 1.7.0: -TO BE WRITTEN. +* All new improvements in Google Test 1.7.0. +* New feature: matchers WhenSorted(), WhenSortedBy(), IsEmpty(), and + SizeIs(). +* Improvement: Google Mock can now be built as a DLL. +* Improvement: when exceptions are enabled, a mock method with no + default action now throws instead crashing the test. +* Improvement: function return types used in MOCK_METHOD*() macros can + now contain unprotected commas. +* Improvement (potentially breaking): EXPECT_THAT() and ASSERT_THAT() + are now more strict in ensuring that the value type and the matcher + type are compatible, catching potential bugs in tests. +* Improvement: Pointee() now works on an optional. +* Improvement: the ElementsAreArray() matcher can now take a vector or + iterator range as input, and makes a copy of its input elements + before the conversion to a Matcher. +* Bug fix: mock object destruction triggerred by another mock object's + destruction no longer hangs. +* Improvement: Google Mock Doctor works better with newer Clang and + GCC now. +* Compatibility fixes. +* Bug/warning fixes. Changes for 1.6.0: diff --git a/include/gmock/gmock-matchers.h b/include/gmock/gmock-matchers.h index 962cfde9..d4977273 100644 --- a/include/gmock/gmock-matchers.h +++ b/include/gmock/gmock-matchers.h @@ -1613,10 +1613,12 @@ class PredicateFormatterFromMatcher { // know which type to instantiate it to until we actually see the // type of x here. // - // We write MatcherCast(matcher_) instead of + // We write SafeMatcherCast(matcher_) instead of // Matcher(matcher_), as the latter won't compile when // matcher_ has type Matcher (e.g. An()). - const Matcher matcher = MatcherCast(matcher_); + // We don't write MatcherCast either, as that allows + // potentially unsafe downcasting of the matcher argument. + const Matcher matcher = SafeMatcherCast(matcher_); StringMatchResultListener listener; if (MatchPrintAndExplain(x, matcher, &listener)) return AssertionSuccess(); diff --git a/test/gmock-matchers_test.cc b/test/gmock-matchers_test.cc index 66459464..3ec2989e 100644 --- a/test/gmock-matchers_test.cc +++ b/test/gmock-matchers_test.cc @@ -721,6 +721,15 @@ TEST(ATest, MatchesAnyValue) { EXPECT_TRUE(m2.Matches(b)); } +TEST(ATest, WorksForDerivedClass) { + Base base; + Derived derived; + EXPECT_THAT(&base, A()); + // This shouldn't compile: EXPECT_THAT(&base, A()); + EXPECT_THAT(&derived, A()); + EXPECT_THAT(&derived, A()); +} + // Tests that A() describes itself properly. TEST(ATest, CanDescribeSelf) { EXPECT_EQ("is anything", Describe(A()));