X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5b105c6ff36e5eeff19a3a00844977477cc728cc..bbd55ff9564dcaf1a5d2ee93d789c4d656baabef:/tests/test.cpp diff --git a/tests/test.cpp b/tests/test.cpp index 84b6b4645c..37626d780b 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -4,7 +4,7 @@ // Author: Mike Wetherell // RCS-ID: $Id$ // Copyright: (c) 2004 Mike Wetherell -// Licence: wxWidgets licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ---------------------------------------------------------------------------- @@ -28,14 +28,16 @@ #ifdef __VISUALC__ #pragma warning(disable:4100) #endif + #include -#ifdef __VISUALC__ - #pragma warning(default:4100) -#endif #include #include #include #include + +#ifdef __VISUALC__ + #pragma warning(default:4100) +#endif #include "wx/afterstd.h" #include "wx/cmdline.h" @@ -76,6 +78,41 @@ struct CrtAssertFailure #endif // wxUSE_VC_CRTDBG +#if wxDEBUG_LEVEL + +static wxString FormatAssertMessage(const wxString& file, + int line, + const wxString& func, + const wxString& cond, + const wxString& msg) +{ + wxString str; + str << "wxWidgets assert: " << cond << " failed " + "at " << file << ":" << line << " in " << func + << " with message '" << msg << "'"; + return str; +} + +static void TestAssertHandler(const wxString& file, + int line, + const wxString& func, + const wxString& cond, + const wxString& msg) +{ + // can't throw from other threads, die immediately + if ( !wxIsMainThread() ) + { + wxPrintf("%s in a worker thread -- aborting.", + FormatAssertMessage(file, line, func, cond, msg)); + fflush(stdout); + _exit(-1); + } + + throw TestAssertFailure(file, line, func, cond, msg); +} + +#endif // wxDEBUG_LEVEL + // this function should only be called from a catch clause static string GetExceptionMessage() { @@ -88,9 +125,8 @@ static string GetExceptionMessage() #if wxDEBUG_LEVEL catch ( TestAssertFailure& e ) { - msg << "wxWidgets assert: " << e.m_cond << " failed " - "at " << e.m_file << ":" << e.m_line << " in " << e.m_func - << " with message '" << e.m_msg << "'"; + msg << FormatAssertMessage(e.m_file, e.m_line, e.m_func, + e.m_cond, e.m_msg); } #endif // wxDEBUG_LEVEL #ifdef wxUSE_VC_CRTDBG @@ -272,19 +308,6 @@ static int TestCrtReportHook(int reportType, char *message, int *) #endif // wxUSE_VC_CRTDBG -#if wxDEBUG_LEVEL - -static void TestAssertHandler(const wxString& file, - int line, - const wxString& func, - const wxString& cond, - const wxString& msg) -{ - throw TestAssertFailure(file, line, func, cond, msg); -} - -#endif // wxDEBUG_LEVEL - int main(int argc, char **argv) { // tests can be ran non-interactively so make sure we don't show any assert @@ -418,7 +441,7 @@ void TestApp::OnInitCmdLine(wxCmdLineParser& parser) "print the test case names, run them", wxCMD_LINE_VAL_NONE, 0 }, { wxCMD_LINE_SWITCH, "t", "timing", - "print names and mesure running time of individual test, run them", + "print names and measure running time of individual test, run them", wxCMD_LINE_VAL_NONE, 0 }, { wxCMD_LINE_OPTION, "", "locale", "locale to use when running the program", @@ -507,8 +530,17 @@ int TestApp::OnRun() if ( m_registries.empty() ) { - // run or list all tests + // run or list all tests which use the CPPUNIT_TEST_SUITE_REGISTRATION() macro + // (i.e. those registered in the "All tests" registry); if there are other + // tests not registered with the CPPUNIT_TEST_SUITE_REGISTRATION() macro + // then they won't be listed/run! AddTest(runner, TestFactoryRegistry::getRegistry().makeTest()); + + if (m_list) + { + cout << "\nNote that the list above is not complete as it doesn't include the \n"; + cout << "tests disabled by default.\n"; + } } else // run only the selected tests {