diff options
| author | Baptiste Lepilleur <gaiacrtn@free.fr> | 2004-06-25 09:41:28 +0000 |
|---|---|---|
| committer | Baptiste Lepilleur <gaiacrtn@free.fr> | 2004-06-25 09:41:28 +0000 |
| commit | 212df8f138166ed053d63d6d54e1a1290e395ae5 (patch) | |
| tree | cadc9e6eaca1d184b7a69a8b389214d966c4ffb6 /include/cppunit | |
| parent | d9353259d7f48a5497e72a257f2a549ba719bc0c (diff) | |
| download | cppunit-212df8f138166ed053d63d6d54e1a1290e395ae5.tar.gz | |
Include/cppunit/Portability.
include/cppunit/Portability.h: moved OStringStream alias definition to
Portability/Stream.h. User need to define EVC4 to indicate that
config-evc4.h should be used. (how to we detect this automatically ?).
Notes that this means it might be needed to add #include <string> to some
headers since its no longer included by Portability.h.
* include/cppunit/Portability/Stream.h: define alias OStringStream, stdCOut(),
and OFileStream. If CPPUNIT_NO_STREAM is defined (evc4 config), then provides
our own implementation (based on sprintf and fwrite).
* include/cppunit/config/config-evc4.h: config file for embedded visual c++ 4.
Still need to detect for this platform in Portability.h (currently relying on
EVC4 being defined...)
* *.[cpp/h]: most source files have been impacted with the following change:
#include <iostream> -> #include <cppunit/Portability/Stream.h>
std::ostream -> CPPUNIT_NS::OStream
std::ofstream -> CPPUNIT_NS::OFileStream
std::cout -> CPPUNIT_NS::stdCOut()
std::endl -> "\n"
Also, code using std::cin as been defined out if CPPUNIT_NO_STREAM was defined.
The exact list of impact files can be obtain in CVS using tags:
TG_CPPUNIT_NO_STREAM_BEFORE & TG_CPPUNIT_NO_STREAM_AFTER.
Diffstat (limited to 'include/cppunit')
| -rw-r--r-- | include/cppunit/CompilerOutputter.h | 8 | ||||
| -rw-r--r-- | include/cppunit/Portability.h | 47 | ||||
| -rw-r--r-- | include/cppunit/TestAssert.h | 1 | ||||
| -rw-r--r-- | include/cppunit/TestPath.h | 1 | ||||
| -rw-r--r-- | include/cppunit/TextOutputter.h | 6 | ||||
| -rw-r--r-- | include/cppunit/TextTestResult.h | 8 | ||||
| -rw-r--r-- | include/cppunit/XmlOutputter.h | 6 | ||||
| -rw-r--r-- | include/cppunit/config/config-evc4.h | 72 | ||||
| -rw-r--r-- | include/cppunit/extensions/TypeInfoHelper.h | 1 | ||||
| -rw-r--r-- | include/cppunit/plugin/DynamicLibraryManager.h | 1 | ||||
| -rw-r--r-- | include/cppunit/plugin/TestPlugInDefaultImpl.h | 2 | ||||
| -rw-r--r-- | include/cppunit/portability/Stream.h | 330 |
12 files changed, 423 insertions, 60 deletions
diff --git a/include/cppunit/CompilerOutputter.h b/include/cppunit/CompilerOutputter.h index e5ca0b3..ef8b67d 100644 --- a/include/cppunit/CompilerOutputter.h +++ b/include/cppunit/CompilerOutputter.h @@ -3,7 +3,7 @@ #include <cppunit/Portability.h> #include <cppunit/Outputter.h> -#include <iostream> +#include <cppunit/Portability/Stream.h> CPPUNIT_NS_BEGIN @@ -64,7 +64,7 @@ public: * \see setLocationFormat(). */ CompilerOutputter( TestResultCollector *result, - std::ostream &stream, + OStream &stream, const std::string &locationFormat = CPPUNIT_COMPILER_LOCATION_FORMAT ); /// Destructor. @@ -100,7 +100,7 @@ public: * Use CompilerOutputter::CompilerOutputter instead. */ static CompilerOutputter *defaultOutputter( TestResultCollector *result, - std::ostream &stream ); + OStream &stream ); void write(); @@ -134,7 +134,7 @@ private: private: TestResultCollector *m_result; - std::ostream &m_stream; + OStream &m_stream; std::string m_locationFormat; int m_wrapColumn; }; diff --git a/include/cppunit/Portability.h b/include/cppunit/Portability.h index 76cc4f2..1d90896 100644 --- a/include/cppunit/Portability.h +++ b/include/cppunit/Portability.h @@ -8,6 +8,8 @@ /* include platform specific config */ #if defined(__BORLANDC__) # include <cppunit/config/config-bcb5.h> +#elif defined( EVC4 ) +# include <cppunit/config/config-evc4.h> #elif defined (_MSC_VER) # include <cppunit/config/config-msvc6.h> #else @@ -165,49 +167,4 @@ # define CPPUNIT_WRAP_COLUMN 79 #endif - -/* perform portability hacks */ - - -/* Define CPPUNIT_SSTREAM as a stream with a "std::string str()" - * method. - */ -#if CPPUNIT_HAVE_SSTREAM -# include <sstream> - CPPUNIT_NS_BEGIN - - typedef std::ostringstream OStringStream; - - CPPUNIT_NS_END -#elif CPPUNIT_HAVE_CLASS_STRSTREAM -# include <string> -# if CPPUNIT_HAVE_STRSTREAM -# include <strstream> -# else // CPPUNIT_HAVE_STRSTREAM -# include <strstream.h> -# endif // CPPUNIT_HAVE_CLASS_STRSTREAM - - CPPUNIT_NS_BEGIN - - class OStringStream : public std::ostrstream - { - public: - std::string str() - { -// (*this) << '\0'; -// std::string msg(std::ostrstream::str()); -// std::ostrstream::freeze(false); -// return msg; -// Alternative implementation that don't rely on freeze which is not -// available on some platforms: - return std::string( std::ostrstream::str(), pcount() ); - } - }; - - CPPUNIT_NS_END -#else // CPPUNIT_HAVE_CLASS_STRSTREAM -# error Cannot define CppUnit::OStringStream. -#endif // CPPUNIT_HAVE_SSTREAM - - #endif // CPPUNIT_PORTABILITY_H diff --git a/include/cppunit/TestAssert.h b/include/cppunit/TestAssert.h index 695ccb5..9e55662 100644 --- a/include/cppunit/TestAssert.h +++ b/include/cppunit/TestAssert.h @@ -4,6 +4,7 @@ #include <cppunit/Portability.h> #include <cppunit/Exception.h> #include <cppunit/Asserter.h> +#include <cppunit/Portability/Stream.h> CPPUNIT_NS_BEGIN diff --git a/include/cppunit/TestPath.h b/include/cppunit/TestPath.h index 12e9de1..c3c851c 100644 --- a/include/cppunit/TestPath.h +++ b/include/cppunit/TestPath.h @@ -9,6 +9,7 @@ #endif #include <cppunit/portability/CppUnitDeque.h> +#include <string> CPPUNIT_NS_BEGIN diff --git a/include/cppunit/TextOutputter.h b/include/cppunit/TextOutputter.h index 767a48e..0a6998b 100644 --- a/include/cppunit/TextOutputter.h +++ b/include/cppunit/TextOutputter.h @@ -3,7 +3,7 @@ #include <cppunit/Portability.h> #include <cppunit/Outputter.h> -#include <iostream> +#include <cppunit/Portability/Stream.h> CPPUNIT_NS_BEGIN @@ -21,7 +21,7 @@ class CPPUNIT_API TextOutputter : public Outputter { public: TextOutputter( TestResultCollector *result, - std::ostream &stream ); + OStream &stream ); /// Destructor. virtual ~TextOutputter(); @@ -42,7 +42,7 @@ public: protected: TestResultCollector *m_result; - std::ostream &m_stream; + OStream &m_stream; private: /// Prevents the use of the copy constructor. diff --git a/include/cppunit/TextTestResult.h b/include/cppunit/TextTestResult.h index dc666c6..de501dc 100644 --- a/include/cppunit/TextTestResult.h +++ b/include/cppunit/TextTestResult.h @@ -3,7 +3,7 @@ #include <cppunit/TestResult.h> #include <cppunit/TestResultCollector.h> -#include <iostream> +#include <cppunit/Portability/Stream.h> CPPUNIT_NS_BEGIN @@ -25,12 +25,12 @@ public: virtual void addFailure( const TestFailure &failure ); virtual void startTest( Test *test ); - virtual void print( std::ostream &stream ); + virtual void print( OStream &stream ); }; /** insertion operator for easy output */ -CPPUNIT_API std::ostream &operator <<( std::ostream &stream, - TextTestResult &result ); +CPPUNIT_API OStream &operator <<( OStream &stream, + TextTestResult &result ); CPPUNIT_NS_END diff --git a/include/cppunit/XmlOutputter.h b/include/cppunit/XmlOutputter.h index d01968c..b3d0d80 100644 --- a/include/cppunit/XmlOutputter.h +++ b/include/cppunit/XmlOutputter.h @@ -11,7 +11,7 @@ #include <cppunit/Outputter.h> #include <cppunit/portability/CppUnitDeque.h> #include <cppunit/portability/CppUnitMap.h> -#include <iostream> +#include <cppunit/Portability/Stream.h> CPPUNIT_NS_BEGIN @@ -45,7 +45,7 @@ public: * \param encoding Encoding used in the XML file (default is Latin-1). */ XmlOutputter( TestResultCollector *result, - std::ostream &stream, + OStream &stream, std::string encoding = std::string("ISO-8859-1") ); /// Destructor. @@ -131,7 +131,7 @@ protected: typedef CppUnitDeque<XmlOutputterHook *> Hooks; TestResultCollector *m_result; - std::ostream &m_stream; + OStream &m_stream; std::string m_encoding; std::string m_styleSheet; XmlDocument *m_xml; diff --git a/include/cppunit/config/config-evc4.h b/include/cppunit/config/config-evc4.h new file mode 100644 index 0000000..4f8c820 --- /dev/null +++ b/include/cppunit/config/config-evc4.h @@ -0,0 +1,72 @@ +#ifndef _INCLUDE_CPPUNIT_CONFIG_MSVC6_H +#define _INCLUDE_CPPUNIT_CONFIG_MSVC6_H 1 + +#if _MSC_VER > 1000 // VC++ +#pragma warning( disable : 4786 ) // disable warning debug symbol > 255... +#endif // _MSC_VER > 1000 + +#define HAVE_CMATH 1 + +/* include/cppunit/config-msvc6.h. Manually adapted from + include/cppunit/config-auto.h */ + +/* define to 1 if the compiler implements namespaces */ +#ifndef CPPUNIT_HAVE_NAMESPACES +#define CPPUNIT_HAVE_NAMESPACES 1 +#endif + +/* define if library uses std::string::compare(string,pos,n) */ +#ifdef CPPUNIT_FUNC_STRING_COMPARE_STRING_FIRST +#undef CPPUNIT_FUNC_STRING_COMPARE_STRING_FIRST +#endif + +/* Define if you have the <dlfcn.h> header file. */ +#ifdef CPPUNIT_HAVE_DLFCN_H +#undef CPPUNIT_HAVE_DLFCN_H +#endif + +/* define to 1 if the compiler implements namespaces */ +#ifndef CPPUNIT_HAVE_NAMESPACES +#define CPPUNIT_HAVE_NAMESPACES 1 +#endif + +/* define if the compiler supports Run-Time Type Identification */ +#ifndef CPPUNIT_HAVE_RTTI +#define CPPUNIT_HAVE_RTTI 0 +#endif + +/* Define to 1 to use type_info::name() for class names */ +#ifndef CPPUNIT_USE_TYPEINFO_NAME +#define CPPUNIT_USE_TYPEINFO_NAME CPPUNIT_HAVE_RTTI +#endif + +#define CPPUNIT_NO_STREAM 1 + +#define CPPUNIT_HAVE_SSTREAM 1 + +/* Name of package */ +#ifndef CPPUNIT_PACKAGE +#define CPPUNIT_PACKAGE "cppunit" +#endif + + +// Compiler error location format for CompilerOutputter +// See class CompilerOutputter for format. +#undef CPPUNIT_COMPILER_LOCATION_FORMAT +#if _MSC_VER >= 1300 // VS 7.0 +# define CPPUNIT_COMPILER_LOCATION_FORMAT "%p(%l) : error : " +#else +# define CPPUNIT_COMPILER_LOCATION_FORMAT "%p(%l):" +#endif + +// Uncomment to turn on STL wrapping => use this to test compilation. +// This will make CppUnit subclass std::vector & co to provide default +// parameter. +/*#define CPPUNIT_STD_NEED_ALLOCATOR 1 +#define CPPUNIT_STD_ALLOCATOR std::allocator<T> +//#define CPPUNIT_NO_NAMESPACE 1 +*/ + + +/* _INCLUDE_CPPUNIT_CONFIG_MSVC6_H */ +#endif diff --git a/include/cppunit/extensions/TypeInfoHelper.h b/include/cppunit/extensions/TypeInfoHelper.h index 8dad4f5..c0ecdbc 100644 --- a/include/cppunit/extensions/TypeInfoHelper.h +++ b/include/cppunit/extensions/TypeInfoHelper.h @@ -6,6 +6,7 @@ #if CPPUNIT_HAVE_RTTI #include <typeinfo> +#include <string> CPPUNIT_NS_BEGIN diff --git a/include/cppunit/plugin/DynamicLibraryManager.h b/include/cppunit/plugin/DynamicLibraryManager.h index b93ebad..d70ccde 100644 --- a/include/cppunit/plugin/DynamicLibraryManager.h +++ b/include/cppunit/plugin/DynamicLibraryManager.h @@ -2,6 +2,7 @@ #define CPPUNIT_PLUGIN_DYNAMICLIBRARYMANAGER_H #include <cppunit/Portability.h> +#include <string> #if !defined(CPPUNIT_NO_TESTPLUGIN) diff --git a/include/cppunit/plugin/TestPlugInDefaultImpl.h b/include/cppunit/plugin/TestPlugInDefaultImpl.h index f22d781..fa4b807 100644 --- a/include/cppunit/plugin/TestPlugInDefaultImpl.h +++ b/include/cppunit/plugin/TestPlugInDefaultImpl.h @@ -18,7 +18,7 @@ class TestSuite; * * Override getSuiteName() to specify the suite name. Default is "All Tests". * - * CppUnitTestPlugIn::::getTestSuite() returns a suite that contains + * CppUnitTestPlugIn::getTestSuite() returns a suite that contains * all the test registered to the default test factory registry * ( TestFactoryRegistry::getRegistry() ). * diff --git a/include/cppunit/portability/Stream.h b/include/cppunit/portability/Stream.h new file mode 100644 index 0000000..bc85f55 --- /dev/null +++ b/include/cppunit/portability/Stream.h @@ -0,0 +1,330 @@ +#ifndef CPPUNIT_PORTABILITY_STREAM_H_INCLUDED +#define CPPUNIT_PORTABILITY_STREAM_H_INCLUDED + +// This module define: +// Type CppUT::Stream (either std::stream or a custom type) +// Type CppUT::OStringStream (eitjer std::ostringstream, older alternate or a custom type) +// Functions stdCOut() & stdCErr() which returns a reference on cout & cerr stream (or our +// custom stream). + + +#if defined( CPPUNIT_NO_STREAM ) + +#include <string> +#include <stdio.h> +#include <string.h> + +CPPUNIT_NS_BEGIN + +class StreamBuffer +{ +public: + virtual ~StreamBuffer() {} + + virtual void write( const char *text, unsigned int length ) = 0; + + virtual void flush() {} +}; + + +class StringStreamBuffer : public StreamBuffer +{ +public: + std::string str() const + { + return str_; + } + +public: // overridden from StreamBuffer + void write( const char *text, unsigned int length ) + { + str_.append( text, length ); + } + +private: + std::string str_; +}; + + +class FileStreamBuffer : public StreamBuffer +{ +public: + FileStreamBuffer( FILE *file ) + : file_( file ) + { + } + + FILE *file() const + { + return file_; + } + +public: // overridden from StreamBuffer + void write( const char *text, unsigned int length ) + { + if ( file_ ) + fwrite( text, sizeof(char), length, file_ ); + } + + void flush() + { + if ( file_ ) + fflush( file_ ); + } + +private: + FILE *file_; +}; + + +class OStream +{ +public: + OStream() + : buffer_( 0 ) + { + } + + OStream( StreamBuffer *buffer ) + : buffer_( buffer ) + { + } + + virtual ~OStream() + { + } + + void setBuffer( StreamBuffer *buffer ) + { + buffer_ = buffer; + } + + OStream &write( const char *text, unsigned int length ) + { + if ( buffer_ ) + buffer_->write( text, length ); + return *this; + } + + OStream &write( const char *text ) + { + return write( text, strlen(text) ); + } + + OStream &operator <<( bool v ) + { + const char *out = v ? "true" : "false"; + return write( out ); + } + + OStream &operator <<( short v ) + { + char buffer[64]; + sprintf( buffer, "%hd", v ); + return write( buffer ); + } + + OStream &operator <<( unsigned short v ) + { + char buffer[64]; + sprintf( buffer, "%hu", v ); + return write( buffer ); + } + + OStream &operator <<( int v ) + { + char buffer[64]; + sprintf( buffer, "%d", v ); + return write( buffer ); + } + + OStream &operator <<( unsigned int v ) + { + char buffer[64]; + sprintf( buffer, "%u", v ); + return write( buffer ); + } + + OStream &operator <<( long v ) + { + char buffer[64]; + sprintf( buffer, "%ld", v ); + return write( buffer ); + } + + OStream &operator <<( unsigned long v ) + { + char buffer[64]; + sprintf( buffer, "%lu", v ); + return write( buffer ); + } + + OStream &operator <<( float v ) + { + char buffer[128]; + sprintf( buffer, "%f", double(v) ); + return write( buffer ); + } + + OStream &operator <<( double v ) + { + char buffer[128]; + sprintf( buffer, "%f", v ); + return write( buffer ); + } + + OStream &operator <<( long double v ) + { + char buffer[128]; + sprintf( buffer, "%f", double(v) ); + return write( buffer ); + } + + OStream &operator <<( const void *v ) + { + char buffer[64]; + sprintf( buffer, "%p", v ); + return write( buffer ); + } + + OStream &operator <<( char c ) + { + char buffer[16]; + sprintf( buffer, "%c", c ); + return write( buffer ); + } + + OStream &operator <<( const std::string &s ) + { + return write( s.c_str(), s.length() ); + } + +private: + StreamBuffer *buffer_; +}; + + +class OStringStream : public OStream +{ +public: + OStringStream() + : OStream( &buffer_ ) + { + } + + std::string str() const + { + return buffer_.str(); + } + +private: + StringStreamBuffer buffer_; +}; + + +class OFileStream : public OStream +{ +public: + OFileStream( FILE *file ) + : OStream( &buffer_ ) + , buffer_( file ) + , ownFile_( false ) + { + } + + OFileStream( const char *path ) + : OFileStream( &buffer_ ) + , buffer_( fopen( path, "wt" ) ) + , ownFile_( true ) + { + } + + virtual ~OFileStream() + { + if ( ownFile_ && buffer_.file() ) + fclose( file_ ); + } + +private: + FileStreamBuffer buffer_; +}; + +inline OStream &stdCOut() +{ + static OFileStream stream( stdout ); + return stream; +} + +inline OStream &stdCErr() +{ + static OFileStream stream( stderr ); + return stream; +} + +CPPUNIT_NS_END + +#elif CPPUNIT_HAVE_SSTREAM // #if defined( CPPUNIT_NO_STREAM ) +# include <sstream> +# include <fstream> + + CPPUNIT_NS_BEGIN + typedef std::ostringstream OStringStream; // The standard C++ way + typedef std::ofstream OFileStream; + CPPUNIT_NS_END + + +#elif CPPUNIT_HAVE_CLASS_STRSTREAM +# include <string> +# if CPPUNIT_HAVE_STRSTREAM +# include <strstream> +# else // CPPUNIT_HAVE_STRSTREAM +# include <strstream.h> +# endif // CPPUNIT_HAVE_CLASS_STRSTREAM + + CPPUNIT_NS_BEGIN + + class OStringStream : public std::ostrstream + { + public: + std::string str() + { +// (*this) << '\0'; +// std::string msg(std::ostrstream::str()); +// std::ostrstream::freeze(false); +// return msg; +// Alternative implementation that don't rely on freeze which is not +// available on some platforms: + return std::string( std::ostrstream::str(), pcount() ); + } + }; + + CPPUNIT_NS_END +#else // CPPUNIT_HAVE_CLASS_STRSTREAM +# error Cannot define CppUnit::OStringStream. +#endif // #if defined( CPPUNIT_NO_STREAM ) + + + +#if !defined( CPPUNIT_NO_STREAM ) + +#include <iostream> + + CPPUNIT_NS_BEGIN + + typedef std::ostream OStream; + + inline OStream &stdCOut() + { + return std::cout; + } + + inline OStream &stdCErr() + { + return std::cerr; + } + + CPPUNIT_NS_END + +#endif // #if !defined( CPPUNIT_NO_STREAM ) + +#endif // CPPUNIT_PORTABILITY_STREAM_H_INCLUDED |
