+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_COMBOBOX_DROPDOWN);
+ EventCounter close(m_combo, wxEVT_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