/////////////////////////////////////////////////////////////////////////////// // Name: tests/controls/dialogtest.cpp // Purpose: wxWindow unit test // Author: Vaclav Slavik // Created: 2012-08-30 // Copyright: (c) 2012 Vaclav Slavik /////////////////////////////////////////////////////////////////////////////// #include "testprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "wx/testing.h" #ifdef HAVE_VARIADIC_MACROS #include "wx/msgdlg.h" #include "wx/filedlg.h" // This test suite tests helpers from wx/testing.h intended for testing of code // that calls modal dialogs. It does not test the implementation of wxWidgets' // dialogs. class ModalDialogsTestCase : public CppUnit::TestCase { public: ModalDialogsTestCase() { } private: CPPUNIT_TEST_SUITE( ModalDialogsTestCase ); // wxInfoBar has bug under x11. It will cause the dialog crash // Disable it for now. #if !defined (__WXX11__) CPPUNIT_TEST( MessageDialog ); #endif CPPUNIT_TEST( FileDialog ); CPPUNIT_TEST( CustomDialog ); CPPUNIT_TEST_SUITE_END(); void MessageDialog(); void FileDialog(); void CustomDialog(); wxDECLARE_NO_COPY_CLASS(ModalDialogsTestCase); }; // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( ModalDialogsTestCase ); // also include in its own registry so that these tests can be run alone CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ModalDialogsTestCase, "ModalDialogsTestCase" ); void ModalDialogsTestCase::MessageDialog() { int rc; wxTEST_DIALOG ( rc = wxMessageBox("Should I fail?", "Question", wxYES|wxNO), wxExpectModal(wxNO), wxExpectModal(wxGetCwd() + "/test.txt").Optional() ); CPPUNIT_ASSERT_EQUAL(wxNO, rc); } void ModalDialogsTestCase::FileDialog() { wxFileDialog dlg(NULL); int rc; wxTEST_DIALOG ( rc = dlg.ShowModal(), wxExpectModal(wxGetCwd() + "/test.txt") ); CPPUNIT_ASSERT_EQUAL((int)wxID_OK, rc); CPPUNIT_ASSERT_EQUAL("test.txt", dlg.GetFilename()); } class MyDialog : public wxDialog { public: MyDialog(wxWindow *parent) : wxDialog(parent, wxID_ANY, "Entry"), m_value(-1) { // Dummy. Imagine it's a real dialog that shows some number-entry // controls. } int m_value; }; template<> class wxExpectModal : public wxExpectModalBase { public: wxExpectModal(int valueToSet) : m_valueToSet(valueToSet) {} protected: virtual int OnInvoked(MyDialog *dlg) const { // Simulate the user entering the expected number: dlg->m_value = m_valueToSet; return wxID_OK; } int m_valueToSet; }; void ModalDialogsTestCase::CustomDialog() { MyDialog dlg(NULL); wxTEST_DIALOG ( dlg.ShowModal(), wxExpectModal(42) ); CPPUNIT_ASSERT_EQUAL( 42, dlg.m_value ); } #endif // HAVE_VARIADIC_MACROS