wxWidgets/tests/controls/rearrangelisttest.cpp

162 lines
4.8 KiB
C++
Raw Normal View History

///////////////////////////////////////////////////////////////////////////////
// Name: tests/controls/rearrangelisttest.cpp
// Purpose: wxRearrangeList unit test
// Author: Steven Lamerton
// Created: 2010-07-05
// RCS-ID: $Id$
// Copyright: (c) 2010 Steven Lamerton
///////////////////////////////////////////////////////////////////////////////
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/app.h"
#endif // WX_PRECOMP
#include "wx/rearrangectrl.h"
#include "itemcontainertest.h"
#include "testableframe.h"
class RearrangeListTestCase : public ItemContainerTestCase, public CppUnit::TestCase
{
public:
RearrangeListTestCase() { }
virtual void setUp();
virtual void tearDown();
private:
virtual wxItemContainer *GetContainer() const { return m_rearrange; }
virtual wxWindow *GetContainerWindow() const { return m_rearrange; }
CPPUNIT_TEST_SUITE( RearrangeListTestCase );
wxITEM_CONTAINER_TESTS();
CPPUNIT_TEST( Move );
CPPUNIT_TEST( MoveClientData );
CPPUNIT_TEST_SUITE_END();
void Move();
void MoveClientData();
wxRearrangeList* m_rearrange;
DECLARE_NO_COPY_CLASS(RearrangeListTestCase)
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( RearrangeListTestCase );
// also include in it's own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RearrangeListTestCase, "RearrangeListTestCase" );
void RearrangeListTestCase::setUp()
{
//We do not add items here as the wxITEM_CONTAINER_TESTS add their own
wxArrayInt order;
wxArrayString items;
m_rearrange = new wxRearrangeList(wxTheApp->GetTopWindow(), wxID_ANY,
wxDefaultPosition, wxDefaultSize, order,
items);
}
void RearrangeListTestCase::tearDown()
{
wxDELETE(m_rearrange);
}
void RearrangeListTestCase::Move()
{
wxArrayInt order;
order.push_back(1);
order.push_back(~2);
order.push_back(0);
wxArrayString items;
items.push_back("first");
items.push_back("second");
items.push_back("third");
wxDELETE(m_rearrange);
m_rearrange = new wxRearrangeList(wxTheApp->GetTopWindow(), wxID_ANY,
wxDefaultPosition, wxDefaultSize, order,
items);
//Confusingly setselection sets the physical item rather than the
//item specified in the constructor
m_rearrange->SetSelection(0);
CPPUNIT_ASSERT(!m_rearrange->CanMoveCurrentUp());
CPPUNIT_ASSERT(m_rearrange->CanMoveCurrentDown());
m_rearrange->SetSelection(1);
CPPUNIT_ASSERT(m_rearrange->CanMoveCurrentUp());
CPPUNIT_ASSERT(m_rearrange->CanMoveCurrentDown());
m_rearrange->SetSelection(2);
CPPUNIT_ASSERT(m_rearrange->CanMoveCurrentUp());
CPPUNIT_ASSERT(!m_rearrange->CanMoveCurrentDown());
m_rearrange->MoveCurrentUp();
m_rearrange->SetSelection(0);
m_rearrange->MoveCurrentDown();
wxArrayInt neworder = m_rearrange->GetCurrentOrder();
CPPUNIT_ASSERT_EQUAL(neworder[0], 0);
CPPUNIT_ASSERT_EQUAL(neworder[1], 1);
CPPUNIT_ASSERT_EQUAL(neworder[2], ~2);
CPPUNIT_ASSERT_EQUAL("first", m_rearrange->GetString(0));
CPPUNIT_ASSERT_EQUAL("second", m_rearrange->GetString(1));
CPPUNIT_ASSERT_EQUAL("third", m_rearrange->GetString(2));
}
void RearrangeListTestCase::MoveClientData()
{
wxArrayInt order;
order.push_back(0);
order.push_back(1);
order.push_back(2);
wxArrayString items;
items.push_back("first");
items.push_back("second");
items.push_back("third");
wxClientData* item0data = new wxStringClientData("item0data");
wxClientData* item1data = new wxStringClientData("item1data");
wxClientData* item2data = new wxStringClientData("item2data");
wxDELETE(m_rearrange);
m_rearrange = new wxRearrangeList(wxTheApp->GetTopWindow(), wxID_ANY,
wxDefaultPosition, wxDefaultSize, order,
items);
m_rearrange->SetClientObject(0, item0data);
m_rearrange->SetClientObject(1, item1data);
m_rearrange->SetClientObject(2, item2data);
m_rearrange->SetSelection(0);
m_rearrange->MoveCurrentDown();
m_rearrange->SetSelection(2);
m_rearrange->MoveCurrentUp();
CPPUNIT_ASSERT_EQUAL(item1data, m_rearrange->GetClientObject(0));
CPPUNIT_ASSERT_EQUAL(item2data, m_rearrange->GetClientObject(1));
CPPUNIT_ASSERT_EQUAL(item0data, m_rearrange->GetClientObject(2));
CPPUNIT_ASSERT_EQUAL("second", m_rearrange->GetString(0));
CPPUNIT_ASSERT_EQUAL("third", m_rearrange->GetString(1));
CPPUNIT_ASSERT_EQUAL("first", m_rearrange->GetString(2));
}