mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Fix various useful clang-tidy warnings
* bugprone-branch-clone * bugprone-copy-constructor-init * bugprone-empty-catch * bugprone-sizeof-expression * bugprone-switch-missing-default-case * bugprone-unused-local-non-trivial-variable * clang-analyzer-core.uninitialized.Assign * clang-analyzer-cplusplus.Move * clang-analyzer-optin.cplusplus.VirtualCall * modernize-loop-convert * modernize-raw-string-literal * modernize-use-equals-default * modernize-use-override * modernize-use-using * performance-avoid-endl * performance-inefficient-string-concatenation * performance-inefficient-vector-operation * performance-noexcept-move-constructor * performance-unnecessary-value-param (and improve generator example) * readability-duplicate-include * readability-inconsistent-declaration-parameter-name * readability-non-const-parameter * readability-redundant-casting * readability-redundant-member-init * readability-redundant-smartptr-get * readability-static-accessed-through-instance * unused variable in amalgamted tests
This commit is contained in:
		
				
					committed by
					
						
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			
						parent
						
							7677c1658e
						
					
				
				
					commit
					cde3509664
				
			@@ -91,6 +91,7 @@ namespace Catch {
 | 
			
		||||
                    m_messages.back().message += " := ";
 | 
			
		||||
                    start = pos;
 | 
			
		||||
                }
 | 
			
		||||
            default:; // noop
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        assert(openings.empty() && "Mismatched openings");
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,6 @@
 | 
			
		||||
#include <catch2/internal/catch_noncopyable.hpp>
 | 
			
		||||
#include <catch2/interfaces/catch_interfaces_reporter_factory.hpp>
 | 
			
		||||
#include <catch2/internal/catch_move_and_forward.hpp>
 | 
			
		||||
#include <catch2/internal/catch_reporter_registry.hpp>
 | 
			
		||||
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,7 @@ namespace Catch {
 | 
			
		||||
    struct TestCaseInfo : Detail::NonCopyable {
 | 
			
		||||
 | 
			
		||||
        TestCaseInfo(StringRef _className,
 | 
			
		||||
                     NameAndTags const& _tags,
 | 
			
		||||
                     NameAndTags const& _nameAndTags,
 | 
			
		||||
                     SourceLineInfo const& _lineInfo);
 | 
			
		||||
 | 
			
		||||
        bool isHidden() const;
 | 
			
		||||
 
 | 
			
		||||
@@ -54,13 +54,13 @@ namespace Detail {
 | 
			
		||||
        }
 | 
			
		||||
    } // end unnamed namespace
 | 
			
		||||
 | 
			
		||||
    std::string convertIntoString(StringRef string, bool escape_invisibles) {
 | 
			
		||||
    std::string convertIntoString(StringRef string, bool escapeInvisibles) {
 | 
			
		||||
        std::string ret;
 | 
			
		||||
        // This is enough for the "don't escape invisibles" case, and a good
 | 
			
		||||
        // lower bound on the "escape invisibles" case.
 | 
			
		||||
        ret.reserve(string.size() + 2);
 | 
			
		||||
 | 
			
		||||
        if (!escape_invisibles) {
 | 
			
		||||
        if (!escapeInvisibles) {
 | 
			
		||||
            ret += '"';
 | 
			
		||||
            ret += string;
 | 
			
		||||
            ret += '"';
 | 
			
		||||
@@ -138,7 +138,7 @@ std::string StringMaker<char const*>::convert(char const* str) {
 | 
			
		||||
        return{ "{null string}" };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
std::string StringMaker<char*>::convert(char* str) {
 | 
			
		||||
std::string StringMaker<char*>::convert(char* str) { // NOLINT(readability-non-const-parameter)
 | 
			
		||||
    if (str) {
 | 
			
		||||
        return Detail::convertIntoString( str );
 | 
			
		||||
    } else {
 | 
			
		||||
@@ -235,8 +235,8 @@ std::string StringMaker<signed char>::convert(signed char value) {
 | 
			
		||||
std::string StringMaker<char>::convert(char c) {
 | 
			
		||||
    return ::Catch::Detail::stringify(static_cast<signed char>(c));
 | 
			
		||||
}
 | 
			
		||||
std::string StringMaker<unsigned char>::convert(unsigned char c) {
 | 
			
		||||
    return ::Catch::Detail::stringify(static_cast<char>(c));
 | 
			
		||||
std::string StringMaker<unsigned char>::convert(unsigned char value) {
 | 
			
		||||
    return ::Catch::Detail::stringify(static_cast<char>(value));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int StringMaker<float>::precision = 5;
 | 
			
		||||
 
 | 
			
		||||
@@ -279,11 +279,11 @@ namespace Catch {
 | 
			
		||||
    };
 | 
			
		||||
    template<>
 | 
			
		||||
    struct StringMaker<signed char> {
 | 
			
		||||
        static std::string convert(signed char c);
 | 
			
		||||
        static std::string convert(signed char value);
 | 
			
		||||
    };
 | 
			
		||||
    template<>
 | 
			
		||||
    struct StringMaker<unsigned char> {
 | 
			
		||||
        static std::string convert(unsigned char c);
 | 
			
		||||
        static std::string convert(unsigned char value);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    template<>
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ namespace Catch {
 | 
			
		||||
                    line = trim(line);
 | 
			
		||||
                    if( !line.empty() && !startsWith( line, '#' ) ) {
 | 
			
		||||
                        if( !startsWith( line, '"' ) )
 | 
			
		||||
                            line = '"' + line + '"';
 | 
			
		||||
                            line = '"' + CATCH_MOVE(line) + '"';
 | 
			
		||||
                        config.testsOrTags.push_back( line );
 | 
			
		||||
                        config.testsOrTags.emplace_back( "," );
 | 
			
		||||
                    }
 | 
			
		||||
 
 | 
			
		||||
@@ -230,21 +230,21 @@ namespace {
 | 
			
		||||
 | 
			
		||||
namespace Catch {
 | 
			
		||||
 | 
			
		||||
    Detail::unique_ptr<ColourImpl> makeColourImpl( ColourMode implSelection,
 | 
			
		||||
    Detail::unique_ptr<ColourImpl> makeColourImpl( ColourMode colourSelection,
 | 
			
		||||
                                                   IStream* stream ) {
 | 
			
		||||
#if defined( CATCH_CONFIG_COLOUR_WIN32 )
 | 
			
		||||
        if ( implSelection == ColourMode::Win32 ) {
 | 
			
		||||
        if ( colourSelection == ColourMode::Win32 ) {
 | 
			
		||||
            return Detail::make_unique<Win32ColourImpl>( stream );
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
        if ( implSelection == ColourMode::ANSI ) {
 | 
			
		||||
        if ( colourSelection == ColourMode::ANSI ) {
 | 
			
		||||
            return Detail::make_unique<ANSIColourImpl>( stream );
 | 
			
		||||
        }
 | 
			
		||||
        if ( implSelection == ColourMode::None ) {
 | 
			
		||||
        if ( colourSelection == ColourMode::None ) {
 | 
			
		||||
            return Detail::make_unique<NoColourImpl>( stream );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ( implSelection == ColourMode::PlatformDefault) {
 | 
			
		||||
        if ( colourSelection == ColourMode::PlatformDefault) {
 | 
			
		||||
#if defined( CATCH_CONFIG_COLOUR_WIN32 )
 | 
			
		||||
            if ( Win32ColourImpl::useImplementationForStream( *stream ) ) {
 | 
			
		||||
                return Detail::make_unique<Win32ColourImpl>( stream );
 | 
			
		||||
@@ -256,7 +256,7 @@ namespace Catch {
 | 
			
		||||
            return Detail::make_unique<NoColourImpl>( stream );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        CATCH_ERROR( "Could not create colour impl for selection " << static_cast<int>(implSelection) );
 | 
			
		||||
        CATCH_ERROR( "Could not create colour impl for selection " << static_cast<int>(colourSelection) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool isColourImplAvailable( ColourMode colourSelection ) {
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ namespace Catch {
 | 
			
		||||
 | 
			
		||||
            std::vector<Catch::Detail::unique_ptr<EnumInfo>> m_enumInfos;
 | 
			
		||||
 | 
			
		||||
            EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector<int> const& values) override;
 | 
			
		||||
            EnumInfo const& registerEnum( StringRef enumName, StringRef allValueNames, std::vector<int> const& values) override;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        std::vector<StringRef> parseEnums( StringRef enums );
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ namespace Catch {
 | 
			
		||||
        m_os{ os }, m_indent_level{ indent_level } {
 | 
			
		||||
        m_os << '{';
 | 
			
		||||
    }
 | 
			
		||||
    JsonObjectWriter::JsonObjectWriter( JsonObjectWriter&& source ):
 | 
			
		||||
    JsonObjectWriter::JsonObjectWriter( JsonObjectWriter&& source ) noexcept:
 | 
			
		||||
        m_os{ source.m_os },
 | 
			
		||||
        m_indent_level{ source.m_indent_level },
 | 
			
		||||
        m_should_comma{ source.m_should_comma },
 | 
			
		||||
@@ -62,7 +62,7 @@ namespace Catch {
 | 
			
		||||
        m_os{ os }, m_indent_level{ indent_level } {
 | 
			
		||||
        m_os << '[';
 | 
			
		||||
    }
 | 
			
		||||
    JsonArrayWriter::JsonArrayWriter( JsonArrayWriter&& source ):
 | 
			
		||||
    JsonArrayWriter::JsonArrayWriter( JsonArrayWriter&& source ) noexcept:
 | 
			
		||||
        m_os{ source.m_os },
 | 
			
		||||
        m_indent_level{ source.m_indent_level },
 | 
			
		||||
        m_should_comma{ source.m_should_comma },
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,7 @@ namespace Catch {
 | 
			
		||||
        JsonObjectWriter( std::ostream& os );
 | 
			
		||||
        JsonObjectWriter( std::ostream& os, std::uint64_t indent_level );
 | 
			
		||||
 | 
			
		||||
        JsonObjectWriter( JsonObjectWriter&& source );
 | 
			
		||||
        JsonObjectWriter( JsonObjectWriter&& source ) noexcept;
 | 
			
		||||
        JsonObjectWriter& operator=( JsonObjectWriter&& source ) = delete;
 | 
			
		||||
 | 
			
		||||
        ~JsonObjectWriter();
 | 
			
		||||
@@ -84,7 +84,7 @@ namespace Catch {
 | 
			
		||||
        JsonArrayWriter( std::ostream& os );
 | 
			
		||||
        JsonArrayWriter( std::ostream& os, std::uint64_t indent_level );
 | 
			
		||||
 | 
			
		||||
        JsonArrayWriter( JsonArrayWriter&& source );
 | 
			
		||||
        JsonArrayWriter( JsonArrayWriter&& source ) noexcept;
 | 
			
		||||
        JsonArrayWriter& operator=( JsonArrayWriter&& source ) = delete;
 | 
			
		||||
 | 
			
		||||
        ~JsonArrayWriter();
 | 
			
		||||
 
 | 
			
		||||
@@ -117,7 +117,7 @@ namespace Catch {
 | 
			
		||||
            auto kv = splitKVPair( parts[i] );
 | 
			
		||||
            auto key = kv.key, value = kv.value;
 | 
			
		||||
 | 
			
		||||
            if ( key.empty() || value.empty() ) {
 | 
			
		||||
            if ( key.empty() || value.empty() ) { // NOLINT(bugprone-branch-clone)
 | 
			
		||||
                return {};
 | 
			
		||||
            } else if ( key[0] == 'X' ) {
 | 
			
		||||
                // This is a reporter-specific option, we don't check these
 | 
			
		||||
 
 | 
			
		||||
@@ -97,8 +97,8 @@ namespace Catch {
 | 
			
		||||
        constexpr const_iterator end() const { return m_start + m_size; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        friend std::string& operator += (std::string& lhs, StringRef sr);
 | 
			
		||||
        friend std::ostream& operator << (std::ostream& os, StringRef sr);
 | 
			
		||||
        friend std::string& operator += (std::string& lhs, StringRef rhs);
 | 
			
		||||
        friend std::ostream& operator << (std::ostream& os, StringRef str);
 | 
			
		||||
        friend std::string operator+(StringRef lhs, StringRef rhs);
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
 
 | 
			
		||||
@@ -520,8 +520,8 @@ void ConsoleReporter::testRunEnded(TestRunStats const& _testRunStats) {
 | 
			
		||||
    m_stream << '\n' << std::flush;
 | 
			
		||||
    StreamingReporterBase::testRunEnded(_testRunStats);
 | 
			
		||||
}
 | 
			
		||||
void ConsoleReporter::testRunStarting(TestRunInfo const& _testInfo) {
 | 
			
		||||
    StreamingReporterBase::testRunStarting(_testInfo);
 | 
			
		||||
void ConsoleReporter::testRunStarting(TestRunInfo const& _testRunInfo) {
 | 
			
		||||
    StreamingReporterBase::testRunStarting(_testRunInfo);
 | 
			
		||||
    if ( m_config->testSpec().hasFilters() ) {
 | 
			
		||||
        m_stream << m_colour->guardColour( Colour::BrightYellow ) << "Filters: "
 | 
			
		||||
                 << m_config->testSpec() << '\n';
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,7 @@ namespace Catch {
 | 
			
		||||
    namespace {
 | 
			
		||||
        struct BySectionInfo {
 | 
			
		||||
            BySectionInfo( SectionInfo const& other ): m_other( other ) {}
 | 
			
		||||
            BySectionInfo( BySectionInfo const& other ):
 | 
			
		||||
                m_other( other.m_other ) {}
 | 
			
		||||
            BySectionInfo( BySectionInfo const& other ) = default;
 | 
			
		||||
            bool operator()(
 | 
			
		||||
                Detail::unique_ptr<CumulativeReporterBase::SectionNode> const&
 | 
			
		||||
                    node ) const {
 | 
			
		||||
 
 | 
			
		||||
@@ -133,8 +133,8 @@ namespace Catch {
 | 
			
		||||
        return "Outputs listings as JSON. Test listing is Work-in-Progress!";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void JsonReporter::testRunStarting( TestRunInfo const& testInfo ) {
 | 
			
		||||
        StreamingReporterBase::testRunStarting( testInfo );
 | 
			
		||||
    void JsonReporter::testRunStarting( TestRunInfo const& runInfo ) {
 | 
			
		||||
        StreamingReporterBase::testRunStarting( runInfo );
 | 
			
		||||
        endListing();
 | 
			
		||||
 | 
			
		||||
        assert( isInside( Writer::Object ) );
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ namespace Catch {
 | 
			
		||||
 | 
			
		||||
        static void normalizeNamespaceMarkers(std::string& str) {
 | 
			
		||||
            std::size_t pos = str.find( "::" );
 | 
			
		||||
            while ( pos != str.npos ) {
 | 
			
		||||
            while ( pos != std::string::npos ) {
 | 
			
		||||
                str.replace( pos, 2, "." );
 | 
			
		||||
                pos += 1;
 | 
			
		||||
                pos = str.find( "::", pos );
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ namespace Catch {
 | 
			
		||||
 | 
			
		||||
        void assertionEnded( AssertionStats const& assertionStats ) override;
 | 
			
		||||
        void sectionEnded( SectionStats const& sectionStats ) override;
 | 
			
		||||
        void testCasePartialEnded(TestCaseStats const& testInfo, uint64_t partNumber) override;
 | 
			
		||||
        void testCasePartialEnded(TestCaseStats const& testStats, uint64_t partNumber) override;
 | 
			
		||||
        void testCaseEnded( TestCaseStats const& testCaseStats ) override;
 | 
			
		||||
        void testRunEnded( TestRunStats const& testRunStats ) override;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ namespace Catch {
 | 
			
		||||
            xml.endElement();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void writeRun( TestRunNode const& groupNode );
 | 
			
		||||
        void writeRun( TestRunNode const& runNode );
 | 
			
		||||
 | 
			
		||||
        void writeTestFile(StringRef filename, std::vector<TestCaseNode const*> const& testCaseNodes);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,8 +35,8 @@ namespace Catch {
 | 
			
		||||
            return "Reports test results as TeamCity service messages"s;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void testRunStarting( TestRunInfo const& groupInfo ) override;
 | 
			
		||||
        void testRunEnded( TestRunStats const& testGroupStats ) override;
 | 
			
		||||
        void testRunStarting( TestRunInfo const& runInfo ) override;
 | 
			
		||||
        void testRunEnded( TestRunStats const& runStats ) override;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        void assertionEnded(AssertionStats const& assertionStats) override;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user