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 listReporters() const { return m_data.listReporters; }
Verbosity verbosity() const { return m_data.verbosity; }
std::string getProcessName() const { return m_data.processName; }
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 int abortAfter() const override { return m_data.abortAfter; }
virtual bool showInvisibles() const override { return m_data.showInvisibles; }
virtual Verbosity verbosity() const override { return m_data.verbosity; }
private:

View File

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

View File

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

View File

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

View File

@ -15,9 +15,23 @@ namespace Catch {
class MultipleReporters : public IStreamingReporter {
typedef std::vector<IStreamingReporterPtr> Reporters;
Reporters m_reporters;
std::set<Verbosity> m_verbosities;
public:
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 ) );
}
@ -27,6 +41,10 @@ public: // IStreamingReporter
return m_reporters[0]->getPreferences();
}
virtual std::set<Verbosity> const& getSupportedVerbosities() const override {
return m_verbosities;
}
virtual void noMatchingTestCases( std::string const& spec ) override {
for( auto const& reporter : m_reporters )
reporter->noMatchingTestCases( spec );