Files
wxWidgets/tests/controls/listviewtest.cpp
T
Vadim Zeitlin 6bc4a1e1de Fix losing text of generic wxListCtrl items when copying them
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.
2025-07-12 04:12:59 +02:00

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