| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  Created by Phil on 17/01/2011. | 
					
						
							|  |  |  |  *  Copyright 2011 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_STREAM_HPP_INCLUDED
 | 
					
						
							|  |  |  | #define TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-28 19:21:14 +01:00
										 |  |  | #include "catch_streambuf.h"
 | 
					
						
							|  |  |  | #include "catch_debugger.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  | #include <stdexcept>
 | 
					
						
							| 
									
										
										
										
											2011-02-02 19:45:59 +00:00
										 |  |  | #include <cstdio>
 | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-15 08:02:36 +01:00
										 |  |  | namespace Catch { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |     template<typename WriterF, size_t bufferSize=256> | 
					
						
							| 
									
										
										
										
											2012-05-15 08:02:36 +01:00
										 |  |  |     class StreamBufImpl : public StreamBufBase { | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |         char data[bufferSize]; | 
					
						
							|  |  |  |         WriterF m_writer; | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |     public: | 
					
						
							| 
									
										
										
										
											2012-05-15 08:02:36 +01:00
										 |  |  |         StreamBufImpl() { | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |             setp( data, data + sizeof(data) ); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2011-02-03 20:00:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-15 08:02:36 +01:00
										 |  |  |         ~StreamBufImpl() { | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |             sync(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |     private: | 
					
						
							| 
									
										
										
										
											2013-03-08 09:26:20 +00:00
										 |  |  |         int overflow( int c ) { | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |             sync(); | 
					
						
							|  |  |  |              | 
					
						
							| 
									
										
										
										
											2012-05-15 08:02:36 +01:00
										 |  |  |             if( c != EOF ) { | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |                 if( pbase() == epptr() ) | 
					
						
							| 
									
										
										
										
											2011-01-31 10:10:20 +00:00
										 |  |  |                     m_writer( std::string( 1, static_cast<char>( c ) ) ); | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |                 else | 
					
						
							| 
									
										
										
										
											2011-02-16 19:02:09 +00:00
										 |  |  |                     sputc( static_cast<char>( c ) ); | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |             }             | 
					
						
							|  |  |  |             return 0; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |          | 
					
						
							| 
									
										
										
										
											2013-03-08 09:26:20 +00:00
										 |  |  |         int sync() { | 
					
						
							| 
									
										
										
										
											2012-05-15 08:02:36 +01:00
										 |  |  |             if( pbase() != pptr() ) { | 
					
						
							| 
									
										
										
										
											2012-05-09 08:17:51 +01:00
										 |  |  |                 m_writer( std::string( pbase(), static_cast<std::string::size_type>( pptr() - pbase() ) ) ); | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |                 setp( pbase(), epptr() ); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             return 0; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2011-02-03 20:00:46 +00:00
										 |  |  |     ///////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-15 08:02:36 +01:00
										 |  |  |     struct OutputDebugWriter { | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2013-04-23 18:58:56 +01:00
										 |  |  |         void operator()( std::string const&str ) { | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  |             writeToDebugConsole( str ); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2012-09-26 18:36:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     class Stream { | 
					
						
							|  |  |  |     public: | 
					
						
							|  |  |  |         Stream() | 
					
						
							|  |  |  |         : streamBuf( NULL ), isOwned( false ) | 
					
						
							|  |  |  |         {} | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         Stream( std::streambuf* _streamBuf, bool _isOwned ) | 
					
						
							|  |  |  |         : streamBuf( _streamBuf ), isOwned( _isOwned ) | 
					
						
							|  |  |  |         {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         void release() { | 
					
						
							|  |  |  |             if( isOwned ) { | 
					
						
							|  |  |  |                 delete streamBuf; | 
					
						
							|  |  |  |                 streamBuf = NULL; | 
					
						
							|  |  |  |                 isOwned = false; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         std::streambuf* streamBuf; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private: | 
					
						
							|  |  |  |         bool isOwned; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-01-18 09:20:06 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-16 19:02:09 +00:00
										 |  |  | #endif // TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED
 |