mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Merge branch 'dev-better-verbosity' of https://github.com/BMBurstein/Catch
This commit is contained in:
		| @@ -16,7 +16,7 @@ | ||||
|  | ||||
| namespace Catch { | ||||
|  | ||||
|     struct AutomakeReporter : StreamingReporterBase { | ||||
|     struct AutomakeReporter : StreamingReporterBase<AutomakeReporter> { | ||||
|         AutomakeReporter( ReporterConfig const& _config ) | ||||
|           :   StreamingReporterBase( _config ) | ||||
|         {} | ||||
|   | ||||
| @@ -39,181 +39,6 @@ namespace Catch { | ||||
|     } | ||||
|  | ||||
|  | ||||
|     StreamingReporterBase::StreamingReporterBase(ReporterConfig const& _config) | ||||
|     :   m_config(_config.fullConfig()), | ||||
|         stream(_config.stream()) | ||||
|     { | ||||
|         m_reporterPrefs.shouldRedirectStdOut = false; | ||||
|     } | ||||
|  | ||||
|     ReporterPreferences StreamingReporterBase::getPreferences() const { | ||||
|         return m_reporterPrefs; | ||||
|     } | ||||
|  | ||||
|     StreamingReporterBase::~StreamingReporterBase() {} | ||||
|  | ||||
|     void StreamingReporterBase::noMatchingTestCases(std::string const &) {} | ||||
|  | ||||
|     void StreamingReporterBase::testRunStarting(TestRunInfo const & _testRunInfo) { | ||||
|         currentTestRunInfo = _testRunInfo; | ||||
|     } | ||||
|  | ||||
|     void StreamingReporterBase::testGroupStarting(GroupInfo const & _groupInfo) { | ||||
|         currentGroupInfo = _groupInfo; | ||||
|     } | ||||
|  | ||||
|     void StreamingReporterBase::testCaseStarting(TestCaseInfo const & _testInfo) { | ||||
|         currentTestCaseInfo = _testInfo; | ||||
|     } | ||||
|  | ||||
|     void StreamingReporterBase::sectionStarting(SectionInfo const & _sectionInfo) { | ||||
|         m_sectionStack.push_back(_sectionInfo); | ||||
|     } | ||||
|  | ||||
|     void StreamingReporterBase::sectionEnded(SectionStats const &) { | ||||
|         m_sectionStack.pop_back(); | ||||
|     } | ||||
|  | ||||
|     void StreamingReporterBase::testCaseEnded(TestCaseStats const &) { | ||||
|         currentTestCaseInfo.reset(); | ||||
|     } | ||||
|  | ||||
|     void StreamingReporterBase::testGroupEnded(TestGroupStats const &) { | ||||
|         currentGroupInfo.reset(); | ||||
|     } | ||||
|  | ||||
|     void StreamingReporterBase::testRunEnded(TestRunStats const &) { | ||||
|         currentTestCaseInfo.reset(); | ||||
|         currentGroupInfo.reset(); | ||||
|         currentTestRunInfo.reset(); | ||||
|     } | ||||
|  | ||||
|     void StreamingReporterBase::skipTest(TestCaseInfo const &) { | ||||
|         // Don't do anything with this by default. | ||||
|         // It can optionally be overridden in the derived class. | ||||
|     } | ||||
|  | ||||
|     CumulativeReporterBase::CumulativeReporterBase(ReporterConfig const & _config) | ||||
|         : m_config(_config.fullConfig()), | ||||
|         stream(_config.stream()) { | ||||
|         m_reporterPrefs.shouldRedirectStdOut = false; | ||||
|     } | ||||
|  | ||||
|     CumulativeReporterBase::~CumulativeReporterBase() {} | ||||
|  | ||||
|     ReporterPreferences CumulativeReporterBase::getPreferences() const { | ||||
|         return m_reporterPrefs; | ||||
|     } | ||||
|  | ||||
|     void CumulativeReporterBase::testRunStarting(TestRunInfo const &) {} | ||||
|  | ||||
|     void CumulativeReporterBase::testGroupStarting(GroupInfo const &) {} | ||||
|  | ||||
|     void CumulativeReporterBase::testCaseStarting(TestCaseInfo const &) {} | ||||
|  | ||||
|     void CumulativeReporterBase::sectionStarting(SectionInfo const & sectionInfo) { | ||||
|         SectionStats incompleteStats(sectionInfo, Counts(), 0, false); | ||||
|         std::shared_ptr<SectionNode> node; | ||||
|         if (m_sectionStack.empty()) { | ||||
|             if (!m_rootSection) | ||||
|                 m_rootSection = std::make_shared<SectionNode>(incompleteStats); | ||||
|             node = m_rootSection; | ||||
|         } else { | ||||
|             SectionNode& parentNode = *m_sectionStack.back(); | ||||
|             auto it = | ||||
|                 std::find_if(parentNode.childSections.begin(), | ||||
|                              parentNode.childSections.end(), | ||||
|                              BySectionInfo(sectionInfo)); | ||||
|             if (it == parentNode.childSections.end()) { | ||||
|                 node = std::make_shared<SectionNode>(incompleteStats); | ||||
|                 parentNode.childSections.push_back(node); | ||||
|             } else | ||||
|                 node = *it; | ||||
|         } | ||||
|         m_sectionStack.push_back(node); | ||||
|         m_deepestSection = node; | ||||
|     } | ||||
|  | ||||
|     void CumulativeReporterBase::assertionStarting(AssertionInfo const &) {} | ||||
|  | ||||
|     bool CumulativeReporterBase::assertionEnded(AssertionStats const & assertionStats) { | ||||
|         assert(!m_sectionStack.empty()); | ||||
|         SectionNode& sectionNode = *m_sectionStack.back(); | ||||
|         sectionNode.assertions.push_back(assertionStats); | ||||
|         // AssertionResult holds a pointer to a temporary DecomposedExpression, | ||||
|         // which getExpandedExpression() calls to build the expression string. | ||||
|         // Our section stack copy of the assertionResult will likely outlive the | ||||
|         // temporary, so it must be expanded or discarded now to avoid calling | ||||
|         // a destroyed object later. | ||||
|         prepareExpandedExpression(sectionNode.assertions.back().assertionResult); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     void CumulativeReporterBase::sectionEnded(SectionStats const & sectionStats) { | ||||
|         assert(!m_sectionStack.empty()); | ||||
|         SectionNode& node = *m_sectionStack.back(); | ||||
|         node.stats = sectionStats; | ||||
|         m_sectionStack.pop_back(); | ||||
|     } | ||||
|  | ||||
|     void CumulativeReporterBase::testCaseEnded(TestCaseStats const & testCaseStats) { | ||||
|         auto node = std::make_shared<TestCaseNode>(testCaseStats); | ||||
|         assert(m_sectionStack.size() == 0); | ||||
|         node->children.push_back(m_rootSection); | ||||
|         m_testCases.push_back(node); | ||||
|         m_rootSection.reset(); | ||||
|  | ||||
|         assert(m_deepestSection); | ||||
|         m_deepestSection->stdOut = testCaseStats.stdOut; | ||||
|         m_deepestSection->stdErr = testCaseStats.stdErr; | ||||
|     } | ||||
|  | ||||
|     void CumulativeReporterBase::testGroupEnded(TestGroupStats const & testGroupStats) { | ||||
|         auto node = std::make_shared<TestGroupNode>(testGroupStats); | ||||
|         node->children.swap(m_testCases); | ||||
|         m_testGroups.push_back(node); | ||||
|     } | ||||
|  | ||||
|     void CumulativeReporterBase::testRunEnded(TestRunStats const & testRunStats) { | ||||
|         auto node = std::make_shared<TestRunNode>(testRunStats); | ||||
|         node->children.swap(m_testGroups); | ||||
|         m_testRuns.push_back(node); | ||||
|         testRunEndedCumulative(); | ||||
|     } | ||||
|  | ||||
|     void CumulativeReporterBase::skipTest(TestCaseInfo const &) {} | ||||
|  | ||||
|     void CumulativeReporterBase::prepareExpandedExpression(AssertionResult & result) const { | ||||
|         if (result.isOk()) | ||||
|             result.discardDecomposedExpression(); | ||||
|         else | ||||
|             result.expandDecomposedExpression(); | ||||
|     } | ||||
|  | ||||
|     CumulativeReporterBase::SectionNode::SectionNode(SectionStats const& _stats) | ||||
|         :stats(_stats) {} | ||||
|     CumulativeReporterBase::SectionNode::~SectionNode() {} | ||||
|  | ||||
|     bool CumulativeReporterBase::SectionNode::operator==(SectionNode const & other) const { | ||||
|         return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo; | ||||
|     } | ||||
|  | ||||
|     bool CumulativeReporterBase::SectionNode::operator==(std::shared_ptr<SectionNode> const& other) const { | ||||
|         return operator==(*other); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     CumulativeReporterBase::BySectionInfo::BySectionInfo(SectionInfo const& other) | ||||
|         :m_other(other) {} | ||||
|  | ||||
|     CumulativeReporterBase::BySectionInfo::BySectionInfo(BySectionInfo const & other) | ||||
|         :m_other(other.m_other) {} | ||||
|  | ||||
|     bool CumulativeReporterBase::BySectionInfo::operator()(std::shared_ptr<SectionNode> const & node) const { | ||||
|         return node->stats.sectionInfo.lineInfo == m_other.lineInfo; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     TestEventListenerBase::TestEventListenerBase(ReporterConfig const & _config) | ||||
|         :StreamingReporterBase(_config) {} | ||||
|  | ||||
|   | ||||
| @@ -21,28 +21,62 @@ namespace Catch { | ||||
|     // Returns double formatted as %.3f (format expected on output) | ||||
|     std::string getFormattedDuration( double duration ); | ||||
|  | ||||
|     template<typename DerivedT> | ||||
|     struct StreamingReporterBase : IStreamingReporter { | ||||
|  | ||||
|         StreamingReporterBase(ReporterConfig const& _config); | ||||
|         StreamingReporterBase( ReporterConfig const& _config ) | ||||
|         :   m_config( _config.fullConfig() ), | ||||
|             stream( _config.stream() ) | ||||
|         { | ||||
|             m_reporterPrefs.shouldRedirectStdOut = false; | ||||
|             CATCH_ENFORCE( DerivedT::getSupportedVerbosities().count( m_config->verbosity() ), "Verbosity level not supported by this reporter" ); | ||||
|         } | ||||
|  | ||||
|         virtual ReporterPreferences getPreferences() const override; | ||||
|         virtual ReporterPreferences getPreferences() const override { | ||||
|             return m_reporterPrefs; | ||||
|         } | ||||
|  | ||||
|         virtual ~StreamingReporterBase() override; | ||||
|         static std::set<Verbosity> getSupportedVerbosities() { | ||||
|             return { Verbosity::Normal }; | ||||
|         } | ||||
|  | ||||
|         virtual void noMatchingTestCases(std::string const&) override; | ||||
|         virtual ~StreamingReporterBase() override = default; | ||||
|  | ||||
|         virtual void testRunStarting(TestRunInfo const& _testRunInfo) override; | ||||
|         virtual void testGroupStarting(GroupInfo const& _groupInfo) override; | ||||
|         virtual void noMatchingTestCases(std::string const&) override {} | ||||
|  | ||||
|         virtual void testCaseStarting(TestCaseInfo const& _testInfo) override; | ||||
|         virtual void sectionStarting(SectionInfo const& _sectionInfo) override; | ||||
|         virtual void testRunStarting(TestRunInfo const& _testRunInfo) override { | ||||
|             currentTestRunInfo = _testRunInfo; | ||||
|         } | ||||
|         virtual void testGroupStarting(GroupInfo const& _groupInfo) override { | ||||
|             currentGroupInfo = _groupInfo; | ||||
|         } | ||||
|  | ||||
|         virtual void sectionEnded(SectionStats const& /* _sectionStats */) override; | ||||
|         virtual void testCaseEnded(TestCaseStats const& /* _testCaseStats */) override; | ||||
|         virtual void testGroupEnded(TestGroupStats const& /* _testGroupStats */) override; | ||||
|         virtual void testRunEnded(TestRunStats const& /* _testRunStats */) override; | ||||
|         virtual void testCaseStarting(TestCaseInfo const& _testInfo) override  { | ||||
|             currentTestCaseInfo = _testInfo; | ||||
|         } | ||||
|         virtual void sectionStarting(SectionInfo const& _sectionInfo) override { | ||||
|             m_sectionStack.push_back(_sectionInfo); | ||||
|         } | ||||
|  | ||||
|         virtual void skipTest(TestCaseInfo const&) override; | ||||
|         virtual void sectionEnded(SectionStats const& /* _sectionStats */) override { | ||||
|             m_sectionStack.pop_back(); | ||||
|         } | ||||
|         virtual void testCaseEnded(TestCaseStats const& /* _testCaseStats */) override { | ||||
|             currentTestCaseInfo.reset(); | ||||
|         } | ||||
|         virtual void testGroupEnded(TestGroupStats const& /* _testGroupStats */) override { | ||||
|             currentGroupInfo.reset(); | ||||
|         } | ||||
|         virtual void testRunEnded(TestRunStats const& /* _testRunStats */) override { | ||||
|             currentTestCaseInfo.reset(); | ||||
|             currentGroupInfo.reset(); | ||||
|             currentTestRunInfo.reset(); | ||||
|         } | ||||
|  | ||||
|         virtual void skipTest(TestCaseInfo const&) override { | ||||
|             // Don't do anything with this by default. | ||||
|             // It can optionally be overridden in the derived class. | ||||
|         } | ||||
|  | ||||
|         IConfigPtr m_config; | ||||
|         std::ostream& stream; | ||||
| @@ -55,6 +89,7 @@ namespace Catch { | ||||
|         ReporterPreferences m_reporterPrefs; | ||||
|     }; | ||||
|  | ||||
|     template<typename DerivedT> | ||||
|     struct CumulativeReporterBase : IStreamingReporter { | ||||
|         template<typename T, typename ChildNodeT> | ||||
|         struct Node { | ||||
| @@ -66,11 +101,15 @@ namespace Catch { | ||||
|             ChildNodes children; | ||||
|         }; | ||||
|         struct SectionNode { | ||||
|             explicit SectionNode(SectionStats const& _stats); | ||||
|             virtual ~SectionNode(); | ||||
|             explicit SectionNode(SectionStats const& _stats) : stats(_stats) {} | ||||
|             virtual ~SectionNode() = default; | ||||
|  | ||||
|             bool operator == (SectionNode const& other) const; | ||||
|             bool operator == (std::shared_ptr<SectionNode> const& other) const; | ||||
|             bool operator == (SectionNode const& other) const { | ||||
|                 return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo; | ||||
|             } | ||||
|             bool operator == (std::shared_ptr<SectionNode> const& other) const { | ||||
|                 return operator==(*other); | ||||
|             } | ||||
|  | ||||
|             SectionStats stats; | ||||
|             using ChildSections = std::vector<std::shared_ptr<SectionNode>>; | ||||
| @@ -82,9 +121,11 @@ namespace Catch { | ||||
|         }; | ||||
|  | ||||
|         struct BySectionInfo { | ||||
|             BySectionInfo(SectionInfo const& other); | ||||
|             BySectionInfo(BySectionInfo const& other); | ||||
|             bool operator() (std::shared_ptr<SectionNode> const& node) const; | ||||
|             BySectionInfo(SectionInfo const& other) : m_other(other) {} | ||||
|             BySectionInfo(BySectionInfo const& other) : m_other(other.m_other) {} | ||||
|             bool operator() (std::shared_ptr<SectionNode> const& node) const { | ||||
|                 return node->stats.sectionInfo.lineInfo == m_other.lineInfo; | ||||
|             } | ||||
|             void operator=(BySectionInfo const&) = delete; | ||||
|  | ||||
|         private: | ||||
| @@ -96,30 +137,105 @@ namespace Catch { | ||||
|         using TestGroupNode = Node<TestGroupStats, TestCaseNode>; | ||||
|         using TestRunNode = Node<TestRunStats, TestGroupNode>; | ||||
|  | ||||
|         CumulativeReporterBase(ReporterConfig const& _config); | ||||
|         ~CumulativeReporterBase(); | ||||
|         CumulativeReporterBase( ReporterConfig const& _config ) | ||||
|         :   m_config( _config.fullConfig() ), | ||||
|             stream( _config.stream() ) | ||||
|         { | ||||
|             m_reporterPrefs.shouldRedirectStdOut = false; | ||||
|             CATCH_ENFORCE( DerivedT::getSupportedVerbosities().count( m_config->verbosity() ), "Verbosity level not supported by this reporter" ); | ||||
|         } | ||||
|         virtual ~CumulativeReporterBase() = default; | ||||
|  | ||||
|         virtual ReporterPreferences getPreferences() const override; | ||||
|         virtual ReporterPreferences getPreferences() const override { | ||||
|             return m_reporterPrefs; | ||||
|         } | ||||
|  | ||||
|         virtual void testRunStarting(TestRunInfo const&) override; | ||||
|         virtual void testGroupStarting(GroupInfo const&) override; | ||||
|         static std::set<Verbosity> getSupportedVerbosities() { | ||||
|             return { Verbosity::Normal }; | ||||
|         } | ||||
|  | ||||
|         virtual void testCaseStarting(TestCaseInfo const&) override; | ||||
|         virtual void testRunStarting( TestRunInfo const& ) override {} | ||||
|         virtual void testGroupStarting( GroupInfo const& ) override {} | ||||
|  | ||||
|         virtual void sectionStarting(SectionInfo const& sectionInfo) override; | ||||
|         virtual void testCaseStarting( TestCaseInfo const& ) override {} | ||||
|  | ||||
|         virtual void assertionStarting(AssertionInfo const&) override; | ||||
|         virtual void sectionStarting( SectionInfo const& sectionInfo ) override { | ||||
|             SectionStats incompleteStats( sectionInfo, Counts(), 0, false ); | ||||
|             std::shared_ptr<SectionNode> node; | ||||
|             if( m_sectionStack.empty() ) { | ||||
|                 if( !m_rootSection ) | ||||
|                     m_rootSection = std::make_shared<SectionNode>( incompleteStats ); | ||||
|                 node = m_rootSection; | ||||
|             } | ||||
|             else { | ||||
|                 SectionNode& parentNode = *m_sectionStack.back(); | ||||
|                 typename SectionNode::ChildSections::const_iterator it = | ||||
|                     std::find_if(   parentNode.childSections.begin(), | ||||
|                                     parentNode.childSections.end(), | ||||
|                                     BySectionInfo( sectionInfo ) ); | ||||
|                 if( it == parentNode.childSections.end() ) { | ||||
|                     node = std::make_shared<SectionNode>( incompleteStats ); | ||||
|                     parentNode.childSections.push_back( node ); | ||||
|                 } | ||||
|                 else | ||||
|                     node = *it; | ||||
|             } | ||||
|             m_sectionStack.push_back( node ); | ||||
|             m_deepestSection = node; | ||||
|         } | ||||
|  | ||||
|         virtual bool assertionEnded(AssertionStats const& assertionStats) override; | ||||
|         virtual void sectionEnded(SectionStats const& sectionStats) override; | ||||
|         virtual void testCaseEnded(TestCaseStats const& testCaseStats) override; | ||||
|         virtual void testGroupEnded(TestGroupStats const& testGroupStats) override; | ||||
|         virtual void testRunEnded(TestRunStats const& testRunStats) override; | ||||
|         virtual void assertionStarting(AssertionInfo const&) override {} | ||||
|  | ||||
|         virtual bool assertionEnded(AssertionStats const& assertionStats) override { | ||||
|             assert(!m_sectionStack.empty()); | ||||
|             SectionNode& sectionNode = *m_sectionStack.back(); | ||||
|             sectionNode.assertions.push_back(assertionStats); | ||||
|             // AssertionResult holds a pointer to a temporary DecomposedExpression, | ||||
|             // which getExpandedExpression() calls to build the expression string. | ||||
|             // Our section stack copy of the assertionResult will likely outlive the | ||||
|             // temporary, so it must be expanded or discarded now to avoid calling | ||||
|             // a destroyed object later. | ||||
|             prepareExpandedExpression(sectionNode.assertions.back().assertionResult); | ||||
|             return true; | ||||
|         } | ||||
|         virtual void sectionEnded(SectionStats const& sectionStats) override { | ||||
|             assert(!m_sectionStack.empty()); | ||||
|             SectionNode& node = *m_sectionStack.back(); | ||||
|             node.stats = sectionStats; | ||||
|             m_sectionStack.pop_back(); | ||||
|         } | ||||
|         virtual void testCaseEnded(TestCaseStats const& testCaseStats) override { | ||||
|             auto node = std::make_shared<TestCaseNode>(testCaseStats); | ||||
|             assert(m_sectionStack.size() == 0); | ||||
|             node->children.push_back(m_rootSection); | ||||
|             m_testCases.push_back(node); | ||||
|             m_rootSection.reset(); | ||||
|          | ||||
|             assert(m_deepestSection); | ||||
|             m_deepestSection->stdOut = testCaseStats.stdOut; | ||||
|             m_deepestSection->stdErr = testCaseStats.stdErr; | ||||
|         } | ||||
|         virtual void testGroupEnded(TestGroupStats const& testGroupStats) override { | ||||
|             auto node = std::make_shared<TestGroupNode>(testGroupStats); | ||||
|             node->children.swap(m_testCases); | ||||
|             m_testGroups.push_back(node); | ||||
|         } | ||||
|         virtual void testRunEnded(TestRunStats const& testRunStats) override { | ||||
|             auto node = std::make_shared<TestRunNode>(testRunStats); | ||||
|             node->children.swap(m_testGroups); | ||||
|             m_testRuns.push_back(node); | ||||
|             testRunEndedCumulative(); | ||||
|         } | ||||
|         virtual void testRunEndedCumulative() = 0; | ||||
|  | ||||
|         virtual void skipTest(TestCaseInfo const&) override; | ||||
|         virtual void skipTest(TestCaseInfo const&) override {} | ||||
|  | ||||
|         virtual void prepareExpandedExpression(AssertionResult& result) const; | ||||
|         virtual void prepareExpandedExpression(AssertionResult& result) const { | ||||
|             if (result.isOk()) | ||||
|                 result.discardDecomposedExpression(); | ||||
|             else | ||||
|                 result.expandDecomposedExpression(); | ||||
|         } | ||||
|  | ||||
|         IConfigPtr m_config; | ||||
|         std::ostream& stream; | ||||
| @@ -147,8 +263,8 @@ namespace Catch { | ||||
|     } | ||||
|  | ||||
|  | ||||
|     struct TestEventListenerBase : StreamingReporterBase { | ||||
|         TestEventListenerBase(ReporterConfig const& _config); | ||||
|     struct TestEventListenerBase : StreamingReporterBase<TestEventListenerBase> { | ||||
|         TestEventListenerBase( ReporterConfig const& _config ); | ||||
|  | ||||
|         virtual void assertionStarting(AssertionInfo const&) override; | ||||
|         virtual bool assertionEnded(AssertionStats const&) override; | ||||
|   | ||||
| @@ -13,7 +13,7 @@ | ||||
|  | ||||
| namespace Catch { | ||||
|  | ||||
|     struct CompactReporter : StreamingReporterBase { | ||||
|     struct CompactReporter : StreamingReporterBase<CompactReporter> { | ||||
|  | ||||
|         using StreamingReporterBase::StreamingReporterBase; | ||||
|  | ||||
|   | ||||
| @@ -18,7 +18,7 @@ | ||||
|  | ||||
| namespace Catch { | ||||
|  | ||||
|     struct ConsoleReporter : StreamingReporterBase { | ||||
|     struct ConsoleReporter : StreamingReporterBase<ConsoleReporter> { | ||||
|         using StreamingReporterBase::StreamingReporterBase; | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -48,7 +48,7 @@ namespace Catch { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     class JunitReporter : public CumulativeReporterBase { | ||||
|     class JunitReporter : public CumulativeReporterBase<JunitReporter> { | ||||
|     public: | ||||
|         JunitReporter( ReporterConfig const& _config ) | ||||
|         :   CumulativeReporterBase( _config ), | ||||
|   | ||||
| @@ -18,6 +18,11 @@ namespace Catch { | ||||
|         return m_reporters[0]->getPreferences(); | ||||
|     } | ||||
|  | ||||
|     std::set<Verbosity> getSupportedVerbosities() { | ||||
|         return { }; | ||||
|     } | ||||
|  | ||||
|      | ||||
|     void MultipleReporters::noMatchingTestCases( std::string const& spec ) { | ||||
|         for( auto const& reporter : m_reporters ) | ||||
|             reporter->noMatchingTestCases( spec ); | ||||
|   | ||||
							
								
								
									
										64
									
								
								include/reporters/catch_reporter_multi.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								include/reporters/catch_reporter_multi.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| /* | ||||
|  *  Created by Phil on 5/08/2015. | ||||
|  *  Copyright 2015 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_REPORTER_MULTI_HPP_INCLUDED | ||||
| #define TWOBLUECUBES_CATCH_REPORTER_MULTI_HPP_INCLUDED | ||||
|  | ||||
| #include "../internal/catch_interfaces_reporter.h" | ||||
|  | ||||
| namespace Catch { | ||||
|  | ||||
| class MultipleReporters : public IStreamingReporter { | ||||
|     typedef std::vector<IStreamingReporterPtr> Reporters; | ||||
|     Reporters m_reporters; | ||||
|  | ||||
| public: | ||||
|     void add( IStreamingReporterPtr&& reporter ); | ||||
|  | ||||
| public: // IStreamingReporter | ||||
|  | ||||
|     virtual ReporterPreferences getPreferences() const override; | ||||
|  | ||||
|     static std::set<Verbosity> getSupportedVerbosities(); | ||||
|  | ||||
|     virtual void noMatchingTestCases( std::string const& spec ) override; | ||||
|  | ||||
|  | ||||
|     virtual void testRunStarting( TestRunInfo const& testRunInfo ) override; | ||||
|  | ||||
|     virtual void testGroupStarting( GroupInfo const& groupInfo ) override; | ||||
|  | ||||
|  | ||||
|     virtual void testCaseStarting( TestCaseInfo const& testInfo ) override; | ||||
|  | ||||
|     virtual void sectionStarting( SectionInfo const& sectionInfo ) override; | ||||
|  | ||||
|  | ||||
|     virtual void assertionStarting( AssertionInfo const& assertionInfo ) override; | ||||
|  | ||||
|  | ||||
|     // The return value indicates if the messages buffer should be cleared: | ||||
|     virtual bool assertionEnded( AssertionStats const& assertionStats ) override; | ||||
|  | ||||
|     virtual void sectionEnded( SectionStats const& sectionStats ) override; | ||||
|  | ||||
|     virtual void testCaseEnded( TestCaseStats const& testCaseStats ) override; | ||||
|  | ||||
|     virtual void testGroupEnded( TestGroupStats const& testGroupStats ) override; | ||||
|  | ||||
|     virtual void testRunEnded( TestRunStats const& testRunStats ) override; | ||||
|  | ||||
|  | ||||
|     virtual void skipTest( TestCaseInfo const& testInfo ) override; | ||||
|  | ||||
|     virtual bool isMulti() const override; | ||||
|  | ||||
| }; | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_REPORTER_MULTI_HPP_INCLUDED | ||||
| @@ -19,7 +19,7 @@ | ||||
|  | ||||
| namespace Catch { | ||||
|  | ||||
|     struct TAPReporter : StreamingReporterBase { | ||||
|     struct TAPReporter : StreamingReporterBase<TAPReporter> { | ||||
|  | ||||
|         using StreamingReporterBase::StreamingReporterBase; | ||||
|  | ||||
|   | ||||
| @@ -25,7 +25,7 @@ namespace Catch { | ||||
|  | ||||
|     using namespace clara::TextFlow; | ||||
|  | ||||
|     struct TeamCityReporter : StreamingReporterBase { | ||||
|     struct TeamCityReporter : StreamingReporterBase<TeamCityReporter> { | ||||
|         TeamCityReporter( ReporterConfig const& _config ) | ||||
|         :   StreamingReporterBase( _config ) | ||||
|         { | ||||
|   | ||||
| @@ -14,7 +14,7 @@ | ||||
| #include "../internal/catch_timer.h" | ||||
|  | ||||
| namespace Catch { | ||||
|     class XmlReporter : public StreamingReporterBase { | ||||
|     class XmlReporter : public StreamingReporterBase<XmlReporter> { | ||||
|     public: | ||||
|         XmlReporter( ReporterConfig const& _config ) | ||||
|         :   StreamingReporterBase( _config ), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský