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
 |