Makes EXPECT_THAT typesafe; updates CHANGES for 1.7.0; pulls in gtest r653

This commit is contained in:
zhanyong.wan 2013-04-24 02:49:43 +00:00
parent 061f1d4d16
commit f4274520da
3 changed files with 34 additions and 3 deletions

22
CHANGES
View File

@ -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<T>.
* 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:

View File

@ -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<const T&>(matcher_) instead of
// We write SafeMatcherCast<const T&>(matcher_) instead of
// Matcher<const T&>(matcher_), as the latter won't compile when
// matcher_ has type Matcher<T> (e.g. An<int>()).
const Matcher<const T&> matcher = MatcherCast<const T&>(matcher_);
// We don't write MatcherCast<const T&> either, as that allows
// potentially unsafe downcasting of the matcher argument.
const Matcher<const T&> matcher = SafeMatcherCast<const T&>(matcher_);
StringMatchResultListener listener;
if (MatchPrintAndExplain(x, matcher, &listener))
return AssertionSuccess();

View File

@ -721,6 +721,15 @@ TEST(ATest, MatchesAnyValue) {
EXPECT_TRUE(m2.Matches(b));
}
TEST(ATest, WorksForDerivedClass) {
Base base;
Derived derived;
EXPECT_THAT(&base, A<Base*>());
// This shouldn't compile: EXPECT_THAT(&base, A<Derived*>());
EXPECT_THAT(&derived, A<Base*>());
EXPECT_THAT(&derived, A<Derived*>());
}
// Tests that A<T>() describes itself properly.
TEST(ATest, CanDescribeSelf) {
EXPECT_EQ("is anything", Describe(A<bool>()));