mirror of https://github.com/procxx/kepka.git
				
				
				
			
		
			
				
	
	
		
			147 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
 /*
 | 
						|
 *  Created by Phil on 22/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_RUNNER_IMPL_HPP_INCLUDED
 | 
						|
#define TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED
 | 
						|
 | 
						|
#include "catch_interfaces_runner.h"
 | 
						|
#include "catch_interfaces_reporter.h"
 | 
						|
#include "catch_interfaces_exception.h"
 | 
						|
#include "catch_config.hpp"
 | 
						|
#include "catch_test_registry.h"
 | 
						|
#include "catch_test_case_info.h"
 | 
						|
#include "catch_capture.hpp"
 | 
						|
#include "catch_totals.h"
 | 
						|
#include "catch_test_spec.h"
 | 
						|
#include "catch_test_case_tracker.h"
 | 
						|
#include "catch_timer.h"
 | 
						|
#include "catch_assertionhandler.h"
 | 
						|
#include "catch_fatal_condition.h"
 | 
						|
 | 
						|
#include <string>
 | 
						|
 | 
						|
namespace Catch {
 | 
						|
 | 
						|
    struct IMutableContext;
 | 
						|
 | 
						|
    ///////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
    class RunContext : public IResultCapture, public IRunner {
 | 
						|
 | 
						|
    public:
 | 
						|
        RunContext( RunContext const& ) = delete;
 | 
						|
        RunContext& operator =( RunContext const& ) = delete;
 | 
						|
 | 
						|
        explicit RunContext( IConfigPtr const& _config, IStreamingReporterPtr&& reporter );
 | 
						|
 | 
						|
        ~RunContext() override;
 | 
						|
 | 
						|
        void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount );
 | 
						|
        void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount );
 | 
						|
 | 
						|
        Totals runTest(TestCase const& testCase);
 | 
						|
 | 
						|
        IConfigPtr config() const;
 | 
						|
        IStreamingReporter& reporter() const;
 | 
						|
 | 
						|
    public: // IResultCapture
 | 
						|
 | 
						|
        // Assertion handlers
 | 
						|
        void handleExpr
 | 
						|
                (   AssertionInfo const& info,
 | 
						|
                    ITransientExpression const& expr,
 | 
						|
                    AssertionReaction& reaction ) override;
 | 
						|
        void handleMessage
 | 
						|
                (   AssertionInfo const& info,
 | 
						|
                    ResultWas::OfType resultType,
 | 
						|
                    StringRef const& message,
 | 
						|
                    AssertionReaction& reaction ) override;
 | 
						|
        void handleUnexpectedExceptionNotThrown
 | 
						|
                (   AssertionInfo const& info,
 | 
						|
                    AssertionReaction& reaction ) override;
 | 
						|
        void handleUnexpectedInflightException
 | 
						|
                (   AssertionInfo const& info,
 | 
						|
                    std::string const& message,
 | 
						|
                    AssertionReaction& reaction ) override;
 | 
						|
        void handleIncomplete
 | 
						|
                (   AssertionInfo const& info ) override;
 | 
						|
        void handleNonExpr
 | 
						|
                (   AssertionInfo const &info,
 | 
						|
                    ResultWas::OfType resultType,
 | 
						|
                    AssertionReaction &reaction ) override;
 | 
						|
 | 
						|
        bool sectionStarted( SectionInfo const& sectionInfo, Counts& assertions ) override;
 | 
						|
 | 
						|
        void sectionEnded( SectionEndInfo const& endInfo ) override;
 | 
						|
        void sectionEndedEarly( SectionEndInfo const& endInfo ) override;
 | 
						|
 | 
						|
        void benchmarkStarting( BenchmarkInfo const& info ) override;
 | 
						|
        void benchmarkEnded( BenchmarkStats const& stats ) override;
 | 
						|
 | 
						|
        void pushScopedMessage( MessageInfo const& message ) override;
 | 
						|
        void popScopedMessage( MessageInfo const& message ) override;
 | 
						|
 | 
						|
        std::string getCurrentTestName() const override;
 | 
						|
 | 
						|
        const AssertionResult* getLastResult() const override;
 | 
						|
 | 
						|
        void exceptionEarlyReported() override;
 | 
						|
 | 
						|
        void handleFatalErrorCondition( StringRef message ) override;
 | 
						|
 | 
						|
        bool lastAssertionPassed() override;
 | 
						|
 | 
						|
        void assertionPassed() override;
 | 
						|
 | 
						|
    public:
 | 
						|
        // !TBD We need to do this another way!
 | 
						|
        bool aborting() const override;
 | 
						|
 | 
						|
    private:
 | 
						|
 | 
						|
        void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr );
 | 
						|
        void invokeActiveTestCase();
 | 
						|
 | 
						|
        void resetAssertionInfo();
 | 
						|
        bool testForMissingAssertions( Counts& assertions );
 | 
						|
 | 
						|
        void assertionEnded( AssertionResult const& result );
 | 
						|
        void reportExpr
 | 
						|
                (   AssertionInfo const &info,
 | 
						|
                    ResultWas::OfType resultType,
 | 
						|
                    ITransientExpression const *expr,
 | 
						|
                    bool negated );
 | 
						|
 | 
						|
        void populateReaction( AssertionReaction& reaction );
 | 
						|
 | 
						|
    private:
 | 
						|
 | 
						|
        void handleUnfinishedSections();
 | 
						|
 | 
						|
        TestRunInfo m_runInfo;
 | 
						|
        IMutableContext& m_context;
 | 
						|
        TestCase const* m_activeTestCase = nullptr;
 | 
						|
        ITracker* m_testCaseTracker;
 | 
						|
        Option<AssertionResult> m_lastResult;
 | 
						|
 | 
						|
        IConfigPtr m_config;
 | 
						|
        Totals m_totals;
 | 
						|
        IStreamingReporterPtr m_reporter;
 | 
						|
        std::vector<MessageInfo> m_messages;
 | 
						|
        AssertionInfo m_lastAssertionInfo;
 | 
						|
        std::vector<SectionEndInfo> m_unfinishedSections;
 | 
						|
        std::vector<ITracker*> m_activeSections;
 | 
						|
        TrackerContext m_trackerContext;
 | 
						|
        bool m_lastAssertionPassed = false;
 | 
						|
        bool m_shouldReportUnexpected = true;
 | 
						|
        bool m_includeSuccessfulResults;
 | 
						|
    };
 | 
						|
 | 
						|
} // end namespace Catch
 | 
						|
 | 
						|
#endif // TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED
 |