2008-11-26 14:11:22 -05:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: tests/controls/listctrltest.cpp
|
|
|
|
// Purpose: wxListCtrl unit test
|
|
|
|
// Author: Vadim Zeitlin
|
|
|
|
// Created: 2008-11-26
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// headers
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#include "testprec.h"
|
|
|
|
|
|
|
|
#ifdef __BORLANDC__
|
|
|
|
#pragma hdrstop
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef WX_PRECOMP
|
|
|
|
#include "wx/app.h"
|
|
|
|
#endif // WX_PRECOMP
|
|
|
|
|
2008-12-12 11:21:49 -05:00
|
|
|
#include "wx/listctrl.h"
|
|
|
|
|
2008-11-26 14:11:22 -05:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// test class
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class ListCtrlTestCase : public CppUnit::TestCase
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ListCtrlTestCase() { }
|
|
|
|
|
|
|
|
virtual void setUp();
|
|
|
|
virtual void tearDown();
|
|
|
|
|
|
|
|
private:
|
|
|
|
CPPUNIT_TEST_SUITE( ListCtrlTestCase );
|
|
|
|
#ifdef wxHAS_LISTCTRL_COLUMN_ORDER
|
|
|
|
CPPUNIT_TEST( ColumnsOrder );
|
|
|
|
#endif // wxHAS_LISTCTRL_COLUMN_ORDER
|
2008-12-20 21:13:58 -05:00
|
|
|
CPPUNIT_TEST( ItemRect );
|
2008-11-26 14:11:22 -05:00
|
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
|
|
|
|
#ifdef wxHAS_LISTCTRL_COLUMN_ORDER
|
|
|
|
void ColumnsOrder();
|
|
|
|
#endif // wxHAS_LISTCTRL_COLUMN_ORDER
|
2008-12-20 21:13:58 -05:00
|
|
|
void ItemRect();
|
2008-11-26 14:11:22 -05:00
|
|
|
|
|
|
|
wxListCtrl *m_list;
|
|
|
|
|
|
|
|
DECLARE_NO_COPY_CLASS(ListCtrlTestCase)
|
|
|
|
};
|
|
|
|
|
|
|
|
// 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
|
|
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ListCtrlTestCase, "ListCtrlTestCase" );
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// test initialization
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void ListCtrlTestCase::setUp()
|
|
|
|
{
|
|
|
|
m_list = new wxListCtrl(wxTheApp->GetTopWindow());
|
2008-12-20 21:13:58 -05:00
|
|
|
m_list->SetWindowStyle(wxLC_REPORT);
|
2008-11-26 14:11:22 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
void ListCtrlTestCase::tearDown()
|
|
|
|
{
|
|
|
|
delete m_list;
|
|
|
|
m_list = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// the tests themselves
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#ifdef wxHAS_LISTCTRL_COLUMN_ORDER
|
|
|
|
|
|
|
|
void ListCtrlTestCase::ColumnsOrder()
|
|
|
|
{
|
|
|
|
static const int NUM_COLS;
|
|
|
|
int n;
|
|
|
|
wxListItem li;
|
|
|
|
li.SetMask(wxLIST_MASK_TEXT);
|
|
|
|
|
|
|
|
// first set up some columns
|
|
|
|
m_list->InsertColumn(0, "Column 0");
|
|
|
|
m_list->InsertColumn(1, "Column 1");
|
|
|
|
m_list->InsertColumn(2, "Column 2");
|
|
|
|
|
|
|
|
// 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");
|
|
|
|
|
|
|
|
|
|
|
|
// 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] );
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
// 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] );
|
|
|
|
|
|
|
|
// and the order -> index mappings for individual columns
|
|
|
|
for ( n = 0; n < NUM_COLS; n++ )
|
|
|
|
CPPUNIT_ASSERT_EQUAL( order[n], m_list->GetColumnIndexFromOrder(n) );
|
|
|
|
|
|
|
|
// 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() );
|
|
|
|
}
|
|
|
|
|
2008-12-20 21:58:41 -05:00
|
|
|
#endif // wxHAS_LISTCTRL_COLUMN_ORDER
|
|
|
|
|
2008-12-20 21:13:58 -05:00
|
|
|
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;
|
2009-01-12 14:34:42 -05:00
|
|
|
WX_ASSERT_FAILS_WITH_ASSERT( m_list->GetItemRect(1, r) );
|
2008-12-20 21:13:58 -05:00
|
|
|
CPPUNIT_ASSERT( m_list->GetItemRect(0, r) );
|
|
|
|
CPPUNIT_ASSERT_EQUAL( 150, r.GetWidth() );
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT( m_list->GetSubItemRect(0, 0, r) );
|
|
|
|
CPPUNIT_ASSERT_EQUAL( 60, r.GetWidth() );
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT( m_list->GetSubItemRect(0, 1, r) );
|
|
|
|
CPPUNIT_ASSERT_EQUAL( 50, r.GetWidth() );
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT( m_list->GetSubItemRect(0, 2, r) );
|
|
|
|
CPPUNIT_ASSERT_EQUAL( 40, r.GetWidth() );
|
|
|
|
|
2008-12-20 21:28:55 -05:00
|
|
|
WX_ASSERT_FAILS_WITH_ASSERT( m_list->GetSubItemRect(0, 3, r) );
|
2008-12-20 21:13:58 -05:00
|
|
|
}
|
|
|
|
|