From 8e5836908c75387be5846a6d83d78e9f97563db9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 22 Jan 2021 22:32:20 +0100 Subject: [PATCH 1/5] Use wxSelectionStore object instead of a pointer in the test Just simplify the code, there is no need to allocate and free a pointer when we can just use an object. No real changes. --- tests/misc/selstoretest.cpp | 151 +++++++++++++++++------------------- 1 file changed, 72 insertions(+), 79 deletions(-) diff --git a/tests/misc/selstoretest.cpp b/tests/misc/selstoretest.cpp index 59246fc639..77394a5b89 100644 --- a/tests/misc/selstoretest.cpp +++ b/tests/misc/selstoretest.cpp @@ -22,18 +22,11 @@ class SelStoreTestCase : public CppUnit::TestCase { public: - SelStoreTestCase() { m_store = NULL; } + SelStoreTestCase() { } virtual void setUp() wxOVERRIDE { - m_store = new wxSelectionStore; - m_store->SetItemCount(NUM_ITEMS); - } - - virtual void tearDown() wxOVERRIDE - { - delete m_store; - m_store = NULL; + m_store.SetItemCount(NUM_ITEMS); } private: @@ -56,7 +49,7 @@ private: // NB: must be even static const unsigned NUM_ITEMS; - wxSelectionStore *m_store; + wxSelectionStore m_store; wxDECLARE_NO_COPY_CLASS(SelStoreTestCase); }; @@ -71,116 +64,116 @@ const unsigned SelStoreTestCase::NUM_ITEMS = 10; // NB: must be even void SelStoreTestCase::SelectItem() { - m_store->SelectItem(0); - CPPUNIT_ASSERT_EQUAL( 1u, m_store->GetSelectedCount() ); - CPPUNIT_ASSERT( m_store->IsSelected(0) ); + m_store.SelectItem(0); + CPPUNIT_ASSERT_EQUAL( 1u, m_store.GetSelectedCount() ); + CPPUNIT_ASSERT( m_store.IsSelected(0) ); - m_store->SelectItem(NUM_ITEMS - 1); - CPPUNIT_ASSERT_EQUAL( 2u, m_store->GetSelectedCount() ); - CPPUNIT_ASSERT( m_store->IsSelected(NUM_ITEMS - 1) ); + m_store.SelectItem(NUM_ITEMS - 1); + CPPUNIT_ASSERT_EQUAL( 2u, m_store.GetSelectedCount() ); + CPPUNIT_ASSERT( m_store.IsSelected(NUM_ITEMS - 1) ); - m_store->SelectItem(0, false); - CPPUNIT_ASSERT_EQUAL( 1u, m_store->GetSelectedCount() ); - CPPUNIT_ASSERT( !m_store->IsSelected(0) ); + m_store.SelectItem(0, false); + CPPUNIT_ASSERT_EQUAL( 1u, m_store.GetSelectedCount() ); + CPPUNIT_ASSERT( !m_store.IsSelected(0) ); } void SelStoreTestCase::SelectRange() { - m_store->SelectRange(0, NUM_ITEMS/2); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS/2 + 1, m_store->GetSelectedCount() ); - CPPUNIT_ASSERT( m_store->IsSelected(0) ); - CPPUNIT_ASSERT( !m_store->IsSelected(NUM_ITEMS - 1) ); + m_store.SelectRange(0, NUM_ITEMS/2); + CPPUNIT_ASSERT_EQUAL( NUM_ITEMS/2 + 1, m_store.GetSelectedCount() ); + CPPUNIT_ASSERT( m_store.IsSelected(0) ); + CPPUNIT_ASSERT( !m_store.IsSelected(NUM_ITEMS - 1) ); - m_store->SelectRange(NUM_ITEMS/2, NUM_ITEMS - 1); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS, m_store->GetSelectedCount() ); - CPPUNIT_ASSERT( m_store->IsSelected(0) ); - CPPUNIT_ASSERT( m_store->IsSelected(NUM_ITEMS - 1) ); + m_store.SelectRange(NUM_ITEMS/2, NUM_ITEMS - 1); + CPPUNIT_ASSERT_EQUAL( NUM_ITEMS, m_store.GetSelectedCount() ); + CPPUNIT_ASSERT( m_store.IsSelected(0) ); + CPPUNIT_ASSERT( m_store.IsSelected(NUM_ITEMS - 1) ); - m_store->SelectRange(1, NUM_ITEMS - 2, false); - CPPUNIT_ASSERT_EQUAL( 2u, m_store->GetSelectedCount() ); - CPPUNIT_ASSERT( m_store->IsSelected(0) ); - CPPUNIT_ASSERT( !m_store->IsSelected(NUM_ITEMS/2) ); - CPPUNIT_ASSERT( m_store->IsSelected(NUM_ITEMS - 1) ); + m_store.SelectRange(1, NUM_ITEMS - 2, false); + CPPUNIT_ASSERT_EQUAL( 2u, m_store.GetSelectedCount() ); + CPPUNIT_ASSERT( m_store.IsSelected(0) ); + CPPUNIT_ASSERT( !m_store.IsSelected(NUM_ITEMS/2) ); + CPPUNIT_ASSERT( m_store.IsSelected(NUM_ITEMS - 1) ); } void SelStoreTestCase::SetItemCount() { - m_store->SelectRange(1, NUM_ITEMS - 2); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS - 2, m_store->GetSelectedCount() ); + m_store.SelectRange(1, NUM_ITEMS - 2); + CPPUNIT_ASSERT_EQUAL( NUM_ITEMS - 2, m_store.GetSelectedCount() ); - m_store->SetItemCount(NUM_ITEMS/2); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS/2 - 1, m_store->GetSelectedCount() ); + m_store.SetItemCount(NUM_ITEMS/2); + CPPUNIT_ASSERT_EQUAL( NUM_ITEMS/2 - 1, m_store.GetSelectedCount() ); - m_store->Clear(); - m_store->SetItemCount(NUM_ITEMS); + m_store.Clear(); + m_store.SetItemCount(NUM_ITEMS); - m_store->SelectItem(NUM_ITEMS/2 - 1); - m_store->SelectItem(NUM_ITEMS/2 + 1); - m_store->SetItemCount(NUM_ITEMS/2); - CPPUNIT_ASSERT_EQUAL( 1u, m_store->GetSelectedCount() ); + m_store.SelectItem(NUM_ITEMS/2 - 1); + m_store.SelectItem(NUM_ITEMS/2 + 1); + m_store.SetItemCount(NUM_ITEMS/2); + CPPUNIT_ASSERT_EQUAL( 1u, m_store.GetSelectedCount() ); } void SelStoreTestCase::Clear() { - CPPUNIT_ASSERT(m_store->IsEmpty()); - CPPUNIT_ASSERT_EQUAL( 0u, m_store->GetSelectedCount() ); + CPPUNIT_ASSERT(m_store.IsEmpty()); + CPPUNIT_ASSERT_EQUAL( 0u, m_store.GetSelectedCount() ); - m_store->SelectItem(0); + m_store.SelectItem(0); - CPPUNIT_ASSERT(!m_store->IsEmpty()); + CPPUNIT_ASSERT(!m_store.IsEmpty()); - m_store->Clear(); + m_store.Clear(); - CPPUNIT_ASSERT(m_store->IsEmpty()); - CPPUNIT_ASSERT_EQUAL( 0u, m_store->GetSelectedCount() ); + CPPUNIT_ASSERT(m_store.IsEmpty()); + CPPUNIT_ASSERT_EQUAL( 0u, m_store.GetSelectedCount() ); } void SelStoreTestCase::Iterate() { - m_store->SelectRange(NUM_ITEMS/2 - 1, NUM_ITEMS/2 + 1); + m_store.SelectRange(NUM_ITEMS/2 - 1, NUM_ITEMS/2 + 1); wxSelectionStore::IterationState cookie; - CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2 - 1, m_store->GetFirstSelectedItem(cookie)); - CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2, m_store->GetNextSelectedItem(cookie)); - CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2 + 1, m_store->GetNextSelectedItem(cookie)); + CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2 - 1, m_store.GetFirstSelectedItem(cookie)); + CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2, m_store.GetNextSelectedItem(cookie)); + CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2 + 1, m_store.GetNextSelectedItem(cookie)); - CPPUNIT_ASSERT_EQUAL(wxSelectionStore::NO_SELECTION, m_store->GetNextSelectedItem(cookie)); + CPPUNIT_ASSERT_EQUAL(wxSelectionStore::NO_SELECTION, m_store.GetNextSelectedItem(cookie)); - m_store->SelectRange(0, NUM_ITEMS - 1); - m_store->SelectItem(0, false); - CPPUNIT_ASSERT_EQUAL(1, m_store->GetFirstSelectedItem(cookie)); + m_store.SelectRange(0, NUM_ITEMS - 1); + m_store.SelectItem(0, false); + CPPUNIT_ASSERT_EQUAL(1, m_store.GetFirstSelectedItem(cookie)); } void SelStoreTestCase::ItemsAddDelete() { - m_store->SelectItem(0); - m_store->SelectItem(NUM_ITEMS/2); - m_store->SelectItem(NUM_ITEMS - 1); + m_store.SelectItem(0); + m_store.SelectItem(NUM_ITEMS/2); + m_store.SelectItem(NUM_ITEMS - 1); - m_store->OnItemsInserted(NUM_ITEMS/2 + 1, 1); - CPPUNIT_ASSERT(m_store->IsSelected(0)); - CPPUNIT_ASSERT(m_store->IsSelected(NUM_ITEMS/2)); - CPPUNIT_ASSERT(m_store->IsSelected(NUM_ITEMS)); - CPPUNIT_ASSERT_EQUAL(3, m_store->GetSelectedCount()); + m_store.OnItemsInserted(NUM_ITEMS/2 + 1, 1); + CPPUNIT_ASSERT(m_store.IsSelected(0)); + CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS/2)); + CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS)); + CPPUNIT_ASSERT_EQUAL(3, m_store.GetSelectedCount()); - CPPUNIT_ASSERT(m_store->OnItemsDeleted(NUM_ITEMS/2 - 1, 2)); - CPPUNIT_ASSERT(m_store->IsSelected(0)); - CPPUNIT_ASSERT(m_store->IsSelected(NUM_ITEMS - 2)); - CPPUNIT_ASSERT_EQUAL(2, m_store->GetSelectedCount()); + CPPUNIT_ASSERT(m_store.OnItemsDeleted(NUM_ITEMS/2 - 1, 2)); + CPPUNIT_ASSERT(m_store.IsSelected(0)); + CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS - 2)); + CPPUNIT_ASSERT_EQUAL(2, m_store.GetSelectedCount()); - m_store->OnItemsInserted(0, 2); - CPPUNIT_ASSERT(m_store->IsSelected(2)); - CPPUNIT_ASSERT(m_store->IsSelected(NUM_ITEMS)); - CPPUNIT_ASSERT_EQUAL(2, m_store->GetSelectedCount()); + m_store.OnItemsInserted(0, 2); + CPPUNIT_ASSERT(m_store.IsSelected(2)); + CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS)); + CPPUNIT_ASSERT_EQUAL(2, m_store.GetSelectedCount()); - m_store->OnItemDelete(0); + m_store.OnItemDelete(0); - m_store->SelectRange(0, NUM_ITEMS - 1); - CPPUNIT_ASSERT(m_store->OnItemsDeleted(0, NUM_ITEMS/2)); - CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2, m_store->GetSelectedCount()); - CPPUNIT_ASSERT(m_store->IsSelected(0)); - CPPUNIT_ASSERT(m_store->IsSelected(NUM_ITEMS/2)); + m_store.SelectRange(0, NUM_ITEMS - 1); + CPPUNIT_ASSERT(m_store.OnItemsDeleted(0, NUM_ITEMS/2)); + CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2, m_store.GetSelectedCount()); + CPPUNIT_ASSERT(m_store.IsSelected(0)); + CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS/2)); } From a1cca242a44bc784ff3a56251117a167665fefb3 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 22 Jan 2021 22:34:01 +0100 Subject: [PATCH 2/5] Use CHECK() instead of CPPUNIT_ASSERT in wxSelectionStore test No real changes, just simplify the code. Notably we don't need explicit "u" suffix on the literal constants any longer as CATCH is smart enough to compare signed and unsigned integers correctly without it. --- tests/misc/selstoretest.cpp | 88 ++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/tests/misc/selstoretest.cpp b/tests/misc/selstoretest.cpp index 77394a5b89..23eb621b14 100644 --- a/tests/misc/selstoretest.cpp +++ b/tests/misc/selstoretest.cpp @@ -65,44 +65,44 @@ const unsigned SelStoreTestCase::NUM_ITEMS = 10; // NB: must be even void SelStoreTestCase::SelectItem() { m_store.SelectItem(0); - CPPUNIT_ASSERT_EQUAL( 1u, m_store.GetSelectedCount() ); - CPPUNIT_ASSERT( m_store.IsSelected(0) ); + CHECK( m_store.GetSelectedCount() == 1 ); + CHECK( m_store.IsSelected(0) ); m_store.SelectItem(NUM_ITEMS - 1); - CPPUNIT_ASSERT_EQUAL( 2u, m_store.GetSelectedCount() ); - CPPUNIT_ASSERT( m_store.IsSelected(NUM_ITEMS - 1) ); + CHECK( m_store.GetSelectedCount() == 2 ); + CHECK( m_store.IsSelected(NUM_ITEMS - 1) ); m_store.SelectItem(0, false); - CPPUNIT_ASSERT_EQUAL( 1u, m_store.GetSelectedCount() ); - CPPUNIT_ASSERT( !m_store.IsSelected(0) ); + CHECK( m_store.GetSelectedCount() == 1 ); + CHECK( !m_store.IsSelected(0) ); } void SelStoreTestCase::SelectRange() { m_store.SelectRange(0, NUM_ITEMS/2); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS/2 + 1, m_store.GetSelectedCount() ); - CPPUNIT_ASSERT( m_store.IsSelected(0) ); - CPPUNIT_ASSERT( !m_store.IsSelected(NUM_ITEMS - 1) ); + CHECK( m_store.GetSelectedCount() == NUM_ITEMS/2 + 1 ); + CHECK( m_store.IsSelected(0) ); + CHECK( !m_store.IsSelected(NUM_ITEMS - 1) ); m_store.SelectRange(NUM_ITEMS/2, NUM_ITEMS - 1); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS, m_store.GetSelectedCount() ); - CPPUNIT_ASSERT( m_store.IsSelected(0) ); - CPPUNIT_ASSERT( m_store.IsSelected(NUM_ITEMS - 1) ); + CHECK( m_store.GetSelectedCount() == NUM_ITEMS ); + CHECK( m_store.IsSelected(0) ); + CHECK( m_store.IsSelected(NUM_ITEMS - 1) ); m_store.SelectRange(1, NUM_ITEMS - 2, false); - CPPUNIT_ASSERT_EQUAL( 2u, m_store.GetSelectedCount() ); - CPPUNIT_ASSERT( m_store.IsSelected(0) ); - CPPUNIT_ASSERT( !m_store.IsSelected(NUM_ITEMS/2) ); - CPPUNIT_ASSERT( m_store.IsSelected(NUM_ITEMS - 1) ); + CHECK( m_store.GetSelectedCount() == 2 ); + CHECK( m_store.IsSelected(0) ); + CHECK( !m_store.IsSelected(NUM_ITEMS/2) ); + CHECK( m_store.IsSelected(NUM_ITEMS - 1) ); } void SelStoreTestCase::SetItemCount() { m_store.SelectRange(1, NUM_ITEMS - 2); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS - 2, m_store.GetSelectedCount() ); + CHECK( m_store.GetSelectedCount() == NUM_ITEMS - 2 ); m_store.SetItemCount(NUM_ITEMS/2); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS/2 - 1, m_store.GetSelectedCount() ); + CHECK( m_store.GetSelectedCount() == NUM_ITEMS/2 - 1 ); m_store.Clear(); @@ -112,22 +112,22 @@ void SelStoreTestCase::SetItemCount() m_store.SelectItem(NUM_ITEMS/2 - 1); m_store.SelectItem(NUM_ITEMS/2 + 1); m_store.SetItemCount(NUM_ITEMS/2); - CPPUNIT_ASSERT_EQUAL( 1u, m_store.GetSelectedCount() ); + CHECK( m_store.GetSelectedCount() == 1 ); } void SelStoreTestCase::Clear() { - CPPUNIT_ASSERT(m_store.IsEmpty()); - CPPUNIT_ASSERT_EQUAL( 0u, m_store.GetSelectedCount() ); + CHECK(m_store.IsEmpty()); + CHECK( m_store.GetSelectedCount() == 0 ); m_store.SelectItem(0); - CPPUNIT_ASSERT(!m_store.IsEmpty()); + CHECK(!m_store.IsEmpty()); m_store.Clear(); - CPPUNIT_ASSERT(m_store.IsEmpty()); - CPPUNIT_ASSERT_EQUAL( 0u, m_store.GetSelectedCount() ); + CHECK(m_store.IsEmpty()); + CHECK( m_store.GetSelectedCount() == 0 ); } void SelStoreTestCase::Iterate() @@ -135,16 +135,16 @@ void SelStoreTestCase::Iterate() m_store.SelectRange(NUM_ITEMS/2 - 1, NUM_ITEMS/2 + 1); wxSelectionStore::IterationState cookie; - CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2 - 1, m_store.GetFirstSelectedItem(cookie)); - CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2, m_store.GetNextSelectedItem(cookie)); - CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2 + 1, m_store.GetNextSelectedItem(cookie)); + CHECK(NUM_ITEMS/2 - 1 == m_store.GetFirstSelectedItem(cookie)); + CHECK(NUM_ITEMS/2 == m_store.GetNextSelectedItem(cookie)); + CHECK(NUM_ITEMS/2 + 1 == m_store.GetNextSelectedItem(cookie)); - CPPUNIT_ASSERT_EQUAL(wxSelectionStore::NO_SELECTION, m_store.GetNextSelectedItem(cookie)); + CHECK(wxSelectionStore::NO_SELECTION == m_store.GetNextSelectedItem(cookie)); m_store.SelectRange(0, NUM_ITEMS - 1); m_store.SelectItem(0, false); - CPPUNIT_ASSERT_EQUAL(1, m_store.GetFirstSelectedItem(cookie)); + CHECK(1 == m_store.GetFirstSelectedItem(cookie)); } void SelStoreTestCase::ItemsAddDelete() @@ -154,26 +154,26 @@ void SelStoreTestCase::ItemsAddDelete() m_store.SelectItem(NUM_ITEMS - 1); m_store.OnItemsInserted(NUM_ITEMS/2 + 1, 1); - CPPUNIT_ASSERT(m_store.IsSelected(0)); - CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS/2)); - CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS)); - CPPUNIT_ASSERT_EQUAL(3, m_store.GetSelectedCount()); + CHECK(m_store.IsSelected(0)); + CHECK(m_store.IsSelected(NUM_ITEMS/2)); + CHECK(m_store.IsSelected(NUM_ITEMS)); + CHECK(m_store.GetSelectedCount() == 3); - CPPUNIT_ASSERT(m_store.OnItemsDeleted(NUM_ITEMS/2 - 1, 2)); - CPPUNIT_ASSERT(m_store.IsSelected(0)); - CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS - 2)); - CPPUNIT_ASSERT_EQUAL(2, m_store.GetSelectedCount()); + CHECK(m_store.OnItemsDeleted(NUM_ITEMS/2 - 1, 2)); + CHECK(m_store.IsSelected(0)); + CHECK(m_store.IsSelected(NUM_ITEMS - 2)); + CHECK(m_store.GetSelectedCount() == 2); m_store.OnItemsInserted(0, 2); - CPPUNIT_ASSERT(m_store.IsSelected(2)); - CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS)); - CPPUNIT_ASSERT_EQUAL(2, m_store.GetSelectedCount()); + CHECK(m_store.IsSelected(2)); + CHECK(m_store.IsSelected(NUM_ITEMS)); + CHECK(m_store.GetSelectedCount() == 2); m_store.OnItemDelete(0); m_store.SelectRange(0, NUM_ITEMS - 1); - CPPUNIT_ASSERT(m_store.OnItemsDeleted(0, NUM_ITEMS/2)); - CPPUNIT_ASSERT_EQUAL(NUM_ITEMS/2, m_store.GetSelectedCount()); - CPPUNIT_ASSERT(m_store.IsSelected(0)); - CPPUNIT_ASSERT(m_store.IsSelected(NUM_ITEMS/2)); + CHECK(m_store.OnItemsDeleted(0, NUM_ITEMS/2)); + CHECK(m_store.GetSelectedCount() == NUM_ITEMS/2); + CHECK(m_store.IsSelected(0)); + CHECK(m_store.IsSelected(NUM_ITEMS/2)); } From 6b3ff511ee7627ff9319455e8bd55d5e077ea323 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 22 Jan 2021 22:39:16 +0100 Subject: [PATCH 3/5] Get rid of all CppUnit boilerplate in wxSelectionStore test This simplifies the code and allows running the test cases individually from the command line. --- tests/misc/selstoretest.cpp | 45 +++++++++---------------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/tests/misc/selstoretest.cpp b/tests/misc/selstoretest.cpp index 23eb621b14..1145f46f33 100644 --- a/tests/misc/selstoretest.cpp +++ b/tests/misc/selstoretest.cpp @@ -19,50 +19,25 @@ // test class // ---------------------------------------------------------------------------- -class SelStoreTestCase : public CppUnit::TestCase +class SelStoreTest { public: - SelStoreTestCase() { } - - virtual void setUp() wxOVERRIDE + SelStoreTest() { m_store.SetItemCount(NUM_ITEMS); } -private: - CPPUNIT_TEST_SUITE( SelStoreTestCase ); - CPPUNIT_TEST( SelectItem ); - CPPUNIT_TEST( SelectRange ); - CPPUNIT_TEST( SetItemCount ); - CPPUNIT_TEST( Clear ); - CPPUNIT_TEST( Iterate ); - CPPUNIT_TEST( ItemsAddDelete ); - CPPUNIT_TEST_SUITE_END(); - - void SelectItem(); - void SelectRange(); - void SetItemCount(); - void Clear(); - void Iterate(); - void ItemsAddDelete(); - // NB: must be even static const unsigned NUM_ITEMS; wxSelectionStore m_store; - wxDECLARE_NO_COPY_CLASS(SelStoreTestCase); + wxDECLARE_NO_COPY_CLASS(SelStoreTest); }; -// register in the unnamed registry so that these tests are run by default -CPPUNIT_TEST_SUITE_REGISTRATION( SelStoreTestCase ); +const unsigned SelStoreTest::NUM_ITEMS = 10; // NB: must be even -// also include in its own registry so that these tests can be run alone -CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( SelStoreTestCase, "SelStoreTestCase" ); - -const unsigned SelStoreTestCase::NUM_ITEMS = 10; // NB: must be even - -void SelStoreTestCase::SelectItem() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::SelectItem", "[selstore]") { m_store.SelectItem(0); CHECK( m_store.GetSelectedCount() == 1 ); @@ -77,7 +52,7 @@ void SelStoreTestCase::SelectItem() CHECK( !m_store.IsSelected(0) ); } -void SelStoreTestCase::SelectRange() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::SelectRange", "[selstore]") { m_store.SelectRange(0, NUM_ITEMS/2); CHECK( m_store.GetSelectedCount() == NUM_ITEMS/2 + 1 ); @@ -96,7 +71,7 @@ void SelStoreTestCase::SelectRange() CHECK( m_store.IsSelected(NUM_ITEMS - 1) ); } -void SelStoreTestCase::SetItemCount() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::SetItemCount", "[selstore]") { m_store.SelectRange(1, NUM_ITEMS - 2); CHECK( m_store.GetSelectedCount() == NUM_ITEMS - 2 ); @@ -115,7 +90,7 @@ void SelStoreTestCase::SetItemCount() CHECK( m_store.GetSelectedCount() == 1 ); } -void SelStoreTestCase::Clear() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::Clear", "[selstore]") { CHECK(m_store.IsEmpty()); CHECK( m_store.GetSelectedCount() == 0 ); @@ -130,7 +105,7 @@ void SelStoreTestCase::Clear() CHECK( m_store.GetSelectedCount() == 0 ); } -void SelStoreTestCase::Iterate() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::Iterate", "[selstore]") { m_store.SelectRange(NUM_ITEMS/2 - 1, NUM_ITEMS/2 + 1); @@ -147,7 +122,7 @@ void SelStoreTestCase::Iterate() CHECK(1 == m_store.GetFirstSelectedItem(cookie)); } -void SelStoreTestCase::ItemsAddDelete() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::ItemsAddDelete", "[selstore]") { m_store.SelectItem(0); m_store.SelectItem(NUM_ITEMS/2); From fd839c4bd64f125ab8f184626f6f3d5119aec9ec Mon Sep 17 00:00:00 2001 From: rk Date: Fri, 22 Jan 2021 22:57:16 +0100 Subject: [PATCH 4/5] Fix selection when inserting multiple items into wxSelectionStore When inserting more than one item into wxSelectionStore in the default-selected state, the state of all the items bug the first one was wrongly set to "selected" initially. Just fix the typo in the AddAt() call, which was passed a wrong variable, to fix this. Closes #19040. --- src/generic/selstore.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generic/selstore.cpp b/src/generic/selstore.cpp index d8f9f7575e..b1b6bb50af 100644 --- a/src/generic/selstore.cpp +++ b/src/generic/selstore.cpp @@ -207,7 +207,7 @@ void wxSelectionStore::OnItemsInserted(unsigned item, unsigned numItems) // items indices. for ( unsigned n = item; n < item + numItems; n++ ) { - m_itemsSel.AddAt(item, idx++); + m_itemsSel.AddAt(n, idx++); } } From 86f9778ea982ec321dacb1a2f3bb5c8eb1c40f4e Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 22 Jan 2021 22:59:29 +0100 Subject: [PATCH 5/5] Add a unit test exercising the bug fix in the parent commit This test used to fail, but passes now. --- tests/misc/selstoretest.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/misc/selstoretest.cpp b/tests/misc/selstoretest.cpp index 1145f46f33..07e6652155 100644 --- a/tests/misc/selstoretest.cpp +++ b/tests/misc/selstoretest.cpp @@ -152,3 +152,17 @@ TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::ItemsAddDelete", "[selstore]") CHECK(m_store.IsSelected(0)); CHECK(m_store.IsSelected(NUM_ITEMS/2)); } + +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::InsertInSelected", "[selstore]") +{ + m_store.SelectRange(0, NUM_ITEMS - 1); + CHECK( m_store.GetSelectedCount() == NUM_ITEMS ); + + // Newly inserted items shouldn't be selected, even if all the existing + // ones are. + m_store.OnItemsInserted(1, 3); + CHECK( !m_store.IsSelected(1) ); + CHECK( !m_store.IsSelected(2) ); + CHECK( !m_store.IsSelected(3) ); + CHECK( m_store.GetSelectedCount() == NUM_ITEMS ); +}