#include "wx/wxprec.h"
+#include "wx/cppunit.h"
-#include <string>
-
-// need this to be able to use CPPUNIT_ASSERT_EQUAL with wxString objects
-//
-// NB: at least for VC7.1 the specialization must be done before cppunit
-// headers inclusion as otherwise it's just ignored!
-namespace CppUnit
-{
-
-template <typename T> struct assertion_traits;
+// define wxHAVE_U_ESCAPE if the compiler supports \uxxxx character constants
+#if (defined(__VISUALC__) && (__VISUALC__ >= 1300)) || \
+ (defined(__GNUC__) && (__GNUC__ >= 3))
+ #define wxHAVE_U_ESCAPE
+#endif
-template <>
-struct assertion_traits<wxString>
+// thrown when assert fails in debug build
+class TestAssertFailure
{
- static bool equal(const wxString& s1, const wxString& s2)
- {
- return s1 == s2;
- }
-
- static std::string toString(const wxString& s)
+public:
+ TestAssertFailure(const wxString& file,
+ int line,
+ const wxString& func,
+ const wxString& cond,
+ const wxString& msg)
+ : m_file(file),
+ m_line(line),
+ m_func(func),
+ m_cond(cond),
+ m_msg(msg)
{
- return std::string(s.mb_str());
}
-};
-} // namespace CppUnit
+ const wxString m_file;
+ const int m_line;
+ const wxString m_func;
+ const wxString m_cond;
+ const wxString m_msg;
-#include "wx/cppunit.h"
+ wxDECLARE_NO_ASSIGN_CLASS(TestAssertFailure);
+};
-// define wxHAVE_U_ESCAPE if the compiler supports \uxxxx character constants
-#if (defined(__VISUALC__) && (__VISUALC__ >= 1300)) || \
- (defined(__GNUC__) && (__GNUC__ >= 3))
- #define wxHAVE_U_ESCAPE
+// macro to use for the functions which are supposed to fail an assertion
+#if wxDEBUG_LEVEL
+ // 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 this build so just check that it fails
+ #define WX_ASSERT_FAILS_WITH_ASSERT(cond) CPPUNIT_ASSERT(!(cond))
#endif
-#define CPPUNIT_ASSERT_STR_EQUAL(s1, s2) \
- CPPUNIT_ASSERT_EQUAL( wxString(s1), wxString(s2) )
+// these functions can be used to hook into wxApp event processing and are
+// currently used by the events propagation test
+class WXDLLIMPEXP_FWD_BASE wxEvent;
+
+typedef int (*FilterEventFunc)(wxEvent&);
+typedef bool (*ProcessEventFunc)(wxEvent&);
+extern void SetFilterEventFunc(FilterEventFunc func);
+extern void SetProcessEventFunc(ProcessEventFunc func);