mirror of https://github.com/procxx/kepka.git
				
				
				
			
		
			
				
	
	
		
			234 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C++
		
	
	
	
/*
 | 
						|
 *  Created by Phil on 31/12/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_INTERFACES_REPORTER_H_INCLUDED
 | 
						|
#define TWOBLUECUBES_CATCH_INTERFACES_REPORTER_H_INCLUDED
 | 
						|
 | 
						|
#include "catch_section_info.h"
 | 
						|
#include "catch_common.h"
 | 
						|
#include "catch_config.hpp"
 | 
						|
#include "catch_totals.h"
 | 
						|
#include "catch_test_case_info.h"
 | 
						|
#include "catch_assertionresult.h"
 | 
						|
#include "catch_message.h"
 | 
						|
#include "catch_option.hpp"
 | 
						|
#include "catch_stringref.h"
 | 
						|
 | 
						|
 | 
						|
#include <string>
 | 
						|
#include <iosfwd>
 | 
						|
#include <map>
 | 
						|
#include <set>
 | 
						|
#include <memory>
 | 
						|
 | 
						|
namespace Catch {
 | 
						|
 | 
						|
    struct ReporterConfig {
 | 
						|
        explicit ReporterConfig( IConfigPtr const& _fullConfig );
 | 
						|
 | 
						|
        ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream );
 | 
						|
 | 
						|
        std::ostream& stream() const;
 | 
						|
        IConfigPtr fullConfig() const;
 | 
						|
 | 
						|
    private:
 | 
						|
        std::ostream* m_stream;
 | 
						|
        IConfigPtr m_fullConfig;
 | 
						|
    };
 | 
						|
 | 
						|
    struct ReporterPreferences {
 | 
						|
        bool shouldRedirectStdOut = false;
 | 
						|
    };
 | 
						|
 | 
						|
    template<typename T>
 | 
						|
    struct LazyStat : Option<T> {
 | 
						|
        LazyStat& operator=( T const& _value ) {
 | 
						|
            Option<T>::operator=( _value );
 | 
						|
            used = false;
 | 
						|
            return *this;
 | 
						|
        }
 | 
						|
        void reset() {
 | 
						|
            Option<T>::reset();
 | 
						|
            used = false;
 | 
						|
        }
 | 
						|
        bool used = false;
 | 
						|
    };
 | 
						|
 | 
						|
    struct TestRunInfo {
 | 
						|
        TestRunInfo( std::string const& _name );
 | 
						|
        std::string name;
 | 
						|
    };
 | 
						|
    struct GroupInfo {
 | 
						|
        GroupInfo(  std::string const& _name,
 | 
						|
                    std::size_t _groupIndex,
 | 
						|
                    std::size_t _groupsCount );
 | 
						|
 | 
						|
        std::string name;
 | 
						|
        std::size_t groupIndex;
 | 
						|
        std::size_t groupsCounts;
 | 
						|
    };
 | 
						|
 | 
						|
    struct AssertionStats {
 | 
						|
        AssertionStats( AssertionResult const& _assertionResult,
 | 
						|
                        std::vector<MessageInfo> const& _infoMessages,
 | 
						|
                        Totals const& _totals );
 | 
						|
 | 
						|
        AssertionStats( AssertionStats const& )              = default;
 | 
						|
        AssertionStats( AssertionStats && )                  = default;
 | 
						|
        AssertionStats& operator = ( AssertionStats const& ) = default;
 | 
						|
        AssertionStats& operator = ( AssertionStats && )     = default;
 | 
						|
        virtual ~AssertionStats();
 | 
						|
 | 
						|
        AssertionResult assertionResult;
 | 
						|
        std::vector<MessageInfo> infoMessages;
 | 
						|
        Totals totals;
 | 
						|
    };
 | 
						|
 | 
						|
    struct SectionStats {
 | 
						|
        SectionStats(   SectionInfo const& _sectionInfo,
 | 
						|
                        Counts const& _assertions,
 | 
						|
                        double _durationInSeconds,
 | 
						|
                        bool _missingAssertions );
 | 
						|
        SectionStats( SectionStats const& )              = default;
 | 
						|
        SectionStats( SectionStats && )                  = default;
 | 
						|
        SectionStats& operator = ( SectionStats const& ) = default;
 | 
						|
        SectionStats& operator = ( SectionStats && )     = default;
 | 
						|
        virtual ~SectionStats();
 | 
						|
 | 
						|
        SectionInfo sectionInfo;
 | 
						|
        Counts assertions;
 | 
						|
        double durationInSeconds;
 | 
						|
        bool missingAssertions;
 | 
						|
    };
 | 
						|
 | 
						|
    struct TestCaseStats {
 | 
						|
        TestCaseStats(  TestCaseInfo const& _testInfo,
 | 
						|
                        Totals const& _totals,
 | 
						|
                        std::string const& _stdOut,
 | 
						|
                        std::string const& _stdErr,
 | 
						|
                        bool _aborting );
 | 
						|
 | 
						|
        TestCaseStats( TestCaseStats const& )              = default;
 | 
						|
        TestCaseStats( TestCaseStats && )                  = default;
 | 
						|
        TestCaseStats& operator = ( TestCaseStats const& ) = default;
 | 
						|
        TestCaseStats& operator = ( TestCaseStats && )     = default;
 | 
						|
        virtual ~TestCaseStats();
 | 
						|
 | 
						|
        TestCaseInfo testInfo;
 | 
						|
        Totals totals;
 | 
						|
        std::string stdOut;
 | 
						|
        std::string stdErr;
 | 
						|
        bool aborting;
 | 
						|
    };
 | 
						|
 | 
						|
    struct TestGroupStats {
 | 
						|
        TestGroupStats( GroupInfo const& _groupInfo,
 | 
						|
                        Totals const& _totals,
 | 
						|
                        bool _aborting );
 | 
						|
        TestGroupStats( GroupInfo const& _groupInfo );
 | 
						|
 | 
						|
        TestGroupStats( TestGroupStats const& )              = default;
 | 
						|
        TestGroupStats( TestGroupStats && )                  = default;
 | 
						|
        TestGroupStats& operator = ( TestGroupStats const& ) = default;
 | 
						|
        TestGroupStats& operator = ( TestGroupStats && )     = default;
 | 
						|
        virtual ~TestGroupStats();
 | 
						|
 | 
						|
        GroupInfo groupInfo;
 | 
						|
        Totals totals;
 | 
						|
        bool aborting;
 | 
						|
    };
 | 
						|
 | 
						|
    struct TestRunStats {
 | 
						|
        TestRunStats(   TestRunInfo const& _runInfo,
 | 
						|
                        Totals const& _totals,
 | 
						|
                        bool _aborting );
 | 
						|
 | 
						|
        TestRunStats( TestRunStats const& )              = default;
 | 
						|
        TestRunStats( TestRunStats && )                  = default;
 | 
						|
        TestRunStats& operator = ( TestRunStats const& ) = default;
 | 
						|
        TestRunStats& operator = ( TestRunStats && )     = default;
 | 
						|
        virtual ~TestRunStats();
 | 
						|
 | 
						|
        TestRunInfo runInfo;
 | 
						|
        Totals totals;
 | 
						|
        bool aborting;
 | 
						|
    };
 | 
						|
 | 
						|
    struct BenchmarkInfo {
 | 
						|
        std::string name;
 | 
						|
    };
 | 
						|
    struct BenchmarkStats {
 | 
						|
        BenchmarkInfo info;
 | 
						|
        std::size_t iterations;
 | 
						|
        uint64_t elapsedTimeInNanoseconds;
 | 
						|
    };
 | 
						|
 | 
						|
    struct IStreamingReporter {
 | 
						|
        virtual ~IStreamingReporter() = default;
 | 
						|
 | 
						|
        // Implementing class must also provide the following static methods:
 | 
						|
        // static std::string getDescription();
 | 
						|
        // static std::set<Verbosity> getSupportedVerbosities()
 | 
						|
 | 
						|
        virtual ReporterPreferences getPreferences() const = 0;
 | 
						|
 | 
						|
        virtual void noMatchingTestCases( std::string const& spec ) = 0;
 | 
						|
 | 
						|
        virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0;
 | 
						|
        virtual void testGroupStarting( GroupInfo const& groupInfo ) = 0;
 | 
						|
 | 
						|
        virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0;
 | 
						|
        virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0;
 | 
						|
 | 
						|
        // *** experimental ***
 | 
						|
        virtual void benchmarkStarting( BenchmarkInfo const& ) {}
 | 
						|
 | 
						|
        virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0;
 | 
						|
 | 
						|
        // The return value indicates if the messages buffer should be cleared:
 | 
						|
        virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0;
 | 
						|
 | 
						|
        // *** experimental ***
 | 
						|
        virtual void benchmarkEnded( BenchmarkStats const& ) {}
 | 
						|
 | 
						|
        virtual void sectionEnded( SectionStats const& sectionStats ) = 0;
 | 
						|
        virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0;
 | 
						|
        virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0;
 | 
						|
        virtual void testRunEnded( TestRunStats const& testRunStats ) = 0;
 | 
						|
 | 
						|
        virtual void skipTest( TestCaseInfo const& testInfo ) = 0;
 | 
						|
 | 
						|
        // Default empty implementation provided
 | 
						|
        virtual void fatalErrorEncountered( StringRef name );
 | 
						|
 | 
						|
        virtual bool isMulti() const;
 | 
						|
    };
 | 
						|
    using IStreamingReporterPtr = std::unique_ptr<IStreamingReporter>;
 | 
						|
 | 
						|
    struct IReporterFactory {
 | 
						|
        virtual ~IReporterFactory();
 | 
						|
        virtual IStreamingReporterPtr create( ReporterConfig const& config ) const = 0;
 | 
						|
        virtual std::string getDescription() const = 0;
 | 
						|
    };
 | 
						|
    using IReporterFactoryPtr = std::shared_ptr<IReporterFactory>;
 | 
						|
 | 
						|
    struct IReporterRegistry {
 | 
						|
        using FactoryMap = std::map<std::string, IReporterFactoryPtr>;
 | 
						|
        using Listeners = std::vector<IReporterFactoryPtr>;
 | 
						|
 | 
						|
        virtual ~IReporterRegistry();
 | 
						|
        virtual IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const = 0;
 | 
						|
        virtual FactoryMap const& getFactories() const = 0;
 | 
						|
        virtual Listeners const& getListeners() const = 0;
 | 
						|
    };
 | 
						|
 | 
						|
    void addReporter( IStreamingReporterPtr& existingReporter, IStreamingReporterPtr&& additionalReporter );
 | 
						|
 | 
						|
} // end namespace Catch
 | 
						|
 | 
						|
#endif // TWOBLUECUBES_CATCH_INTERFACES_REPORTER_H_INCLUDED
 |