mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	v2.13.0
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  Catch v2.12.4
 | 
			
		||||
 *  Generated: 2020-07-05 11:47:18.451282
 | 
			
		||||
 *  Catch v2.13.0
 | 
			
		||||
 *  Generated: 2020-07-12 20:07:49.015950
 | 
			
		||||
 *  ----------------------------------------------------------
 | 
			
		||||
 *  This file has been merged from multiple headers. Please don't edit it directly
 | 
			
		||||
 *  Copyright (c) 2020 Two Blue Cubes Ltd. All rights reserved.
 | 
			
		||||
@@ -14,8 +14,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define CATCH_VERSION_MAJOR 2
 | 
			
		||||
#define CATCH_VERSION_MINOR 12
 | 
			
		||||
#define CATCH_VERSION_PATCH 4
 | 
			
		||||
#define CATCH_VERSION_MINOR 13
 | 
			
		||||
#define CATCH_VERSION_PATCH 0
 | 
			
		||||
 | 
			
		||||
#ifdef __clang__
 | 
			
		||||
#    pragma clang system_header
 | 
			
		||||
@@ -4522,6 +4522,7 @@ namespace Catch {
 | 
			
		||||
        virtual int abortAfter() const = 0;
 | 
			
		||||
        virtual bool showInvisibles() const = 0;
 | 
			
		||||
        virtual ShowDurations::OrNot showDurations() const = 0;
 | 
			
		||||
        virtual double minDuration() const = 0;
 | 
			
		||||
        virtual TestSpec const& testSpec() const = 0;
 | 
			
		||||
        virtual bool hasTestFilters() const = 0;
 | 
			
		||||
        virtual std::vector<std::string> const& getTestsOrTags() const = 0;
 | 
			
		||||
@@ -5294,6 +5295,7 @@ namespace Catch {
 | 
			
		||||
        Verbosity verbosity = Verbosity::Normal;
 | 
			
		||||
        WarnAbout::What warnings = WarnAbout::Nothing;
 | 
			
		||||
        ShowDurations::OrNot showDurations = ShowDurations::DefaultForReporter;
 | 
			
		||||
        double minDuration = -1;
 | 
			
		||||
        RunTests::InWhatOrder runOrder = RunTests::InDeclarationOrder;
 | 
			
		||||
        UseColour::YesOrNo useColour = UseColour::Auto;
 | 
			
		||||
        WaitForKeypress::When waitForKeypress = WaitForKeypress::Never;
 | 
			
		||||
@@ -5344,6 +5346,7 @@ namespace Catch {
 | 
			
		||||
        bool warnAboutMissingAssertions() const override;
 | 
			
		||||
        bool warnAboutNoTests() const override;
 | 
			
		||||
        ShowDurations::OrNot showDurations() const override;
 | 
			
		||||
        double minDuration() const override;
 | 
			
		||||
        RunTests::InWhatOrder runOrder() const override;
 | 
			
		||||
        unsigned int rngSeed() const override;
 | 
			
		||||
        UseColour::YesOrNo useColour() const override;
 | 
			
		||||
@@ -5721,6 +5724,9 @@ namespace Catch {
 | 
			
		||||
    // Returns double formatted as %.3f (format expected on output)
 | 
			
		||||
    std::string getFormattedDuration( double duration );
 | 
			
		||||
 | 
			
		||||
    //! Should the reporter show
 | 
			
		||||
    bool shouldShowDuration( IConfig const& config, double duration );
 | 
			
		||||
 | 
			
		||||
    std::string serializeFilters( std::vector<std::string> const& container );
 | 
			
		||||
 | 
			
		||||
    template<typename DerivedT>
 | 
			
		||||
@@ -6114,8 +6120,6 @@ namespace Catch {
 | 
			
		||||
 | 
			
		||||
        static std::string getDescription();
 | 
			
		||||
 | 
			
		||||
        ReporterPreferences getPreferences() const override;
 | 
			
		||||
 | 
			
		||||
        void noMatchingTestCases(std::string const& spec) override;
 | 
			
		||||
 | 
			
		||||
        void assertionStarting(AssertionInfo const&) override;
 | 
			
		||||
@@ -7499,6 +7503,7 @@ namespace TestCaseTracking {
 | 
			
		||||
        virtual bool isSuccessfullyCompleted() const = 0;
 | 
			
		||||
        virtual bool isOpen() const = 0; // Started but not complete
 | 
			
		||||
        virtual bool hasChildren() const = 0;
 | 
			
		||||
        virtual bool hasStarted() const = 0;
 | 
			
		||||
 | 
			
		||||
        virtual ITracker& parent() = 0;
 | 
			
		||||
 | 
			
		||||
@@ -7565,6 +7570,9 @@ namespace TestCaseTracking {
 | 
			
		||||
        bool isSuccessfullyCompleted() const override;
 | 
			
		||||
        bool isOpen() const override;
 | 
			
		||||
        bool hasChildren() const override;
 | 
			
		||||
        bool hasStarted() const override {
 | 
			
		||||
            return m_runState != NotStarted;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void addChild( ITrackerPtr const& child ) override;
 | 
			
		||||
 | 
			
		||||
@@ -9861,6 +9869,9 @@ namespace Catch {
 | 
			
		||||
            | Opt( [&]( bool flag ) { config.showDurations = flag ? ShowDurations::Always : ShowDurations::Never; }, "yes|no" )
 | 
			
		||||
                ["-d"]["--durations"]
 | 
			
		||||
                ( "show test durations" )
 | 
			
		||||
            | Opt( config.minDuration, "seconds" )
 | 
			
		||||
                ["-D"]["--min-duration"]
 | 
			
		||||
                ( "show test durations for tests taking at least the given number of seconds" )
 | 
			
		||||
            | Opt( loadTestNamesFromFile, "filename" )
 | 
			
		||||
                ["-f"]["--input-file"]
 | 
			
		||||
                ( "load test names to run from a file" )
 | 
			
		||||
@@ -10008,6 +10019,7 @@ namespace Catch {
 | 
			
		||||
    bool Config::warnAboutMissingAssertions() const    { return !!(m_data.warnings & WarnAbout::NoAssertions); }
 | 
			
		||||
    bool Config::warnAboutNoTests() const              { return !!(m_data.warnings & WarnAbout::NoTests); }
 | 
			
		||||
    ShowDurations::OrNot Config::showDurations() const { return m_data.showDurations; }
 | 
			
		||||
    double Config::minDuration() const                 { return m_data.minDuration; }
 | 
			
		||||
    RunTests::InWhatOrder Config::runOrder() const     { return m_data.runOrder; }
 | 
			
		||||
    unsigned int Config::rngSeed() const               { return m_data.rngSeed; }
 | 
			
		||||
    UseColour::YesOrNo Config::useColour() const       { return m_data.useColour; }
 | 
			
		||||
@@ -12547,7 +12559,7 @@ namespace Catch {
 | 
			
		||||
                    currentTracker.addChild( tracker );
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if( !ctx.completedCycle() && !tracker->isComplete() ) {
 | 
			
		||||
                if( !tracker->isComplete() ) {
 | 
			
		||||
                    tracker->open();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@@ -12561,8 +12573,28 @@ namespace Catch {
 | 
			
		||||
            }
 | 
			
		||||
            void close() override {
 | 
			
		||||
                TrackerBase::close();
 | 
			
		||||
                // Generator interface only finds out if it has another item on atual move
 | 
			
		||||
                if (m_runState == CompletedSuccessfully && m_generator->next()) {
 | 
			
		||||
                // If a generator has a child (it is followed by a section)
 | 
			
		||||
                // and none of its children have started, then we must wait
 | 
			
		||||
                // until later to start consuming its values.
 | 
			
		||||
                // This catches cases where `GENERATE` is placed between two
 | 
			
		||||
                // `SECTION`s.
 | 
			
		||||
                // **The check for m_children.empty cannot be removed**.
 | 
			
		||||
                // doing so would break `GENERATE` _not_ followed by `SECTION`s.
 | 
			
		||||
                const bool should_wait_for_child =
 | 
			
		||||
                    !m_children.empty() &&
 | 
			
		||||
                    std::find_if( m_children.begin(),
 | 
			
		||||
                                  m_children.end(),
 | 
			
		||||
                                  []( TestCaseTracking::ITrackerPtr tracker ) {
 | 
			
		||||
                                      return tracker->hasStarted();
 | 
			
		||||
                                  } ) == m_children.end();
 | 
			
		||||
 | 
			
		||||
                // This check is a bit tricky, because m_generator->next()
 | 
			
		||||
                // has a side-effect, where it consumes generator's current
 | 
			
		||||
                // value, but we do not want to invoke the side-effect if
 | 
			
		||||
                // this generator is still waiting for any child to start.
 | 
			
		||||
                if ( should_wait_for_child ||
 | 
			
		||||
                     ( m_runState == CompletedSuccessfully &&
 | 
			
		||||
                       m_generator->next() ) ) {
 | 
			
		||||
                    m_children.clear();
 | 
			
		||||
                    m_runState = Executing;
 | 
			
		||||
                }
 | 
			
		||||
@@ -12702,7 +12734,6 @@ namespace Catch {
 | 
			
		||||
        using namespace Generators;
 | 
			
		||||
        GeneratorTracker& tracker = GeneratorTracker::acquire(m_trackerContext,
 | 
			
		||||
                                                              TestCaseTracking::NameAndLocation( static_cast<std::string>(generatorName), lineInfo ) );
 | 
			
		||||
        assert( tracker.isOpen() );
 | 
			
		||||
        m_lastAssertionInfo.lineInfo = lineInfo;
 | 
			
		||||
        return tracker;
 | 
			
		||||
    }
 | 
			
		||||
@@ -14381,7 +14412,8 @@ namespace TestCaseTracking {
 | 
			
		||||
    bool SectionTracker::isComplete() const {
 | 
			
		||||
        bool complete = true;
 | 
			
		||||
 | 
			
		||||
        if ((m_filters.empty() || m_filters[0] == "")
 | 
			
		||||
        if (m_filters.empty()
 | 
			
		||||
            || m_filters[0] == ""
 | 
			
		||||
            || std::find(m_filters.begin(), m_filters.end(), m_trimmed_name) != m_filters.end()) {
 | 
			
		||||
            complete = TrackerBase::isComplete();
 | 
			
		||||
        }
 | 
			
		||||
@@ -15206,7 +15238,7 @@ namespace Catch {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Version const& libraryVersion() {
 | 
			
		||||
        static Version version( 2, 12, 4, "", 0 );
 | 
			
		||||
        static Version version( 2, 13, 0, "", 0 );
 | 
			
		||||
        return version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -15608,6 +15640,17 @@ namespace Catch {
 | 
			
		||||
        return std::string(buffer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool shouldShowDuration( IConfig const& config, double duration ) {
 | 
			
		||||
        if ( config.showDurations() == ShowDurations::Always ) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        if ( config.showDurations() == ShowDurations::Never ) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        const double min = config.minDuration();
 | 
			
		||||
        return min >= 0 && duration >= min;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::string serializeFilters( std::vector<std::string> const& container ) {
 | 
			
		||||
        ReusableStringStream oss;
 | 
			
		||||
        bool first = true;
 | 
			
		||||
@@ -15874,10 +15917,6 @@ private:
 | 
			
		||||
            return "Reports test results on a single line, suitable for IDEs";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ReporterPreferences CompactReporter::getPreferences() const {
 | 
			
		||||
            return m_reporterPrefs;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void CompactReporter::noMatchingTestCases( std::string const& spec ) {
 | 
			
		||||
            stream << "No test cases matched '" << spec << '\'' << std::endl;
 | 
			
		||||
        }
 | 
			
		||||
@@ -15904,8 +15943,9 @@ private:
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void CompactReporter::sectionEnded(SectionStats const& _sectionStats) {
 | 
			
		||||
            if (m_config->showDurations() == ShowDurations::Always) {
 | 
			
		||||
                stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl;
 | 
			
		||||
            double dur = _sectionStats.durationInSeconds;
 | 
			
		||||
            if ( shouldShowDuration( *m_config, dur ) ) {
 | 
			
		||||
                stream << getFormattedDuration( dur ) << " s: " << _sectionStats.sectionInfo.name << std::endl;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -16325,8 +16365,9 @@ void ConsoleReporter::sectionEnded(SectionStats const& _sectionStats) {
 | 
			
		||||
            stream << "\nNo assertions in test case";
 | 
			
		||||
        stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl;
 | 
			
		||||
    }
 | 
			
		||||
    if (m_config->showDurations() == ShowDurations::Always) {
 | 
			
		||||
        stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl;
 | 
			
		||||
    double dur = _sectionStats.durationInSeconds;
 | 
			
		||||
    if (shouldShowDuration(*m_config, dur)) {
 | 
			
		||||
        stream << getFormattedDuration(dur) << " s: " << _sectionStats.sectionInfo.name << std::endl;
 | 
			
		||||
    }
 | 
			
		||||
    if (m_headerPrinted) {
 | 
			
		||||
        m_headerPrinted = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -23,16 +23,17 @@ namespace Catch {
 | 
			
		||||
 | 
			
		||||
        using StreamingReporterBase::StreamingReporterBase;
 | 
			
		||||
 | 
			
		||||
        TAPReporter( ReporterConfig const& config ):
 | 
			
		||||
            StreamingReporterBase( config ) {
 | 
			
		||||
            m_reporterPrefs.shouldReportAllAssertions = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ~TAPReporter() override;
 | 
			
		||||
 | 
			
		||||
        static std::string getDescription() {
 | 
			
		||||
            return "Reports test results in TAP format, suitable for test harnesses";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ReporterPreferences getPreferences() const override {
 | 
			
		||||
            return m_reporterPrefs;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void noMatchingTestCases( std::string const& spec ) override {
 | 
			
		||||
            stream << "# No test cases matched '" << spec << "'" << std::endl;
 | 
			
		||||
        }
 | 
			
		||||
@@ -203,16 +204,15 @@ namespace Catch {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // using messages.end() directly (or auto) yields compilation error:
 | 
			
		||||
                std::vector<MessageInfo>::const_iterator itEnd = messages.end();
 | 
			
		||||
                const std::size_t N = static_cast<std::size_t>( std::distance( itMessage, itEnd ) );
 | 
			
		||||
                const auto itEnd = messages.cend();
 | 
			
		||||
                const auto N = static_cast<std::size_t>( std::distance( itMessage, itEnd ) );
 | 
			
		||||
 | 
			
		||||
                {
 | 
			
		||||
                    Colour colourGuard( colour );
 | 
			
		||||
                    stream << " with " << pluralise( N, "message" ) << ":";
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                for(; itMessage != itEnd; ) {
 | 
			
		||||
                while( itMessage != itEnd ) {
 | 
			
		||||
                    // If this assertion is a warning ignore any INFO messages
 | 
			
		||||
                    if( printInfoMessages || itMessage->type != ResultWas::Info ) {
 | 
			
		||||
                        stream << " '" << itMessage->message << "'";
 | 
			
		||||
@@ -220,7 +220,9 @@ namespace Catch {
 | 
			
		||||
                            Colour colourGuard( dimColour() );
 | 
			
		||||
                            stream << " and";
 | 
			
		||||
                        }
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    ++itMessage;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -234,10 +236,9 @@ namespace Catch {
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        void printTotals( const Totals& totals ) const {
 | 
			
		||||
            stream << "1.." << totals.assertions.total();
 | 
			
		||||
            if( totals.testCases.total() == 0 ) {
 | 
			
		||||
                stream << "1..0 # Skipped: No tests ran.";
 | 
			
		||||
            } else {
 | 
			
		||||
                stream << "1.." << counter;
 | 
			
		||||
                stream << " # Skipped: No tests ran.";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user