mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 12:17:11 +01:00 
			
		
		
		
	 9aa96712ae
			
		
	
	9aa96712ae
	
	
	
		
			
			Swept: `-Wpadded` in some places (where it caused extra size, instead of just saying "hey, we padded struct at the end to align, just as standard says") `-Wweak-vtables` everywhere (Clang) `-Wexit-time-destructors` everywhere (Clang) `-Wmissing-noreturn` everywhere (Clang) The last three are enabled for Clang compilation going forward. Also enabled `-Wunreachable-code` for Clang and GCC
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| /*
 | |
|  *  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_interfaces_registry_hub.h"
 | |
| 
 | |
| namespace Catch {
 | |
| 
 | |
|     template<typename T>
 | |
|     class ReporterRegistrar {
 | |
| 
 | |
|         class ReporterFactory : public IReporterFactory {
 | |
| 
 | |
|             virtual IStreamingReporterPtr create( ReporterConfig const& config ) const override {
 | |
|                 return std::unique_ptr<T>( new T( config ) );
 | |
|             }
 | |
| 
 | |
|             virtual std::string getDescription() const override {
 | |
|                 return T::getDescription();
 | |
|             }
 | |
|         };
 | |
| 
 | |
|     public:
 | |
| 
 | |
|         ReporterRegistrar( std::string const& name ) {
 | |
|             getMutableRegistryHub().registerReporter( name, std::make_shared<ReporterFactory>() );
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     template<typename T>
 | |
|     class ListenerRegistrar {
 | |
| 
 | |
|         class ListenerFactory : public IReporterFactory {
 | |
| 
 | |
|             virtual IStreamingReporterPtr create( ReporterConfig const& config ) const override {
 | |
|                 return std::unique_ptr<T>( new T( config ) );
 | |
|             }
 | |
|             virtual std::string getDescription() const override {
 | |
|                 return std::string();
 | |
|             }
 | |
|         };
 | |
| 
 | |
|     public:
 | |
| 
 | |
|         ListenerRegistrar() {
 | |
|             getMutableRegistryHub().registerListener( std::make_shared<ListenerFactory>() );
 | |
|         }
 | |
|     };
 | |
| }
 | |
| 
 | |
| #if !defined(CATCH_CONFIG_DISABLE)
 | |
| 
 | |
| #define CATCH_REGISTER_REPORTER( name, reporterType ) \
 | |
|     CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS          \
 | |
|     namespace{ Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } \
 | |
|     CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS
 | |
| 
 | |
| #define CATCH_REGISTER_LISTENER( listenerType ) \
 | |
|      CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS   \
 | |
|      namespace{ Catch::ListenerRegistrar<listenerType> catch_internal_RegistrarFor##listenerType; } \
 | |
|      CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
 | |
| #else // CATCH_CONFIG_DISABLE
 | |
| 
 | |
| #define CATCH_REGISTER_REPORTER(name, reporterType)
 | |
| #define CATCH_REGISTER_LISTENER(listenerType)
 | |
| 
 | |
| #endif // CATCH_CONFIG_DISABLE
 | |
| 
 | |
| #endif // TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED
 |