mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 09:01:50 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 *  Created by Phil on 29/10/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_COMMON_H_INCLUDED
 | 
						|
#define TWOBLUECUBES_CATCH_COMMON_H_INCLUDED
 | 
						|
 | 
						|
#include "catch_compiler_capabilities.h"
 | 
						|
 | 
						|
#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line
 | 
						|
#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
 | 
						|
#ifdef CATCH_CONFIG_COUNTER
 | 
						|
#  define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ )
 | 
						|
#else
 | 
						|
#  define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
 | 
						|
#endif
 | 
						|
 | 
						|
#include <iosfwd>
 | 
						|
#include <string>
 | 
						|
#include <cstdint>
 | 
						|
 | 
						|
// We need a dummy global operator<< so we can bring it into Catch namespace later
 | 
						|
struct Catch_global_namespace_dummy {};
 | 
						|
std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
 | 
						|
 | 
						|
namespace Catch {
 | 
						|
 | 
						|
    struct CaseSensitive { enum Choice {
 | 
						|
        Yes,
 | 
						|
        No
 | 
						|
    }; };
 | 
						|
 | 
						|
    class NonCopyable {
 | 
						|
        NonCopyable( NonCopyable const& )              = delete;
 | 
						|
        NonCopyable( NonCopyable && )                  = delete;
 | 
						|
        NonCopyable& operator = ( NonCopyable const& ) = delete;
 | 
						|
        NonCopyable& operator = ( NonCopyable && )     = delete;
 | 
						|
 | 
						|
    protected:
 | 
						|
        NonCopyable();
 | 
						|
        virtual ~NonCopyable();
 | 
						|
    };
 | 
						|
 | 
						|
    struct SourceLineInfo {
 | 
						|
 | 
						|
        SourceLineInfo() = delete;
 | 
						|
        SourceLineInfo( char const* _file, std::size_t _line ) noexcept
 | 
						|
        :   file( _file ),
 | 
						|
            line( _line )
 | 
						|
        {}
 | 
						|
 | 
						|
        SourceLineInfo( SourceLineInfo const& other )            = default;
 | 
						|
        SourceLineInfo& operator = ( SourceLineInfo const& )     = default;
 | 
						|
        SourceLineInfo( SourceLineInfo&& )              noexcept = default;
 | 
						|
        SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
 | 
						|
 | 
						|
        bool empty() const noexcept { return file[0] == '\0'; }
 | 
						|
        bool operator == ( SourceLineInfo const& other ) const noexcept;
 | 
						|
        bool operator < ( SourceLineInfo const& other ) const noexcept;
 | 
						|
 | 
						|
        char const* file;
 | 
						|
        std::size_t line;
 | 
						|
    };
 | 
						|
 | 
						|
    std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info );
 | 
						|
 | 
						|
    // Bring in operator<< from global namespace into Catch namespace
 | 
						|
    // This is necessary because the overload of operator<< above makes
 | 
						|
    // lookup stop at namespace Catch
 | 
						|
    using ::operator<<;
 | 
						|
 | 
						|
    // Use this in variadic streaming macros to allow
 | 
						|
    //    >> +StreamEndStop
 | 
						|
    // as well as
 | 
						|
    //    >> stuff +StreamEndStop
 | 
						|
    struct StreamEndStop {
 | 
						|
        std::string operator+() const;
 | 
						|
    };
 | 
						|
    template<typename T>
 | 
						|
    T const& operator + ( T const& value, StreamEndStop ) {
 | 
						|
        return value;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#define CATCH_INTERNAL_LINEINFO \
 | 
						|
    ::Catch::SourceLineInfo( __FILE__, static_cast<std::size_t>( __LINE__ ) )
 | 
						|
 | 
						|
#endif // TWOBLUECUBES_CATCH_COMMON_H_INCLUDED
 | 
						|
 |