Allows Field() and Property() to work when the matcher argument is a pointer passed by reference.
This commit is contained in:
parent
e122e457a6
commit
6953a725fc
|
@ -1784,7 +1784,8 @@ template <typename Class, typename FieldType, typename T>
|
|||
bool MatchAndExplain(const FieldMatcher<Class, FieldType>& matcher,
|
||||
T& value, MatchResultListener* listener) {
|
||||
return matcher.MatchAndExplain(
|
||||
typename ::testing::internal::is_pointer<T>::type(), value, listener);
|
||||
typename ::testing::internal::is_pointer<GMOCK_REMOVE_CONST_(T)>::type(),
|
||||
value, listener);
|
||||
}
|
||||
|
||||
// Implements the Property() matcher for matching a property
|
||||
|
@ -1849,7 +1850,8 @@ template <typename Class, typename PropertyType, typename T>
|
|||
bool MatchAndExplain(const PropertyMatcher<Class, PropertyType>& matcher,
|
||||
T& value, MatchResultListener* listener) {
|
||||
return matcher.MatchAndExplain(
|
||||
typename ::testing::internal::is_pointer<T>::type(), value, listener);
|
||||
typename ::testing::internal::is_pointer<GMOCK_REMOVE_CONST_(T)>::type(),
|
||||
value, listener);
|
||||
}
|
||||
|
||||
// Type traits specifying various features of different functors for ResultOf.
|
||||
|
@ -2018,7 +2020,8 @@ class ContainerEqMatcher {
|
|||
*os << "Only in actual: ";
|
||||
printed_header = true;
|
||||
}
|
||||
UniversalPrinter<typename LhsStlContainer::value_type>::Print(*it, os);
|
||||
UniversalPrinter<typename LhsStlContainer::value_type>::
|
||||
Print(*it, os);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2648,6 +2648,16 @@ TEST(FieldForPointerTest, WorksForPointerToNonConst) {
|
|||
EXPECT_FALSE(m.Matches(&a));
|
||||
}
|
||||
|
||||
// Tests that Field() works when the argument is a reference to a const pointer.
|
||||
TEST(FieldForPointerTest, WorksForReferenceToConstPointer) {
|
||||
Matcher<AStruct* const&> m = Field(&AStruct::x, Ge(0));
|
||||
|
||||
AStruct a;
|
||||
EXPECT_TRUE(m.Matches(&a));
|
||||
a.x = -1;
|
||||
EXPECT_FALSE(m.Matches(&a));
|
||||
}
|
||||
|
||||
// Tests that Field() does not match the NULL pointer.
|
||||
TEST(FieldForPointerTest, DoesNotMatchNull) {
|
||||
Matcher<const AStruct*> m = Field(&AStruct::x, _);
|
||||
|
@ -2846,6 +2856,19 @@ TEST(PropertyForPointerTest, WorksForPointerToNonConst) {
|
|||
EXPECT_FALSE(m.Matches(&a));
|
||||
}
|
||||
|
||||
// Tests that Property() works when the argument is a reference to a
|
||||
// const pointer.
|
||||
TEST(PropertyForPointerTest, WorksForReferenceToConstPointer) {
|
||||
Matcher<AClass* const&> m = Property(&AClass::s, StartsWith("hi"));
|
||||
|
||||
AClass a;
|
||||
a.set_s("hill");
|
||||
EXPECT_TRUE(m.Matches(&a));
|
||||
|
||||
a.set_s("hole");
|
||||
EXPECT_FALSE(m.Matches(&a));
|
||||
}
|
||||
|
||||
// Tests that Property() does not match the NULL pointer.
|
||||
TEST(PropertyForPointerTest, WorksForReferenceToNonConstProperty) {
|
||||
Matcher<const AClass*> m = Property(&AClass::x, _);
|
||||
|
|
Loading…
Reference in New Issue
Block a user