#include "wx/ctrlsub.h"
#endif // WX_PRECOMP
+#include "wx/scopeguard.h"
+
#include "itemcontainertest.h"
void ItemContainerTestCase::Append()
{
wxItemContainer * const container = GetContainer();
- container->Insert("item 0", 0);
-
+ CPPUNIT_ASSERT_EQUAL( 0, container->Insert("item 0", 0) );
CPPUNIT_ASSERT_EQUAL("item 0", container->GetString(0));
wxArrayString testitems;
testitems.Add("item 1");
testitems.Add("item 2");
- container->Insert(testitems, 0);
+ CPPUNIT_ASSERT_EQUAL( 1, container->Insert(testitems, 0) );
CPPUNIT_ASSERT_EQUAL("item 1", container->GetString(0));
CPPUNIT_ASSERT_EQUAL("item 2", container->GetString(1));
wxString arritems[] = { "item 3", "item 4" };
- container->Insert(2, arritems, 1);
-
+ CPPUNIT_ASSERT_EQUAL( 2, container->Insert(2, arritems, 1) );
CPPUNIT_ASSERT_EQUAL("item 3", container->GetString(1));
CPPUNIT_ASSERT_EQUAL("item 4", container->GetString(2));
}
testitems.Add("item 0");
testitems.Add("item 1");
testitems.Add("item 2");
- testitems.Add("item 3");
+ testitems.Add("ITEM 2"); // The same as the last one except for case.
container->Append(testitems);
container->SetSelection(wxNOT_FOUND);
-
CPPUNIT_ASSERT_EQUAL(wxNOT_FOUND, container->GetSelection());
CPPUNIT_ASSERT_EQUAL("", container->GetStringSelection());
container->SetSelection(1);
-
CPPUNIT_ASSERT_EQUAL(1, container->GetSelection());
CPPUNIT_ASSERT_EQUAL("item 1", container->GetStringSelection());
- container->SetStringSelection("item 2");
+ CPPUNIT_ASSERT( container->SetStringSelection("item 2") );
+ CPPUNIT_ASSERT_EQUAL(2, container->GetSelection());
+ CPPUNIT_ASSERT_EQUAL("item 2", container->GetStringSelection());
+
+ // Check that selecting a non-existent item fails.
+ CPPUNIT_ASSERT( !container->SetStringSelection("bloordyblop") );
+ // Check that SetStringSelection() is case-insensitive.
+ CPPUNIT_ASSERT( container->SetStringSelection("ITEM 2") );
CPPUNIT_ASSERT_EQUAL(2, container->GetSelection());
CPPUNIT_ASSERT_EQUAL("item 2", container->GetStringSelection());
}
CPPUNIT_ASSERT_EQUAL(static_cast<wxClientData*>(item2data),
container->GetClientObject(2));
+
+ WX_ASSERT_FAILS_WITH_ASSERT( container->SetClientObject((unsigned)-1, item0data) );
+ WX_ASSERT_FAILS_WITH_ASSERT( container->SetClientObject(12345, item0data) );
}
void ItemContainerTestCase::VoidData()
container->Insert("item 2", 2, item2);
CPPUNIT_ASSERT_EQUAL(item2, container->GetClientData(2));
+
+ WX_ASSERT_FAILS_WITH_ASSERT( container->SetClientData((unsigned)-1, NULL) );
+ WX_ASSERT_FAILS_WITH_ASSERT( container->SetClientData(12345, NULL) );
}
void ItemContainerTestCase::Set()
container->Append(testitems);
+ container->SetSelection(0);
container->SetString(0, "new item 0");
-#ifndef __WXOSX__
- container->SetString(2, "");
-#endif
-
CPPUNIT_ASSERT_EQUAL("new item 0", container->GetString(0));
+
+ // Modifying the item shouldn't deselect it.
+ CPPUNIT_ASSERT_EQUAL(0, container->GetSelection());
+
+ // wxOSX doesn't support having empty items in some containers.
#ifndef __WXOSX__
+ container->SetString(2, "");
CPPUNIT_ASSERT_EQUAL("", container->GetString(2));
#endif
}
+
+void ItemContainerTestCase::SetSelection()
+{
+ wxItemContainer * const container = GetContainer();
+
+ container->Append("first");
+ container->Append("second");
+
+ // This class is used to check that SetSelection() doesn't generate any
+ // events, as documented.
+ class CommandEventHandler : public wxEvtHandler
+ {
+ public:
+ virtual bool ProcessEvent(wxEvent& event)
+ {
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "unexpected command event from SetSelection",
+ !event.IsCommandEvent()
+ );
+
+ return wxEvtHandler::ProcessEvent(event);
+ }
+ } h;
+
+ wxWindow * const win = GetContainerWindow();
+ win->PushEventHandler(&h);
+ wxON_BLOCK_EXIT_OBJ1( *win, wxWindow::PopEventHandler, false );
+
+ container->SetSelection(0);
+ CPPUNIT_ASSERT_EQUAL( 0, container->GetSelection() );
+
+ container->SetSelection(1);
+ CPPUNIT_ASSERT_EQUAL( 1, container->GetSelection() );
+}