don't show assert message boxes in debug build but throw an exception if an assert unexpectedly fails; do check that expected asserts are generated

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57459 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2008-12-21 02:28:55 +00:00
parent 6756186271
commit 0468a58a4b
3 changed files with 33 additions and 1 deletions

View File

@ -170,7 +170,7 @@ void ListCtrlTestCase::ItemRect()
CPPUNIT_ASSERT( m_list->GetSubItemRect(0, 2, r) );
CPPUNIT_ASSERT_EQUAL( 40, r.GetWidth() );
CPPUNIT_ASSERT( !m_list->GetSubItemRect(0, 3, r) );
WX_ASSERT_FAILS_WITH_ASSERT( m_list->GetSubItemRect(0, 3, r) );
}
#endif // wxHAS_LISTCTRL_COLUMN_ORDER

View File

@ -92,6 +92,17 @@ public:
virtual int OnRun();
virtual int OnExit();
#ifdef __WXDEBUG__
virtual void OnAssertFailure(const wxChar *,
int,
const wxChar *,
const wxChar *,
const wxChar *)
{
throw TestAssertFailure();
}
#endif // __WXDEBUG__
private:
void List(Test *test, const string& parent = "") const;

View File

@ -6,3 +6,24 @@
(defined(__GNUC__) && (__GNUC__ >= 3))
#define wxHAVE_U_ESCAPE
#endif
// thrown when assert fails in debug build
class TestAssertFailure { };
// macro to use for the functions which are supposed to fail an assertion
#ifdef __WXDEBUG__
// some old cppunit versions don't define CPPUNIT_ASSERT_THROW so roll our
// own
#define WX_ASSERT_FAILS_WITH_ASSERT(cond) \
{ \
bool throwsAssert = false; \
try { cond ; } \
catch ( const TestAssertFailure& ) { throwsAssert = true; } \
if ( !throwsAssert ) \
CPPUNIT_FAIL("expected assertion not generated"); \
}
#else
// there are no assertions in non-debug build so just check that it fails
#define WX_ASSERT_FAILS_WITH_ASSERT(cond) CPPUNIT_ASSERT(!(cond))
#endif