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++); } } diff --git a/tests/misc/selstoretest.cpp b/tests/misc/selstoretest.cpp index 59246fc639..07e6652155 100644 --- a/tests/misc/selstoretest.cpp +++ b/tests/misc/selstoretest.cpp @@ -19,168 +19,150 @@ // test class // ---------------------------------------------------------------------------- -class SelStoreTestCase : public CppUnit::TestCase +class SelStoreTest { public: - SelStoreTestCase() { m_store = NULL; } - - virtual void setUp() wxOVERRIDE + SelStoreTest() { - m_store = new wxSelectionStore; - m_store->SetItemCount(NUM_ITEMS); + m_store.SetItemCount(NUM_ITEMS); } - virtual void tearDown() wxOVERRIDE - { - delete m_store; - m_store = NULL; - } - -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; + 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); - CPPUNIT_ASSERT_EQUAL( 1u, m_store->GetSelectedCount() ); - CPPUNIT_ASSERT( m_store->IsSelected(0) ); + m_store.SelectItem(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) ); + m_store.SelectItem(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) ); + m_store.SelectItem(0, false); + CHECK( m_store.GetSelectedCount() == 1 ); + CHECK( !m_store.IsSelected(0) ); } -void SelStoreTestCase::SelectRange() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::SelectRange", "[selstore]") { - 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); + 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) ); + m_store.SelectRange(NUM_ITEMS/2, 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) ); + m_store.SelectRange(1, NUM_ITEMS - 2, false); + 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() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::SetItemCount", "[selstore]") { - m_store->SelectRange(1, NUM_ITEMS - 2); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS - 2, m_store->GetSelectedCount() ); + m_store.SelectRange(1, NUM_ITEMS - 2); + CHECK( m_store.GetSelectedCount() == NUM_ITEMS - 2 ); - m_store->SetItemCount(NUM_ITEMS/2); - CPPUNIT_ASSERT_EQUAL( NUM_ITEMS/2 - 1, m_store->GetSelectedCount() ); + m_store.SetItemCount(NUM_ITEMS/2); + CHECK( m_store.GetSelectedCount() == NUM_ITEMS/2 - 1 ); - 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); + CHECK( m_store.GetSelectedCount() == 1 ); } -void SelStoreTestCase::Clear() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::Clear", "[selstore]") { - 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); + m_store.SelectItem(0); - CPPUNIT_ASSERT(!m_store->IsEmpty()); + CHECK(!m_store.IsEmpty()); - m_store->Clear(); + 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() +TEST_CASE_METHOD(SelStoreTest, "wxSelectionStore::Iterate", "[selstore]") { - 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)); + 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)); + m_store.SelectRange(0, NUM_ITEMS - 1); + m_store.SelectItem(0, false); + 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); - 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); + 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()); + m_store.OnItemsInserted(0, 2); + CHECK(m_store.IsSelected(2)); + CHECK(m_store.IsSelected(NUM_ITEMS)); + CHECK(m_store.GetSelectedCount() == 2); - 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); + 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)); +} + +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 ); }