8686ca62e7
Destroying a window with mouse capture results in an assert, which is translated into an exception when running the test suite. As this exception is thrown from wxWindowBase dtor, it results in an immediate program termination when using C++11 and can also have the same effect even when using C++98 if this exception is thrown while already handling another exception due to a test failure. Try to avoid this by using a "safe" DeleteTestWindow() function instead of deleting the window directly. Currently this function ensures that the window doesn't have mouse capture before deleting it, but it could also be used to check for other things later. Also, this commit only uses this function for the two controls which do happen to be destroyed with mouse capture currently (at least when using wxGTK), but it should probably be generalized to all controls in the future.
157 lines
4.0 KiB
C++
157 lines
4.0 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/controls/listctrltest.cpp
|
|
// Purpose: wxListCtrl unit test
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2008-11-26
|
|
// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
// (c) 2010 Steven Lamerton
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "testprec.h"
|
|
|
|
#if wxUSE_LISTCTRL
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/app.h"
|
|
#endif // WX_PRECOMP
|
|
|
|
#include "wx/listctrl.h"
|
|
#include "listbasetest.h"
|
|
#include "testableframe.h"
|
|
#include "wx/uiaction.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// test class
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class ListCtrlTestCase : public ListBaseTestCase, public CppUnit::TestCase
|
|
{
|
|
public:
|
|
ListCtrlTestCase() { }
|
|
|
|
virtual void setUp();
|
|
virtual void tearDown();
|
|
|
|
virtual wxListCtrl *GetList() const { return m_list; }
|
|
|
|
private:
|
|
CPPUNIT_TEST_SUITE( ListCtrlTestCase );
|
|
wxLIST_BASE_TESTS();
|
|
CPPUNIT_TEST( EditLabel );
|
|
WXUISIM_TEST( ColumnClick );
|
|
WXUISIM_TEST( ColumnDrag );
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
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;
|
|
|
|
wxDECLARE_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 its 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());
|
|
m_list->SetWindowStyle(wxLC_REPORT);
|
|
m_list->SetSize(400, 200);
|
|
}
|
|
|
|
void ListCtrlTestCase::tearDown()
|
|
{
|
|
DeleteTestWindow(m_list);
|
|
m_list = NULL;
|
|
}
|
|
|
|
void ListCtrlTestCase::EditLabel()
|
|
{
|
|
m_list->InsertColumn(0, "Column 0");
|
|
m_list->InsertItem(0, "foo");
|
|
m_list->EditLabel(0);
|
|
}
|
|
|
|
#if wxUSE_UIACTIONSIMULATOR
|
|
void ListCtrlTestCase::ColumnDrag()
|
|
{
|
|
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);
|
|
|
|
m_list->InsertColumn(0, "Column 0");
|
|
m_list->InsertColumn(1, "Column 1");
|
|
m_list->InsertColumn(2, "Column 2");
|
|
m_list->Update();
|
|
m_list->SetFocus();
|
|
|
|
wxUIActionSimulator sim;
|
|
|
|
wxPoint pt = m_list->ClientToScreen(wxPoint(m_list->GetColumnWidth(0), 5));
|
|
|
|
sim.MouseMove(pt);
|
|
wxYield();
|
|
|
|
sim.MouseDown();
|
|
wxYield();
|
|
|
|
sim.MouseMove(pt.x + 50, pt.y);
|
|
wxYield();
|
|
|
|
sim.MouseUp();
|
|
wxYield();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, begindrag.GetCount());
|
|
CPPUNIT_ASSERT(dragging.GetCount() > 0);
|
|
CPPUNIT_ASSERT_EQUAL(1, enddrag.GetCount());
|
|
|
|
m_list->ClearAll();
|
|
}
|
|
|
|
void ListCtrlTestCase::ColumnClick()
|
|
{
|
|
EventCounter colclick(m_list, wxEVT_LIST_COL_CLICK);
|
|
EventCounter colrclick(m_list, wxEVT_LIST_COL_RIGHT_CLICK);
|
|
|
|
|
|
m_list->InsertColumn(0, "Column 0", wxLIST_FORMAT_LEFT, 60);
|
|
|
|
wxUIActionSimulator sim;
|
|
|
|
sim.MouseMove(m_list->ClientToScreen(wxPoint(4, 4)));
|
|
wxYield();
|
|
|
|
sim.MouseClick();
|
|
sim.MouseClick(wxMOUSE_BTN_RIGHT);
|
|
wxYield();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, colclick.GetCount());
|
|
CPPUNIT_ASSERT_EQUAL(1, colrclick.GetCount());
|
|
|
|
m_list->ClearAll();
|
|
}
|
|
#endif // wxUSE_UIACTIONSIMULATOR
|
|
|
|
#endif // wxUSE_LISTCTRL
|