X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/232fdc630c42eb165f7659981043e794be03b3b7..e5354813181461c154044d52a464b29fa1aefaf8:/tests/controls/checkboxtest.cpp

diff --git a/tests/controls/checkboxtest.cpp b/tests/controls/checkboxtest.cpp
index 1e1ba92cc7..c36ea4325b 100644
--- a/tests/controls/checkboxtest.cpp
+++ b/tests/controls/checkboxtest.cpp
@@ -33,13 +33,32 @@ public:
 private:
     CPPUNIT_TEST_SUITE( CheckBoxTestCase );
         CPPUNIT_TEST( Check );
+#ifdef wxHAS_3STATE_CHECKBOX
         CPPUNIT_TEST( ThirdState );
         CPPUNIT_TEST( ThirdStateUser );
+        CPPUNIT_TEST( InvalidStyles );
+#endif // wxHAS_3STATE_CHECKBOX
     CPPUNIT_TEST_SUITE_END();
 
     void Check();
+#ifdef wxHAS_3STATE_CHECKBOX
     void ThirdState();
     void ThirdStateUser();
+    void InvalidStyles();
+#endif // wxHAS_3STATE_CHECKBOX
+
+    // Initialize m_check with a new checkbox with the specified style
+    //
+    // This function always returns false just to make it more convenient to
+    // use inside WX_ASSERT_FAILS_WITH_ASSERT(), its return value doesn't have
+    // any meaning otherwise.
+    bool CreateCheckBox(long style)
+    {
+        m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box",
+                                 wxDefaultPosition, wxDefaultSize, style);
+        return false;
+    }
+
 
     wxCheckBox* m_check;
 
@@ -49,7 +68,7 @@ private:
 // register in the unnamed registry so that these tests are run by default
 CPPUNIT_TEST_SUITE_REGISTRATION( CheckBoxTestCase );
 
-// also include in it's own registry so that these tests can be run alone
+// also include in its own registry so that these tests can be run alone
 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( CheckBoxTestCase, "CheckBoxTestCase" );
 
 void CheckBoxTestCase::setUp()
@@ -64,10 +83,7 @@ void CheckBoxTestCase::tearDown()
 
 void CheckBoxTestCase::Check()
 {
-    wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
-                                          wxTestableFrame);
-
-    EventCounter count(m_check, wxEVT_COMMAND_CHECKBOX_CLICKED);
+    EventCounter clicked(m_check, wxEVT_CHECKBOX);
 
     //We should be unchecked by default
     CPPUNIT_ASSERT(!m_check->IsChecked());
@@ -89,15 +105,14 @@ void CheckBoxTestCase::Check()
     CPPUNIT_ASSERT(!m_check->IsChecked());
 
     //None of these should send events
-    CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount());
+    CPPUNIT_ASSERT_EQUAL(0, clicked.GetCount());
 }
 
+#ifdef wxHAS_3STATE_CHECKBOX
 void CheckBoxTestCase::ThirdState()
 {
-#if !defined(__WXMGL__) && !defined(__WXPM__) && !defined(__WXGTK12__)
     wxDELETE(m_check);
-    m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box",
-                             wxDefaultPosition, wxDefaultSize, wxCHK_3STATE);
+    CreateCheckBox(wxCHK_3STATE);
 
     CPPUNIT_ASSERT_EQUAL(wxCHK_UNCHECKED, m_check->Get3StateValue());
     CPPUNIT_ASSERT(m_check->Is3State());
@@ -110,16 +125,12 @@ void CheckBoxTestCase::ThirdState()
     m_check->Set3StateValue(wxCHK_UNDETERMINED);
 
     CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue());
-#endif
 }
 
 void CheckBoxTestCase::ThirdStateUser()
 {
-#if !defined(__WXMGL__) && !defined(__WXPM__) && !defined(__WXGTK12__)
     wxDELETE(m_check);
-    m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box",
-                             wxDefaultPosition, wxDefaultSize,
-                             wxCHK_3STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER);
+    CreateCheckBox(wxCHK_3STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER);
 
     CPPUNIT_ASSERT_EQUAL(wxCHK_UNCHECKED, m_check->Get3StateValue());
     CPPUNIT_ASSERT(m_check->Is3State());
@@ -132,7 +143,31 @@ void CheckBoxTestCase::ThirdStateUser()
     m_check->Set3StateValue(wxCHK_UNDETERMINED);
 
     CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue());
+}
+
+void CheckBoxTestCase::InvalidStyles()
+{
+    // Check that using incompatible styles doesn't work.
+    wxDELETE( m_check );
+    WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_2STATE | wxCHK_3STATE) );
+#if !wxDEBUG_LEVEL
+    CPPUNIT_ASSERT( !m_check->Is3State() );
+    CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() );
+#endif
+
+    wxDELETE( m_check );
+    WX_ASSERT_FAILS_WITH_ASSERT(
+        CreateCheckBox(wxCHK_2STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER) );
+#if !wxDEBUG_LEVEL
+    CPPUNIT_ASSERT( !m_check->Is3State() );
+    CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() );
 #endif
+
+    // wxCHK_ALLOW_3RD_STATE_FOR_USER without wxCHK_3STATE doesn't work.
+    wxDELETE( m_check );
+    WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_ALLOW_3RD_STATE_FOR_USER) );
 }
 
-#endif //wxUSE_CHECKBOX
+#endif // wxHAS_3STATE_CHECKBOX
+
+#endif // wxUSE_CHECKBOX