summaryrefslogtreecommitdiff
path: root/include/cppunit
diff options
context:
space:
mode:
authorBaptiste Lepilleur <gaiacrtn@free.fr>2004-06-25 09:41:28 +0000
committerBaptiste Lepilleur <gaiacrtn@free.fr>2004-06-25 09:41:28 +0000
commit212df8f138166ed053d63d6d54e1a1290e395ae5 (patch)
treecadc9e6eaca1d184b7a69a8b389214d966c4ffb6 /include/cppunit
parentd9353259d7f48a5497e72a257f2a549ba719bc0c (diff)
downloadcppunit-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.h8
-rw-r--r--include/cppunit/Portability.h47
-rw-r--r--include/cppunit/TestAssert.h1
-rw-r--r--include/cppunit/TestPath.h1
-rw-r--r--include/cppunit/TextOutputter.h6
-rw-r--r--include/cppunit/TextTestResult.h8
-rw-r--r--include/cppunit/XmlOutputter.h6
-rw-r--r--include/cppunit/config/config-evc4.h72
-rw-r--r--include/cppunit/extensions/TypeInfoHelper.h1
-rw-r--r--include/cppunit/plugin/DynamicLibraryManager.h1
-rw-r--r--include/cppunit/plugin/TestPlugInDefaultImpl.h2
-rw-r--r--include/cppunit/portability/Stream.h330
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