TestAssert.h
Go to the documentation of this file.00001
#ifndef CPPUNIT_TESTASSERT_H
00002
#define CPPUNIT_TESTASSERT_H
00003
00004
#include <cppunit/Portability.h>
00005
#include <cppunit/Exception.h>
00006
#include <cppunit/Asserter.h>
00007
00008
00009
CPPUNIT_NS_BEGIN
00010
00011
00035
template <
class T>
00036 struct assertion_traits
00037 {
00038 static bool equal(
const T& x,
const T& y )
00039 {
00040
return x == y;
00041 }
00042
00043 static std::string
toString(
const T& x )
00044 {
00045 OStringStream ost;
00046 ost << x;
00047
return ost.str();
00048 }
00049 };
00050
00051
00056
template <
class T>
00057 void assertEquals(
const T& expected,
00058
const T& actual,
00059
SourceLine sourceLine,
00060
const std::string &message )
00061 {
00062
if ( !
assertion_traits<T>::equal(expected,actual) )
00063 {
00064 Asserter::failNotEqual(
assertion_traits<T>::toString(expected),
00065
assertion_traits<T>::toString(actual),
00066 sourceLine,
00067 message );
00068 }
00069 }
00070
00075
void CPPUNIT_API
assertDoubleEquals(
double expected,
00076
double actual,
00077
double delta,
00078
SourceLine sourceLine );
00079
00080
00081
00082
00083
00084
00085
00086
#if CPPUNIT_HAVE_CPP_SOURCE_ANNOTATION
00087
00090 #define CPPUNIT_ASSERT(condition) \
00091
( CPPUNIT_NS::Asserter::failIf( !(condition), \
00092
CPPUNIT_NS::Message( "assertion failed", \
00093
"Expression: " #condition), \
00094
CPPUNIT_SOURCELINE() ) )
00095
#else
00096
#define CPPUNIT_ASSERT(condition) \
00097
( CPPUNIT_NS::Asserter::failIf( !(condition), \
00098
CPPUNIT_NS::Message( "assertion failed" ), \
00099
CPPUNIT_SOURCELINE() ) )
00100
#endif
00101
00109 #define CPPUNIT_ASSERT_MESSAGE(message,condition) \
00110
( CPPUNIT_NS::Asserter::failIf( !(condition), \
00111
(message), \
00112
CPPUNIT_SOURCELINE() ) )
00113
00118 #define CPPUNIT_FAIL( message ) \
00119
( CPPUNIT_NS::Asserter::fail( CPPUNIT_NS::Message( "forced failure", \
00120
message ), \
00121
CPPUNIT_SOURCELINE() ) )
00122
00123
#ifdef CPPUNIT_ENABLE_SOURCELINE_DEPRECATED
00124
00125
#define CPPUNIT_ASSERT_EQUAL(expected,actual) \
00126
( CPPUNIT_NS::assertEquals( (expected), \
00127
(actual), \
00128
__LINE__, __FILE__ ) )
00129
#else
00130
00146 #define CPPUNIT_ASSERT_EQUAL(expected,actual) \
00147
( CPPUNIT_NS::assertEquals( (expected), \
00148
(actual), \
00149
CPPUNIT_SOURCELINE(), \
00150
"" ) )
00151
00170 #define CPPUNIT_ASSERT_EQUAL_MESSAGE(message,expected,actual) \
00171
( CPPUNIT_NS::assertEquals( (expected), \
00172
(actual), \
00173
CPPUNIT_SOURCELINE(), \
00174
(message) ) )
00175
#endif
00176
00180 #define CPPUNIT_ASSERT_DOUBLES_EQUAL(expected,actual,delta) \
00181
( CPPUNIT_NS::assertDoubleEquals( (expected), \
00182
(actual), \
00183
(delta), \
00184
CPPUNIT_SOURCELINE() ) )
00185
00186
00195 # define CPPUNIT_ASSERT_THROW( expression, ExceptionType ) \
00196
do { \
00197
bool cpputExceptionThrown_ = false; \
00198
try { \
00199
expression; \
00200
} catch ( const ExceptionType & ) { \
00201
cpputExceptionThrown_ = true; \
00202
} \
00203
\
00204
if ( cpputExceptionThrown_ ) \
00205
break; \
00206
\
00207
CPPUNIT_NS::Asserter::fail( \
00208
"Expected exception: " #ExceptionType \
00209
" not thrown.", \
00210
CPPUNIT_SOURCELINE() ); \
00211
} while ( false )
00212
00213
00214
00215
#if CPPUNIT_USE_TYPEINFO_NAME
00216
#define CPPUNIT_EXTRACT_EXCEPTION_TYPE_( exception, no_rtti_message ) \
00217
CPPUNIT_NS::TypeInfoHelper::getClassName( typeid(exception) )
00218
#else
00219 #define CPPUNIT_EXTRACT_EXCEPTION_TYPE_( exception, no_rtti_message ) \
00220
std::string( no_rtti_message )
00221
#endif // CPPUNIT_USE_TYPEINFO_NAME
00222
00232 # define CPPUNIT_ASSERT_NO_THROW( expression ) \
00233
try { \
00234
expression; \
00235
} catch ( const std::exception &e ) { \
00236
CPPUNIT_NS::Message message( "Unexpected exception caught" ); \
00237
message.addDetail( "Type: " + \
00238
CPPUNIT_EXTRACT_EXCEPTION_TYPE_( e, \
00239
"std::exception or derived" ) ); \
00240
message.addDetail( std::string("What: ") + e.what() ); \
00241
CPPUNIT_NS::Asserter::fail( message, \
00242
CPPUNIT_SOURCELINE() ); \
00243
} catch ( ... ) { \
00244
CPPUNIT_NS::Asserter::fail( "Unexpected exception caught", \
00245
CPPUNIT_SOURCELINE() ); \
00246
}
00247
00256 # define CPPUNIT_ASSERT_ASSERTION_FAIL( assertion ) \
00257
CPPUNIT_ASSERT_THROW( assertion, CPPUNIT_NS::Exception )
00258
00259
00268 # define CPPUNIT_ASSERT_ASSERTION_PASS( assertion ) \
00269
CPPUNIT_ASSERT_NO_THROW( assertion )
00270
00271
00272
00273
00274
00275
00276
#if CPPUNIT_ENABLE_NAKED_ASSERT
00277
00278
#undef assert
00279
#define assert(c) CPPUNIT_ASSERT(c)
00280
#define assertEqual(e,a) CPPUNIT_ASSERT_EQUAL(e,a)
00281
#define assertDoublesEqual(e,a,d) CPPUNIT_ASSERT_DOUBLES_EQUAL(e,a,d)
00282
#define assertLongsEqual(e,a) CPPUNIT_ASSERT_EQUAL(e,a)
00283
00284
#endif
00285
00286
00287
CPPUNIT_NS_END
00288
00289
#endif // CPPUNIT_TESTASSERT_H