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
00187
00188 #if CPPUNIT_ENABLE_NAKED_ASSERT
00189
00190 #undef assert
00191 #define assert(c) CPPUNIT_ASSERT(c)
00192 #define assertEqual(e,a) CPPUNIT_ASSERT_EQUAL(e,a)
00193 #define assertDoublesEqual(e,a,d) CPPUNIT_ASSERT_DOUBLES_EQUAL(e,a,d)
00194 #define assertLongsEqual(e,a) CPPUNIT_ASSERT_EQUAL(e,a)
00195
00196 #endif
00197
00198
00199 CPPUNIT_NS_END
00200
00201 #endif // CPPUNIT_TESTASSERT_H