mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 09:01:50 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 *  Created by Phil on 28/5/2014.
 | 
						|
 *  Copyright 2014 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_RESULT_BUILDER_H_INCLUDED
 | 
						|
#define TWOBLUECUBES_CATCH_RESULT_BUILDER_H_INCLUDED
 | 
						|
 | 
						|
#include "catch_result_type.h"
 | 
						|
#include "catch_assertionresult.h"
 | 
						|
#include "catch_common.h"
 | 
						|
#include "catch_matchers.hpp"
 | 
						|
 | 
						|
#include <sstream>
 | 
						|
 | 
						|
namespace Catch {
 | 
						|
 | 
						|
    struct TestFailureException{};
 | 
						|
 | 
						|
    template<typename T> class ExpressionLhs;
 | 
						|
 | 
						|
    struct CopyableStream {
 | 
						|
        CopyableStream() = default;
 | 
						|
        CopyableStream( CopyableStream const& other );
 | 
						|
        CopyableStream& operator=( CopyableStream const& other );
 | 
						|
 | 
						|
        std::ostringstream oss;
 | 
						|
    };
 | 
						|
 | 
						|
    class ResultBuilder : public DecomposedExpression {
 | 
						|
    public:
 | 
						|
        ResultBuilder(  char const* macroName,
 | 
						|
                        SourceLineInfo const& lineInfo,
 | 
						|
                        char const* capturedExpression,
 | 
						|
                        ResultDisposition::Flags resultDisposition);
 | 
						|
        ~ResultBuilder();
 | 
						|
 | 
						|
        template<typename T>
 | 
						|
        ExpressionLhs<T const&> operator <= ( T const& operand );
 | 
						|
        ExpressionLhs<bool> operator <= ( bool value );
 | 
						|
 | 
						|
        template<typename T>
 | 
						|
        ResultBuilder& operator << ( T const& value ) {
 | 
						|
            stream().oss << value;
 | 
						|
            return *this;
 | 
						|
        }
 | 
						|
 | 
						|
        ResultBuilder& setResultType( ResultWas::OfType result );
 | 
						|
        ResultBuilder& setResultType( bool result );
 | 
						|
 | 
						|
        void endExpression( DecomposedExpression const& expr );
 | 
						|
 | 
						|
        void reconstructExpression( std::string& dest ) const override;
 | 
						|
 | 
						|
        AssertionResult build() const;
 | 
						|
        AssertionResult build( DecomposedExpression const& expr ) const;
 | 
						|
 | 
						|
        void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal );
 | 
						|
        void captureResult( ResultWas::OfType resultType );
 | 
						|
        void captureExpression();
 | 
						|
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
						|
        void captureExpectedException( std::string const& expectedMessage );
 | 
						|
        void captureExpectedException( Matchers::Impl::MatcherBase<std::string> const& matcher );
 | 
						|
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
						|
        void handleResult( AssertionResult const& result );
 | 
						|
        void react();
 | 
						|
        bool shouldDebugBreak() const;
 | 
						|
        bool allowThrows() const;
 | 
						|
 | 
						|
        template<typename ArgT, typename MatcherT>
 | 
						|
        void captureMatch( ArgT const& arg, MatcherT const& matcher, char const* matcherString );
 | 
						|
 | 
						|
        void setExceptionGuard();
 | 
						|
        void unsetExceptionGuard();
 | 
						|
 | 
						|
    private:
 | 
						|
        AssertionInfo m_assertionInfo;
 | 
						|
        AssertionResultData m_data;
 | 
						|
 | 
						|
        CopyableStream& stream();
 | 
						|
        static CopyableStream& s_stream();
 | 
						|
 | 
						|
        bool m_shouldDebugBreak = false;
 | 
						|
        bool m_shouldThrow = false;
 | 
						|
        bool m_guardException = false;
 | 
						|
        bool m_usedStream = false;
 | 
						|
    };
 | 
						|
 | 
						|
} // namespace Catch
 | 
						|
 | 
						|
// Include after due to circular dependency:
 | 
						|
#include "catch_expression_lhs.hpp"
 | 
						|
 | 
						|
namespace Catch {
 | 
						|
 | 
						|
    template<typename T>
 | 
						|
    ExpressionLhs<T const&> ResultBuilder::operator <= ( T const& operand ) {
 | 
						|
        return ExpressionLhs<T const&>( *this, operand );
 | 
						|
    }
 | 
						|
 | 
						|
    inline ExpressionLhs<bool> ResultBuilder::operator <= ( bool value ) {
 | 
						|
        return ExpressionLhs<bool>( *this, value );
 | 
						|
    }
 | 
						|
 | 
						|
    template<typename ArgT, typename MatcherT>
 | 
						|
    void ResultBuilder::captureMatch( ArgT const& arg, MatcherT const& matcher,
 | 
						|
                                             char const* matcherString ) {
 | 
						|
        MatchExpression<ArgT const&, MatcherT const&> expr( arg, matcher, matcherString );
 | 
						|
        setResultType( matcher.match( arg ) );
 | 
						|
        endExpression( expr );
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} // namespace Catch
 | 
						|
 | 
						|
#endif // TWOBLUECUBES_CATCH_RESULT_BUILDER_H_INCLUDED
 |