From 1f40a7e4e3b25083651aa3fe4d3ac11042e1bf0e Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 12 Oct 2020 17:05:59 +0200 Subject: [PATCH] Document that wxDataViewCtrl::SetSelections() skips invalid items Also add the unit test checking for this. --- interface/wx/dataview.h | 3 +++ tests/controls/dataviewctrltest.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/interface/wx/dataview.h b/interface/wx/dataview.h index 2abf7e778b..76266e4126 100644 --- a/interface/wx/dataview.h +++ b/interface/wx/dataview.h @@ -1675,6 +1675,9 @@ public: /** Sets the selection to the array of wxDataViewItems. + + Note that if @a sel contains any invalid items, they are simply + ignored. */ virtual void SetSelections(const wxDataViewItemArray& sel); diff --git a/tests/controls/dataviewctrltest.cpp b/tests/controls/dataviewctrltest.cpp index 04d0876b33..1f400c8182 100644 --- a/tests/controls/dataviewctrltest.cpp +++ b/tests/controls/dataviewctrltest.cpp @@ -146,6 +146,30 @@ MultiColumnsDataViewCtrlTestCase::~MultiColumnsDataViewCtrlTestCase() // the tests themselves // ---------------------------------------------------------------------------- +TEST_CASE_METHOD(MultiSelectDataViewCtrlTestCase, + "wxDVC::Selection", + "[wxDataViewCtrl][select]") +{ + // Check selection round-trip. + wxDataViewItemArray sel; + sel.push_back(m_child1); + sel.push_back(m_grandchild); + REQUIRE_NOTHROW( m_dvc->SetSelections(sel) ); + + wxDataViewItemArray sel2; + CHECK( m_dvc->GetSelections(sel2) == sel.size() ); + + CHECK( sel2 == sel ); + + // Invalid items in GetSelections() input are supposed to be just skipped. + sel.clear(); + sel.push_back(wxDataViewItem()); + REQUIRE_NOTHROW( m_dvc->SetSelections(sel) ); + + CHECK( m_dvc->GetSelections(sel2) == 0 ); + CHECK( sel2.empty() ); +} + TEST_CASE_METHOD(MultiSelectDataViewCtrlTestCase, "wxDVC::DeleteSelected", "[wxDataViewCtrl][delete]")