/*************************************************************************** * Copyright (C) 2011 by Peter Penz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include #include "kitemviews/kitemmodelbase.h" #include "kitemviews/kitemlistselectionmanager.h" class DummyModel : public KItemModelBase { public: DummyModel(); virtual int count() const; virtual QHash data(int index) const; }; DummyModel::DummyModel() : KItemModelBase() { } int DummyModel::count() const { return 100; } QHash DummyModel::data(int index) const { Q_UNUSED(index); return QHash(); } class KItemListSelectionManagerTest : public QObject { Q_OBJECT private slots: void init(); void cleanup(); void testConstructor(); void testSetSelected_data(); void testSetSelected(); void testItemsInserted(); void testItemsRemoved(); private: KItemListSelectionManager* m_selectionManager; }; void KItemListSelectionManagerTest::init() { m_selectionManager = new KItemListSelectionManager(); m_selectionManager->setModel(new DummyModel()); } void KItemListSelectionManagerTest::cleanup() { delete m_selectionManager->model(); delete m_selectionManager; m_selectionManager = 0; } void KItemListSelectionManagerTest::testConstructor() { QVERIFY(!m_selectionManager->hasSelection()); QCOMPARE(m_selectionManager->selectedItems().count(), 0); QCOMPARE(m_selectionManager->currentItem(), 0); QCOMPARE(m_selectionManager->anchorItem(), -1); } void KItemListSelectionManagerTest::testSetSelected_data() { QTest::addColumn("index"); QTest::addColumn("count"); QTest::addColumn("expectedSelectionCount"); QTest::newRow("Select all") << 0 << 100 << 100; QTest::newRow("Sub selection 15 items") << 20 << 15 << 15; QTest::newRow("Sub selection 1 item") << 20 << 1 << 1; QTest::newRow("Too small index") << -1 << 100 << 0; QTest::newRow("Too large index") << 100 << 100 << 0; QTest::newRow("Too large count") << 0 << 100000 << 100; QTest::newRow("Too small count") << 0 << 0 << 0; } void KItemListSelectionManagerTest::testSetSelected() { QFETCH(int, index); QFETCH(int, count); QFETCH(int, expectedSelectionCount); m_selectionManager->setSelected(index, count); QCOMPARE(m_selectionManager->selectedItems().count(), expectedSelectionCount); } void KItemListSelectionManagerTest::testItemsInserted() { // Select items 10 to 12 m_selectionManager->setSelected(10, 3); QSet selectedItems = m_selectionManager->selectedItems(); QVERIFY(selectedItems.contains(10)); QVERIFY(selectedItems.contains(11)); QVERIFY(selectedItems.contains(12)); // Insert items 0 to 4 -> selection must be 15 to 17 m_selectionManager->itemsInserted(KItemRangeList() << KItemRange(0, 5)); selectedItems = m_selectionManager->selectedItems(); QVERIFY(selectedItems.contains(15)); QVERIFY(selectedItems.contains(16)); QVERIFY(selectedItems.contains(17)); // Insert 3 items between the selections m_selectionManager->itemsInserted(KItemRangeList() << KItemRange(15, 1) << KItemRange(16, 1) << KItemRange(17, 1)); selectedItems = m_selectionManager->selectedItems(); QVERIFY(selectedItems.contains(16)); QVERIFY(selectedItems.contains(18)); QVERIFY(selectedItems.contains(20)); } void KItemListSelectionManagerTest::testItemsRemoved() { // Select items 10 to 15 m_selectionManager->setSelected(10, 6); QSet selectedItems = m_selectionManager->selectedItems(); for (int i = 10; i <= 15; ++i) { QVERIFY(selectedItems.contains(i)); } // Remove items 0 to 4 -> selection must be 5 to 10 m_selectionManager->itemsRemoved(KItemRangeList() << KItemRange(0, 5)); selectedItems = m_selectionManager->selectedItems(); for (int i = 5; i <= 10; ++i) { QVERIFY(selectedItems.contains(i)); } // Remove the items 6 , 8 and 10 m_selectionManager->itemsRemoved(KItemRangeList() << KItemRange(6, 1) << KItemRange(8, 1) << KItemRange(10, 1)); selectedItems = m_selectionManager->selectedItems(); QCOMPARE(selectedItems.count(), 3); QVERIFY(selectedItems.contains(5)); QVERIFY(selectedItems.contains(6)); QVERIFY(selectedItems.contains(7)); } QTEST_KDEMAIN(KItemListSelectionManagerTest, NoGUI) #include "kitemlistselectionmanagertest.moc"