X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0ccc082e2b164170c29929012b12dc81fb35165..a9c153392c132b64cd200a84194095e0db049ea6:/tests/controls/listctrltest.cpp?ds=inline diff --git a/tests/controls/listctrltest.cpp b/tests/controls/listctrltest.cpp index c1920461c9..6bd305c124 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,103 +87,77 @@ 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); + wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(), + wxTestableFrame); + + EventCounter count(m_list, wxEVT_COMMAND_LIST_COL_BEGIN_DRAG); + EventCounter count1(m_list, wxEVT_COMMAND_LIST_COL_DRAGGING); + EventCounter count2(m_list, wxEVT_COMMAND_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"); - - m_list->InsertItem(1, "Item 1"); - m_list->SetItem(1, 2, "second in second"); + wxUIActionSimulator sim; + wxPoint pt = m_list->ClientToScreen(wxPoint(m_list->GetColumnWidth(0), 5)); - // 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.MouseMove(pt); + 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.MouseDown(); + 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.MouseMove(pt.x + 50, pt.y); + 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) ); + sim.MouseUp(); + wxYield(); - // 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) ); + CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG)); + CPPUNIT_ASSERT(frame->GetEventCount(wxEVT_COMMAND_LIST_COL_DRAGGING) > 0); + CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_LIST_COL_END_DRAG)); + m_list->ClearAll(); +} - // 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() ); +void ListCtrlTestCase::ColumnClick() +{ + wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(), + wxTestableFrame); - li.SetId(1); - li.SetColumn(2); - CPPUNIT_ASSERT( m_list->GetItem(li) ); - CPPUNIT_ASSERT_EQUAL( "second in second", li.GetText() ); -} + EventCounter count(m_list, wxEVT_COMMAND_LIST_COL_CLICK); + EventCounter count1(m_list, wxEVT_COMMAND_LIST_COL_RIGHT_CLICK); -#endif // wxHAS_LISTCTRL_COLUMN_ORDER -void ListCtrlTestCase::ItemRect() -{ - // 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); - - m_list->InsertItem(0, "Item 0"); - m_list->SetItem(0, 1, "first column"); - m_list->SetItem(0, 1, "second column"); - // 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, frame->GetEventCount(wxEVT_COMMAND_LIST_COL_CLICK)); + CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK)); - WX_ASSERT_FAILS_WITH_ASSERT( m_list->GetSubItemRect(0, 3, r) ); + m_list->ClearAll(); } +#endif // wxUSE_UIACTIONSIMULATOR +#endif // wxUSE_LISTCTRL