Only Hub #includes report_registry. Seperated reporter registrars from registry.

This commit is contained in:
Phil Nash 2010-12-31 22:46:51 +00:00
parent 764229ac4e
commit 18e32b9b9f
8 changed files with 88 additions and 36 deletions

View File

@ -13,7 +13,8 @@
#define TWOBLUECUBES_CATCH_REPORTER_BASIC_HPP_INCLUDED #define TWOBLUECUBES_CATCH_REPORTER_BASIC_HPP_INCLUDED
#include "internal/catch_capture.hpp" #include "internal/catch_capture.hpp"
#include "internal/catch_reporter_registry.hpp" #include "internal/catch_interfaces_reporter.h"
#include "internal/catch_reporter_registrars.hpp"
namespace Catch namespace Catch
{ {

View File

@ -13,7 +13,8 @@
#define TWOBLUECUBES_CATCH_REPORTER_JUNIT_HPP_INCLUDED #define TWOBLUECUBES_CATCH_REPORTER_JUNIT_HPP_INCLUDED
#include "internal/catch_capture.hpp" #include "internal/catch_capture.hpp"
#include "internal/catch_reporter_registry.hpp" #include "internal/catch_interfaces_reporter.h"
#include "internal/catch_reporter_registrars.hpp"
#include "internal/catch_xmlwriter.hpp" #include "internal/catch_xmlwriter.hpp"
namespace Catch namespace Catch

View File

@ -13,7 +13,8 @@
#define TWOBLUECUBES_CATCH_REPORTER_XML_HPP_INCLUDED #define TWOBLUECUBES_CATCH_REPORTER_XML_HPP_INCLUDED
#include "internal/catch_capture.hpp" #include "internal/catch_capture.hpp"
#include "internal/catch_reporter_registry.hpp" #include "internal/catch_interfaces_reporter.h"
#include "internal/catch_reporter_registrars.hpp"
#include "internal/catch_xmlwriter.hpp" #include "internal/catch_xmlwriter.hpp"
namespace Catch namespace Catch

View File

@ -1,5 +1,5 @@
/* /*
* catch_ireporterregistry.h * catch_interfaces_reporter.h
* Test * Test
* *
* Created by Phil on 31/12/2010. * Created by Phil on 31/12/2010.

View File

@ -0,0 +1,58 @@
/*
* catch_reporter_registrars.hpp
* Test
*
* 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_REPORTER_REGISTRARS_HPP_INCLUDED
#define TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED
#include "catch_hub.hpp"
namespace Catch
{
template<typename T>
class ReporterRegistrar
{
class ReporterFactory : public IReporterFactory
{
///////////////////////////////////////////////////////////////////
virtual IReporter* create
(
const IReporterConfig& config
)
const
{
return new T( config );
}
///////////////////////////////////////////////////////////////////
virtual std::string getDescription
()
const
{
return T::getDescription();
}
};
public:
///////////////////////////////////////////////////////////////////////
ReporterRegistrar
(
const std::string& name
)
{
Hub::getReporterRegistry().registerReporter( name, new ReporterFactory() );
}
};
}
#define CATCH_REGISTER_REPORTER( name, reporterType ) \
Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name );
#endif // TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED

View File

@ -12,18 +12,19 @@
#ifndef TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED #ifndef TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED
#define TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED #define TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED
#include "catch_ireporterregistry.h" #include "catch_interfaces_reporter.h"
#include <map> #include <map>
namespace Catch namespace Catch
{ {
class ReporterRegistry : public IReporterRegistry class ReporterRegistry : public IReporterRegistry
{ {
public: public:
~ReporterRegistry() ///////////////////////////////////////////////////////////////////////
~ReporterRegistry
()
{ {
FactoryMap::const_iterator it = m_factories.begin(); FactoryMap::const_iterator it = m_factories.begin();
FactoryMap::const_iterator itEnd = m_factories.end(); FactoryMap::const_iterator itEnd = m_factories.end();
@ -33,7 +34,13 @@ namespace Catch
} }
} }
virtual IReporter* create( const std::string& name, const IReporterConfig& config ) const ///////////////////////////////////////////////////////////////////////
virtual IReporter* create
(
const std::string& name,
const IReporterConfig& config
)
const
{ {
FactoryMap::const_iterator it = m_factories.find( name ); FactoryMap::const_iterator it = m_factories.find( name );
if( it == m_factories.end() ) if( it == m_factories.end() )
@ -41,12 +48,20 @@ namespace Catch
return it->second->create( config ); return it->second->create( config );
} }
void registerReporter( const std::string& name, IReporterFactory* factory ) ///////////////////////////////////////////////////////////////////////
void registerReporter
(
const std::string& name,
IReporterFactory* factory
)
{ {
m_factories.insert( std::make_pair( name, factory ) ); m_factories.insert( std::make_pair( name, factory ) );
} }
const FactoryMap& getFactories() const ///////////////////////////////////////////////////////////////////////
const FactoryMap& getFactories
()
const
{ {
return m_factories; return m_factories;
} }
@ -54,30 +69,6 @@ namespace Catch
private: private:
FactoryMap m_factories; FactoryMap m_factories;
}; };
template<typename T>
class ReporterFactory : public IReporterFactory
{
virtual IReporter* create( const IReporterConfig& config ) const
{
return new T( config );
}
virtual std::string getDescription() const
{
return T::getDescription();
}
};
template<typename T>
struct ReporterRegistrar
{
ReporterRegistrar( const std::string& name )
{
Hub::getReporterRegistry().registerReporter( name, new ReporterFactory<T>() );
}
};
} }
#define CATCH_REGISTER_REPORTER( name, reporterType ) Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name );
#endif // TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED #endif // TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED

View File

@ -12,7 +12,7 @@
#ifndef TWOBLUECUBES_INTERNAL_CATCH_RUNNER_HPP_INCLUDED #ifndef TWOBLUECUBES_INTERNAL_CATCH_RUNNER_HPP_INCLUDED
#define TWOBLUECUBES_INTERNAL_CATCH_RUNNER_HPP_INCLUDED #define TWOBLUECUBES_INTERNAL_CATCH_RUNNER_HPP_INCLUDED
#include "catch_reporter_registry.hpp" #include "catch_interfaces_reporter.h"
#include "catch_runnerconfig.hpp" #include "catch_runnerconfig.hpp"
#include "catch_registry.hpp" #include "catch_registry.hpp"
#include "catch_capture.hpp" #include "catch_capture.hpp"

View File

@ -13,7 +13,7 @@
#ifndef TWOBLUECUBES_CATCH_RUNNERCONFIG_HPP_INCLUDED #ifndef TWOBLUECUBES_CATCH_RUNNERCONFIG_HPP_INCLUDED
#define TWOBLUECUBES_CATCH_RUNNERCONFIG_HPP_INCLUDED #define TWOBLUECUBES_CATCH_RUNNERCONFIG_HPP_INCLUDED
#include "catch_reporter_registry.hpp" #include "catch_interfaces_reporter.h"
#include <memory> #include <memory>
#include <vector> #include <vector>