mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Made everything used in test case registration noexcept
- this prevents warnings about startup-time exceptions
This commit is contained in:
		@@ -75,18 +75,18 @@ namespace Catch {
 | 
			
		||||
        return os;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    SourceLineInfo::SourceLineInfo() : file(""), line( 0 ){}
 | 
			
		||||
    SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line )
 | 
			
		||||
    SourceLineInfo::SourceLineInfo() noexcept : file(""), line( 0 ){}
 | 
			
		||||
    SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line ) noexcept
 | 
			
		||||
    :   file( _file ),
 | 
			
		||||
        line( _line )
 | 
			
		||||
    {}
 | 
			
		||||
    bool SourceLineInfo::empty() const {
 | 
			
		||||
    bool SourceLineInfo::empty() const noexcept {
 | 
			
		||||
        return file[0] == '\0';
 | 
			
		||||
    }
 | 
			
		||||
    bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const {
 | 
			
		||||
    bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const noexcept {
 | 
			
		||||
        return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0);
 | 
			
		||||
    }
 | 
			
		||||
    bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const {
 | 
			
		||||
    bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const noexcept {
 | 
			
		||||
        return line < other.line || ( line == other.line && (std::strcmp(file, other.file) < 0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -77,17 +77,17 @@ namespace Catch {
 | 
			
		||||
 | 
			
		||||
    struct SourceLineInfo {
 | 
			
		||||
 | 
			
		||||
        SourceLineInfo();
 | 
			
		||||
        SourceLineInfo( char const* _file, std::size_t _line );
 | 
			
		||||
        SourceLineInfo() noexcept;
 | 
			
		||||
        SourceLineInfo( char const* _file, std::size_t _line ) noexcept;
 | 
			
		||||
 | 
			
		||||
        SourceLineInfo(SourceLineInfo const& other)          = default;
 | 
			
		||||
        SourceLineInfo( SourceLineInfo && )                  = default;
 | 
			
		||||
        SourceLineInfo& operator = ( SourceLineInfo const& ) = default;
 | 
			
		||||
        SourceLineInfo& operator = ( SourceLineInfo && )     = default;
 | 
			
		||||
 | 
			
		||||
        bool empty() const;
 | 
			
		||||
        bool operator == ( SourceLineInfo const& other ) const;
 | 
			
		||||
        bool operator < ( SourceLineInfo const& other ) const;
 | 
			
		||||
        bool empty() const noexcept;
 | 
			
		||||
        bool operator == ( SourceLineInfo const& other ) const noexcept;
 | 
			
		||||
        bool operator < ( SourceLineInfo const& other ) const noexcept;
 | 
			
		||||
 | 
			
		||||
        char const* file;
 | 
			
		||||
        std::size_t line;
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,7 @@ namespace Catch {
 | 
			
		||||
        virtual void registerTest( TestCase const& testInfo ) = 0;
 | 
			
		||||
        virtual void registerTranslator( const IExceptionTranslator* translator ) = 0;
 | 
			
		||||
        virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0;
 | 
			
		||||
        virtual void registerStartupException( std::exception_ptr const& exception ) = 0;
 | 
			
		||||
        virtual void registerStartupException( std::exception_ptr const& exception ) noexcept = 0;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    IRegistryHub& getRegistryHub();
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ namespace Catch {
 | 
			
		||||
            virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override {
 | 
			
		||||
                m_tagAliasRegistry.add( alias, tag, lineInfo );
 | 
			
		||||
            }
 | 
			
		||||
            virtual void registerStartupException( std::exception_ptr const& exception ) override {
 | 
			
		||||
            virtual void registerStartupException( std::exception_ptr const& exception ) noexcept override {
 | 
			
		||||
                m_exceptionRegistry.add(exception);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,11 +9,17 @@
 | 
			
		||||
#include "catch_startup_exception_registry.h"
 | 
			
		||||
 | 
			
		||||
namespace Catch {
 | 
			
		||||
    void StartupExceptionRegistry::add( std::exception_ptr const& exception ) {
 | 
			
		||||
        m_exceptions.push_back(exception);
 | 
			
		||||
    void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept {
 | 
			
		||||
        try {
 | 
			
		||||
            m_exceptions.push_back(exception);
 | 
			
		||||
        }
 | 
			
		||||
        catch(...) {
 | 
			
		||||
            // If we run out of memory during start-up there's really not a lot more we can do about it
 | 
			
		||||
            std::terminate();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::vector<std::exception_ptr> const& StartupExceptionRegistry::getExceptions() const {
 | 
			
		||||
    std::vector<std::exception_ptr> const& StartupExceptionRegistry::getExceptions() const noexcept {
 | 
			
		||||
        return m_exceptions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,8 @@ namespace Catch {
 | 
			
		||||
 | 
			
		||||
    class StartupExceptionRegistry {
 | 
			
		||||
    public:
 | 
			
		||||
        void add(std::exception_ptr const& exception);
 | 
			
		||||
        std::vector<std::exception_ptr> const& getExceptions() const;
 | 
			
		||||
        void add(std::exception_ptr const& exception) noexcept;
 | 
			
		||||
        std::vector<std::exception_ptr> const& getExceptions() const noexcept;
 | 
			
		||||
    private:
 | 
			
		||||
        std::vector<std::exception_ptr> m_exceptions;
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -46,10 +46,8 @@ namespace Catch {
 | 
			
		||||
                std::sort( sorted.begin(), sorted.end() );
 | 
			
		||||
                break;
 | 
			
		||||
            case RunTests::InRandomOrder:
 | 
			
		||||
                {
 | 
			
		||||
                    seedRng( config );
 | 
			
		||||
                    RandomNumberGenerator::shuffle( sorted );
 | 
			
		||||
                }
 | 
			
		||||
                seedRng( config );
 | 
			
		||||
                RandomNumberGenerator::shuffle( sorted );
 | 
			
		||||
                break;
 | 
			
		||||
            case RunTests::InDeclarationOrder:
 | 
			
		||||
                // already in declaration order
 | 
			
		||||
@@ -128,14 +126,14 @@ namespace Catch {
 | 
			
		||||
    class TestInvokerAsFunction : public ITestInvoker {
 | 
			
		||||
        void(*m_testAsFunction)();
 | 
			
		||||
    public:
 | 
			
		||||
        TestInvokerAsFunction( void(*testAsFunction)() ) : m_testAsFunction( testAsFunction ) {}
 | 
			
		||||
        TestInvokerAsFunction( void(*testAsFunction)() ) noexcept : m_testAsFunction( testAsFunction ) {}
 | 
			
		||||
 | 
			
		||||
        void invoke() const override {
 | 
			
		||||
            m_testAsFunction();
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    auto makeTestInvoker( void(*testAsFunction)() ) -> ITestInvoker* {
 | 
			
		||||
        return new TestInvokerAsFunction( testAsFunction );
 | 
			
		||||
    auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker* {
 | 
			
		||||
        return new(std::nothrow) TestInvokerAsFunction( testAsFunction );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -154,7 +152,7 @@ namespace Catch {
 | 
			
		||||
 | 
			
		||||
    ///////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
    AutoReg::AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef classOrMethod, NameAndTags const& nameAndTags )
 | 
			
		||||
    AutoReg::AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef classOrMethod, NameAndTags const& nameAndTags ) noexcept
 | 
			
		||||
    {
 | 
			
		||||
        try {
 | 
			
		||||
            getMutableRegistryHub()
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ template<typename C>
 | 
			
		||||
class TestInvokerAsMethod : public ITestInvoker {
 | 
			
		||||
    void (C::*m_testAsMethod)();
 | 
			
		||||
public:
 | 
			
		||||
    TestInvokerAsMethod( void (C::*testAsMethod)() ) : m_testAsMethod( testAsMethod ) {}
 | 
			
		||||
    TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAsMethod( testAsMethod ) {}
 | 
			
		||||
 | 
			
		||||
    void invoke() const override {
 | 
			
		||||
        C obj;
 | 
			
		||||
@@ -27,23 +27,23 @@ public:
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
auto makeTestInvoker( void(*testAsFunction)() ) -> ITestInvoker*;
 | 
			
		||||
auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker*;
 | 
			
		||||
 | 
			
		||||
template<typename C>
 | 
			
		||||
auto makeTestInvoker( void (C::*testAsMethod)() ) -> ITestInvoker* {
 | 
			
		||||
    return new TestInvokerAsMethod<C>( testAsMethod );
 | 
			
		||||
auto makeTestInvoker( void (C::*testAsMethod)() ) noexcept -> ITestInvoker* {
 | 
			
		||||
    return new(std::nothrow) TestInvokerAsMethod<C>( testAsMethod );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct NameAndTags {
 | 
			
		||||
 | 
			
		||||
    NameAndTags( StringRef name_ = "", StringRef tags_ = "" ) : name( name_ ), tags( tags_ ) {}
 | 
			
		||||
    NameAndTags( StringRef name_ = "", StringRef tags_ = "" ) noexcept : name( name_ ), tags( tags_ ) {}
 | 
			
		||||
 | 
			
		||||
    StringRef name;
 | 
			
		||||
    StringRef tags;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct AutoReg : NonCopyable {
 | 
			
		||||
    AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef classOrMethod, NameAndTags const& nameAndTags );
 | 
			
		||||
    AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef classOrMethod, NameAndTags const& nameAndTags ) noexcept;
 | 
			
		||||
    ~AutoReg();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user