X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/84aa4e75b492c74ce29fcadd572bee338f009b0b..01ff60edeea76f77a5c4684d1f674efb81418faa:/src/tests/kitemlistselectionmanagertest.cpp diff --git a/src/tests/kitemlistselectionmanagertest.cpp b/src/tests/kitemlistselectionmanagertest.cpp index 3d0c318ff..a79b9e6f3 100644 --- a/src/tests/kitemlistselectionmanagertest.cpp +++ b/src/tests/kitemlistselectionmanagertest.cpp @@ -1,5 +1,6 @@ /*************************************************************************** * Copyright (C) 2011 by Peter Penz * + * Copyright (C) 2011 by Frank Reininghaus * * * * 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 * @@ -63,6 +64,7 @@ private slots: void testSetSelected(); void testItemsInserted(); void testItemsRemoved(); + void testAnchoredSelection(); private: KItemListSelectionManager* m_selectionManager; @@ -92,7 +94,10 @@ void KItemListSelectionManagerTest::testConstructor() void KItemListSelectionManagerTest::testCurrentItemAnchorItem() { QSignalSpy spyCurrent(m_selectionManager, SIGNAL(currentChanged(int,int))); - QSignalSpy spyAnchor(m_selectionManager, SIGNAL(anchorChanged(int,int)));; + QSignalSpy spyAnchor(m_selectionManager, SIGNAL(anchorChanged(int,int))); + + m_selectionManager->setAnchoredSelectionActive(true); + QVERIFY(m_selectionManager->isAnchoredSelectionActive()); // Set current item and check that the selection manager emits the currentChanged(int,int) signal correctly. m_selectionManager->setCurrentItem(4); @@ -101,6 +106,25 @@ void KItemListSelectionManagerTest::testCurrentItemAnchorItem() QCOMPARE(qvariant_cast(spyCurrent.at(0).at(0)), 4); spyCurrent.takeFirst(); + // Set anchor item and check that the selection manager emits the anchorChanged(int,int) signal correctly. + m_selectionManager->setAnchorItem(3); + QCOMPARE(m_selectionManager->anchorItem(), 3); + QCOMPARE(spyAnchor.count(), 1); + QCOMPARE(qvariant_cast(spyAnchor.at(0).at(0)), 3); + spyAnchor.takeFirst(); + + m_selectionManager->setAnchorItem(5); + QCOMPARE(m_selectionManager->anchorItem(), 5); + QCOMPARE(spyAnchor.count(), 1); + QCOMPARE(qvariant_cast(spyAnchor.at(0).at(0)), 5); + QCOMPARE(qvariant_cast(spyAnchor.at(0).at(1)), 3); + spyAnchor.takeFirst(); + + // Items between current and anchor should be selected now + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 4 << 5); + QVERIFY(m_selectionManager->hasSelection()); + + // Change current item again and check the selection m_selectionManager->setCurrentItem(2); QCOMPARE(m_selectionManager->currentItem(), 2); QCOMPARE(spyCurrent.count(), 1); @@ -108,19 +132,55 @@ void KItemListSelectionManagerTest::testCurrentItemAnchorItem() QCOMPARE(qvariant_cast(spyCurrent.at(0).at(1)), 4); spyCurrent.takeFirst(); - // Set anchor item and check that the selection manager emits the anchorChanged(int,int) signal correctly. - m_selectionManager->setAnchorItem(3); - QCOMPARE(m_selectionManager->anchorItem(), 3); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 2 << 3 << 4 << 5); + QVERIFY(m_selectionManager->hasSelection()); + + // Inserting items should update current item and anchor item. + m_selectionManager->itemsInserted(KItemRangeList() << + KItemRange(0, 1) << + KItemRange(2, 2) << + KItemRange(6, 3)); + + QCOMPARE(m_selectionManager->currentItem(), 5); + QCOMPARE(spyCurrent.count(), 1); + QCOMPARE(qvariant_cast(spyCurrent.at(0).at(0)), 5); + QCOMPARE(qvariant_cast(spyCurrent.at(0).at(1)), 2); + spyCurrent.takeFirst(); + + QCOMPARE(m_selectionManager->anchorItem(), 8); QCOMPARE(spyAnchor.count(), 1); - QCOMPARE(qvariant_cast(spyAnchor.at(0).at(0)), 3); + QCOMPARE(qvariant_cast(spyAnchor.at(0).at(0)), 8); + QCOMPARE(qvariant_cast(spyAnchor.at(0).at(1)), 5); spyAnchor.takeFirst(); - m_selectionManager->setAnchorItem(5); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 5 << 6 << 7 << 8); + QVERIFY(m_selectionManager->hasSelection()); + + // Removing items should update current item and anchor item. + m_selectionManager->itemsRemoved(KItemRangeList() << + KItemRange(0, 2) << + KItemRange(2, 1) << + KItemRange(9, 2)); + + QCOMPARE(m_selectionManager->currentItem(), 2); + QCOMPARE(spyCurrent.count(), 1); + QCOMPARE(qvariant_cast(spyCurrent.at(0).at(0)), 2); + QCOMPARE(qvariant_cast(spyCurrent.at(0).at(1)), 5); + spyCurrent.takeFirst(); + QCOMPARE(m_selectionManager->anchorItem(), 5); QCOMPARE(spyAnchor.count(), 1); QCOMPARE(qvariant_cast(spyAnchor.at(0).at(0)), 5); - QCOMPARE(qvariant_cast(spyAnchor.at(0).at(1)), 3); + QCOMPARE(qvariant_cast(spyAnchor.at(0).at(1)), 8); spyAnchor.takeFirst(); + + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 2 << 3 << 4 << 5); + QVERIFY(m_selectionManager->hasSelection()); + + // Verify that clearSelection() also clears the anchored selection. + m_selectionManager->clearSelection(); + QCOMPARE(m_selectionManager->selectedItems(), QSet()); + QVERIFY(!m_selectionManager->hasSelection()); } void KItemListSelectionManagerTest::testSetSelected_data() @@ -152,6 +212,7 @@ void KItemListSelectionManagerTest::testItemsInserted() // Select items 10 to 12 m_selectionManager->setSelected(10, 3); QSet selectedItems = m_selectionManager->selectedItems(); + QCOMPARE(selectedItems.count(), 3); QVERIFY(selectedItems.contains(10)); QVERIFY(selectedItems.contains(11)); QVERIFY(selectedItems.contains(12)); @@ -159,6 +220,7 @@ void KItemListSelectionManagerTest::testItemsInserted() // Insert items 0 to 4 -> selection must be 15 to 17 m_selectionManager->itemsInserted(KItemRangeList() << KItemRange(0, 5)); selectedItems = m_selectionManager->selectedItems(); + QCOMPARE(selectedItems.count(), 3); QVERIFY(selectedItems.contains(15)); QVERIFY(selectedItems.contains(16)); QVERIFY(selectedItems.contains(17)); @@ -169,6 +231,7 @@ void KItemListSelectionManagerTest::testItemsInserted() KItemRange(16, 1) << KItemRange(17, 1)); selectedItems = m_selectionManager->selectedItems(); + QCOMPARE(selectedItems.count(), 3); QVERIFY(selectedItems.contains(16)); QVERIFY(selectedItems.contains(18)); QVERIFY(selectedItems.contains(20)); @@ -179,6 +242,7 @@ void KItemListSelectionManagerTest::testItemsRemoved() // Select items 10 to 15 m_selectionManager->setSelected(10, 6); QSet selectedItems = m_selectionManager->selectedItems(); + QCOMPARE(selectedItems.count(), 6); for (int i = 10; i <= 15; ++i) { QVERIFY(selectedItems.contains(i)); } @@ -186,6 +250,7 @@ void KItemListSelectionManagerTest::testItemsRemoved() // Remove items 0 to 4 -> selection must be 5 to 10 m_selectionManager->itemsRemoved(KItemRangeList() << KItemRange(0, 5)); selectedItems = m_selectionManager->selectedItems(); + QCOMPARE(selectedItems.count(), 6); for (int i = 5; i <= 10; ++i) { QVERIFY(selectedItems.contains(i)); } @@ -202,6 +267,47 @@ void KItemListSelectionManagerTest::testItemsRemoved() QVERIFY(selectedItems.contains(7)); } +void KItemListSelectionManagerTest::testAnchoredSelection() +{ + m_selectionManager->beginAnchoredSelection(5); + QVERIFY(m_selectionManager->isAnchoredSelectionActive()); + QCOMPARE(m_selectionManager->anchorItem(), 5); + + m_selectionManager->setCurrentItem(6); + QCOMPARE(m_selectionManager->currentItem(), 6); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 5 << 6); + + m_selectionManager->setCurrentItem(4); + QCOMPARE(m_selectionManager->currentItem(), 4); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 4 << 5); + + m_selectionManager->setCurrentItem(7); + QCOMPARE(m_selectionManager->currentItem(), 7); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 5 << 6 << 7); + + // Ending the anchored selection should not change the selected items. + m_selectionManager->endAnchoredSelection(); + QVERIFY(!m_selectionManager->isAnchoredSelectionActive()); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 5 << 6 << 7); + + // Start a new anchored selection that overlaps the previous one + m_selectionManager->beginAnchoredSelection(9); + QVERIFY(m_selectionManager->isAnchoredSelectionActive()); + QCOMPARE(m_selectionManager->anchorItem(), 9); + + m_selectionManager->setCurrentItem(6); + QCOMPARE(m_selectionManager->currentItem(), 6); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 5 << 6 << 7 << 8 << 9); + + m_selectionManager->setCurrentItem(10); + QCOMPARE(m_selectionManager->currentItem(), 10); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 5 << 6 << 7 << 9 << 10); + + m_selectionManager->endAnchoredSelection(); + QVERIFY(!m_selectionManager->isAnchoredSelectionActive()); + QCOMPARE(m_selectionManager->selectedItems(), QSet() << 5 << 6 << 7 << 9 << 10); +} + QTEST_KDEMAIN(KItemListSelectionManagerTest, NoGUI) #include "kitemlistselectionmanagertest.moc"