|
|
@ -2232,7 +2232,10 @@ class FieldMatcher { |
|
|
|
|
|
|
|
|
|
|
|
// Implements the Property() matcher for matching a property
|
|
|
|
// Implements the Property() matcher for matching a property
|
|
|
|
// (i.e. return value of a getter method) of an object.
|
|
|
|
// (i.e. return value of a getter method) of an object.
|
|
|
|
template <typename Class, typename PropertyType> |
|
|
|
//
|
|
|
|
|
|
|
|
// Property is a const-qualified member function of Class returning
|
|
|
|
|
|
|
|
// PropertyType.
|
|
|
|
|
|
|
|
template <typename Class, typename PropertyType, typename Property> |
|
|
|
class PropertyMatcher { |
|
|
|
class PropertyMatcher { |
|
|
|
public: |
|
|
|
public: |
|
|
|
// The property may have a reference type, so 'const PropertyType&'
|
|
|
|
// The property may have a reference type, so 'const PropertyType&'
|
|
|
@ -2241,8 +2244,7 @@ class PropertyMatcher { |
|
|
|
// PropertyType being a reference or not.
|
|
|
|
// PropertyType being a reference or not.
|
|
|
|
typedef GTEST_REFERENCE_TO_CONST_(PropertyType) RefToConstProperty; |
|
|
|
typedef GTEST_REFERENCE_TO_CONST_(PropertyType) RefToConstProperty; |
|
|
|
|
|
|
|
|
|
|
|
PropertyMatcher(PropertyType (Class::*property)() const, |
|
|
|
PropertyMatcher(Property property, const Matcher<RefToConstProperty>& matcher) |
|
|
|
const Matcher<RefToConstProperty>& matcher) |
|
|
|
|
|
|
|
: property_(property), matcher_(matcher) {} |
|
|
|
: property_(property), matcher_(matcher) {} |
|
|
|
|
|
|
|
|
|
|
|
void DescribeTo(::std::ostream* os) const { |
|
|
|
void DescribeTo(::std::ostream* os) const { |
|
|
@ -2295,7 +2297,7 @@ class PropertyMatcher { |
|
|
|
return MatchAndExplainImpl(false_type(), *p, listener); |
|
|
|
return MatchAndExplainImpl(false_type(), *p, listener); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
PropertyType (Class::*property_)() const; |
|
|
|
Property property_; |
|
|
|
const Matcher<RefToConstProperty> matcher_; |
|
|
|
const Matcher<RefToConstProperty> matcher_; |
|
|
|
|
|
|
|
|
|
|
|
GTEST_DISALLOW_ASSIGN_(PropertyMatcher); |
|
|
|
GTEST_DISALLOW_ASSIGN_(PropertyMatcher); |
|
|
@ -3908,11 +3910,13 @@ inline PolymorphicMatcher< |
|
|
|
// Property(&Foo::str, StartsWith("hi"))
|
|
|
|
// Property(&Foo::str, StartsWith("hi"))
|
|
|
|
// matches a Foo object x iff x.str() starts with "hi".
|
|
|
|
// matches a Foo object x iff x.str() starts with "hi".
|
|
|
|
template <typename Class, typename PropertyType, typename PropertyMatcher> |
|
|
|
template <typename Class, typename PropertyType, typename PropertyMatcher> |
|
|
|
inline PolymorphicMatcher< |
|
|
|
inline PolymorphicMatcher<internal::PropertyMatcher< |
|
|
|
internal::PropertyMatcher<Class, PropertyType> > Property( |
|
|
|
Class, PropertyType, PropertyType (Class::*)() const> > |
|
|
|
PropertyType (Class::*property)() const, const PropertyMatcher& matcher) { |
|
|
|
Property(PropertyType (Class::*property)() const, |
|
|
|
|
|
|
|
const PropertyMatcher& matcher) { |
|
|
|
return MakePolymorphicMatcher( |
|
|
|
return MakePolymorphicMatcher( |
|
|
|
internal::PropertyMatcher<Class, PropertyType>( |
|
|
|
internal::PropertyMatcher<Class, PropertyType, |
|
|
|
|
|
|
|
PropertyType (Class::*)() const>( |
|
|
|
property, |
|
|
|
property, |
|
|
|
MatcherCast<GTEST_REFERENCE_TO_CONST_(PropertyType)>(matcher))); |
|
|
|
MatcherCast<GTEST_REFERENCE_TO_CONST_(PropertyType)>(matcher))); |
|
|
|
// The call to MatcherCast() is required for supporting inner
|
|
|
|
// The call to MatcherCast() is required for supporting inner
|
|
|
@ -3921,6 +3925,21 @@ inline PolymorphicMatcher< |
|
|
|
// to compile where bar() returns an int32 and m is a matcher for int64.
|
|
|
|
// to compile where bar() returns an int32 and m is a matcher for int64.
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if GTEST_LANG_CXX11 |
|
|
|
|
|
|
|
// The same as above but for reference-qualified member functions.
|
|
|
|
|
|
|
|
template <typename Class, typename PropertyType, typename PropertyMatcher> |
|
|
|
|
|
|
|
inline PolymorphicMatcher<internal::PropertyMatcher< |
|
|
|
|
|
|
|
Class, PropertyType, PropertyType (Class::*)() const &> > |
|
|
|
|
|
|
|
Property(PropertyType (Class::*property)() const &, |
|
|
|
|
|
|
|
const PropertyMatcher& matcher) { |
|
|
|
|
|
|
|
return MakePolymorphicMatcher( |
|
|
|
|
|
|
|
internal::PropertyMatcher<Class, PropertyType, |
|
|
|
|
|
|
|
PropertyType (Class::*)() const &>( |
|
|
|
|
|
|
|
property, |
|
|
|
|
|
|
|
MatcherCast<GTEST_REFERENCE_TO_CONST_(PropertyType)>(matcher))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
// Creates a matcher that matches an object iff the result of applying
|
|
|
|
// Creates a matcher that matches an object iff the result of applying
|
|
|
|
// a callable to x matches 'matcher'.
|
|
|
|
// a callable to x matches 'matcher'.
|
|
|
|
// For example,
|
|
|
|
// For example,
|
|
|
|