Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorPhil Nash2017-03-13 15:40:21 +0000
committerPhil Nash2017-03-13 15:40:21 +0000
commit0afd52b98dced4a5ec4ecf65d58ddb766f64aa2c (patch)
treea5aedb54d686e9fc3123ee0b9e7f6230660cf646 /include
parent38b05f140003811f15345ec498b15b0e882e562e (diff)
downloadcatch3-0afd52b98dced4a5ec4ecf65d58ddb766f64aa2c.tar.gz
Fix Objective-C Matchers
Fixes #854
Diffstat (limited to 'include')
-rw-r--r--include/internal/catch_matchers.hpp12
-rw-r--r--include/internal/catch_objc.hpp33
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 );
}
};