mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-08-17 17:02:51 +08:00
During the switch from copy to move ctor of wxListCtrl in a5777cdcbd
(Make wxListItemData movable and not copyable, 2023-01-19) copying the
item text was simply lost, resulting in items forgetting their text when
they were moved internally by the vector in which they are stored, which
could result in e.g. their text becoming empty when a new column was
appended.
Fix this by adding the missing text (and also image and user data) field
to the move ctor and move assignment operator.
Closes #25519.
124 lines
2.8 KiB
C++
124 lines
2.8 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/controls/listviewtest.cpp
|
|
// Purpose: wxListView unit test
|
|
// Author: Steven Lamerton
|
|
// Created: 2010-07-10
|
|
// Copyright: (c) 2010 Steven Lamerton
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "testprec.h"
|
|
|
|
#if wxUSE_LISTCTRL
|
|
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/app.h"
|
|
#endif // WX_PRECOMP
|
|
|
|
#include "wx/listctrl.h"
|
|
#include "listbasetest.h"
|
|
#include "testableframe.h"
|
|
|
|
class ListViewTestCase : public ListBaseTestCase
|
|
{
|
|
public:
|
|
ListViewTestCase();
|
|
virtual ~ListViewTestCase() override;
|
|
|
|
virtual wxListCtrl *GetList() const override { return m_list; }
|
|
|
|
protected:
|
|
wxListView *m_list;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(ListViewTestCase);
|
|
};
|
|
|
|
ListViewTestCase::ListViewTestCase()
|
|
{
|
|
m_list = new wxListView(wxTheApp->GetTopWindow());
|
|
m_list->SetWindowStyle(wxLC_REPORT);
|
|
m_list->SetSize(400, 200);
|
|
}
|
|
|
|
ListViewTestCase::~ListViewTestCase()
|
|
{
|
|
DeleteTestWindow(m_list);
|
|
}
|
|
|
|
wxLIST_BASE_TESTS(ListView, "[listctrl][listview]")
|
|
|
|
TEST_CASE_METHOD(ListViewTestCase, "ListView::Selection", "[listctrl][listview]")
|
|
{
|
|
m_list->InsertColumn(0, "Column 0");
|
|
|
|
m_list->InsertItem(0, "Item 0");
|
|
m_list->InsertItem(1, "Item 1");
|
|
m_list->InsertItem(2, "Item 2");
|
|
m_list->InsertItem(3, "Item 3");
|
|
|
|
m_list->Select(0);
|
|
m_list->Select(2);
|
|
m_list->Select(3);
|
|
|
|
CHECK(m_list->IsSelected(0));
|
|
CHECK(!m_list->IsSelected(1));
|
|
|
|
long sel = m_list->GetFirstSelected();
|
|
|
|
CHECK( sel == 0 );
|
|
|
|
sel = m_list->GetNextSelected(sel);
|
|
|
|
CHECK( sel == 2 );
|
|
|
|
sel = m_list->GetNextSelected(sel);
|
|
|
|
CHECK( sel == 3 );
|
|
|
|
sel = m_list->GetNextSelected(sel);
|
|
|
|
CHECK( sel == -1 );
|
|
|
|
m_list->Select(0, false);
|
|
|
|
CHECK(!m_list->IsSelected(0));
|
|
CHECK( m_list->GetFirstSelected() == 2 );
|
|
}
|
|
|
|
TEST_CASE_METHOD(ListViewTestCase, "ListView::Focus", "[listctrl][listview]")
|
|
{
|
|
EventCounter focused(m_list, wxEVT_LIST_ITEM_FOCUSED);
|
|
|
|
m_list->InsertColumn(0, "Column 0");
|
|
|
|
m_list->InsertItem(0, "Item 0");
|
|
m_list->InsertItem(1, "Item 1");
|
|
m_list->InsertItem(2, "Item 2");
|
|
m_list->InsertItem(3, "Item 3");
|
|
|
|
CHECK( focused.GetCount() == 0 );
|
|
CHECK( m_list->GetFocusedItem() == -1 );
|
|
|
|
m_list->Focus(0);
|
|
|
|
CHECK( focused.GetCount() == 1 );
|
|
CHECK( m_list->GetFocusedItem() == 0 );
|
|
}
|
|
|
|
TEST_CASE_METHOD(ListViewTestCase, "ListView::AppendColumn", "[listctrl][listview]")
|
|
{
|
|
m_list->AppendColumn("Column 0");
|
|
m_list->AppendColumn("Column 1");
|
|
|
|
m_list->InsertItem(0, "First item");
|
|
m_list->SetItem(0, 1, "First subitem");
|
|
|
|
// Appending a column shouldn't change the existing items.
|
|
m_list->AppendColumn("Column 2");
|
|
|
|
CHECK( m_list->GetItemText(0) == "First item" );
|
|
CHECK( m_list->GetItemText(0, 1) == "First subitem" );
|
|
}
|
|
|
|
#endif
|