diff options
| author | Phil Nash | 2017-03-13 15:40:21 +0000 |
|---|---|---|
| committer | Phil Nash | 2017-03-13 15:40:21 +0000 |
| commit | 0afd52b98dced4a5ec4ecf65d58ddb766f64aa2c (patch) | |
| tree | a5aedb54d686e9fc3123ee0b9e7f6230660cf646 /include | |
| parent | 38b05f140003811f15345ec498b15b0e882e562e (diff) | |
| download | catch3-0afd52b98dced4a5ec4ecf65d58ddb766f64aa2c.tar.gz | |
Fix Objective-C Matchers
Fixes #854
Diffstat (limited to 'include')
| -rw-r--r-- | include/internal/catch_matchers.hpp | 12 | ||||
| -rw-r--r-- | include/internal/catch_objc.hpp | 33 |
2 files changed, 28 insertions, 17 deletions
diff --git a/include/internal/catch_matchers.hpp b/include/internal/catch_matchers.hpp index 6e42445f..2193c540 100644 --- a/include/internal/catch_matchers.hpp +++ b/include/internal/catch_matchers.hpp @@ -34,10 +34,18 @@ namespace Matchers { MatcherUntypedBase& operator = ( MatcherUntypedBase const& ); }; + template<typename ObjectT> + struct MatcherMethod { + virtual bool match( ObjectT const& arg ) const = 0; + }; + template<typename PtrT> + struct MatcherMethod<PtrT*> { + virtual bool match( PtrT* arg ) const = 0; + }; + template<typename ObjectT, typename ComparatorT = ObjectT> - struct MatcherBase : MatcherUntypedBase { + struct MatcherBase : MatcherUntypedBase, MatcherMethod<ObjectT> { - virtual bool match( ObjectT const& arg ) const = 0; MatchAllOf<ComparatorT> operator && ( MatcherBase const& other ) const; MatchAnyOf<ComparatorT> operator || ( MatcherBase const& other ) const; diff --git a/include/internal/catch_objc.hpp b/include/internal/catch_objc.hpp index 489cf558..616383b1 100644 --- a/include/internal/catch_objc.hpp +++ b/include/internal/catch_objc.hpp @@ -104,65 +104,68 @@ namespace Catch { namespace Matchers { namespace Impl { namespace NSStringMatchers { - - template<typename MatcherT> - struct StringHolder : MatcherImpl<MatcherT, NSString*>{ + + struct StringHolder : MatcherBase<NSString*>{ StringHolder( NSString* substr ) : m_substr( [substr copy] ){} StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){} StringHolder() { arcSafeRelease( m_substr ); } + virtual bool match( NSString* arg ) const CATCH_OVERRIDE { + return false; + } + NSString* m_substr; }; - struct Equals : StringHolder<Equals> { + struct Equals : StringHolder { Equals( NSString* substr ) : StringHolder( substr ){} - virtual bool match( ExpressionType const& str ) const { + virtual bool match( NSString* str ) const CATCH_OVERRIDE { return (str != nil || m_substr == nil ) && [str isEqualToString:m_substr]; } - virtual std::string toString() const { + virtual std::string describe() const CATCH_OVERRIDE { return "equals string: " + Catch::toString( m_substr ); } }; - struct Contains : StringHolder<Contains> { + struct Contains : StringHolder { Contains( NSString* substr ) : StringHolder( substr ){} - virtual bool match( ExpressionType const& str ) const { + virtual bool match( NSString* str ) const { return (str != nil || m_substr == nil ) && [str rangeOfString:m_substr].location != NSNotFound; } - virtual std::string toString() const { + virtual std::string describe() const CATCH_OVERRIDE { return "contains string: " + Catch::toString( m_substr ); } }; - struct StartsWith : StringHolder<StartsWith> { + struct StartsWith : StringHolder { StartsWith( NSString* substr ) : StringHolder( substr ){} - virtual bool match( ExpressionType const& str ) const { + virtual bool match( NSString* str ) const { return (str != nil || m_substr == nil ) && [str rangeOfString:m_substr].location == 0; } - virtual std::string toString() const { + virtual std::string describe() const CATCH_OVERRIDE { return "starts with: " + Catch::toString( m_substr ); } }; - struct EndsWith : StringHolder<EndsWith> { + struct EndsWith : StringHolder { EndsWith( NSString* substr ) : StringHolder( substr ){} - virtual bool match( ExpressionType const& str ) const { + virtual bool match( NSString* str ) const { return (str != nil || m_substr == nil ) && [str rangeOfString:m_substr].location == [str length] - [m_substr length]; } - virtual std::string toString() const { + virtual std::string describe() const CATCH_OVERRIDE { return "ends with: " + Catch::toString( m_substr ); } }; |