mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Only use std::cout/ cert via Catch::cout/ cert - and make those conditional on CATCH_CONFIG_NOSTDOUT
This commit is contained in:
		| @@ -81,12 +81,12 @@ namespace Catch { | ||||
|     public: | ||||
|  | ||||
|         Config() | ||||
|         :   m_os( std::cout.rdbuf() ) | ||||
|         :   m_os( Catch::cout().rdbuf() ) | ||||
|         {} | ||||
|  | ||||
|         Config( ConfigData const& data ) | ||||
|         :   m_data( data ), | ||||
|             m_os( std::cout.rdbuf() ) | ||||
|             m_os( Catch::cout().rdbuf() ) | ||||
|         { | ||||
|             if( !data.testsOrTags.empty() ) { | ||||
|                 TestSpecParser parser( ITagAliasRegistry::get() ); | ||||
| @@ -97,7 +97,7 @@ namespace Catch { | ||||
|         } | ||||
|  | ||||
|         virtual ~Config() { | ||||
|             m_os.rdbuf( std::cout.rdbuf() ); | ||||
|             m_os.rdbuf( Catch::cout().rdbuf() ); | ||||
|             m_stream.release(); | ||||
|         } | ||||
|  | ||||
| @@ -119,7 +119,7 @@ namespace Catch { | ||||
|         bool shouldDebugBreak() const { return m_data.shouldDebugBreak; } | ||||
|  | ||||
|         void setStreamBuf( std::streambuf* buf ) { | ||||
|             m_os.rdbuf( buf ? buf : std::cout.rdbuf() ); | ||||
|             m_os.rdbuf( buf ? buf : Catch::cout().rdbuf() ); | ||||
|         } | ||||
|  | ||||
|         void useStream( std::string const& streamName ) { | ||||
|   | ||||
| @@ -115,7 +115,7 @@ namespace { | ||||
|         } | ||||
|     private: | ||||
|         void setColour( const char* _escapeCode ) { | ||||
|             std::cout << '\033' << _escapeCode; | ||||
|             Catch::cout() << '\033' << _escapeCode; | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|   | ||||
| @@ -96,8 +96,8 @@ namespace Catch { | ||||
|     } | ||||
|  | ||||
|     Stream createStream( std::string const& streamName ) { | ||||
|         if( streamName == "stdout" ) return Stream( std::cout.rdbuf(), false ); | ||||
|         if( streamName == "stderr" ) return Stream( std::cerr.rdbuf(), false ); | ||||
|         if( streamName == "stdout" ) return Stream( Catch::cout().rdbuf(), false ); | ||||
|         if( streamName == "stderr" ) return Stream( Catch::cerr().rdbuf(), false ); | ||||
|         if( streamName == "debug" ) return Stream( new StreamBufImpl<OutputDebugWriter>, true ); | ||||
|  | ||||
|         throw std::domain_error( "Unknown stream: " + streamName ); | ||||
|   | ||||
| @@ -51,7 +51,7 @@ | ||||
|  | ||||
|             size = sizeof(info); | ||||
|             if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0) != 0 ) { | ||||
|                 std::cerr << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl; | ||||
|                 Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl; | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
| @@ -92,7 +92,7 @@ | ||||
|     namespace Catch { | ||||
|         void writeToDebugConsole( std::string const& text ) { | ||||
|             // !TBD: Need a version for Mac/ XCode and other IDEs | ||||
|             std::cout << text; | ||||
|             Catch::cout() << text; | ||||
|         } | ||||
|     } | ||||
| #endif // Platform | ||||
|   | ||||
| @@ -23,9 +23,9 @@ namespace Catch { | ||||
|  | ||||
|         TestSpec testSpec = config.testSpec(); | ||||
|         if( config.testSpec().hasFilters() ) | ||||
|             std::cout << "Matching test cases:\n"; | ||||
|             Catch::cout() << "Matching test cases:\n"; | ||||
|         else { | ||||
|             std::cout << "All available test cases:\n"; | ||||
|             Catch::cout() << "All available test cases:\n"; | ||||
|             testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); | ||||
|         } | ||||
|  | ||||
| @@ -46,15 +46,15 @@ namespace Catch { | ||||
|                 : Colour::None; | ||||
|             Colour colourGuard( colour ); | ||||
|  | ||||
|             std::cout << Text( testCaseInfo.name, nameAttr ) << std::endl; | ||||
|             Catch::cout() << Text( testCaseInfo.name, nameAttr ) << std::endl; | ||||
|             if( !testCaseInfo.tags.empty() ) | ||||
|                 std::cout << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl; | ||||
|                 Catch::cout() << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl; | ||||
|         } | ||||
|  | ||||
|         if( !config.testSpec().hasFilters() ) | ||||
|             std::cout << pluralise( matchedTests, "test case" ) << "\n" << std::endl; | ||||
|             Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl; | ||||
|         else | ||||
|             std::cout << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl; | ||||
|             Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl; | ||||
|         return matchedTests; | ||||
|     } | ||||
|  | ||||
| @@ -70,7 +70,7 @@ namespace Catch { | ||||
|                 ++it ) { | ||||
|             matchedTests++; | ||||
|             TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); | ||||
|             std::cout << testCaseInfo.name << std::endl; | ||||
|             Catch::cout() << testCaseInfo.name << std::endl; | ||||
|         } | ||||
|         return matchedTests; | ||||
|     } | ||||
| @@ -96,9 +96,9 @@ namespace Catch { | ||||
|     inline std::size_t listTags( Config const& config ) { | ||||
|         TestSpec testSpec = config.testSpec(); | ||||
|         if( config.testSpec().hasFilters() ) | ||||
|             std::cout << "Tags for matching test cases:\n"; | ||||
|             Catch::cout() << "Tags for matching test cases:\n"; | ||||
|         else { | ||||
|             std::cout << "All available tags:\n"; | ||||
|             Catch::cout() << "All available tags:\n"; | ||||
|             testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); | ||||
|         } | ||||
|  | ||||
| @@ -132,14 +132,14 @@ namespace Catch { | ||||
|                                                     .setInitialIndent( 0 ) | ||||
|                                                     .setIndent( oss.str().size() ) | ||||
|                                                     .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) ); | ||||
|             std::cout << oss.str() << wrapper << "\n"; | ||||
|             Catch::cout() << oss.str() << wrapper << "\n"; | ||||
|         } | ||||
|         std::cout << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl; | ||||
|         Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl; | ||||
|         return tagCounts.size(); | ||||
|     } | ||||
|  | ||||
|     inline std::size_t listReporters( Config const& /*config*/ ) { | ||||
|         std::cout << "Available reports:\n"; | ||||
|         Catch::cout() << "Available reports:\n"; | ||||
|         IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); | ||||
|         IReporterRegistry::FactoryMap::const_iterator itBegin = factories.begin(), itEnd = factories.end(), it; | ||||
|         std::size_t maxNameLen = 0; | ||||
| @@ -151,13 +151,13 @@ namespace Catch { | ||||
|                                                         .setInitialIndent( 0 ) | ||||
|                                                         .setIndent( 7+maxNameLen ) | ||||
|                                                         .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) ); | ||||
|             std::cout << "  " | ||||
|             Catch::cout() << "  " | ||||
|                     << it->first | ||||
|                     << ":" | ||||
|                     << std::string( maxNameLen - it->first.size() + 2, ' ' ) | ||||
|                     << wrapper << "\n"; | ||||
|         } | ||||
|         std::cout << std::endl; | ||||
|         Catch::cout() << std::endl; | ||||
|         return factories.size(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -262,8 +262,8 @@ namespace Catch { | ||||
|                 Timer timer; | ||||
|                 timer.start(); | ||||
|                 if( m_reporter->getPreferences().shouldRedirectStdOut ) { | ||||
|                     StreamRedirect coutRedir( std::cout, redirectedCout ); | ||||
|                     StreamRedirect cerrRedir( std::cerr, redirectedCerr ); | ||||
|                     StreamRedirect coutRedir( Catch::cout(), redirectedCout ); | ||||
|                     StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr ); | ||||
|                     invokeActiveTestCase(); | ||||
|                 } | ||||
|                 else { | ||||
|   | ||||
| @@ -28,6 +28,9 @@ namespace Catch { | ||||
|     private: | ||||
|         bool isOwned; | ||||
|     }; | ||||
|  | ||||
|     std::ostream& cout(); | ||||
|     std::ostream& cerr(); | ||||
| } | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_STREAM_H_INCLUDED | ||||
|   | ||||
| @@ -15,6 +15,7 @@ | ||||
|  | ||||
| #include <stdexcept> | ||||
| #include <cstdio> | ||||
| #include <iostream> | ||||
|  | ||||
| namespace Catch { | ||||
|  | ||||
| @@ -78,6 +79,15 @@ namespace Catch { | ||||
|             isOwned = false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement this functions | ||||
|     std::ostream& cout() { | ||||
|         return std::cout; | ||||
|     } | ||||
|     std::ostream& cerr() { | ||||
|         return std::cerr; | ||||
|     } | ||||
| #endif | ||||
| } | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED | ||||
|   | ||||
| @@ -73,7 +73,7 @@ namespace Catch { | ||||
|         } | ||||
|         catch( std::exception& ex ) { | ||||
|             Colour colourGuard( Colour::Red ); | ||||
|             std::cerr << ex.what() << std::endl; | ||||
|             Catch::cerr() << ex.what() << std::endl; | ||||
|             exit(1); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -36,13 +36,13 @@ namespace Catch { | ||||
|         if( isReservedTag( tag ) ) { | ||||
|             { | ||||
|                 Colour colourGuard( Colour::Red ); | ||||
|                 std::cerr | ||||
|                 Catch::cerr() | ||||
|                     << "Tag name [" << tag << "] not allowed.\n" | ||||
|                     << "Tag names starting with non alpha-numeric characters are reserved\n"; | ||||
|             } | ||||
|             { | ||||
|                 Colour colourGuard( Colour::FileName ); | ||||
|                 std::cerr << _lineInfo << std::endl; | ||||
|                 Catch::cerr() << _lineInfo << std::endl; | ||||
|             } | ||||
|             exit(1); | ||||
|         } | ||||
|   | ||||
| @@ -51,7 +51,7 @@ namespace Catch { | ||||
|                 TestCase const& prev = *m_functions.find( testCase ); | ||||
|                 { | ||||
|                     Colour colourGuard( Colour::Red ); | ||||
|                     std::cerr   << "error: TEST_CASE( \"" << name << "\" ) already defined.\n" | ||||
|                     Catch::cerr()   << "error: TEST_CASE( \"" << name << "\" ) already defined.\n" | ||||
|                                 << "\tFirst seen at " << prev.getTestCaseInfo().lineInfo << "\n" | ||||
|                                 << "\tRedefined at " << testCase.getTestCaseInfo().lineInfo << std::endl; | ||||
|                 } | ||||
|   | ||||
| @@ -9,9 +9,9 @@ | ||||
| #define TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED | ||||
|  | ||||
| #include <sstream> | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include <catch_stream.h> | ||||
|  | ||||
| namespace Catch { | ||||
|  | ||||
| @@ -52,7 +52,7 @@ namespace Catch { | ||||
|         XmlWriter() | ||||
|         :   m_tagIsOpen( false ), | ||||
|             m_needsNewline( false ), | ||||
|             m_os( &std::cout ) | ||||
|             m_os( &Catch::cout() ) | ||||
|         {} | ||||
|  | ||||
|         XmlWriter( std::ostream& os ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash