X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1de532f57e9a7d25158edb8aed633fb1099a04ea..86ac84b8ce086e6bbda58f422d41f84268606e35:/include/wx/cppunit.h diff --git a/include/wx/cppunit.h b/include/wx/cppunit.h index db93e87aa8..7e10e80a68 100644 --- a/include/wx/cppunit.h +++ b/include/wx/cppunit.h @@ -48,13 +48,25 @@ // #include "wx/beforestd.h" +#ifdef __VISUALC__ + // with cppunit 1.12 we get many bogus warnings 4701 (local variable may be + // used without having been initialized) in TestAssert.h + #pragma warning(disable:4701) +#endif + #include #include #include #include #include + +#ifdef __VISUALC__ + #pragma warning(default:4701) +#endif #include "wx/afterstd.h" +#include "wx/string.h" + /////////////////////////////////////////////////////////////////////////////// // Set of helpful test macros. @@ -87,15 +99,15 @@ CPPUNIT_NS_BEGIN // compare wxStrings directly with C strings inline void assertEquals(const char *expected, - const wxString& actual, + const char *actual, CppUnit::SourceLine sourceLine, const std::string& message) { - assertEquals(wxString(expected), actual, sourceLine, message); + assertEquals(wxString(expected), wxString(actual), sourceLine, message); } inline void -assertEquals(const wchar_t *expected, +assertEquals(const char *expected, const wxString& actual, CppUnit::SourceLine sourceLine, const std::string& message) @@ -103,30 +115,90 @@ assertEquals(const wchar_t *expected, assertEquals(wxString(expected), actual, sourceLine, message); } -// and another to be able to specify (usually literal) ints as expected values -// for functions returning size_t inline void -assertEquals(int expected, - size_t actual, +assertEquals(const wxString& expected, + const char *actual, + CppUnit::SourceLine sourceLine, + const std::string& message) +{ + assertEquals(expected, wxString(actual), sourceLine, message); +} + +inline void +assertEquals(const wchar_t *expected, + const wxString& actual, CppUnit::SourceLine sourceLine, const std::string& message) { - assertEquals(size_t(expected), actual, sourceLine, message); + assertEquals(wxString(expected), actual, sourceLine, message); } -// and another, slightly different, for checking that result of potentially -// different time_t type is the same as given time_t value inline void -assertEquals(time_t expected, - long actual, +assertEquals(const wxString& expected, + const wchar_t *actual, CppUnit::SourceLine sourceLine, const std::string& message) { - assertEquals(expected, time_t(actual), sourceLine, message); + assertEquals(expected, wxString(actual), sourceLine, message); } CPPUNIT_NS_END +// define an assertEquals() overload for the given types, this is a helper and +// shouldn't be used directly because of VC6 complications, see below +#define WX_CPPUNIT_ASSERT_EQUALS(T1, T2) \ + inline void \ + assertEquals(T1 expected, \ + T2 actual, \ + CppUnit::SourceLine sourceLine, \ + const std::string& message) \ + { \ + if ( !assertion_traits::equal(expected,actual) ) \ + { \ + Asserter::failNotEqual( assertion_traits::toString(expected), \ + assertion_traits::toString(actual), \ + sourceLine, \ + message ); \ + } \ + } + +// this macro allows us to specify (usually literal) ints as expected values +// for functions returning integral types different from "int" +// +// FIXME-VC6: due to incorrect resolution of overloaded/template functions in +// this compiler (it basically doesn't use the template version at +// all if any overloaded function matches partially even if none of +// them matches fully) we also need to provide extra overloads + +#ifdef __VISUALC6__ + #define WX_CPPUNIT_ALLOW_EQUALS_TO_INT(T) \ + CPPUNIT_NS_BEGIN \ + WX_CPPUNIT_ASSERT_EQUALS(int, T) \ + WX_CPPUNIT_ASSERT_EQUALS(T, int) \ + WX_CPPUNIT_ASSERT_EQUALS(T, T) \ + CPPUNIT_NS_END + + CPPUNIT_NS_BEGIN + WX_CPPUNIT_ASSERT_EQUALS(int, int) + CPPUNIT_NS_END +#else // !VC6 + #define WX_CPPUNIT_ALLOW_EQUALS_TO_INT(T) \ + CPPUNIT_NS_BEGIN \ + WX_CPPUNIT_ASSERT_EQUALS(int, T) \ + WX_CPPUNIT_ASSERT_EQUALS(T, int) \ + CPPUNIT_NS_END +#endif // VC6/!VC6 + +WX_CPPUNIT_ALLOW_EQUALS_TO_INT(long) +WX_CPPUNIT_ALLOW_EQUALS_TO_INT(short) +WX_CPPUNIT_ALLOW_EQUALS_TO_INT(unsigned) +WX_CPPUNIT_ALLOW_EQUALS_TO_INT(unsigned long) + +#if defined(wxLongLong_t) && !defined(wxLongLongIsLong) +WX_CPPUNIT_ALLOW_EQUALS_TO_INT(wxLongLong_t) +WX_CPPUNIT_ALLOW_EQUALS_TO_INT(unsigned wxLongLong_t) +#endif + // Use this macro to compare a wxArrayString with the pipe-separated elements // of the given string // @@ -149,6 +221,10 @@ CPPUNIT_NS_END #define WX_ASSERT_MESSAGE(msg, cond) \ CPPUNIT_ASSERT_MESSAGE(std::string(wxString::Format msg .mb_str()), (cond)) +#define WX_ASSERT_EQUAL_MESSAGE(msg, expected, actual) \ + CPPUNIT_ASSERT_EQUAL_MESSAGE(std::string(wxString::Format msg .mb_str()), \ + (expected), (actual)) + /////////////////////////////////////////////////////////////////////////////// // define stream inserter for wxString if it's not defined in the main library, // we need it to output the test failures involving wxString @@ -167,6 +243,8 @@ inline std::ostream& operator<<(std::ostream& o, const wxString& s) #endif } +#endif // !wxUSE_STD_IOSTREAM + // VC6 doesn't provide overloads for operator<<(__int64) in its stream classes // so do it ourselves #if defined(__VISUALC6__) && defined(wxLongLong_t) @@ -189,8 +267,6 @@ inline std::ostream& operator<<(std::ostream& ostr, unsigned wxLongLong_t llu) #endif // VC6 && wxLongLong_t -#endif // !wxUSE_STD_IOSTREAM - /////////////////////////////////////////////////////////////////////////////// // Some more compiler warning tweaking and auto linking. //