| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Catch v2.7.0 | |||
| * Generated: 2019-03-07 21:34:30.252164 | |||
| * Catch v2.7.1 | |||
| * Generated: 2019-04-05 18:22:37.720122 | |||
| * ---------------------------------------------------------- | |||
| * This file has been merged from multiple headers. Please don't edit it directly | |||
| * Copyright (c) 2019 Two Blue Cubes Ltd. All rights reserved. | |||
| @@ -15,7 +15,7 @@ | |||
| #define CATCH_VERSION_MAJOR 2 | |||
| #define CATCH_VERSION_MINOR 7 | |||
| #define CATCH_VERSION_PATCH 0 | |||
| #define CATCH_VERSION_PATCH 1 | |||
| #ifdef __clang__ | |||
| # pragma clang system_header | |||
| @@ -3686,7 +3686,11 @@ namespace Generators { | |||
| } // namespace Catch | |||
| #define GENERATE( ... ) \ | |||
| Catch::Generators::generate( CATCH_INTERNAL_LINEINFO, []{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) | |||
| Catch::Generators::generate( CATCH_INTERNAL_LINEINFO, [ ]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) | |||
| #define GENERATE_COPY( ... ) \ | |||
| Catch::Generators::generate( CATCH_INTERNAL_LINEINFO, [=]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) | |||
| #define GENERATE_REF( ... ) \ | |||
| Catch::Generators::generate( CATCH_INTERNAL_LINEINFO, [&]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) | |||
| // end catch_generators.hpp | |||
| // start catch_generators_generic.hpp | |||
| @@ -3849,16 +3853,28 @@ namespace Generators { | |||
| } | |||
| }; | |||
| template <typename T, typename U, typename Func> | |||
| #if defined(__cpp_lib_is_invocable) && __cpp_lib_is_invocable >= 201703 | |||
| // std::result_of is deprecated in C++17 and removed in C++20. Hence, it is | |||
| // replaced with std::invoke_result here. Also *_t format is preferred over | |||
| // typename *::type format. | |||
| template <typename Func, typename U> | |||
| using MapFunctionReturnType = std::remove_reference_t<std::remove_cv_t<std::invoke_result_t<Func, U>>>; | |||
| #else | |||
| template <typename Func, typename U> | |||
| using MapFunctionReturnType = typename std::remove_reference<typename std::remove_cv<typename std::result_of<Func(U)>::type>::type>::type; | |||
| #endif | |||
| template <typename Func, typename U, typename T = MapFunctionReturnType<Func, U>> | |||
| GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& generator) { | |||
| return GeneratorWrapper<T>( | |||
| pf::make_unique<MapGenerator<T, U, Func>>(std::forward<Func>(function), std::move(generator)) | |||
| ); | |||
| } | |||
| template <typename T, typename Func> | |||
| GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<T>&& generator) { | |||
| template <typename T, typename U, typename Func> | |||
| GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& generator) { | |||
| return GeneratorWrapper<T>( | |||
| pf::make_unique<MapGenerator<T, T, Func>>(std::forward<Func>(function), std::move(generator)) | |||
| pf::make_unique<MapGenerator<T, U, Func>>(std::forward<Func>(function), std::move(generator)) | |||
| ); | |||
| } | |||
| @@ -4022,6 +4038,7 @@ namespace Catch { | |||
| virtual ShowDurations::OrNot showDurations() const = 0; | |||
| virtual TestSpec const& testSpec() const = 0; | |||
| virtual bool hasTestFilters() const = 0; | |||
| virtual std::vector<std::string> const& getTestsOrTags() const = 0; | |||
| virtual RunTests::InWhatOrder runOrder() const = 0; | |||
| virtual unsigned int rngSeed() const = 0; | |||
| virtual int benchmarkResolutionMultiple() const = 0; | |||
| @@ -4352,7 +4369,7 @@ namespace Catch { | |||
| arcSafeRelease( m_substr ); | |||
| } | |||
| bool match( NSString* arg ) const override { | |||
| bool match( NSString* const& str ) const override { | |||
| return false; | |||
| } | |||
| @@ -4362,7 +4379,7 @@ namespace Catch { | |||
| struct Equals : StringHolder { | |||
| Equals( NSString* substr ) : StringHolder( substr ){} | |||
| bool match( NSString* str ) const override { | |||
| bool match( NSString* const& str ) const override { | |||
| return (str != nil || m_substr == nil ) && | |||
| [str isEqualToString:m_substr]; | |||
| } | |||
| @@ -4375,7 +4392,7 @@ namespace Catch { | |||
| struct Contains : StringHolder { | |||
| Contains( NSString* substr ) : StringHolder( substr ){} | |||
| bool match( NSString* str ) const { | |||
| bool match( NSString* const& str ) const override { | |||
| return (str != nil || m_substr == nil ) && | |||
| [str rangeOfString:m_substr].location != NSNotFound; | |||
| } | |||
| @@ -4388,7 +4405,7 @@ namespace Catch { | |||
| struct StartsWith : StringHolder { | |||
| StartsWith( NSString* substr ) : StringHolder( substr ){} | |||
| bool match( NSString* str ) const override { | |||
| bool match( NSString* const& str ) const override { | |||
| return (str != nil || m_substr == nil ) && | |||
| [str rangeOfString:m_substr].location == 0; | |||
| } | |||
| @@ -4400,7 +4417,7 @@ namespace Catch { | |||
| struct EndsWith : StringHolder { | |||
| EndsWith( NSString* substr ) : StringHolder( substr ){} | |||
| bool match( NSString* str ) const override { | |||
| bool match( NSString* const& str ) const override { | |||
| return (str != nil || m_substr == nil ) && | |||
| [str rangeOfString:m_substr].location == [str length] - [m_substr length]; | |||
| } | |||
| @@ -4708,7 +4725,7 @@ namespace Catch { | |||
| std::string getProcessName() const; | |||
| std::string const& getReporterName() const; | |||
| std::vector<std::string> const& getTestsOrTags() const; | |||
| std::vector<std::string> const& getTestsOrTags() const override; | |||
| std::vector<std::string> const& getSectionsToRun() const override; | |||
| virtual TestSpec const& testSpec() const override; | |||
| @@ -5082,6 +5099,8 @@ namespace Catch { | |||
| // Returns double formatted as %.3f (format expected on output) | |||
| std::string getFormattedDuration( double duration ); | |||
| std::string serializeFilters( std::vector<std::string> const& container ); | |||
| template<typename DerivedT> | |||
| struct StreamingReporterBase : IStreamingReporter { | |||
| @@ -5109,6 +5128,7 @@ namespace Catch { | |||
| void testRunStarting(TestRunInfo const& _testRunInfo) override { | |||
| currentTestRunInfo = _testRunInfo; | |||
| } | |||
| void testGroupStarting(GroupInfo const& _groupInfo) override { | |||
| currentGroupInfo = _groupInfo; | |||
| } | |||
| @@ -5521,7 +5541,7 @@ namespace Catch { | |||
| void testCaseEnded(TestCaseStats const& _testCaseStats) override; | |||
| void testGroupEnded(TestGroupStats const& _testGroupStats) override; | |||
| void testRunEnded(TestRunStats const& _testRunStats) override; | |||
| void testRunStarting(TestRunInfo const& _testRunInfo) override; | |||
| private: | |||
| void lazyPrint(); | |||
| @@ -5543,6 +5563,7 @@ namespace Catch { | |||
| void printTotalsDivider(Totals const& totals); | |||
| void printSummaryDivider(); | |||
| void printTestFilters(); | |||
| private: | |||
| bool m_headerPrinted = false; | |||
| @@ -8660,10 +8681,10 @@ namespace Catch { | |||
| // Windows can easily distinguish between SO and SigSegV, | |||
| // but SigInt, SigTerm, etc are handled differently. | |||
| static SignalDefs signalDefs[] = { | |||
| { EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL - Illegal instruction signal" }, | |||
| { EXCEPTION_STACK_OVERFLOW, "SIGSEGV - Stack overflow" }, | |||
| { EXCEPTION_ACCESS_VIOLATION, "SIGSEGV - Segmentation violation signal" }, | |||
| { EXCEPTION_INT_DIVIDE_BY_ZERO, "Divide by zero error" }, | |||
| { static_cast<DWORD>(EXCEPTION_ILLEGAL_INSTRUCTION), "SIGILL - Illegal instruction signal" }, | |||
| { static_cast<DWORD>(EXCEPTION_STACK_OVERFLOW), "SIGSEGV - Stack overflow" }, | |||
| { static_cast<DWORD>(EXCEPTION_ACCESS_VIOLATION), "SIGSEGV - Segmentation violation signal" }, | |||
| { static_cast<DWORD>(EXCEPTION_INT_DIVIDE_BY_ZERO), "Divide by zero error" }, | |||
| }; | |||
| LONG CALLBACK FatalConditionHandler::handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) { | |||
| @@ -11657,6 +11678,12 @@ namespace Catch { | |||
| else if( prop == TestCaseInfo::None ) | |||
| enforceNotReservedTag( tag, _lineInfo ); | |||
| // Merged hide tags like `[.approvals]` should be added as | |||
| // `[.][approvals]`. The `[.]` is added at later point, so | |||
| // we only strip the prefix | |||
| if (startsWith(tag, '.') && tag.size() > 1) { | |||
| tag.erase(0, 1); | |||
| } | |||
| tags.push_back( tag ); | |||
| tag.clear(); | |||
| inTag = false; | |||
| @@ -12665,7 +12692,7 @@ namespace Catch { | |||
| } | |||
| Version const& libraryVersion() { | |||
| static Version version( 2, 7, 0, "", 0 ); | |||
| static Version version( 2, 7, 1, "", 0 ); | |||
| return version; | |||
| } | |||
| @@ -13022,6 +13049,21 @@ namespace Catch { | |||
| return std::string(buffer); | |||
| } | |||
| std::string serializeFilters( std::vector<std::string> const& container ) { | |||
| ReusableStringStream oss; | |||
| bool first = true; | |||
| for (auto&& filter : container) | |||
| { | |||
| if (!first) | |||
| oss << ' '; | |||
| else | |||
| first = false; | |||
| oss << filter; | |||
| } | |||
| return oss.str(); | |||
| } | |||
| TestEventListenerBase::TestEventListenerBase(ReporterConfig const & _config) | |||
| :StreamingReporterBase(_config) {} | |||
| @@ -13746,6 +13788,10 @@ void ConsoleReporter::testRunEnded(TestRunStats const& _testRunStats) { | |||
| stream << std::endl; | |||
| StreamingReporterBase::testRunEnded(_testRunStats); | |||
| } | |||
| void ConsoleReporter::testRunStarting(TestRunInfo const& _testInfo) { | |||
| StreamingReporterBase::testRunStarting(_testInfo); | |||
| printTestFilters(); | |||
| } | |||
| void ConsoleReporter::lazyPrint() { | |||
| @@ -13927,6 +13973,11 @@ void ConsoleReporter::printSummaryDivider() { | |||
| stream << getLineOfChars<'-'>() << '\n'; | |||
| } | |||
| void ConsoleReporter::printTestFilters() { | |||
| if (m_config->testSpec().hasFilters()) | |||
| stream << Colour(Colour::BrightYellow) << "Filters: " << serializeFilters( m_config->getTestsOrTags() ) << '\n'; | |||
| } | |||
| CATCH_REGISTER_REPORTER("console", ConsoleReporter) | |||
| } // end namespace Catch | |||
| @@ -14000,8 +14051,17 @@ namespace Catch { | |||
| void JunitReporter::testRunStarting( TestRunInfo const& runInfo ) { | |||
| CumulativeReporterBase::testRunStarting( runInfo ); | |||
| xml.startElement( "testsuites" ); | |||
| if ( m_config->hasTestFilters() || m_config->rngSeed() != 0 ) | |||
| xml.startElement("properties"); | |||
| if ( m_config->hasTestFilters() ) { | |||
| xml.scopedElement( "property" ) | |||
| .writeAttribute( "name" , "filters" ) | |||
| .writeAttribute( "value" , serializeFilters( m_config->getTestsOrTags() ) ); | |||
| } | |||
| if( m_config->rngSeed() != 0 ) { | |||
| xml.startElement( "properties" ); | |||
| xml.scopedElement( "property" ) | |||
| .writeAttribute( "name", "random-seed" ) | |||
| .writeAttribute( "value", m_config->rngSeed() ); | |||
| @@ -14357,6 +14417,8 @@ namespace Catch { | |||
| m_xml.startElement( "Catch" ); | |||
| if( !m_config->name().empty() ) | |||
| m_xml.writeAttribute( "name", m_config->name() ); | |||
| if (m_config->testSpec().hasFilters()) | |||
| m_xml.writeAttribute( "filters", serializeFilters( m_config->getTestsOrTags() ) ); | |||
| if( m_config->rngSeed() != 0 ) | |||
| m_xml.scopedElement( "Randomness" ) | |||
| .writeAttribute( "seed", m_config->rngSeed() ); | |||