00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013 #ifdef __GNUG__
00014 #pragma implementation "WxGuiTestApp.h"
00015 #endif
00016
00017 #include <wxGuiTest/WxGuiTestApp.h>
00018
00019 #include "InitWxGuiTestSetUp.h"
00020 #include <wxGuiTest/WxGuiTestHelper.h>
00021 #include <wxGuiTest/CREventFilterInterface.h>
00022
00023
00024 IMPLEMENT_APP_NO_MAIN(wxTst::WxGuiTestApp)
00025
00026 BEGIN_EVENT_TABLE(wxTst::WxGuiTestApp, wxApp)
00027 EVT_IDLE(wxTst::WxGuiTestApp::OnIdle)
00028 END_EVENT_TABLE()
00029
00030 using namespace wxTst;
00031
00032 wxApp* WxGuiTestApp::ms_instance = NULL;
00033
00034 WxGuiTestApp::WxGuiTestApp (wxApp *appUnderTest) :
00035 m_testRunnerProxy(NULL),
00036 m_appUnderTest(appUnderTest),
00037 m_eventFilter(NULL),
00038 m_idleCtrlFlag(false)
00039 {
00040
00041 wxASSERT_MSG(ms_instance == NULL, _T("WxGuiTestApp constructed twice"));
00042 ms_instance = this;
00043 }
00044
00045
00046 WxGuiTestApp::~WxGuiTestApp ()
00047 {
00048
00049
00050 if (m_eventFilter != NULL) {
00051
00052 delete m_eventFilter;
00053 m_eventFilter = NULL;
00054 }
00055
00056 }
00057
00058 int
00059 WxGuiTestApp::MainLoop ()
00060 {
00061 wxLogTrace (_T("wxGuiTestCallTrace"), _T("WxGuiTestApp::MainLoop"));
00062 int retval;
00063
00064 if (WxGuiTestHelper::GetInteractive ()) {
00065
00066 ::wxLogTrace (_T("wxGuiTestCallTrace"),
00067 _T("WxGuiTestApp::MainLoop: Running platform loop"));
00068 retval = wxApp::MainLoop();
00069 ::wxLogTrace (_T("wxGuiTestCallTrace"),
00070 _T("WxGuiTestApp::MainLoop: Exiting platform loop"));
00071 }
00072 else {
00073
00074
00075
00076 ::wxLogTrace (_T("wxGuiTestCallTrace"),
00077 _T("WxGuiTestApp::MainLoop: Running test loop"));
00078 retval = 0;
00079 ProcessPendingEvents();
00080 ::wxLogTrace (_T("wxGuiTestCallTrace"),
00081 _T("WxGuiTestApp::MainLoop: Exiting test loop"));
00082 }
00083
00084 return retval;
00085
00086 }
00087
00088
00089 wxApp *WxGuiTestApp::GetInstance ()
00090 {
00091 return ms_instance;
00092 }
00093
00094
00095 void WxGuiTestApp::SetInstance (wxApp *app)
00096 {
00097 wxASSERT (app != NULL);
00098
00099 WxGuiTestApp::Nullify ();
00100 ms_instance = app;
00101 }
00102
00103
00104 void WxGuiTestApp::Nullify ()
00105 {
00106 if (ms_instance != NULL) {
00107
00108
00109
00110 ms_instance = NULL;
00111 }
00112 }
00113
00114 int WxGuiTestApp::FilterEvent (wxEvent& event)
00115 {
00116 if (m_eventFilter != NULL) {
00117
00118 m_eventFilter->FilterEvent (event);
00119 }
00120
00121 return -1;
00122 }
00123
00124
00125 void WxGuiTestApp::SetEventFilter (CREventFilterInterface *eventFilter)
00126 {
00127 if ((m_eventFilter != NULL) && (eventFilter != m_eventFilter)) {
00128
00129 delete m_eventFilter;
00130 }
00131 m_eventFilter = eventFilter;
00132 }
00133
00134
00135 void WxGuiTestApp::OnAssert (const wxChar *file, int line,
00136 const wxChar *cond, const wxChar *msg)
00137 {
00138 if (WxGuiTestHelper::GetPopupWarningForFailingAssert ()) {
00139
00140 #ifdef __WXDEBUG__
00141 wxApp::OnAssert (file, line, cond, msg);
00142 #endif // __WXDEBUG__
00143
00144 } else {
00145
00146 wxString failMsg = wxString::Format (_T("Assert \"%s\" failed"), cond);
00147 if (msg != NULL) {
00148
00149 failMsg << _T(": ") << msg;
00150 }
00151
00152 WxGuiTestHelper::AddTestFailure (file, line,
00153 _T("wxWidgets assert failure"), failMsg);
00154
00155 wxTheApp->ExitMainLoop ();
00156 }
00157 }
00158
00159 int WxGuiTestApp::OnRun ()
00160 {
00161 ::wxLogTrace (_T("wxGuiTestCallTrace"), _T("int WxGuiTestApp::OnRun ()"));
00162
00163
00164
00165
00166
00167
00168 if (m_exitOnFrameDelete == Later) {
00169
00170 m_exitOnFrameDelete = Yes;
00171 }
00172
00173
00174 wxASSERT (m_testRunnerProxy);
00175 m_testRunnerProxy->RunAsDecorator ();
00176
00177
00178
00179
00180
00181
00182
00183
00184 if (wxTheApp->GetTopWindow ()) {
00185
00186 wxTheApp->GetTopWindow ()->Close ();
00187 }
00188 return 0;
00189 }
00190
00191
00192 void WxGuiTestApp::SetTestRunnerProxy (InitWxGuiTestSetUp &testRunnerProxy)
00193 {
00194 m_testRunnerProxy = &testRunnerProxy;
00195 }
00196
00197
00198
00199
00200
00201
00202 bool WxGuiTestApp::OnInit ()
00203 {
00204 if (m_appUnderTest != NULL) {
00205
00206
00207
00208
00209 m_appUnderTest->argc = 0;
00210 return m_appUnderTest->OnInit ();
00211
00212 } else {
00213
00214 return wxApp::OnInit ();
00215 }
00216 }
00217
00218 int WxGuiTestApp::OnExit ()
00219 {
00220 if (m_appUnderTest != NULL) {
00221
00222 return m_appUnderTest->OnExit ();
00223
00224 } else {
00225
00226 return wxApp::OnExit ();
00227 }
00228 }
00229