| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  Created by Phil on 18/10/2010. | 
					
						
							|  |  |  |  *  Copyright 2010 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_CAPTURE_HPP_INCLUDED
 | 
					
						
							|  |  |  | #define TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-24 22:09:01 +01:00
										 |  |  | #include "catch_expression_decomposer.hpp"
 | 
					
						
							| 
									
										
										
										
											2012-10-26 08:45:23 +01:00
										 |  |  | #include "catch_expressionresult_builder.h"
 | 
					
						
							| 
									
										
										
										
											2011-01-11 09:13:31 +00:00
										 |  |  | #include "catch_interfaces_capture.h"
 | 
					
						
							| 
									
										
										
										
											2010-12-27 20:49:19 +00:00
										 |  |  | #include "catch_debugger.hpp"
 | 
					
						
							| 
									
										
										
										
											2012-05-10 07:58:48 +01:00
										 |  |  | #include "catch_context.h"
 | 
					
						
							| 
									
										
										
										
											2011-04-28 08:03:28 +01:00
										 |  |  | #include "catch_common.h"
 | 
					
						
							| 
									
										
										
										
											2012-10-17 08:14:22 +01:00
										 |  |  | #include "catch_interfaces_registry_hub.h"
 | 
					
						
							| 
									
										
										
										
											2012-05-11 19:15:54 +01:00
										 |  |  | #include <ostream>
 | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-15 07:42:26 +01:00
										 |  |  | namespace Catch { | 
					
						
							| 
									
										
										
										
											2012-05-11 19:22:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-17 08:14:22 +01:00
										 |  |  |     inline IResultCapture& getResultCapture() { | 
					
						
							|  |  |  |         return getCurrentContext().getResultCapture(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  |     template<typename MatcherT> | 
					
						
							| 
									
										
										
										
											2012-10-26 08:45:23 +01:00
										 |  |  |     ExpressionResultBuilder expressionResultBuilderFromMatcher( const MatcherT& matcher, | 
					
						
							|  |  |  |                                                                 const std::string& matcherCallAsString ) { | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  |         std::string matcherAsString = matcher.toString(); | 
					
						
							|  |  |  |         if( matcherAsString == "{?}" ) | 
					
						
							|  |  |  |             matcherAsString = matcherCallAsString; | 
					
						
							| 
									
										
										
										
											2012-10-26 08:45:23 +01:00
										 |  |  |         return ExpressionResultBuilder() | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  |             .setRhs( matcherAsString ) | 
					
						
							|  |  |  |             .setOp( "matches" ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     template<typename MatcherT, typename ArgT> | 
					
						
							| 
									
										
										
										
											2012-10-26 08:45:23 +01:00
										 |  |  |     ExpressionResultBuilder expressionResultBuilderFromMatcher( const MatcherT& matcher, | 
					
						
							|  |  |  |                                                                 const ArgT& arg, | 
					
						
							|  |  |  |                                                                 const std::string& matcherCallAsString ) { | 
					
						
							|  |  |  |         return expressionResultBuilderFromMatcher( matcher, matcherCallAsString ) | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  |             .setLhs( Catch::toString( arg ) ) | 
					
						
							| 
									
										
										
										
											2012-10-24 21:59:47 +01:00
										 |  |  |             .setResultType( matcher.match( arg ) ); | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     template<typename MatcherT, typename ArgT> | 
					
						
							| 
									
										
										
										
											2012-10-26 08:45:23 +01:00
										 |  |  |     ExpressionResultBuilder expressionResultBuilderFromMatcher( const MatcherT& matcher, | 
					
						
							|  |  |  |                                                                 ArgT* arg, | 
					
						
							|  |  |  |                                                                 const std::string& matcherCallAsString ) { | 
					
						
							|  |  |  |         return expressionResultBuilderFromMatcher( matcher, matcherCallAsString ) | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  |             .setLhs( Catch::toString( arg ) ) | 
					
						
							| 
									
										
										
										
											2012-10-24 21:59:47 +01:00
										 |  |  |             .setResultType( matcher.match( arg ) ); | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2012-05-08 07:59:54 +01:00
										 |  |  | struct TestFailureException{}; | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-15 07:42:26 +01:00
										 |  |  | class ScopedInfo { | 
					
						
							| 
									
										
										
										
											2010-12-27 11:09:34 +00:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2012-10-24 21:59:47 +01:00
										 |  |  |     ScopedInfo() : m_resultBuilder( ResultWas::Info ) { | 
					
						
							| 
									
										
										
										
											2012-10-17 08:14:22 +01:00
										 |  |  |         getResultCapture().pushScopedInfo( this ); | 
					
						
							| 
									
										
										
										
											2010-12-27 11:09:34 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-05-09 08:17:51 +01:00
										 |  |  |     ~ScopedInfo() { | 
					
						
							| 
									
										
										
										
											2012-10-17 08:14:22 +01:00
										 |  |  |         getResultCapture().popScopedInfo( this ); | 
					
						
							| 
									
										
										
										
											2010-12-27 11:09:34 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-05-09 08:17:51 +01:00
										 |  |  |     template<typename T> | 
					
						
							|  |  |  |     ScopedInfo& operator << ( const T& value ) { | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  |         m_resultBuilder << value; | 
					
						
							| 
									
										
										
										
											2010-12-27 11:09:34 +00:00
										 |  |  |         return *this;  | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-10-26 09:05:36 +01:00
										 |  |  |     AssertionResult buildResult( const AssertionInfo& assertionInfo ) const { | 
					
						
							|  |  |  |         return m_resultBuilder.buildResult( assertionInfo ); | 
					
						
							| 
									
										
										
										
											2010-12-27 11:09:34 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2012-10-26 08:45:23 +01:00
										 |  |  |     ExpressionResultBuilder m_resultBuilder; | 
					
						
							| 
									
										
										
										
											2010-12-27 11:09:34 +00:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-18 08:39:44 +01:00
										 |  |  | // This is just here to avoid compiler warnings with macro constants and boolean literals
 | 
					
						
							| 
									
										
										
										
											2012-05-09 08:17:51 +01:00
										 |  |  | inline bool isTrue( bool value ){ return value; } | 
					
						
							| 
									
										
										
										
											2012-10-17 08:14:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | } // end namespace Catch
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | #define INTERNAL_CATCH_ASSERTIONINFO_NAME INTERNAL_CATCH_UNIQUE_NAME( __assertionInfo )
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-03 20:00:46 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  | #define INTERNAL_CATCH_ACCEPT_EXPR( evaluatedExpr, resultDisposition, originalExpr ) \
 | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |     if( Catch::ResultAction::Value internal_catch_action = Catch::getResultCapture().acceptExpression( evaluatedExpr, INTERNAL_CATCH_ASSERTIONINFO_NAME )  ) { \ | 
					
						
							| 
									
										
										
										
											2012-06-01 19:40:27 +01:00
										 |  |  |         if( internal_catch_action & Catch::ResultAction::Debug ) BreakIntoDebugger(); \ | 
					
						
							|  |  |  |         if( internal_catch_action & Catch::ResultAction::Abort ) throw Catch::TestFailureException(); \ | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |         if( !Catch::shouldContinueOnFailure( resultDisposition ) ) throw Catch::TestFailureException(); \ | 
					
						
							| 
									
										
										
										
											2012-05-09 08:17:51 +01:00
										 |  |  |         if( Catch::isTrue( false ) ){ bool this_is_here_to_invoke_warnings = ( originalExpr ); Catch::isTrue( this_is_here_to_invoke_warnings ); } \ | 
					
						
							| 
									
										
										
										
											2010-12-27 20:49:19 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-03 20:00:46 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  | #define INTERNAL_CATCH_ACCEPT_INFO( expr, macroName, resultDisposition ) \
 | 
					
						
							|  |  |  |     Catch::AssertionInfo INTERNAL_CATCH_ASSERTIONINFO_NAME( macroName, CATCH_INTERNAL_LINEINFO, expr, testFlag( resultDisposition, Catch::ResultDisposition::NegateResult ) ); | 
					
						
							| 
									
										
										
										
											2012-10-24 21:59:47 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:35:09 +00:00
										 |  |  | #define INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ) \
 | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |     do { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |         INTERNAL_CATCH_ACCEPT_INFO( #expr, macroName, resultDisposition ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         try { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |             INTERNAL_CATCH_ACCEPT_EXPR( ( Catch::ExpressionDecomposer()->*expr ).endExpression( resultDisposition ), resultDisposition, expr ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         } catch( Catch::TestFailureException& ) { \ | 
					
						
							|  |  |  |             throw; \ | 
					
						
							|  |  |  |         } catch( ... ) { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |             INTERNAL_CATCH_ACCEPT_EXPR( Catch::ExpressionResultBuilder( Catch::ResultWas::ThrewException ) << Catch::translateActiveException(), \ | 
					
						
							|  |  |  |                 resultDisposition | Catch::ResultDisposition::ContinueOnFailure, expr ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |             throw; \ | 
					
						
							|  |  |  |         } \ | 
					
						
							|  |  |  |     } while( Catch::isTrue( false ) ) | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-10 08:30:13 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:35:09 +00:00
										 |  |  | #define INTERNAL_CATCH_IF( expr, resultDisposition, macroName ) \
 | 
					
						
							|  |  |  |     INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \ | 
					
						
							| 
									
										
										
										
											2012-10-17 08:14:22 +01:00
										 |  |  |     if( Catch::getResultCapture().getLastResult()->ok() ) | 
					
						
							| 
									
										
										
										
											2012-02-10 08:30:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:35:09 +00:00
										 |  |  | #define INTERNAL_CATCH_ELSE( expr, resultDisposition, macroName ) \
 | 
					
						
							|  |  |  |     INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \ | 
					
						
							| 
									
										
										
										
											2012-10-17 08:14:22 +01:00
										 |  |  |     if( !Catch::getResultCapture().getLastResult()->ok() ) | 
					
						
							| 
									
										
										
										
											2012-02-10 08:30:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-14 08:45:55 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  | #define INTERNAL_CATCH_NO_THROW( expr, resultDisposition, macroName ) \
 | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |     do { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |         INTERNAL_CATCH_ACCEPT_INFO( #expr, macroName, resultDisposition ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         try { \ | 
					
						
							|  |  |  |             expr; \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |             INTERNAL_CATCH_ACCEPT_EXPR( Catch::ExpressionResultBuilder( Catch::ResultWas::Ok ), resultDisposition, false ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         } \ | 
					
						
							|  |  |  |         catch( ... ) { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |             INTERNAL_CATCH_ACCEPT_EXPR( Catch::ExpressionResultBuilder( Catch::ResultWas::ThrewException ) << Catch::translateActiveException(), resultDisposition, false ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         } \ | 
					
						
							|  |  |  | } while( Catch::isTrue( false ) ) | 
					
						
							| 
									
										
										
										
											2011-03-14 08:45:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-03 20:00:46 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  | #define INTERNAL_CATCH_THROWS_IMPL( expr, exceptionType, resultDisposition ) \
 | 
					
						
							| 
									
										
										
										
											2012-06-05 20:50:47 +01:00
										 |  |  |     try { \ | 
					
						
							|  |  |  |         if( Catch::getCurrentContext().getConfig()->allowThrows() ) { \ | 
					
						
							|  |  |  |             expr; \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |             INTERNAL_CATCH_ACCEPT_EXPR( Catch::ExpressionResultBuilder( Catch::ResultWas::DidntThrowException ), resultDisposition, false ); \ | 
					
						
							| 
									
										
										
										
											2012-06-05 20:50:47 +01:00
										 |  |  |         } \ | 
					
						
							| 
									
										
										
										
											2011-03-14 19:21:35 +00:00
										 |  |  |     } \ | 
					
						
							| 
									
										
										
										
											2012-06-05 20:50:47 +01:00
										 |  |  |     catch( Catch::TestFailureException& ) { \ | 
					
						
							| 
									
										
										
										
											2011-03-14 19:21:35 +00:00
										 |  |  |         throw; \ | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  |     } \ | 
					
						
							| 
									
										
										
										
											2012-06-05 20:50:47 +01:00
										 |  |  |     catch( exceptionType ) { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |         INTERNAL_CATCH_ACCEPT_EXPR( Catch::ExpressionResultBuilder( Catch::ResultWas::Ok ), resultDisposition, false ); \ | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  | #define INTERNAL_CATCH_THROWS( expr, exceptionType, resultDisposition, macroName ) \
 | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |     do { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |         INTERNAL_CATCH_ACCEPT_INFO( #expr, macroName, resultDisposition ); \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |         INTERNAL_CATCH_THROWS_IMPL( expr, exceptionType, resultDisposition ) \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |     } while( Catch::isTrue( false ) ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-03 20:00:46 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  | #define INTERNAL_CATCH_THROWS_AS( expr, exceptionType, resultDisposition, macroName ) \
 | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |     do { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |         INTERNAL_CATCH_ACCEPT_INFO( #expr, macroName, resultDisposition ); \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |         INTERNAL_CATCH_THROWS_IMPL( expr, exceptionType, resultDisposition ) \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         catch( ... ) { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |             INTERNAL_CATCH_ACCEPT_EXPR( ( Catch::ExpressionResultBuilder( Catch::ResultWas::ThrewException ) << Catch::translateActiveException() ), \ | 
					
						
							|  |  |  |                 resultDisposition | Catch::ResultDisposition::ContinueOnFailure, false ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         } \ | 
					
						
							|  |  |  |     } while( Catch::isTrue( false ) ) | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-03 20:00:46 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  | #define INTERNAL_CATCH_MSG( reason, resultType, resultDisposition, macroName ) \
 | 
					
						
							| 
									
										
										
										
											2012-11-06 07:52:28 +00:00
										 |  |  |     do { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |         INTERNAL_CATCH_ACCEPT_INFO( "", macroName, resultDisposition ); \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |         INTERNAL_CATCH_ACCEPT_EXPR( Catch::ExpressionResultBuilder( resultType ) << reason, resultDisposition, true ) \ | 
					
						
							| 
									
										
										
										
											2012-11-06 07:52:28 +00:00
										 |  |  |     } while( Catch::isTrue( false ) ) | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-03 20:00:46 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-10-24 21:59:47 +01:00
										 |  |  | #define INTERNAL_CATCH_SCOPED_INFO( log, macroName ) \
 | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |     INTERNAL_CATCH_ACCEPT_INFO( "", macroName, Catch::ResultDisposition::Normal ); \ | 
					
						
							| 
									
										
										
										
											2011-03-10 14:09:32 +00:00
										 |  |  |     Catch::ScopedInfo INTERNAL_CATCH_UNIQUE_NAME( info ); \ | 
					
						
							|  |  |  |     INTERNAL_CATCH_UNIQUE_NAME( info ) << log | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-04 11:14:21 +00:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  | #define INTERNAL_CHECK_THAT( arg, matcher, resultDisposition, macroName ) \
 | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |     do { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 18:43:23 +00:00
										 |  |  |         INTERNAL_CATCH_ACCEPT_INFO( #arg " " #matcher, macroName, resultDisposition ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         try { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |             INTERNAL_CATCH_ACCEPT_EXPR( ( Catch::expressionResultBuilderFromMatcher( ::Catch::Matchers::matcher, arg, #matcher ) ), resultDisposition, false ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |         } catch( Catch::TestFailureException& ) { \ | 
					
						
							|  |  |  |             throw; \ | 
					
						
							|  |  |  |         } catch( ... ) { \ | 
					
						
							| 
									
										
										
										
											2012-11-10 10:20:08 +00:00
										 |  |  |             INTERNAL_CATCH_ACCEPT_EXPR( ( Catch::ExpressionResultBuilder( Catch::ResultWas::ThrewException ) << Catch::translateActiveException() ), \ | 
					
						
							|  |  |  |                 resultDisposition | Catch::ResultDisposition::ContinueOnFailure, false ); \ | 
					
						
							| 
									
										
										
										
											2012-10-29 19:55:13 +00:00
										 |  |  |             throw; \ | 
					
						
							|  |  |  |         } \ | 
					
						
							|  |  |  |     } while( Catch::isTrue( false ) ) | 
					
						
							| 
									
										
										
										
											2012-03-04 11:14:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | #endif // TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED
 |