From 0468a58a4b32a075ded69e2a7d0e9746e283cfbe Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 21 Dec 2008 02:28:55 +0000 Subject: [PATCH] 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 --- tests/controls/listctrltest.cpp | 2 +- tests/test.cpp | 11 +++++++++++ tests/testprec.h | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/tests/controls/listctrltest.cpp b/tests/controls/listctrltest.cpp index e6bb463986..8ad9e972a3 100644 --- a/tests/controls/listctrltest.cpp +++ b/tests/controls/listctrltest.cpp @@ -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 diff --git a/tests/test.cpp b/tests/test.cpp index cc84f27925..9b1f65d065 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -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; diff --git a/tests/testprec.h b/tests/testprec.h index b1799321f1..84edfc45eb 100644 --- a/tests/testprec.h +++ b/tests/testprec.h @@ -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 +