[ACCEPTED]-wxWidgets: How to initialize wxApp without using macros and without entering the main application loop?-googletest
Just been through this myself with 2.8.10. The 9 magic is this:
// MyWxApp derives from wxApp
wxApp::SetInstance( new MyWxApp() );
wxEntryStart( argc, argv );
wxTheApp->CallOnInit();
// you can create top level-windows here or in OnInit()
...
// do your testing here
wxTheApp->OnRun();
wxTheApp->OnExit();
wxEntryCleanup();
You can just create a wxApp 8 instance rather than deriving your own class 7 using the technique above.
I'm not sure how 6 you expect to do unit testing of your application 5 without entering the mainloop as many wxWidgets 4 components require the delivery of events 3 to function. The usual approach would be 2 to run unit tests after entering the main 1 loop.
IMPLEMENT_APP_NO_MAIN(MyApp);
IMPLEMENT_WX_THEME_SUPPORT;
int main(int argc, char *argv[])
{
wxEntryStart( argc, argv );
wxTheApp->CallOnInit();
wxTheApp->OnRun();
return 0;
}
0
You want to use the function:
bool wxEntryStart(int& argc, wxChar **argv)
instead of 4 wxEntry. It doesn't call your app's OnInit() or 3 run the main loop.
You can call wxTheApp->CallOnInit()
to invoke 2 OnInit() when needed in your tests.
You'll 1 need to use
void wxEntryCleanup()
when you're done.
It looks like doing the tests in the wxApp::OnRun() function 2 can perhaps work. Here's code that tests 1 a dialog's title with cppUnitLite2.
#include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "wx/app.h" // use square braces for wx includes: I made quotes to overcome issue in HTML render #include "wx/Frame.h" #include "../CppUnitLite2\src/CppUnitLite2.h" #include "../CppUnitLite2\src/TestResultStdErr.h" #include "../theAppToBeTested/MyDialog.h" TEST (MyFirstTest) { // The "Hello World" of the test system int a = 102; CHECK_EQUAL (102, a); } TEST (MySecondTest) { MyDialog dlg(NULL); // instantiate a class derived from wxDialog CHECK_EQUAL ("HELLO", dlg.GetTitle()); // Expecting this to fail: title should be "MY DIALOG" } class MyApp: public wxApp { public: virtual bool OnInit(); virtual int OnRun(); }; IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { return true; } int MyApp::OnRun() { fprintf(stderr, "====================== Running App Unit Tests =============================\n"); if ( !wxApp::OnInit() ) return false; TestResultStdErr result; TestRegistry::Instance().Run(result); fprintf(stderr, "====================== Testing end: %ld errors =============================\n", result.FailureCount() ); return result.FailureCount(); }
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.