]> git.saurik.com Git - wxWidgets.git/commitdiff
Tests for wxTEST_DIALOG and wx/testing.h.
authorVáclav Slavík <vslavik@fastmail.fm>
Thu, 1 Nov 2012 16:45:14 +0000 (16:45 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Thu, 1 Nov 2012 16:45:14 +0000 (16:45 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72838 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

tests/controls/dialogtest.cpp [new file with mode: 0644]

diff --git a/tests/controls/dialogtest.cpp b/tests/controls/dialogtest.cpp
new file mode 100644 (file)
index 0000000..12f5833
--- /dev/null
@@ -0,0 +1,125 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        tests/controls/dialogtest.cpp
+// Purpose:     wxWindow unit test
+// Author:      Vaclav Slavik
+// Created:     2012-08-30
+// RCS-ID:      $Id$
+// Copyright:   (c) 2012 Vaclav Slavik
+///////////////////////////////////////////////////////////////////////////////
+
+#include "testprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#include "wx/testing.h"
+
+#ifdef wxHAS_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 );
+        CPPUNIT_TEST( MessageDialog );
+        CPPUNIT_TEST( FileDialog );
+        CPPUNIT_TEST( CustomDialog );
+    CPPUNIT_TEST_SUITE_END();
+
+    void MessageDialog();
+    void FileDialog();
+    void CustomDialog();
+
+    DECLARE_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<wxMessageDialog>(wxNO),
+        wxExpectModal<wxFileDialog>(wxGetCwd() + "/test.txt").Optional()
+    );
+
+    CPPUNIT_ASSERT_EQUAL(wxNO, rc);
+}
+
+void ModalDialogsTestCase::FileDialog()
+{
+    wxFileDialog dlg(NULL);
+    int rc;
+
+    wxTEST_DIALOG
+    (
+        rc = dlg.ShowModal(),
+        wxExpectModal<wxFileDialog>(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<MyDialog> : public wxExpectModalBase<MyDialog>
+{
+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<MyDialog>(42)
+    );
+
+    CPPUNIT_ASSERT_EQUAL( 42, dlg.m_value );
+}
+
+#endif // wxHAS_VARIADIC_MACROS