X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dc7f9c9cee113d6359ce2b280e69ccde1d616bd6..f321d0bc0caf4d78ccc5426e926fc25c46297439:/tests/controls/comboboxtest.cpp?ds=inline diff --git a/tests/controls/comboboxtest.cpp b/tests/controls/comboboxtest.cpp index 82678cc1e4..e811f4a086 100644 --- a/tests/controls/comboboxtest.cpp +++ b/tests/controls/comboboxtest.cpp @@ -13,6 +13,8 @@ #include "testprec.h" +#if wxUSE_COMBOBOX + #ifdef __BORLANDC__ #pragma hdrstop #endif @@ -23,12 +25,15 @@ #endif // WX_PRECOMP #include "textentrytest.h" +#include "itemcontainertest.h" +#include "testableframe.h" // ---------------------------------------------------------------------------- // test class // ---------------------------------------------------------------------------- -class ComboBoxTestCase : public TextEntryTestCase +class ComboBoxTestCase : public TextEntryTestCase, public ItemContainerTestCase, + public CppUnit::TestCase { public: ComboBoxTestCase() { } @@ -40,6 +45,9 @@ private: virtual wxTextEntry *GetTestEntry() const { return m_combo; } virtual wxWindow *GetTestWindow() const { return m_combo; } + virtual wxItemContainer *GetContainer() const { return m_combo; } + virtual wxWindow *GetContainerWindow() const { return m_combo; } + virtual void CheckStringSelection(const char * WXUNUSED(sel)) { // do nothing here, as explained in TextEntryTestCase comment, our @@ -49,8 +57,20 @@ private: CPPUNIT_TEST_SUITE( ComboBoxTestCase ); wxTEXT_ENTRY_TESTS(); + wxITEM_CONTAINER_TESTS(); + CPPUNIT_TEST( Size ); + CPPUNIT_TEST( PopDismiss ); + CPPUNIT_TEST( Sort ); + CPPUNIT_TEST( ReadOnly ); + CPPUNIT_TEST( IsEmpty ); CPPUNIT_TEST_SUITE_END(); + void Size(); + void PopDismiss(); + void Sort(); + void ReadOnly(); + void IsEmpty(); + wxComboBox *m_combo; DECLARE_NO_COPY_CLASS(ComboBoxTestCase) @@ -59,7 +79,7 @@ private: // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( ComboBoxTestCase ); -// 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( ComboBoxTestCase, "ComboBoxTestCase" ); // ---------------------------------------------------------------------------- @@ -81,3 +101,119 @@ void ComboBoxTestCase::tearDown() // tests themselves // ---------------------------------------------------------------------------- +void ComboBoxTestCase::Size() +{ + // under MSW changing combobox size is a non-trivial operation because of + // confusion between the size of the control with and without dropdown, so + // check that it does work as expected + + const int heightOrig = m_combo->GetSize().y; + + // check that the height doesn't change if we don't touch it + m_combo->SetSize(100, -1); + CPPUNIT_ASSERT_EQUAL( heightOrig, m_combo->GetSize().y ); + + // check that setting both big and small (but not too small, there is a + // limit on how small the control can become under MSW) heights works + m_combo->SetSize(-1, 50); + CPPUNIT_ASSERT_EQUAL( 50, m_combo->GetSize().y ); + + m_combo->SetSize(-1, 10); + CPPUNIT_ASSERT_EQUAL( 10, m_combo->GetSize().y ); + + // and also that restoring it works (this used to be broken before 2.9.1) + m_combo->SetSize(-1, heightOrig); + CPPUNIT_ASSERT_EQUAL( heightOrig, m_combo->GetSize().y ); +} + +void ComboBoxTestCase::PopDismiss() +{ +#if defined(__WXMSW__) || defined(__WXGTK210__) + EventCounter drop(m_combo, wxEVT_COMMAND_COMBOBOX_DROPDOWN); + EventCounter close(m_combo, wxEVT_COMMAND_COMBOBOX_CLOSEUP); + + m_combo->Popup(); + m_combo->Dismiss(); + + CPPUNIT_ASSERT_EQUAL(1, drop.GetCount()); + CPPUNIT_ASSERT_EQUAL(1, close.GetCount()); +#endif +} + +void ComboBoxTestCase::Sort() +{ +#if !defined(__WXOSX__) + m_combo = new wxComboBox(wxTheApp->GetTopWindow(), wxID_ANY, "", + wxDefaultPosition, wxDefaultSize, 0, NULL, + wxCB_SORT); + + m_combo->Append("aaa"); + m_combo->Append("Aaa"); + m_combo->Append("aba"); + m_combo->Append("aaab"); + m_combo->Append("aab"); + m_combo->Append("AAA"); + + CPPUNIT_ASSERT_EQUAL("AAA", m_combo->GetString(0)); + CPPUNIT_ASSERT_EQUAL("Aaa", m_combo->GetString(1)); + CPPUNIT_ASSERT_EQUAL("aaa", m_combo->GetString(2)); + CPPUNIT_ASSERT_EQUAL("aaab", m_combo->GetString(3)); + CPPUNIT_ASSERT_EQUAL("aab", m_combo->GetString(4)); + CPPUNIT_ASSERT_EQUAL("aba", m_combo->GetString(5)); + + m_combo->Append("a"); + + CPPUNIT_ASSERT_EQUAL("a", m_combo->GetString(0)); +#endif +} + +void ComboBoxTestCase::ReadOnly() +{ +#ifndef __WXOSX__ + wxArrayString testitems; + testitems.Add("item 1"); + testitems.Add("item 2"); + + m_combo = new wxComboBox(wxTheApp->GetTopWindow(), wxID_ANY, "", + wxDefaultPosition, wxDefaultSize, testitems, + wxCB_READONLY); + + m_combo->SetValue("item 1"); + + CPPUNIT_ASSERT_EQUAL("item 1", m_combo->GetValue()); + + m_combo->SetValue("not an item"); + + CPPUNIT_ASSERT_EQUAL("item 1", m_combo->GetValue()); + + // Since this uses FindString it is case insensitive + m_combo->SetValue("ITEM 2"); + + CPPUNIT_ASSERT_EQUAL("item 2", m_combo->GetValue()); +#endif +} + +void ComboBoxTestCase::IsEmpty() +{ + CPPUNIT_ASSERT( m_combo->IsListEmpty() ); + CPPUNIT_ASSERT( m_combo->IsTextEmpty() ); + + m_combo->Append("foo"); + CPPUNIT_ASSERT( !m_combo->IsListEmpty() ); + CPPUNIT_ASSERT( m_combo->IsTextEmpty() ); + + m_combo->SetValue("bar"); + CPPUNIT_ASSERT( !m_combo->IsListEmpty() ); + CPPUNIT_ASSERT( !m_combo->IsTextEmpty() ); + + m_combo->Clear(); + CPPUNIT_ASSERT( m_combo->IsListEmpty() ); + CPPUNIT_ASSERT( m_combo->IsTextEmpty() ); + +#ifdef TEST_INVALID_COMBOBOX_ISEMPTY + // Compiling this should fail, see failtest target definition in test.bkl. + m_combo->IsEmpty(); +#endif +} + +#endif //wxUSE_COMBOBOX