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]")