mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 12:17:11 +01:00 
			
		
		
		
	Stripped trailing whitespace from all source code lines
(replaces need for PRs #310 and #504)
This commit is contained in:
		| @@ -30,7 +30,7 @@ namespace Catch { | ||||
|         } | ||||
|         return reporter; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     Ptr<IStreamingReporter> makeReporter( Ptr<Config> const& config ) { | ||||
|         std::vector<std::string> reporters = config->getReporterNames(); | ||||
|         if( reporters.empty() ) | ||||
| @@ -40,7 +40,7 @@ namespace Catch { | ||||
|         for( std::vector<std::string>::const_iterator it = reporters.begin(), itEnd = reporters.end(); | ||||
|                 it != itEnd; | ||||
|                 ++it ) | ||||
|             reporter = addReporter( reporter, createReporter( *it, config ) );         | ||||
|             reporter = addReporter( reporter, createReporter( *it, config ) ); | ||||
|         return reporter; | ||||
|     } | ||||
|     Ptr<IStreamingReporter> addListeners( Ptr<IConfig const> const& config, Ptr<IStreamingReporter> reporters ) { | ||||
| @@ -51,15 +51,15 @@ namespace Catch { | ||||
|             reporters = addReporter(reporters, (*it)->create( ReporterConfig( config ) ) ); | ||||
|         return reporters; | ||||
|     } | ||||
|      | ||||
|      | ||||
|  | ||||
|  | ||||
|     Totals runTests( Ptr<Config> const& config ) { | ||||
|  | ||||
|         Ptr<IConfig const> iconfig = config.get(); | ||||
|          | ||||
|  | ||||
|         Ptr<IStreamingReporter> reporter = makeReporter( config ); | ||||
|         reporter = addListeners( iconfig, reporter ); | ||||
|          | ||||
|  | ||||
|         RunContext context( iconfig, reporter ); | ||||
|  | ||||
|         Totals totals; | ||||
| @@ -83,13 +83,13 @@ namespace Catch { | ||||
|         context.testGroupEnded( iconfig->name(), totals, 1, 1 ); | ||||
|         return totals; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     void applyFilenamesAsTags( IConfig const& config ) { | ||||
|         std::vector<TestCase> const& tests = getAllTestCasesSorted( config ); | ||||
|         for(std::size_t i = 0; i < tests.size(); ++i ) { | ||||
|             TestCase& test = const_cast<TestCase&>( tests[i] ); | ||||
|             std::set<std::string> tags = test.tags; | ||||
|              | ||||
|  | ||||
|             std::string filename = test.lineInfo.file; | ||||
|             std::string::size_type lastSlash = filename.find_last_of( "\\/" ); | ||||
|             if( lastSlash != std::string::npos ) | ||||
| @@ -98,7 +98,7 @@ namespace Catch { | ||||
|             std::string::size_type lastDot = filename.find_last_of( "." ); | ||||
|             if( lastDot != std::string::npos ) | ||||
|                 filename = filename.substr( 0, lastDot ); | ||||
|              | ||||
|  | ||||
|             tags.insert( "#" + filename ); | ||||
|             setTags( test, tags ); | ||||
|         } | ||||
| @@ -173,12 +173,12 @@ namespace Catch { | ||||
|             try | ||||
|             { | ||||
|                 config(); // Force config to be constructed | ||||
|                  | ||||
|  | ||||
|                 seedRng( *m_config ); | ||||
|  | ||||
|                 if( m_configData.filenamesAsTags ) | ||||
|                     applyFilenamesAsTags( *m_config ); | ||||
|                  | ||||
|  | ||||
|                 // Handle list request | ||||
|                 if( Option<std::size_t> listed = list( config() ) ) | ||||
|                     return static_cast<int>( *listed ); | ||||
|   | ||||
| @@ -163,7 +163,7 @@ namespace Catch { | ||||
|             .describe( "list all/matching test cases names only" ) | ||||
|             .bind( &ConfigData::listTestNamesOnly ); | ||||
|  | ||||
|         cli["--list-reporters"]  | ||||
|         cli["--list-reporters"] | ||||
|             .describe( "list all reporters" ) | ||||
|             .bind( &ConfigData::listReporters ); | ||||
|  | ||||
| @@ -178,7 +178,7 @@ namespace Catch { | ||||
|         cli["--force-colour"] | ||||
|             .describe( "force colourised output" ) | ||||
|             .bind( &ConfigData::forceColour ); | ||||
|          | ||||
|  | ||||
|         return cli; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -22,14 +22,14 @@ | ||||
| #include "catch_compiler_capabilities.h" | ||||
|  | ||||
| namespace Catch { | ||||
|      | ||||
|  | ||||
|     struct IConfig; | ||||
|  | ||||
|     struct CaseSensitive { enum Choice { | ||||
|         Yes, | ||||
|         No | ||||
|     }; }; | ||||
|      | ||||
|  | ||||
|     class NonCopyable { | ||||
| #ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS | ||||
|         NonCopyable( NonCopyable const& )              = delete; | ||||
| @@ -118,7 +118,7 @@ namespace Catch { | ||||
|  | ||||
|     void seedRng( IConfig const& config ); | ||||
|     unsigned int rngSeed(); | ||||
|      | ||||
|  | ||||
|     // Use this in variadic streaming macros to allow | ||||
|     //    >> +StreamEndStop | ||||
|     // as well as | ||||
|   | ||||
| @@ -36,7 +36,7 @@ namespace Catch { | ||||
|  | ||||
|         return start != std::string::npos ? str.substr( start, 1+end-start ) : ""; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) { | ||||
|         bool replaced = false; | ||||
|         std::size_t i = str.find( replaceThis ); | ||||
| @@ -50,7 +50,7 @@ namespace Catch { | ||||
|         } | ||||
|         return replaced; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     pluralise::pluralise( std::size_t count, std::string const& label ) | ||||
|     :   m_count( count ), | ||||
|         m_label( label ) | ||||
|   | ||||
| @@ -136,7 +136,7 @@ namespace Catch { | ||||
|         virtual bool forceColour() const { return m_data.forceColour; } | ||||
|  | ||||
|     private: | ||||
|          | ||||
|  | ||||
|         IStream const* openStream() { | ||||
|             if( m_data.outputFilename.empty() ) | ||||
|                 return new CoutStream(); | ||||
|   | ||||
| @@ -174,7 +174,7 @@ namespace Internal { | ||||
|     template<Operator Op> bool compare( long long lhs, unsigned char rhs ) { | ||||
|         return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); | ||||
|     } | ||||
|      | ||||
|  | ||||
|     // unsigned long long to X | ||||
|     template<Operator Op> bool compare( unsigned long long lhs, int rhs ) { | ||||
|         return applyEvaluator<Op>( static_cast<long>( lhs ), rhs ); | ||||
| @@ -188,7 +188,7 @@ namespace Internal { | ||||
|     template<Operator Op> bool compare( unsigned long long lhs, char rhs ) { | ||||
|         return applyEvaluator<Op>( static_cast<long>( lhs ), rhs ); | ||||
|     } | ||||
|      | ||||
|  | ||||
|     // pointer to long long (when comparing against NULL) | ||||
|     template<Operator Op, typename T> bool compare( long long lhs, T* rhs ) { | ||||
|         return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs ); | ||||
| @@ -197,7 +197,7 @@ namespace Internal { | ||||
|         return Evaluator<T*, T*, Op>::evaluate( lhs, reinterpret_cast<T*>( rhs ) ); | ||||
|     } | ||||
| #endif // CATCH_CONFIG_CPP11_LONG_LONG | ||||
|      | ||||
|  | ||||
| #ifdef CATCH_CONFIG_CPP11_NULLPTR | ||||
|     // pointer to nullptr_t (when comparing against nullptr) | ||||
|     template<Operator Op, typename T> bool compare( std::nullptr_t, T* rhs ) { | ||||
|   | ||||
| @@ -97,7 +97,7 @@ namespace Catch { | ||||
|     Matchers::Impl::StdString::EndsWith::~EndsWith() {} | ||||
|  | ||||
|     void Config::dummy() {} | ||||
|      | ||||
|  | ||||
|     namespace TestCaseTracking { | ||||
|         ITracker::~ITracker() {} | ||||
|         TrackerBase::~TrackerBase() {} | ||||
|   | ||||
| @@ -240,12 +240,12 @@ namespace Catch | ||||
|  | ||||
|         // The return value indicates if the messages buffer should be cleared: | ||||
|         virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0; | ||||
|          | ||||
|  | ||||
|         virtual void sectionEnded( SectionStats const& sectionStats ) = 0; | ||||
|         virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0; | ||||
|         virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0; | ||||
|         virtual void testRunEnded( TestRunStats const& testRunStats ) = 0; | ||||
|          | ||||
|  | ||||
|         virtual void skipTest( TestCaseInfo const& testInfo ) = 0; | ||||
|     }; | ||||
|  | ||||
| @@ -267,7 +267,7 @@ namespace Catch | ||||
|     }; | ||||
|  | ||||
|     Ptr<IStreamingReporter> addReporter( Ptr<IStreamingReporter> const& existingReporter, Ptr<IStreamingReporter> const& additionalReporter ); | ||||
|      | ||||
|  | ||||
| } | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_INTERFACES_REPORTER_H_INCLUDED | ||||
|   | ||||
| @@ -34,7 +34,7 @@ namespace Catch { | ||||
|     bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); | ||||
|     std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config ); | ||||
|     std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config ); | ||||
|      | ||||
|  | ||||
| } | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_INTERFACES_TESTCASE_H_INCLUDED | ||||
|   | ||||
| @@ -132,7 +132,7 @@ namespace Matchers { | ||||
|                 return m_caseSensitivity == CaseSensitive::No | ||||
|                     ? toLower( str ) | ||||
|                     : str; | ||||
|                  | ||||
|  | ||||
|             } | ||||
|             std::string toStringSuffix() const | ||||
|             { | ||||
| @@ -143,7 +143,7 @@ namespace Matchers { | ||||
|             CaseSensitive::Choice m_caseSensitivity; | ||||
|             std::string m_str; | ||||
|         }; | ||||
|      | ||||
|  | ||||
|         struct Equals : MatcherImpl<Equals, std::string> { | ||||
|             Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) | ||||
|             :   m_data( str, caseSensitivity ) | ||||
| @@ -182,7 +182,7 @@ namespace Matchers { | ||||
|         struct StartsWith : MatcherImpl<StartsWith, std::string> { | ||||
|             StartsWith( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) | ||||
|             : m_data( substr, caseSensitivity ){} | ||||
|              | ||||
|  | ||||
|             StartsWith( StartsWith const& other ) : m_data( other.m_data ){} | ||||
|  | ||||
|             virtual ~StartsWith(); | ||||
|   | ||||
| @@ -64,12 +64,12 @@ namespace Catch { | ||||
|             getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     template<typename T> | ||||
|     class ListenerRegistrar { | ||||
|          | ||||
|  | ||||
|         class ListenerFactory : public SharedImpl<IReporterFactory> { | ||||
|              | ||||
|  | ||||
|             virtual IStreamingReporter* create( ReporterConfig const& config ) const { | ||||
|                 return new T( config ); | ||||
|             } | ||||
| @@ -77,9 +77,9 @@ namespace Catch { | ||||
|                 return ""; | ||||
|             } | ||||
|         }; | ||||
|          | ||||
|  | ||||
|     public: | ||||
|          | ||||
|  | ||||
|         ListenerRegistrar() { | ||||
|             getMutableRegistryHub().registerListener( new ListenerFactory() ); | ||||
|         } | ||||
|   | ||||
| @@ -85,7 +85,7 @@ namespace Catch { | ||||
|             std::string lhs, rhs, op; | ||||
|         } m_exprComponents; | ||||
|         CopyableStream m_stream; | ||||
|          | ||||
|  | ||||
|         bool m_shouldDebugBreak; | ||||
|         bool m_shouldThrow; | ||||
|     }; | ||||
|   | ||||
| @@ -77,12 +77,12 @@ namespace Catch { | ||||
|     } | ||||
|  | ||||
|     void ResultBuilder::captureExpectedException( Matchers::Impl::Matcher<std::string> const& matcher ) { | ||||
|          | ||||
|  | ||||
|         assert( m_exprComponents.testFalse == false ); | ||||
|         AssertionResultData data = m_data; | ||||
|         data.resultType = ResultWas::Ok; | ||||
|         data.reconstructedExpression = m_assertionInfo.capturedExpression; | ||||
|          | ||||
|  | ||||
|         std::string actualMessage = Catch::translateActiveException(); | ||||
|         if( !matcher.match( actualMessage ) ) { | ||||
|             data.resultType = ResultWas::ExpressionFailed; | ||||
| @@ -99,7 +99,7 @@ namespace Catch { | ||||
|     void ResultBuilder::handleResult( AssertionResult const& result ) | ||||
|     { | ||||
|         getResultCapture().assertionEnded( result ); | ||||
|          | ||||
|  | ||||
|         if( !result.isOk() ) { | ||||
|             if( getCurrentContext().getConfig()->shouldDebugBreak() ) | ||||
|                 m_shouldDebugBreak = true; | ||||
|   | ||||
| @@ -55,7 +55,7 @@ namespace Catch { | ||||
|     inline bool shouldContinueOnFailure( int flags )    { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; } | ||||
|     inline bool isFalseTest( int flags )                { return ( flags & ResultDisposition::FalseTest ) != 0; } | ||||
|     inline bool shouldSuppressFailure( int flags )      { return ( flags & ResultDisposition::SuppressFail ) != 0; } | ||||
|      | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_RESULT_TYPE_H_INCLUDED | ||||
|   | ||||
| @@ -94,7 +94,7 @@ namespace Catch { | ||||
|             m_reporter->testCaseStarting( testInfo ); | ||||
|  | ||||
|             m_activeTestCase = &testCase; | ||||
|              | ||||
|  | ||||
|  | ||||
|             do { | ||||
|                 m_trackerContext.startRun(); | ||||
| @@ -157,7 +157,7 @@ namespace Catch { | ||||
|             if( !sectionTracker.isOpen() ) | ||||
|                 return false; | ||||
|             m_activeSections.push_back( §ionTracker ); | ||||
|              | ||||
|  | ||||
|             m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo; | ||||
|  | ||||
|             m_reporter->sectionStarting( sectionInfo ); | ||||
| @@ -177,16 +177,16 @@ namespace Catch { | ||||
|             assertions.failed++; | ||||
|             return true; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void sectionEnded( SectionEndInfo const& endInfo ) { | ||||
|             Counts assertions = m_totals.assertions - endInfo.prevAssertions; | ||||
|             bool missingAssertions = testForMissingAssertions( assertions ); | ||||
|              | ||||
|  | ||||
|             if( !m_activeSections.empty() ) { | ||||
|                 m_activeSections.back()->close(); | ||||
|                 m_activeSections.pop_back(); | ||||
|             } | ||||
|              | ||||
|  | ||||
|             m_reporter->sectionEnded( SectionStats( endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions ) ); | ||||
|             m_messages.clear(); | ||||
|         } | ||||
| @@ -197,10 +197,10 @@ namespace Catch { | ||||
|             else | ||||
|                 m_activeSections.back()->close(); | ||||
|             m_activeSections.pop_back(); | ||||
|              | ||||
|  | ||||
|             m_unfinishedSections.push_back( endInfo ); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void pushScopedMessage( MessageInfo const& message ) { | ||||
|             m_messages.push_back( message ); | ||||
|         } | ||||
| @@ -268,7 +268,7 @@ namespace Catch { | ||||
|                 m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal ); | ||||
|  | ||||
|                 seedRng( *m_config ); | ||||
|                  | ||||
|  | ||||
|                 Timer timer; | ||||
|                 timer.start(); | ||||
|                 if( m_reporter->getPreferences().shouldRedirectStdOut ) { | ||||
| @@ -318,7 +318,7 @@ namespace Catch { | ||||
|                                     m_lastAssertionInfo.capturedExpression.c_str(), | ||||
|                                     m_lastAssertionInfo.resultDisposition ); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         void handleUnfinishedSections() { | ||||
|             // If sections ended prematurely due to an exception we stored their | ||||
|             // infos here so we can tear them down outside the unwind process. | ||||
|   | ||||
| @@ -23,17 +23,17 @@ namespace Catch { | ||||
|         std::string description; | ||||
|         SourceLineInfo lineInfo; | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     struct SectionEndInfo { | ||||
|         SectionEndInfo( SectionInfo const& _sectionInfo, Counts const& _prevAssertions, double _durationInSeconds ) | ||||
|         : sectionInfo( _sectionInfo ), prevAssertions( _prevAssertions ), durationInSeconds( _durationInSeconds ) | ||||
|         {} | ||||
|          | ||||
|  | ||||
|         SectionInfo sectionInfo; | ||||
|         Counts prevAssertions; | ||||
|         double durationInSeconds; | ||||
|     }; | ||||
|      | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_SECTION_INFO_H_INCLUDED | ||||
|   | ||||
| @@ -21,7 +21,7 @@ namespace Catch { | ||||
|     std::ostream& cout(); | ||||
|     std::ostream& cerr(); | ||||
|  | ||||
|      | ||||
|  | ||||
|     struct IStream { | ||||
|         virtual ~IStream() CATCH_NOEXCEPT; | ||||
|         virtual std::ostream& stream() const = 0; | ||||
| @@ -35,7 +35,7 @@ namespace Catch { | ||||
|     public: // IStream | ||||
|         virtual std::ostream& stream() const CATCH_OVERRIDE; | ||||
|     }; | ||||
|      | ||||
|  | ||||
|  | ||||
|     class CoutStream : public IStream { | ||||
|         mutable std::ostream m_os; | ||||
| @@ -47,7 +47,7 @@ namespace Catch { | ||||
|         virtual std::ostream& stream() const CATCH_OVERRIDE; | ||||
|     }; | ||||
|  | ||||
|      | ||||
|  | ||||
|     class DebugOutStream : public IStream { | ||||
|         std::auto_ptr<StreamBufBase> m_streamBuf; | ||||
|         mutable std::ostream m_os; | ||||
|   | ||||
| @@ -65,27 +65,27 @@ namespace Catch { | ||||
|             throw std::domain_error( oss.str() ); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|  | ||||
|     std::ostream& FileStream::stream() const { | ||||
|         return m_ofs; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     struct OutputDebugWriter { | ||||
|          | ||||
|  | ||||
|         void operator()( std::string const&str ) { | ||||
|             writeToDebugConsole( str ); | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     DebugOutStream::DebugOutStream() | ||||
|     :   m_streamBuf( new StreamBufImpl<OutputDebugWriter>() ), | ||||
|         m_os( m_streamBuf.get() ) | ||||
|     {} | ||||
|      | ||||
|  | ||||
|     std::ostream& DebugOutStream::stream() const { | ||||
|         return m_os; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     // Store the streambuf from cout up-front because | ||||
|     // cout may get redirected when running tests | ||||
|     CoutStream::CoutStream() | ||||
| @@ -95,8 +95,8 @@ namespace Catch { | ||||
|     std::ostream& CoutStream::stream() const { | ||||
|         return m_os; | ||||
|     } | ||||
|      | ||||
|      | ||||
|  | ||||
|  | ||||
| #ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement this functions | ||||
|     std::ostream& cout() { | ||||
|         return std::cout; | ||||
|   | ||||
| @@ -31,7 +31,7 @@ namespace Catch { | ||||
|             MayFail = 1 << 3, | ||||
|             Throws = 1 << 4 | ||||
|         }; | ||||
|          | ||||
|  | ||||
|         TestCaseInfo(   std::string const& _name, | ||||
|                         std::string const& _className, | ||||
|                         std::string const& _description, | ||||
| @@ -41,7 +41,7 @@ namespace Catch { | ||||
|         TestCaseInfo( TestCaseInfo const& other ); | ||||
|  | ||||
|         friend void setTags( TestCaseInfo& testCaseInfo, std::set<std::string> const& tags ); | ||||
|          | ||||
|  | ||||
|         bool isHidden() const; | ||||
|         bool throws() const; | ||||
|         bool okToFail() const; | ||||
|   | ||||
| @@ -88,7 +88,7 @@ namespace Catch { | ||||
|             tags.insert( "hide" ); | ||||
|             tags.insert( "." ); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         TestCaseInfo info( _name, _className, desc, tags, _lineInfo ); | ||||
|         return TestCase( _testCase, info ); | ||||
|     } | ||||
| @@ -97,7 +97,7 @@ namespace Catch { | ||||
|     { | ||||
|         testCaseInfo.tags = tags; | ||||
|         testCaseInfo.lcaseTags.clear(); | ||||
|          | ||||
|  | ||||
|         std::ostringstream oss; | ||||
|         for( std::set<std::string>::const_iterator it = tags.begin(), itEnd = tags.end(); it != itEnd; ++it ) { | ||||
|             oss << "[" << *it << "]"; | ||||
| @@ -107,7 +107,7 @@ namespace Catch { | ||||
|         } | ||||
|         testCaseInfo.tagsAsString = oss.str(); | ||||
|     } | ||||
|      | ||||
|  | ||||
|     TestCaseInfo::TestCaseInfo( std::string const& _name, | ||||
|                                 std::string const& _className, | ||||
|                                 std::string const& _description, | ||||
|   | ||||
| @@ -27,11 +27,11 @@ namespace Catch { | ||||
|     struct RandomNumberGenerator { | ||||
|         int operator()( int n ) const { return std::rand() % n; } | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     inline std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases ) { | ||||
|          | ||||
|  | ||||
|         std::vector<TestCase> sorted = unsortedTestCases; | ||||
|          | ||||
|  | ||||
|         switch( config.runOrder() ) { | ||||
|             case RunTests::InLexicographicalOrder: | ||||
|                 std::sort( sorted.begin(), sorted.end(), LexSort() ); | ||||
| @@ -39,7 +39,7 @@ namespace Catch { | ||||
|             case RunTests::InRandomOrder: | ||||
|                 { | ||||
|                     seedRng( config ); | ||||
|                      | ||||
|  | ||||
|                     RandomNumberGenerator rng; | ||||
|                     std::random_shuffle( sorted.begin(), sorted.end(), rng ); | ||||
|                 } | ||||
| @@ -70,7 +70,7 @@ namespace Catch { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|      | ||||
|  | ||||
|     std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config ) { | ||||
|         std::vector<TestCase> filtered; | ||||
|         filtered.reserve( testCases.size() ); | ||||
|   | ||||
| @@ -21,61 +21,61 @@ namespace TestCaseTracking { | ||||
|  | ||||
|     struct ITracker : SharedImpl<> { | ||||
|         virtual ~ITracker(); | ||||
|          | ||||
|  | ||||
|         // static queries | ||||
|         virtual std::string name() const = 0; | ||||
|          | ||||
|  | ||||
|         // dynamic queries | ||||
|         virtual bool isComplete() const = 0; // Successfully completed or failed | ||||
|         virtual bool isSuccessfullyCompleted() const = 0; | ||||
|         virtual bool isOpen() const = 0; // Started but not complete | ||||
|         virtual bool hasChildren() const = 0; | ||||
|          | ||||
|  | ||||
|         virtual ITracker& parent() = 0; | ||||
|          | ||||
|  | ||||
|         // actions | ||||
|         virtual void close() = 0; // Successfully complete | ||||
|         virtual void fail() = 0; | ||||
|         virtual void markAsNeedingAnotherRun() = 0; | ||||
|          | ||||
|  | ||||
|         virtual void addChild( Ptr<ITracker> const& child ) = 0; | ||||
|         virtual ITracker* findChild( std::string const& name ) = 0; | ||||
|         virtual void openChild() = 0; | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     class TrackerContext { | ||||
|          | ||||
|  | ||||
|         enum RunState { | ||||
|             NotStarted, | ||||
|             Executing, | ||||
|             CompletedCycle | ||||
|         }; | ||||
|          | ||||
|  | ||||
|         Ptr<ITracker> m_rootTracker; | ||||
|         ITracker* m_currentTracker; | ||||
|         RunState m_runState; | ||||
|          | ||||
|  | ||||
|     public: | ||||
|          | ||||
|  | ||||
|         static TrackerContext& instance() { | ||||
|             static TrackerContext s_instance; | ||||
|             return s_instance; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         TrackerContext() | ||||
|         :   m_currentTracker( CATCH_NULL ), | ||||
|             m_runState( NotStarted ) | ||||
|         {} | ||||
|          | ||||
|          | ||||
|  | ||||
|  | ||||
|         ITracker& startRun(); | ||||
|          | ||||
|  | ||||
|         void endRun() { | ||||
|             m_rootTracker.reset(); | ||||
|             m_currentTracker = CATCH_NULL; | ||||
|             m_runState = NotStarted; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         void startCycle() { | ||||
|             m_currentTracker = m_rootTracker.get(); | ||||
|             m_runState = Executing; | ||||
| @@ -83,7 +83,7 @@ namespace TestCaseTracking { | ||||
|         void completeCycle() { | ||||
|             m_runState = CompletedCycle; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         bool completedCycle() const { | ||||
|             return m_runState == CompletedCycle; | ||||
|         } | ||||
| @@ -94,7 +94,7 @@ namespace TestCaseTracking { | ||||
|             m_currentTracker = tracker; | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     class TrackerBase : public ITracker { | ||||
|     protected: | ||||
|         enum CycleState { | ||||
| @@ -127,7 +127,7 @@ namespace TestCaseTracking { | ||||
|             m_runState( NotStarted ) | ||||
|         {} | ||||
|         virtual ~TrackerBase(); | ||||
|          | ||||
|  | ||||
|         virtual std::string name() const CATCH_OVERRIDE { | ||||
|             return m_name; | ||||
|         } | ||||
| @@ -143,12 +143,12 @@ namespace TestCaseTracking { | ||||
|         virtual bool hasChildren() const CATCH_OVERRIDE { | ||||
|             return !m_children.empty(); | ||||
|         } | ||||
|          | ||||
|          | ||||
|  | ||||
|  | ||||
|         virtual void addChild( Ptr<ITracker> const& child ) CATCH_OVERRIDE { | ||||
|             m_children.push_back( child ); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual ITracker* findChild( std::string const& name ) CATCH_OVERRIDE { | ||||
|             Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( name ) ); | ||||
|             return( it != m_children.end() ) | ||||
| @@ -159,7 +159,7 @@ namespace TestCaseTracking { | ||||
|             assert( m_parent ); // Should always be non-null except for root | ||||
|             return *m_parent; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void openChild() CATCH_OVERRIDE { | ||||
|             if( m_runState != ExecutingChildren ) { | ||||
|                 m_runState = ExecutingChildren; | ||||
| @@ -173,22 +173,22 @@ namespace TestCaseTracking { | ||||
|             if( m_parent ) | ||||
|                 m_parent->openChild(); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void close() CATCH_OVERRIDE { | ||||
|              | ||||
|  | ||||
|             // Close any still open children (e.g. generators) | ||||
|             while( &m_ctx.currentTracker() != this ) | ||||
|                 m_ctx.currentTracker().close(); | ||||
|              | ||||
|  | ||||
|             switch( m_runState ) { | ||||
|                 case NotStarted: | ||||
|                 case CompletedSuccessfully: | ||||
|                 case Failed: | ||||
|                     throw std::logic_error( "Illogical state" ); | ||||
|                      | ||||
|  | ||||
|                 case NeedsAnotherRun: | ||||
|                     break;; | ||||
|                      | ||||
|  | ||||
|                 case Executing: | ||||
|                     m_runState = CompletedSuccessfully; | ||||
|                     break; | ||||
| @@ -196,7 +196,7 @@ namespace TestCaseTracking { | ||||
|                     if( m_children.empty() || m_children.back()->isComplete() ) | ||||
|                         m_runState = CompletedSuccessfully; | ||||
|                     break; | ||||
|                      | ||||
|  | ||||
|                 default: | ||||
|                     throw std::logic_error( "Unexpected state" ); | ||||
|             } | ||||
| @@ -222,17 +222,17 @@ namespace TestCaseTracking { | ||||
|             m_ctx.setCurrentTracker( this ); | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     class SectionTracker : public TrackerBase { | ||||
|     public: | ||||
|         SectionTracker( std::string const& name, TrackerContext& ctx, ITracker* parent ) | ||||
|         :   TrackerBase( name, ctx, parent ) | ||||
|         {} | ||||
|         virtual ~SectionTracker(); | ||||
|          | ||||
|  | ||||
|         static SectionTracker& acquire( TrackerContext& ctx, std::string const& name ) { | ||||
|             SectionTracker* section = CATCH_NULL; | ||||
|              | ||||
|  | ||||
|             ITracker& currentTracker = ctx.currentTracker(); | ||||
|             if( ITracker* childTracker = currentTracker.findChild( name ) ) { | ||||
|                 section = dynamic_cast<SectionTracker*>( childTracker ); | ||||
| @@ -243,13 +243,13 @@ namespace TestCaseTracking { | ||||
|                 currentTracker.addChild( section ); | ||||
|             } | ||||
|             if( !ctx.completedCycle() && !section->isComplete() ) { | ||||
|                  | ||||
|  | ||||
|                 section->open(); | ||||
|             } | ||||
|             return *section; | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     class IndexTracker : public TrackerBase { | ||||
|         int m_size; | ||||
|         int m_index; | ||||
| @@ -260,10 +260,10 @@ namespace TestCaseTracking { | ||||
|             m_index( -1 ) | ||||
|         {} | ||||
|         virtual ~IndexTracker(); | ||||
|          | ||||
|  | ||||
|         static IndexTracker& acquire( TrackerContext& ctx, std::string const& name, int size ) { | ||||
|             IndexTracker* tracker = CATCH_NULL; | ||||
|              | ||||
|  | ||||
|             ITracker& currentTracker = ctx.currentTracker(); | ||||
|             if( ITracker* childTracker = currentTracker.findChild( name ) ) { | ||||
|                 tracker = dynamic_cast<IndexTracker*>( childTracker ); | ||||
| @@ -273,39 +273,39 @@ namespace TestCaseTracking { | ||||
|                 tracker = new IndexTracker( name, ctx, ¤tTracker, size ); | ||||
|                 currentTracker.addChild( tracker ); | ||||
|             } | ||||
|              | ||||
|  | ||||
|             if( !ctx.completedCycle() && !tracker->isComplete() ) { | ||||
|                 if( tracker->m_runState != ExecutingChildren && tracker->m_runState != NeedsAnotherRun ) | ||||
|                     tracker->moveNext(); | ||||
|                 tracker->open(); | ||||
|             } | ||||
|              | ||||
|  | ||||
|             return *tracker; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         int index() const { return m_index; } | ||||
|          | ||||
|  | ||||
|         void moveNext() { | ||||
|             m_index++; | ||||
|             m_children.clear(); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void close() CATCH_OVERRIDE { | ||||
|             TrackerBase::close(); | ||||
|             if( m_runState == CompletedSuccessfully && m_index < m_size-1 ) | ||||
|                 m_runState = Executing; | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     inline ITracker& TrackerContext::startRun() { | ||||
|         m_rootTracker = new SectionTracker( "{root}", *this, CATCH_NULL ); | ||||
|         m_currentTracker = CATCH_NULL; | ||||
|         m_runState = Executing; | ||||
|         return *m_rootTracker; | ||||
|     } | ||||
|      | ||||
|  | ||||
| } // namespace TestCaseTracking | ||||
|      | ||||
|  | ||||
| using TestCaseTracking::ITracker; | ||||
| using TestCaseTracking::TrackerContext; | ||||
| using TestCaseTracking::SectionTracker; | ||||
|   | ||||
| @@ -20,7 +20,7 @@ | ||||
| #include <vector> | ||||
|  | ||||
| namespace Catch { | ||||
|      | ||||
|  | ||||
|     class TestSpec { | ||||
|         struct Pattern : SharedImpl<> { | ||||
|             virtual ~Pattern(); | ||||
| @@ -38,7 +38,7 @@ namespace Catch { | ||||
|         private: | ||||
|             WildcardPattern m_wildcardPattern; | ||||
|         }; | ||||
|          | ||||
|  | ||||
|         class TagPattern : public Pattern { | ||||
|         public: | ||||
|             TagPattern( std::string const& tag ) : m_tag( toLower( tag ) ) {} | ||||
| @@ -49,7 +49,7 @@ namespace Catch { | ||||
|         private: | ||||
|             std::string m_tag; | ||||
|         }; | ||||
|          | ||||
|  | ||||
|         class ExcludedPattern : public Pattern { | ||||
|         public: | ||||
|             ExcludedPattern( Ptr<Pattern> const& underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} | ||||
|   | ||||
| @@ -67,7 +67,7 @@ std::string toString( std::nullptr_t ); | ||||
|     std::string toString( NSObject* const& nsObject ); | ||||
| #endif | ||||
|  | ||||
|    | ||||
|  | ||||
| namespace Detail { | ||||
|  | ||||
|     extern const std::string unprintableString; | ||||
| @@ -78,7 +78,7 @@ namespace Detail { | ||||
|  | ||||
|     struct TrueType { char sizer[1]; }; | ||||
|     struct FalseType { char sizer[2]; }; | ||||
|      | ||||
|  | ||||
|     TrueType& testStreamable( std::ostream& ); | ||||
|     FalseType testStreamable( FalseType ); | ||||
|  | ||||
|   | ||||
| @@ -16,7 +16,7 @@ namespace Catch { | ||||
| namespace Detail { | ||||
|  | ||||
|     const std::string unprintableString = "{?}"; | ||||
|      | ||||
|  | ||||
|     namespace { | ||||
|         const int hexThreshold = 255; | ||||
|  | ||||
| @@ -175,7 +175,7 @@ std::string toString( unsigned long long value ) { | ||||
|     return oss.str(); | ||||
| } | ||||
| #endif | ||||
|      | ||||
|  | ||||
| #ifdef CATCH_CONFIG_CPP11_NULLPTR | ||||
| std::string toString( std::nullptr_t ) { | ||||
|     return "nullptr"; | ||||
|   | ||||
| @@ -27,7 +27,7 @@ namespace Catch { | ||||
|         unsigned int const buildNumber; | ||||
|  | ||||
|         friend std::ostream& operator << ( std::ostream& os, Version const& version ); | ||||
|          | ||||
|  | ||||
|     private: | ||||
|         void operator=( Version const& ); | ||||
|     }; | ||||
|   | ||||
| @@ -19,9 +19,9 @@ namespace Catch | ||||
|             WildcardAtEnd = 2, | ||||
|             WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd | ||||
|         }; | ||||
|          | ||||
|  | ||||
|     public: | ||||
|          | ||||
|  | ||||
|         WildcardPattern( std::string const& pattern, CaseSensitive::Choice caseSensitivity ) | ||||
|         :   m_caseSensitivity( caseSensitivity ), | ||||
|             m_wildcard( NoWildcard ), | ||||
| @@ -48,7 +48,7 @@ namespace Catch | ||||
|                 case WildcardAtBothEnds: | ||||
|                     return contains( adjustCase( str ), m_pattern ); | ||||
|             } | ||||
|              | ||||
|  | ||||
| #ifdef __clang__ | ||||
| #pragma clang diagnostic push | ||||
| #pragma clang diagnostic ignored "-Wunreachable-code" | ||||
|   | ||||
| @@ -22,23 +22,23 @@ namespace Catch { | ||||
|     class XmlEncode { | ||||
|     public: | ||||
|         enum ForWhat { ForTextNodes, ForAttributes }; | ||||
|          | ||||
|  | ||||
|         XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes ) | ||||
|         :   m_str( str ), | ||||
|             m_forWhat( forWhat ) | ||||
|         {} | ||||
|          | ||||
|  | ||||
|         void encodeTo( std::ostream& os ) const { | ||||
|  | ||||
|             // Apostrophe escaping not necessary if we always use " to write attributes | ||||
|             // (see: http://www.w3.org/TR/xml/#syntax) | ||||
|              | ||||
|  | ||||
|             for( std::size_t i = 0; i < m_str.size(); ++ i ) { | ||||
|                 char c = m_str[i]; | ||||
|                 switch( c ) { | ||||
|                     case '<':   os << "<"; break; | ||||
|                     case '&':   os << "&"; break; | ||||
|                      | ||||
|  | ||||
|                     case '>': | ||||
|                         // See: http://www.w3.org/TR/xml/#syntax | ||||
|                         if( i > 2 && m_str[i-1] == ']' && m_str[i-2] == ']' ) | ||||
| @@ -46,14 +46,14 @@ namespace Catch { | ||||
|                         else | ||||
|                             os << c; | ||||
|                         break; | ||||
|                          | ||||
|  | ||||
|                     case '\"': | ||||
|                         if( m_forWhat == ForAttributes ) | ||||
|                             os << """; | ||||
|                         else | ||||
|                             os << c; | ||||
|                         break; | ||||
|                          | ||||
|  | ||||
|                     default: | ||||
|                         // Escape control chars - based on contribution by @espenalb in PR #465 | ||||
|                         if ( ( c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) | ||||
| @@ -68,12 +68,12 @@ namespace Catch { | ||||
|             xmlEncode.encodeTo( os ); | ||||
|             return os; | ||||
|         } | ||||
|          | ||||
|  | ||||
|     private: | ||||
|         std::string m_str; | ||||
|         ForWhat m_forWhat; | ||||
|     }; | ||||
|      | ||||
|  | ||||
|     class XmlWriter { | ||||
|     public: | ||||
|  | ||||
|   | ||||
| @@ -230,18 +230,18 @@ namespace Catch { | ||||
|         return line; | ||||
|     } | ||||
|  | ||||
|      | ||||
|  | ||||
|     struct TestEventListenerBase : StreamingReporterBase { | ||||
|         TestEventListenerBase( ReporterConfig const& _config ) | ||||
|         :   StreamingReporterBase( _config ) | ||||
|         {} | ||||
|          | ||||
|  | ||||
|         virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {} | ||||
|         virtual bool assertionEnded( AssertionStats const& _assertionStats ) CATCH_OVERRIDE { | ||||
|             return false; | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_REPORTER_BASES_HPP_INCLUDED | ||||
|   | ||||
| @@ -104,7 +104,7 @@ namespace Catch { | ||||
|             SectionNode const& rootSection = *testCaseNode.children.front(); | ||||
|  | ||||
|             std::string className = stats.testInfo.className; | ||||
|              | ||||
|  | ||||
|             if( className.empty() ) { | ||||
|                 if( rootSection.childSections.empty() ) | ||||
|                     className = "global"; | ||||
| @@ -118,7 +118,7 @@ namespace Catch { | ||||
|             std::string name = trim( sectionNode.stats.sectionInfo.name ); | ||||
|             if( !rootName.empty() ) | ||||
|                 name = rootName + "/" + name; | ||||
|              | ||||
|  | ||||
|             if( !sectionNode.assertions.empty() || | ||||
|                 !sectionNode.stdOut.empty() || | ||||
|                 !sectionNode.stdErr.empty() ) { | ||||
| @@ -187,7 +187,7 @@ namespace Catch { | ||||
|                         elementName = "internalError"; | ||||
|                         break; | ||||
|                 } | ||||
|              | ||||
|  | ||||
|                 XmlWriter::ScopedElement e = xml.scopedElement( elementName ); | ||||
|  | ||||
|                 xml.writeAttribute( "message", result.getExpandedExpression() ); | ||||
| @@ -216,7 +216,7 @@ namespace Catch { | ||||
|         unsigned int unexpectedExceptions; | ||||
|     }; | ||||
|  | ||||
|     INTERNAL_CATCH_REGISTER_REPORTER( "junit", JunitReporter )     | ||||
|     INTERNAL_CATCH_REGISTER_REPORTER( "junit", JunitReporter ) | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
|   | ||||
| @@ -15,18 +15,18 @@ namespace Catch { | ||||
| class MultipleReporters : public SharedImpl<IStreamingReporter> { | ||||
|     typedef std::vector<Ptr<IStreamingReporter> > Reporters; | ||||
|     Reporters m_reporters; | ||||
|      | ||||
|  | ||||
| public: | ||||
|     void add( Ptr<IStreamingReporter> const& reporter ) { | ||||
|         m_reporters.push_back( reporter ); | ||||
|     } | ||||
|      | ||||
|  | ||||
| public: // IStreamingReporter | ||||
|      | ||||
|  | ||||
|     virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { | ||||
|         return m_reporters[0]->getPreferences(); | ||||
|     } | ||||
|      | ||||
|  | ||||
|     virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { | ||||
|         for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); | ||||
|                 it != itEnd; | ||||
| @@ -34,7 +34,7 @@ public: // IStreamingReporter | ||||
|             (*it)->noMatchingTestCases( spec ); | ||||
|     } | ||||
|  | ||||
|      | ||||
|  | ||||
|     virtual void testRunStarting( TestRunInfo const& testRunInfo ) CATCH_OVERRIDE { | ||||
|         for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); | ||||
|                 it != itEnd; | ||||
| @@ -49,7 +49,7 @@ public: // IStreamingReporter | ||||
|             (*it)->testGroupStarting( groupInfo ); | ||||
|     } | ||||
|  | ||||
|      | ||||
|  | ||||
|     virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { | ||||
|         for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); | ||||
|                 it != itEnd; | ||||
| @@ -64,7 +64,7 @@ public: // IStreamingReporter | ||||
|             (*it)->sectionStarting( sectionInfo ); | ||||
|     } | ||||
|  | ||||
|      | ||||
|  | ||||
|     virtual void assertionStarting( AssertionInfo const& assertionInfo ) CATCH_OVERRIDE { | ||||
|         for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); | ||||
|                 it != itEnd; | ||||
| @@ -72,7 +72,7 @@ public: // IStreamingReporter | ||||
|             (*it)->assertionStarting( assertionInfo ); | ||||
|     } | ||||
|  | ||||
|      | ||||
|  | ||||
|     // The return value indicates if the messages buffer should be cleared: | ||||
|     virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { | ||||
|         bool clearBuffer = false; | ||||
| @@ -111,7 +111,7 @@ public: // IStreamingReporter | ||||
|             (*it)->testRunEnded( testRunStats ); | ||||
|     } | ||||
|  | ||||
|      | ||||
|  | ||||
|     virtual void skipTest( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { | ||||
|         for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); | ||||
|                 it != itEnd; | ||||
| @@ -122,7 +122,7 @@ public: // IStreamingReporter | ||||
|  | ||||
| Ptr<IStreamingReporter> addReporter( Ptr<IStreamingReporter> const& existingReporter, Ptr<IStreamingReporter> const& additionalReporter ) { | ||||
|     Ptr<IStreamingReporter> resultingReporter; | ||||
|      | ||||
|  | ||||
|     if( existingReporter ) { | ||||
|         MultipleReporters* multi = dynamic_cast<MultipleReporters*>( existingReporter.get() ); | ||||
|         if( !multi ) { | ||||
| @@ -137,11 +137,11 @@ Ptr<IStreamingReporter> addReporter( Ptr<IStreamingReporter> const& existingRepo | ||||
|     } | ||||
|     else | ||||
|         resultingReporter = additionalReporter; | ||||
|      | ||||
|  | ||||
|     return resultingReporter; | ||||
| } | ||||
|      | ||||
|      | ||||
|  | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_REPORTER_MULTI_HPP_INCLUDED | ||||
|   | ||||
| @@ -24,7 +24,7 @@ | ||||
| #endif | ||||
|  | ||||
| namespace Catch { | ||||
|      | ||||
|  | ||||
|     struct TeamCityReporter : StreamingReporterBase { | ||||
|         TeamCityReporter( ReporterConfig const& _config ) | ||||
|         :   StreamingReporterBase( _config ), | ||||
| @@ -32,7 +32,7 @@ namespace Catch { | ||||
|         { | ||||
|             m_reporterPrefs.shouldRedirectStdOut = true; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         static std::string escape( std::string const& str ) { | ||||
|             std::string escaped = str; | ||||
|             replaceInPlace( escaped, "|", "||" ); | ||||
| @@ -58,9 +58,9 @@ namespace Catch { | ||||
|                 stream << " message='test skipped because it didn|'t match the test spec'"; | ||||
|             stream << "]\n"; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void noMatchingTestCases( std::string const& /* spec */ ) CATCH_OVERRIDE {} | ||||
|          | ||||
|  | ||||
|         virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { | ||||
|             StreamingReporterBase::testGroupStarting( groupInfo ); | ||||
|             stream << "##teamcity[testSuiteStarted name='" | ||||
| @@ -72,21 +72,21 @@ namespace Catch { | ||||
|                 << escape( testGroupStats.groupInfo.name ) << "']\n"; | ||||
|         } | ||||
|  | ||||
|          | ||||
|  | ||||
|         virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { | ||||
|             AssertionResult const& result = assertionStats.assertionResult; | ||||
|             if( !result.isOk() ) { | ||||
|                  | ||||
|  | ||||
|                 std::ostringstream msg; | ||||
|                 if( !m_headerPrintedForThisSection ) | ||||
|                     printSectionHeader( msg ); | ||||
|                 m_headerPrintedForThisSection = true; | ||||
|                  | ||||
|  | ||||
|                 msg << result.getSourceInfo() << "\n"; | ||||
|                  | ||||
|  | ||||
|                 switch( result.getResultType() ) { | ||||
|                     case ResultWas::ExpressionFailed: | ||||
|                         msg << "expression failed"; | ||||
| @@ -125,15 +125,15 @@ namespace Catch { | ||||
|                     it != itEnd; | ||||
|                     ++it ) | ||||
|                     msg << "\n  \"" << it->message << "\""; | ||||
|                  | ||||
|                  | ||||
|  | ||||
|  | ||||
|                 if( result.hasExpression() ) { | ||||
|                     msg << | ||||
|                         "\n  " << result.getExpressionInMacro() << "\n" | ||||
|                         "with expansion:\n" << | ||||
|                         "  " << result.getExpandedExpression() << "\n"; | ||||
|                 } | ||||
|                  | ||||
|  | ||||
|                 stream << "##teamcity[testFailed" | ||||
|                     << " name='" << escape( currentTestCaseInfo->name )<< "'" | ||||
|                     << " message='" << escape( msg.str() ) << "'" | ||||
| @@ -141,7 +141,7 @@ namespace Catch { | ||||
|             } | ||||
|             return true; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { | ||||
|             m_headerPrintedForThisSection = false; | ||||
|             StreamingReporterBase::sectionStarting( sectionInfo ); | ||||
| @@ -152,7 +152,7 @@ namespace Catch { | ||||
|             stream << "##teamcity[testStarted name='" | ||||
|                 << escape( testInfo.name ) << "']\n"; | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { | ||||
|             StreamingReporterBase::testCaseEnded( testCaseStats ); | ||||
|             if( !testCaseStats.stdOut.empty() ) | ||||
| @@ -181,9 +181,9 @@ namespace Catch { | ||||
|                     printHeaderString( os, it->name ); | ||||
|                 os << getLineOfChars<'-'>() << "\n"; | ||||
|             } | ||||
|              | ||||
|  | ||||
|             SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; | ||||
|              | ||||
|  | ||||
|             if( !lineInfo.empty() ) | ||||
|                 os << lineInfo << "\n"; | ||||
|             os << getLineOfChars<'.'>() << "\n\n"; | ||||
| @@ -203,15 +203,15 @@ namespace Catch { | ||||
|         } | ||||
|     private: | ||||
|         bool m_headerPrintedForThisSection; | ||||
|          | ||||
|  | ||||
|     }; | ||||
|      | ||||
|  | ||||
| #ifdef CATCH_IMPL | ||||
|     TeamCityReporter::~TeamCityReporter() {} | ||||
| #endif | ||||
|      | ||||
|  | ||||
|     INTERNAL_CATCH_REGISTER_REPORTER( "teamcity", TeamCityReporter ) | ||||
|      | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
| #ifdef __clang__ | ||||
|   | ||||
| @@ -26,7 +26,7 @@ namespace Catch { | ||||
|         } | ||||
|  | ||||
|         virtual ~XmlReporter() CATCH_OVERRIDE; | ||||
|          | ||||
|  | ||||
|         static std::string getDescription() { | ||||
|             return "Reports test results as an XML document"; | ||||
|         } | ||||
| @@ -72,7 +72,7 @@ namespace Catch { | ||||
|  | ||||
|         virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { | ||||
|             const AssertionResult& assertionResult = assertionStats.assertionResult; | ||||
|                  | ||||
|  | ||||
|             // Print any info messages in <Info> tags. | ||||
|             if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { | ||||
|                 for( std::vector<MessageInfo>::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); | ||||
| @@ -134,10 +134,10 @@ namespace Catch { | ||||
|                 default: | ||||
|                     break; | ||||
|             } | ||||
|              | ||||
|  | ||||
|             if( assertionResult.hasExpression() ) | ||||
|                 m_xml.endElement(); | ||||
|                  | ||||
|  | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
| @@ -176,7 +176,7 @@ namespace Catch { | ||||
|                 .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk ); | ||||
|             m_xml.endElement(); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { | ||||
|             StreamingReporterBase::testRunEnded( testRunStats ); | ||||
|             m_xml.scopedElement( "OverallResults" ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash