X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0468a58a4b32a075ded69e2a7d0e9746e283cfbe..f46e6a1ef9541a3d13c38a114870658d3b4e004b:/tests/controls/listctrltest.cpp diff --git a/tests/controls/listctrltest.cpp b/tests/controls/listctrltest.cpp index 8ad9e972a3..fb0e74f3ac 100644 --- a/tests/controls/listctrltest.cpp +++ b/tests/controls/listctrltest.cpp @@ -5,6 +5,7 @@ // Created: 2008-11-26 // RCS-ID: $Id$ // Copyright: (c) 2008 Vadim Zeitlin +// (c) 2010 Steven Lamerton /////////////////////////////////////////////////////////////////////////////// // ---------------------------------------------------------------------------- @@ -13,6 +14,8 @@ #include "testprec.h" +#if wxUSE_LISTCTRL + #ifdef __BORLANDC__ #pragma hdrstop #endif @@ -22,12 +25,15 @@ #endif // WX_PRECOMP #include "wx/listctrl.h" +#include "listbasetest.h" +#include "testableframe.h" +#include "wx/uiaction.h" // ---------------------------------------------------------------------------- // test class // ---------------------------------------------------------------------------- -class ListCtrlTestCase : public CppUnit::TestCase +class ListCtrlTestCase : public ListBaseTestCase, public CppUnit::TestCase { public: ListCtrlTestCase() { } @@ -35,18 +41,23 @@ public: virtual void setUp(); virtual void tearDown(); + virtual wxListCtrl *GetList() const { return m_list; } + private: CPPUNIT_TEST_SUITE( ListCtrlTestCase ); -#ifdef wxHAS_LISTCTRL_COLUMN_ORDER - CPPUNIT_TEST( ColumnsOrder ); -#endif // wxHAS_LISTCTRL_COLUMN_ORDER - CPPUNIT_TEST( ItemRect ); + wxLIST_BASE_TESTS(); + CPPUNIT_TEST( EditLabel ); + WXUISIM_TEST( ColumnClick ); + WXUISIM_TEST( ColumnDrag ); CPPUNIT_TEST_SUITE_END(); -#ifdef wxHAS_LISTCTRL_COLUMN_ORDER - void ColumnsOrder(); -#endif // wxHAS_LISTCTRL_COLUMN_ORDER - void ItemRect(); + void EditLabel(); +#if wxUSE_UIACTIONSIMULATOR + // Column events are only supported in wxListCtrl currently so we test them + // here rather than in ListBaseTest + void ColumnClick(); + void ColumnDrag(); +#endif // wxUSE_UIACTIONSIMULATOR wxListCtrl *m_list; @@ -56,7 +67,7 @@ private: // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( ListCtrlTestCase ); -// 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( ListCtrlTestCase, "ListCtrlTestCase" ); // ---------------------------------------------------------------------------- @@ -67,6 +78,7 @@ void ListCtrlTestCase::setUp() { m_list = new wxListCtrl(wxTheApp->GetTopWindow()); m_list->SetWindowStyle(wxLC_REPORT); + m_list->SetSize(400, 200); } void ListCtrlTestCase::tearDown() @@ -75,102 +87,71 @@ void ListCtrlTestCase::tearDown() m_list = NULL; } -// ---------------------------------------------------------------------------- -// the tests themselves -// ---------------------------------------------------------------------------- - -#ifdef wxHAS_LISTCTRL_COLUMN_ORDER +void ListCtrlTestCase::EditLabel() +{ + m_list->InsertColumn(0, "Column 0"); + m_list->InsertItem(0, "foo"); + m_list->EditLabel(0); +} -void ListCtrlTestCase::ColumnsOrder() +#if wxUSE_UIACTIONSIMULATOR +void ListCtrlTestCase::ColumnDrag() { - static const int NUM_COLS; - int n; - wxListItem li; - li.SetMask(wxLIST_MASK_TEXT); + EventCounter begindrag(m_list, wxEVT_LIST_COL_BEGIN_DRAG); + EventCounter dragging(m_list, wxEVT_LIST_COL_DRAGGING); + EventCounter enddrag(m_list, wxEVT_LIST_COL_END_DRAG); - // first set up some columns m_list->InsertColumn(0, "Column 0"); m_list->InsertColumn(1, "Column 1"); m_list->InsertColumn(2, "Column 2"); + m_list->Update(); + m_list->SetFocus(); - // and a couple of test items too - m_list->InsertItem(0, "Item 0"); - m_list->SetItem(0, 1, "first in first"); + wxUIActionSimulator sim; - m_list->InsertItem(1, "Item 1"); - m_list->SetItem(1, 2, "second in second"); + wxPoint pt = m_list->ClientToScreen(wxPoint(m_list->GetColumnWidth(0), 5)); + sim.MouseMove(pt); + wxYield(); - // check that the order is natural in the beginning - const wxArrayInt orderOrig = m_list->GetColumnsOrder(); - for ( n = 0; n < NUM_COLS; n++ ) - CPPUNIT_ASSERT_EQUAL( n, orderOrig[n] ); + sim.MouseDown(); + wxYield(); - // then rearrange them: using { 2, 0, 1 } order means that column 2 is - // shown first, then column 0 and finally column 1 - wxArrayInt order(3); - order[0] = 2; - order[1] = 0; - order[2] = 1; - m_list->SetColumnsOrder(order); + sim.MouseMove(pt.x + 50, pt.y); + wxYield(); - // check that we get back the same order as we set - const wxArrayInt orderNew = m_list->GetColumnsOrder(); - for ( n = 0; n < NUM_COLS; n++ ) - CPPUNIT_ASSERT_EQUAL( order[n], orderNew[n] ); + sim.MouseUp(); + wxYield(); - // and the order -> index mappings for individual columns - for ( n = 0; n < NUM_COLS; n++ ) - CPPUNIT_ASSERT_EQUAL( order[n], m_list->GetColumnIndexFromOrder(n) ); + CPPUNIT_ASSERT_EQUAL(1, begindrag.GetCount()); + CPPUNIT_ASSERT(dragging.GetCount() > 0); + CPPUNIT_ASSERT_EQUAL(1, enddrag.GetCount()); - // and also the reverse mapping - CPPUNIT_ASSERT_EQUAL( 1, m_list->GetColumnOrder(0) ); - CPPUNIT_ASSERT_EQUAL( 2, m_list->GetColumnOrder(1) ); - CPPUNIT_ASSERT_EQUAL( 0, m_list->GetColumnOrder(2) ); - - - // finally check that accessors still use indices, not order - CPPUNIT_ASSERT( m_list->GetColumn(0, li) ); - CPPUNIT_ASSERT_EQUAL( "Column 0", li.GetText() ); - - li.SetId(0); - li.SetColumn(1); - CPPUNIT_ASSERT( m_list->GetItem(li) ); - CPPUNIT_ASSERT_EQUAL( "first in first", li.GetText() ); - - li.SetId(1); - li.SetColumn(2); - CPPUNIT_ASSERT( m_list->GetItem(li) ); - CPPUNIT_ASSERT_EQUAL( "second in second", li.GetText() ); + m_list->ClearAll(); } -void ListCtrlTestCase::ItemRect() +void ListCtrlTestCase::ColumnClick() { - // set up for the test - m_list->InsertColumn(0, "Column 0", wxLIST_FORMAT_LEFT, 60); - m_list->InsertColumn(1, "Column 1", wxLIST_FORMAT_LEFT, 50); - m_list->InsertColumn(2, "Column 2", wxLIST_FORMAT_LEFT, 40); + EventCounter colclick(m_list, wxEVT_LIST_COL_CLICK); + EventCounter colrclick(m_list, wxEVT_LIST_COL_RIGHT_CLICK); + - m_list->InsertItem(0, "Item 0"); - m_list->SetItem(0, 1, "first column"); - m_list->SetItem(0, 1, "second column"); + m_list->InsertColumn(0, "Column 0", wxLIST_FORMAT_LEFT, 60); - // do test - wxRect r; - CPPUNIT_ASSERT( !m_list->GetItemRect(1, r) ); - CPPUNIT_ASSERT( m_list->GetItemRect(0, r) ); - CPPUNIT_ASSERT_EQUAL( 150, r.GetWidth() ); + wxUIActionSimulator sim; - CPPUNIT_ASSERT( m_list->GetSubItemRect(0, 0, r) ); - CPPUNIT_ASSERT_EQUAL( 60, r.GetWidth() ); + sim.MouseMove(m_list->ClientToScreen(wxPoint(4, 4))); + wxYield(); - CPPUNIT_ASSERT( m_list->GetSubItemRect(0, 1, r) ); - CPPUNIT_ASSERT_EQUAL( 50, r.GetWidth() ); + sim.MouseClick(); + sim.MouseClick(wxMOUSE_BTN_RIGHT); + wxYield(); - CPPUNIT_ASSERT( m_list->GetSubItemRect(0, 2, r) ); - CPPUNIT_ASSERT_EQUAL( 40, r.GetWidth() ); + CPPUNIT_ASSERT_EQUAL(1, colclick.GetCount()); + CPPUNIT_ASSERT_EQUAL(1, colrclick.GetCount()); - WX_ASSERT_FAILS_WITH_ASSERT( m_list->GetSubItemRect(0, 3, r) ); + m_list->ClearAll(); } +#endif // wxUSE_UIACTIONSIMULATOR -#endif // wxHAS_LISTCTRL_COLUMN_ORDER +#endif // wxUSE_LISTCTRL