Check that reporter supports requested verbosity

This commit is contained in:
Baruch Burstein 2017-07-06 01:25:49 +03:00
parent bb9f2bb3ad
commit f749347523
5 changed files with 35 additions and 2 deletions

View File

@ -86,8 +86,6 @@ namespace Catch {
bool listTags() const { return m_data.listTags; } bool listTags() const { return m_data.listTags; }
bool listReporters() const { return m_data.listReporters; } bool listReporters() const { return m_data.listReporters; }
Verbosity verbosity() const { return m_data.verbosity; }
std::string getProcessName() const { return m_data.processName; } std::string getProcessName() const { return m_data.processName; }
std::vector<std::string> const& getReporterNames() const { return m_data.reporterNames; } std::vector<std::string> const& getReporterNames() const { return m_data.reporterNames; }
@ -110,6 +108,7 @@ namespace Catch {
virtual bool shouldDebugBreak() const override { return m_data.shouldDebugBreak; } virtual bool shouldDebugBreak() const override { return m_data.shouldDebugBreak; }
virtual int abortAfter() const override { return m_data.abortAfter; } virtual int abortAfter() const override { return m_data.abortAfter; }
virtual bool showInvisibles() const override { return m_data.showInvisibles; } virtual bool showInvisibles() const override { return m_data.showInvisibles; }
virtual Verbosity verbosity() const override { return m_data.verbosity; }
private: private:

View File

@ -64,6 +64,7 @@ namespace Catch {
virtual unsigned int rngSeed() const = 0; virtual unsigned int rngSeed() const = 0;
virtual UseColour::YesOrNo useColour() const = 0; virtual UseColour::YesOrNo useColour() const = 0;
virtual std::vector<std::string> const& getSectionsToRun() const = 0; virtual std::vector<std::string> const& getSectionsToRun() const = 0;
virtual Verbosity verbosity() const = 0;
}; };
using IConfigPtr = std::shared_ptr<IConfig const>; using IConfigPtr = std::shared_ptr<IConfig const>;

View File

@ -20,6 +20,7 @@
#include <string> #include <string>
#include <ostream> #include <ostream>
#include <map> #include <map>
#include <set>
#include <memory> #include <memory>
namespace Catch namespace Catch
@ -212,6 +213,8 @@ namespace Catch
virtual ReporterPreferences getPreferences() const = 0; virtual ReporterPreferences getPreferences() const = 0;
virtual std::set<Verbosity> const& getSupportedVerbosities() const = 0;
virtual void noMatchingTestCases( std::string const& spec ) = 0; virtual void noMatchingTestCases( std::string const& spec ) = 0;
virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0; virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0;

View File

@ -49,12 +49,18 @@ namespace Catch {
stream( _config.stream() ) stream( _config.stream() )
{ {
m_reporterPrefs.shouldRedirectStdOut = false; m_reporterPrefs.shouldRedirectStdOut = false;
CATCH_ENFORCE( getSupportedVerbosities().count( m_config->verbosity() ), "Verbosity level not supported by this reporter" );
} }
virtual ReporterPreferences getPreferences() const override { virtual ReporterPreferences getPreferences() const override {
return m_reporterPrefs; return m_reporterPrefs;
} }
virtual std::set<Verbosity> const& getSupportedVerbosities() const override {
static std::set<Verbosity> supported{ Verbosity::Normal };
return supported;
}
virtual ~StreamingReporterBase() override; virtual ~StreamingReporterBase() override;
virtual void noMatchingTestCases( std::string const& ) override {} virtual void noMatchingTestCases( std::string const& ) override {}
@ -155,6 +161,7 @@ namespace Catch {
stream( _config.stream() ) stream( _config.stream() )
{ {
m_reporterPrefs.shouldRedirectStdOut = false; m_reporterPrefs.shouldRedirectStdOut = false;
CATCH_ENFORCE( getSupportedVerbosities().count( m_config->verbosity() ), "Verbosity level not supported by this reporter" );
} }
~CumulativeReporterBase(); ~CumulativeReporterBase();
@ -162,6 +169,11 @@ namespace Catch {
return m_reporterPrefs; return m_reporterPrefs;
} }
virtual std::set<Verbosity> const& getSupportedVerbosities() const override {
static std::set<Verbosity> supported{ Verbosity::Normal };
return supported;
}
virtual void testRunStarting( TestRunInfo const& ) override {} virtual void testRunStarting( TestRunInfo const& ) override {}
virtual void testGroupStarting( GroupInfo const& ) override {} virtual void testGroupStarting( GroupInfo const& ) override {}

View File

@ -15,9 +15,23 @@ namespace Catch {
class MultipleReporters : public IStreamingReporter { class MultipleReporters : public IStreamingReporter {
typedef std::vector<IStreamingReporterPtr> Reporters; typedef std::vector<IStreamingReporterPtr> Reporters;
Reporters m_reporters; Reporters m_reporters;
std::set<Verbosity> m_verbosities;
public: public:
void add( IStreamingReporterPtr&& reporter ) { void add( IStreamingReporterPtr&& reporter ) {
if( m_reporters.empty() ) {
m_verbosities = reporter->getSupportedVerbosities();
}
else {
for( auto it = m_verbosities.cbegin(); it != m_verbosities.cend(); ) {
if( reporter->getSupportedVerbosities().count( *it ) == 0 ) {
it = m_verbosities.erase(it);
}
else {
++it;
}
}
}
m_reporters.push_back( std::move( reporter ) ); m_reporters.push_back( std::move( reporter ) );
} }
@ -27,6 +41,10 @@ public: // IStreamingReporter
return m_reporters[0]->getPreferences(); return m_reporters[0]->getPreferences();
} }
virtual std::set<Verbosity> const& getSupportedVerbosities() const override {
return m_verbosities;
}
virtual void noMatchingTestCases( std::string const& spec ) override { virtual void noMatchingTestCases( std::string const& spec ) override {
for( auto const& reporter : m_reporters ) for( auto const& reporter : m_reporters )
reporter->noMatchingTestCases( spec ); reporter->noMatchingTestCases( spec );