mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Fixed toString for NSString* in Xcode 4.4
This commit is contained in:
		| @@ -8,7 +8,8 @@ | ||||
| #ifndef TWOBLUECUBES_CATCH_OBJC_HPP_INCLUDED | ||||
| #define TWOBLUECUBES_CATCH_OBJC_HPP_INCLUDED | ||||
|  | ||||
| #import <Foundation/Foundation.h> | ||||
| #include "catch_objc_arc.hpp" | ||||
|  | ||||
| #import <objc/runtime.h> | ||||
|  | ||||
| #include <string> | ||||
| @@ -18,38 +19,6 @@ | ||||
| // header for non obj-usage | ||||
| #include "internal/catch_test_case_info.hpp" | ||||
|  | ||||
| #ifdef __has_feature | ||||
| #define CATCH_ARC_ENABLED __has_feature(objc_arc) | ||||
| #else | ||||
| #define CATCH_ARC_ENABLED 0 | ||||
| #endif | ||||
|  | ||||
| void arcSafeRelease( NSObject* obj ); | ||||
| id performOptionalSelector( id obj, SEL sel ); | ||||
|  | ||||
| #if !CATCH_ARC_ENABLED | ||||
|     inline void arcSafeRelease( NSObject* obj ) { | ||||
|         [obj release]; | ||||
|     } | ||||
|     inline id performOptionalSelector( id obj, SEL sel ) { | ||||
|         if( [obj respondsToSelector: sel] ) | ||||
|             return [obj performSelector: sel]; | ||||
|         return nil; | ||||
|     } | ||||
|     #define CATCH_UNSAFE_UNRETAINED | ||||
| #else | ||||
|     inline void arcSafeRelease( NSObject* ){} | ||||
|     inline id performOptionalSelector( id obj, SEL sel ) { | ||||
|     #pragma clang diagnostic push | ||||
|     #pragma clang diagnostic ignored "-Warc-performSelector-leaks" | ||||
|         if( [obj respondsToSelector: sel] ) | ||||
|             return [obj performSelector: sel]; | ||||
|     #pragma clang diagnostic pop      | ||||
|         return nil; | ||||
|     } | ||||
|     #define CATCH_UNSAFE_UNRETAINED __unsafe_unretained | ||||
| #endif | ||||
|  | ||||
| /////////////////////////////////////////////////////////////////////////////// | ||||
| // This protocol is really only here for (self) documenting purposes, since | ||||
| // all its methods are optional. | ||||
| @@ -147,10 +116,6 @@ namespace Catch { | ||||
|         return noTestMethods; | ||||
|     } | ||||
|      | ||||
|     inline std::string toString( NSString* const& nsstring ) { | ||||
|         return std::string( "@\"" ) + [nsstring UTF8String] + "\""; | ||||
|     } | ||||
|      | ||||
|     namespace Matchers { | ||||
|         namespace Impl { | ||||
|         namespace NSStringMatchers { | ||||
| @@ -161,7 +126,7 @@ namespace Catch { | ||||
|                     arcSafeRelease( m_substr ); | ||||
|                 } | ||||
|                  | ||||
|                 NSString* m_substr;             | ||||
|                 NSString* m_substr; | ||||
|             }; | ||||
|              | ||||
|             struct Equals : StringHolder { | ||||
|   | ||||
							
								
								
									
										47
									
								
								include/internal/catch_objc_arc.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								include/internal/catch_objc_arc.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| /* | ||||
|  *  Created by Phil on 1/08/2012. | ||||
|  *  Copyright 2012 Two Blue Cubes Ltd. All rights reserved. | ||||
|  * | ||||
|  *  Distributed under the Boost Software License, Version 1.0. (See accompanying | ||||
|  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||||
|  */ | ||||
| #ifndef TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED | ||||
| #define TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED | ||||
|  | ||||
| #import <Foundation/Foundation.h> | ||||
|  | ||||
| #ifdef __has_feature | ||||
| #define CATCH_ARC_ENABLED __has_feature(objc_arc) | ||||
| #else | ||||
| #define CATCH_ARC_ENABLED 0 | ||||
| #endif | ||||
|  | ||||
| void arcSafeRelease( NSObject* obj ); | ||||
| id performOptionalSelector( id obj, SEL sel ); | ||||
|  | ||||
| #if !CATCH_ARC_ENABLED | ||||
| inline void arcSafeRelease( NSObject* obj ) { | ||||
|     [obj release]; | ||||
| } | ||||
| inline id performOptionalSelector( id obj, SEL sel ) { | ||||
|     if( [obj respondsToSelector: sel] ) | ||||
|         return [obj performSelector: sel]; | ||||
|     return nil; | ||||
| } | ||||
| #define CATCH_UNSAFE_UNRETAINED | ||||
| #define CATCH_ARC_STRONG | ||||
| #else | ||||
| inline void arcSafeRelease( NSObject* ){} | ||||
| inline id performOptionalSelector( id obj, SEL sel ) { | ||||
| #pragma clang diagnostic push | ||||
| #pragma clang diagnostic ignored "-Warc-performSelector-leaks" | ||||
|     if( [obj respondsToSelector: sel] ) | ||||
|         return [obj performSelector: sel]; | ||||
| #pragma clang diagnostic pop | ||||
|     return nil; | ||||
| } | ||||
| #define CATCH_UNSAFE_UNRETAINED __unsafe_unretained | ||||
| #define CATCH_ARC_STRONG __strong | ||||
| #endif | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED | ||||
| @@ -11,6 +11,10 @@ | ||||
| #include "catch_common.h" | ||||
| #include <sstream> | ||||
|  | ||||
| #ifdef __OBJC__ | ||||
| #include "catch_objc_arc.hpp" | ||||
| #endif | ||||
|  | ||||
| namespace Catch { | ||||
| namespace Detail { | ||||
|  | ||||
| @@ -131,6 +135,21 @@ inline std::string toString( std::nullptr_t ) { | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #ifdef __OBJC__ | ||||
|     //    inline std::string toString( NSString* const& nsstring ) { | ||||
|     //        return std::string( "@\"" ) + [nsstring UTF8String] + "\""; | ||||
|     //    } | ||||
|     inline std::string toString( NSString const * const& nsstring ) { | ||||
|         return std::string( "@\"" ) + [nsstring UTF8String] + "\""; | ||||
|     } | ||||
|     inline std::string toString( NSString * CATCH_ARC_STRONG const& nsstring ) { | ||||
|         return std::string( "@\"" ) + [nsstring UTF8String] + "\""; | ||||
|     } | ||||
|     inline std::string toString( NSObject* const& nsObject ) { | ||||
|         return toString( [nsObject description] ); | ||||
|     } | ||||
| #endif | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_TOSTRING_HPP_INCLUDED | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash