forked from catchorg/Catch2
Store IStream instance owning ptrs in reporter instances
This ended up being a surprisingly large refactoring, motivated by removing a `const_cast` from `Config`'s handling of reporter streams, forced by previous commit.
This commit is contained in:
@@ -17,21 +17,25 @@
|
||||
#include <catch2/internal/catch_move_and_forward.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <iomanip>
|
||||
|
||||
namespace Catch {
|
||||
|
||||
ReporterConfig::ReporterConfig(
|
||||
IConfig const* _fullConfig,
|
||||
IStream* _stream,
|
||||
Detail::unique_ptr<IStream> _stream,
|
||||
ColourMode colourMode,
|
||||
std::map<std::string, std::string> customOptions ):
|
||||
m_stream( _stream ),
|
||||
m_stream( CATCH_MOVE(_stream) ),
|
||||
m_fullConfig( _fullConfig ),
|
||||
m_colourMode( colourMode ),
|
||||
m_customOptions( CATCH_MOVE( customOptions ) ) {}
|
||||
|
||||
IStream* ReporterConfig::stream() const { return m_stream; }
|
||||
Detail::unique_ptr<IStream> ReporterConfig::takeStream() && {
|
||||
assert( m_stream );
|
||||
return CATCH_MOVE( m_stream );
|
||||
}
|
||||
IConfig const * ReporterConfig::fullConfig() const { return m_fullConfig; }
|
||||
ColourMode ReporterConfig::colourMode() const { return m_colourMode; }
|
||||
|
||||
|
||||
@@ -36,17 +36,17 @@ namespace Catch {
|
||||
|
||||
struct ReporterConfig {
|
||||
ReporterConfig( IConfig const* _fullConfig,
|
||||
IStream* _stream,
|
||||
Detail::unique_ptr<IStream> _stream,
|
||||
ColourMode colourMode,
|
||||
std::map<std::string, std::string> customOptions );
|
||||
|
||||
IStream* stream() const;
|
||||
Detail::unique_ptr<IStream> takeStream() &&;
|
||||
IConfig const* fullConfig() const;
|
||||
ColourMode colourMode() const;
|
||||
std::map<std::string, std::string> const& customOptions() const;
|
||||
|
||||
private:
|
||||
IStream* m_stream;
|
||||
Detail::unique_ptr<IStream> m_stream;
|
||||
IConfig const* m_fullConfig;
|
||||
ColourMode m_colourMode;
|
||||
std::map<std::string, std::string> m_customOptions;
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace Catch {
|
||||
virtual ~IReporterFactory(); // = default
|
||||
|
||||
virtual IEventListenerPtr
|
||||
create( ReporterConfig const& config ) const = 0;
|
||||
create( ReporterConfig&& config ) const = 0;
|
||||
virtual std::string getDescription() const = 0;
|
||||
};
|
||||
using IReporterFactoryPtr = Detail::unique_ptr<IReporterFactory>;
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace Catch {
|
||||
using Listeners = std::vector<Detail::unique_ptr<EventListenerFactory>>;
|
||||
|
||||
virtual ~IReporterRegistry(); // = default
|
||||
virtual IEventListenerPtr create( std::string const& name, ReporterConfig const& config ) const = 0;
|
||||
virtual IEventListenerPtr create( std::string const& name, ReporterConfig&& config ) const = 0;
|
||||
virtual FactoryMap const& getFactories() const = 0;
|
||||
virtual Listeners const& getListeners() const = 0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user