| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  Created by Phil on 31/10/2010. | 
					
						
							|  |  |  |  *  Copyright 2010 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_RUNNER_HPP_INCLUDED
 | 
					
						
							|  |  |  | #define TWOBLUECUBES_CATCH_RUNNER_HPP_INCLUDED
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-13 07:46:10 +01:00
										 |  |  | #include "internal/catch_commandline.hpp"
 | 
					
						
							|  |  |  | #include "internal/catch_list.hpp"
 | 
					
						
							|  |  |  | #include "internal/catch_runner_impl.hpp"
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  | #include "internal/catch_test_spec.h"
 | 
					
						
							| 
									
										
										
										
											2012-11-15 22:15:41 +00:00
										 |  |  | #include "internal/catch_version.h"
 | 
					
						
							| 
									
										
										
										
											2012-08-13 07:46:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-31 22:07:47 +00:00
										 |  |  | #include <fstream>
 | 
					
						
							| 
									
										
										
										
											2011-02-04 09:30:36 +00:00
										 |  |  | #include <stdlib.h>
 | 
					
						
							| 
									
										
										
										
											2011-03-15 22:41:27 +00:00
										 |  |  | #include <limits>
 | 
					
						
							| 
									
										
										
										
											2010-12-31 22:07:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-16 15:02:51 +01:00
										 |  |  | namespace Catch { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |     class Runner2 { // This will become Runner when Runner becomes Context
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public: | 
					
						
							|  |  |  |         Runner2( Config& configWrapper ) | 
					
						
							|  |  |  |         :   m_configWrapper( configWrapper ), | 
					
						
							|  |  |  |             m_config( configWrapper.data() ) | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2012-09-26 18:36:58 +01:00
										 |  |  |             openStream(); | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |             makeReporter(); | 
					
						
							| 
									
										
										
										
											2012-07-17 08:04:19 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Totals runTests() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             std::vector<TestCaseFilters> filterGroups = m_config.filters; | 
					
						
							|  |  |  |             if( filterGroups.empty() ) { | 
					
						
							|  |  |  |                 TestCaseFilters filterGroup( "" ); | 
					
						
							|  |  |  |                 filterGroups.push_back( filterGroup ); | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             Runner context( m_configWrapper, m_reporter ); // This Runner will be renamed Context
 | 
					
						
							|  |  |  |             Totals totals; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             std::vector<TestCaseFilters>::const_iterator it = filterGroups.begin(); | 
					
						
							|  |  |  |             std::vector<TestCaseFilters>::const_iterator itEnd = filterGroups.end(); | 
					
						
							| 
									
										
										
										
											2012-11-25 21:43:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-07 17:52:35 +01:00
										 |  |  |             for(; it != itEnd && !context.aborting(); ++it ) { | 
					
						
							| 
									
										
										
										
											2012-11-30 09:13:27 +00:00
										 |  |  |                 context.testGroupStarting( it->getName() ); | 
					
						
							| 
									
										
										
										
											2012-08-31 18:46:13 +01:00
										 |  |  |                 totals += runTestsForGroup( context, *it ); | 
					
						
							| 
									
										
										
										
											2012-11-30 09:13:27 +00:00
										 |  |  |                 context.testGroupEnded( it->getName(), totals ); | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |             } | 
					
						
							|  |  |  |             return totals; | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-08-13 19:27:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |         Totals runTestsForGroup( Runner& context, const TestCaseFilters& filterGroup ) { | 
					
						
							|  |  |  |             Totals totals; | 
					
						
							| 
									
										
										
										
											2012-11-22 19:17:20 +00:00
										 |  |  |             std::vector<TestCase>::const_iterator it = getRegistryHub().getTestCaseRegistry().getAllTests().begin(); | 
					
						
							|  |  |  |             std::vector<TestCase>::const_iterator itEnd = getRegistryHub().getTestCaseRegistry().getAllTests().end(); | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |             int testsRunForGroup = 0; | 
					
						
							|  |  |  |             for(; it != itEnd; ++it ) { | 
					
						
							|  |  |  |                 if( filterGroup.shouldInclude( *it ) ) { | 
					
						
							|  |  |  |                     testsRunForGroup++; | 
					
						
							|  |  |  |                     if( m_testsAlreadyRun.find( *it ) == m_testsAlreadyRun.end() ) { | 
					
						
							| 
									
										
										
										
											2012-08-13 19:27:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |                         if( context.aborting() ) | 
					
						
							|  |  |  |                             break; | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |                         totals += context.runTest( *it ); | 
					
						
							|  |  |  |                         m_testsAlreadyRun.insert( *it ); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if( testsRunForGroup == 0 ) | 
					
						
							|  |  |  |                 std::cerr << "\n[No test cases matched with: " << filterGroup.getName() << "]" << std::endl; | 
					
						
							|  |  |  |             return totals; | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-08-13 19:27:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |     private: | 
					
						
							| 
									
										
										
										
											2012-09-26 18:36:58 +01:00
										 |  |  |         void openStream() { | 
					
						
							|  |  |  |             if( !m_config.stream.empty() ) | 
					
						
							|  |  |  |                 m_configWrapper.useStream( m_config.stream ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |             // Open output file, if specified
 | 
					
						
							|  |  |  |             if( !m_config.outputFilename.empty() ) { | 
					
						
							|  |  |  |                 m_ofs.open( m_config.outputFilename.c_str() ); | 
					
						
							|  |  |  |                 if( m_ofs.fail() ) { | 
					
						
							|  |  |  |                     std::ostringstream oss; | 
					
						
							|  |  |  |                     oss << "Unable to open file: '" << m_config.outputFilename << "'"; | 
					
						
							|  |  |  |                     throw std::domain_error( oss.str() ); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 m_configWrapper.setStreamBuf( m_ofs.rdbuf() ); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         void makeReporter() { | 
					
						
							|  |  |  |             std::string reporterName = m_config.reporter.empty() | 
					
						
							|  |  |  |             ? "basic" | 
					
						
							|  |  |  |             : m_config.reporter; | 
					
						
							| 
									
										
										
										
											2012-08-13 19:27:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-26 23:28:00 +00:00
										 |  |  |             ReporterConfig reporterConfig( m_configWrapper.stream(), m_config ); | 
					
						
							| 
									
										
										
										
											2012-08-13 19:27:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |             m_reporter = getRegistryHub().getReporterRegistry().create( reporterName, reporterConfig ); | 
					
						
							|  |  |  |             if( !m_reporter ) { | 
					
						
							|  |  |  |                 std::ostringstream oss; | 
					
						
							|  |  |  |                 oss << "No reporter registered with name: '" << reporterName << "'"; | 
					
						
							|  |  |  |                 throw std::domain_error( oss.str() ); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-05-25 08:52:05 +01:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |     private: | 
					
						
							|  |  |  |         Config& m_configWrapper; | 
					
						
							|  |  |  |         const ConfigData& m_config; | 
					
						
							|  |  |  |         std::ofstream m_ofs; | 
					
						
							| 
									
										
										
										
											2012-11-30 19:15:23 +00:00
										 |  |  |         Ptr<IStreamingReporter> m_reporter; | 
					
						
							| 
									
										
										
										
											2012-11-22 19:17:20 +00:00
										 |  |  |         std::set<TestCase> m_testsAlreadyRun; | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     inline int Main( Config& configWrapper ) { | 
					
						
							|  |  |  |         int result = 0; | 
					
						
							|  |  |  |         try | 
					
						
							| 
									
										
										
										
											2012-05-25 08:52:05 +01:00
										 |  |  |         { | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |             Runner2 runner( configWrapper ); | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |             const ConfigData& config = configWrapper.data(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // Handle list request
 | 
					
						
							|  |  |  |             if( config.listSpec != List::None ) { | 
					
						
							|  |  |  |                 List( config ); | 
					
						
							| 
									
										
										
										
											2012-09-21 18:44:22 +01:00
										 |  |  |                 Catch::cleanUp(); | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |                 return 0; | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             result = static_cast<int>( runner.runTests().assertions.failed ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-08-23 20:08:50 +01:00
										 |  |  |         catch( std::exception& ex ) { | 
					
						
							|  |  |  |             std::cerr << ex.what() << std::endl; | 
					
						
							|  |  |  |             result = (std::numeric_limits<int>::max)(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-06 20:16:53 +01:00
										 |  |  |         Catch::cleanUp(); | 
					
						
							| 
									
										
										
										
											2012-05-21 18:52:09 +01:00
										 |  |  |         return result; | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-03-21 12:36:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-31 19:40:26 +01:00
										 |  |  |     inline void showUsage( std::ostream& os ) { | 
					
						
							| 
									
										
										
										
											2012-08-27 12:19:07 +01:00
										 |  |  |         AllOptions options; | 
					
						
							| 
									
										
										
										
											2012-09-07 17:52:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-27 12:19:07 +01:00
										 |  |  |         for( AllOptions::const_iterator it = options.begin(); it != options.end(); ++it ) { | 
					
						
							|  |  |  |             OptionParser& opt = **it; | 
					
						
							|  |  |  |             os << "  " << opt.optionNames() << " " << opt.argsSynopsis() << "\n"; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-08-27 21:42:55 +01:00
										 |  |  |         os << "\nFor more detail usage please see: https://github.com/philsquared/Catch/wiki/Command-line\n" << std::endl; | 
					
						
							| 
									
										
										
										
											2012-05-31 19:40:26 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-09-07 17:52:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     inline void addIndent( std::ostream& os, std::size_t indent ) { | 
					
						
							|  |  |  |         while( indent-- > 0 ) | 
					
						
							|  |  |  |             os << ' '; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     inline void recursivelyWrapLine( std::ostream& os, std::string paragraph, std::size_t columns, std::size_t indent ) { | 
					
						
							|  |  |  |         std::size_t width = columns-indent; | 
					
						
							|  |  |  |         std::size_t tab = 0; | 
					
						
							|  |  |  |         std::size_t wrapPoint = width; | 
					
						
							|  |  |  |         for( std::size_t pos = 0; pos < paragraph.size(); ++pos ) { | 
					
						
							|  |  |  |             if( pos == width ) { | 
					
						
							|  |  |  |                 addIndent( os, indent ); | 
					
						
							|  |  |  |                 os << paragraph.substr( 0, wrapPoint ) << "\n"; | 
					
						
							|  |  |  |                 return recursivelyWrapLine( os, paragraph.substr( wrapPoint+1 ), columns, indent+tab ); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if( paragraph[pos] == '\t' ) { | 
					
						
							|  |  |  |                     tab = pos; | 
					
						
							|  |  |  |                     paragraph = paragraph.substr( 0, tab ) + paragraph.substr( tab+1 ); | 
					
						
							|  |  |  |                     pos--; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             else if( paragraph[pos] == ' ' ) { | 
					
						
							|  |  |  |                 wrapPoint = pos; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         addIndent( os, indent ); | 
					
						
							|  |  |  |         os << paragraph << "\n"; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-09-09 11:25:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-07 17:52:35 +01:00
										 |  |  |     inline std::string addLineBreaks( const std::string& str, std::size_t columns, std::size_t indent = 0 ) { | 
					
						
							|  |  |  |         std::ostringstream oss; | 
					
						
							|  |  |  |         std::string::size_type pos = 0; | 
					
						
							|  |  |  |         std::string::size_type newline = str.find_first_of( '\n' ); | 
					
						
							|  |  |  |         while( newline != std::string::npos ) { | 
					
						
							|  |  |  |             std::string paragraph = str.substr( pos, newline-pos ); | 
					
						
							|  |  |  |             recursivelyWrapLine( oss, paragraph, columns, indent ); | 
					
						
							|  |  |  |             pos = newline+1; | 
					
						
							|  |  |  |             newline = str.find_first_of( '\n', pos ); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-09-09 11:25:02 +01:00
										 |  |  |         if( pos != str.size() ) | 
					
						
							|  |  |  |             recursivelyWrapLine( oss, str.substr( pos, str.size()-pos ), columns, indent ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-07 17:52:35 +01:00
										 |  |  |         return oss.str(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     inline void showHelp( const CommandParser& parser ) { | 
					
						
							|  |  |  |         AllOptions options; | 
					
						
							|  |  |  |         Options::HelpOptionParser helpOpt; | 
					
						
							|  |  |  |         bool displayedSpecificOption = false; | 
					
						
							|  |  |  |         for( AllOptions::const_iterator it = options.begin(); it != options.end(); ++it ) { | 
					
						
							|  |  |  |             OptionParser& opt = **it; | 
					
						
							|  |  |  |             if( opt.find( parser ) && opt.optionNames() != helpOpt.optionNames() ) { | 
					
						
							|  |  |  |                 displayedSpecificOption = true; | 
					
						
							|  |  |  |                 std::cout   << "\n" << opt.optionNames() << " " << opt.argsSynopsis() << "\n\n" | 
					
						
							|  |  |  |                             << opt.optionSummary() << "\n\n" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 << addLineBreaks( opt.optionDescription(), 80, 2 ) << "\n" << std::endl; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if( !displayedSpecificOption ) { | 
					
						
							| 
									
										
										
										
											2012-12-01 23:42:47 +00:00
										 |  |  |             std::cout   << "\nCATCH v"    << libraryVersion.majorVersion << "." | 
					
						
							|  |  |  |                                         << libraryVersion.minorVersion << " build " | 
					
						
							|  |  |  |                                         << libraryVersion.buildNumber; | 
					
						
							|  |  |  |             if( libraryVersion.branchName != "master" ) | 
					
						
							|  |  |  |                 std::cout << " (" << libraryVersion.branchName << " branch)"; | 
					
						
							| 
									
										
										
										
											2012-11-15 22:15:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-19 19:59:10 +00:00
										 |  |  |             std::cout << "\n\n" << parser.exeName() << " is a CATCH host application. Options are as follows:\n\n"; | 
					
						
							| 
									
										
										
										
											2012-09-07 17:52:35 +01:00
										 |  |  |             showUsage( std::cout ); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2011-03-21 12:36:21 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2012-05-16 15:02:51 +01:00
										 |  |  |     inline int Main( int argc, char* const argv[], Config& config ) { | 
					
						
							| 
									
										
										
										
											2012-06-08 08:22:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             CommandParser parser( argc, argv ); | 
					
						
							| 
									
										
										
										
											2012-08-25 21:26:05 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-27 12:19:07 +01:00
										 |  |  |             if( Command cmd = Options::HelpOptionParser().find( parser ) ) { | 
					
						
							| 
									
										
										
										
											2012-06-08 08:22:56 +01:00
										 |  |  |                 if( cmd.argsCount() != 0 ) | 
					
						
							|  |  |  |                     cmd.raiseError( "Does not accept arguments" ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-07 17:52:35 +01:00
										 |  |  |                 showHelp( parser ); | 
					
						
							| 
									
										
										
										
											2012-08-06 20:16:53 +01:00
										 |  |  |                 Catch::cleanUp();         | 
					
						
							| 
									
										
										
										
											2012-06-08 08:22:56 +01:00
										 |  |  |                 return 0; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2012-08-27 12:19:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             AllOptions options; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-25 21:26:05 +01:00
										 |  |  |             options.parseIntoConfig( parser, config.data() ); | 
					
						
							| 
									
										
										
										
											2012-06-08 08:22:56 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |         catch( std::exception& ex ) { | 
					
						
							| 
									
										
										
										
											2012-07-23 08:24:52 +01:00
										 |  |  |             std::cerr << ex.what() << "\n\nUsage: ...\n\n"; | 
					
						
							| 
									
										
										
										
											2012-05-31 19:40:26 +01:00
										 |  |  |             showUsage( std::cerr ); | 
					
						
							| 
									
										
										
										
											2012-08-06 20:16:53 +01:00
										 |  |  |             Catch::cleanUp(); | 
					
						
							| 
									
										
										
										
											2011-03-21 12:21:25 +00:00
										 |  |  |             return (std::numeric_limits<int>::max)(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-06-08 08:22:56 +01:00
										 |  |  |                  | 
					
						
							| 
									
										
										
										
											2011-03-21 12:21:25 +00:00
										 |  |  |         return Main( config ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2012-05-16 15:02:51 +01:00
										 |  |  |     inline int Main( int argc, char* const argv[] ) { | 
					
						
							| 
									
										
										
										
											2011-03-21 12:21:25 +00:00
										 |  |  |         Config config; | 
					
						
							| 
									
										
										
										
											2012-05-21 18:52:09 +01:00
										 |  |  | // !TBD: This doesn't always work, for some reason
 | 
					
						
							| 
									
										
										
										
											2011-03-29 08:05:47 +01:00
										 |  |  | //        if( isDebuggerActive() )
 | 
					
						
							|  |  |  | //            config.useStream( "debug" );
 | 
					
						
							| 
									
										
										
										
											2012-05-21 18:52:09 +01:00
										 |  |  |         return Main( argc, argv, config ); | 
					
						
							| 
									
										
										
										
											2011-03-21 12:21:25 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2010-11-09 23:24:00 +00:00
										 |  |  | } // end namespace Catch
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-16 19:02:09 +00:00
										 |  |  | #endif // TWOBLUECUBES_CATCH_RUNNER_HPP_INCLUDED
 |