| /* |
| * 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; |
| bool shouldReportAllAssertions = 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& ) = delete; |
| AssertionStats& operator = ( AssertionStats && ) = delete; |
| 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; |
| }; |
| |
| } // end namespace Catch |
| |
| #endif // TWOBLUECUBES_CATCH_INTERFACES_REPORTER_H_INCLUDED |