diff options
| author | Frank Reininghaus <[email protected]> | 2011-09-29 20:50:00 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2011-09-29 20:50:00 +0200 |
| commit | 7424fcc3314a63d0716cb428a8b8de24b23e0279 (patch) | |
| tree | 3c51a6b755fa6eb27806e947dde63d93739b48d8 /src/tests/kitemlistselectionmanagertest.cpp | |
| parent | e43f29576d4666a66cd4d236418baf403f176069 (diff) | |
Keep current item and selection when resorting, part 1
KFileItemModel now emits the itemsMoved signal when the model
is resorted, and KItemListSelectionManager has a new function
itemsMoved() which will be called indirectly when this signal
is emitted. Unit tests for the new functionality are included.
The following things are still needed to make the feature
work:
1. KFileItemMdel::resortAllItems() should not emit
itemsAdded/itemsRemoved any more.
2. KItemListView::itemsMoved() must update the view according
to the changes in the model, and it must call
KItemListSelectionManager::itemsMoved().
Diffstat (limited to 'src/tests/kitemlistselectionmanagertest.cpp')
| -rw-r--r-- | src/tests/kitemlistselectionmanagertest.cpp | 91 |
1 files changed, 75 insertions, 16 deletions
diff --git a/src/tests/kitemlistselectionmanagertest.cpp b/src/tests/kitemlistselectionmanagertest.cpp index c27096177..2a3601bb0 100644 --- a/src/tests/kitemlistselectionmanagertest.cpp +++ b/src/tests/kitemlistselectionmanagertest.cpp @@ -297,14 +297,44 @@ namespace { NoChange, InsertItems, RemoveItems, + MoveItems, EndAnchoredSelection, - ToggleSelected + SetSelected }; } Q_DECLARE_METATYPE(QSet<int>); Q_DECLARE_METATYPE(ChangeType); +Q_DECLARE_METATYPE(KItemRange); Q_DECLARE_METATYPE(KItemRangeList); +Q_DECLARE_METATYPE(KItemListSelectionManager::SelectionMode); +Q_DECLARE_METATYPE(QList<int>); + +/** + * The following function provides a generic way to test the selection functionality. + * + * The test is data-driven and takes the following arguments: + * + * \param initialSelection The selection at the beginning. + * \param anchor This item will be the anchor item. + * \param current This item will be the current item. + * \param expectedSelection Expected selection after anchor and current are set. + * \param changeType Type of the change that is done then: + * - NoChange + * - InsertItems -> data.at(0) provides the KItemRangeList. \sa KItemListSelectionManager::itemsInserted() + * - RemoveItems -> data.at(0) provides the KItemRangeList. \sa KItemListSelectionManager::itemsRemoved() + * - MoveItems -> data.at(0) provides the KItemRange containing the original indices, + * data.at(1) provides the list containing the new indices + * \sa KItemListSelectionManager::itemsMoved(), KItemModelBase::itemsMoved() + * - EndAnchoredSelection + * - SetSelected -> data.at(0) provides the index where the selection process starts, + * data.at(1) provides the number of indices to be selected, + * data.at(2) provides the selection mode. + * \sa KItemListSelectionManager::setSelected() + * \param data A list of QVariants which will be cast to the arguments needed for the chosen ChangeType (see above). + * \param finalSelection The expected final selection. + * + */ void KItemListSelectionManagerTest::testChangeSelection_data() { @@ -313,43 +343,68 @@ void KItemListSelectionManagerTest::testChangeSelection_data() QTest::addColumn<int>("current"); QTest::addColumn<QSet<int> >("expectedSelection"); QTest::addColumn<ChangeType>("changeType"); - QTest::addColumn<KItemRangeList>("changedItems"); + QTest::addColumn<QList<QVariant> >("data"); QTest::addColumn<QSet<int> >("finalSelection"); QTest::newRow("No change") << (QSet<int>() << 5 << 6) << 2 << 3 << (QSet<int>() << 2 << 3 << 5 << 6) - << NoChange << KItemRangeList() + << NoChange + << QList<QVariant>() << (QSet<int>() << 2 << 3 << 5 << 6); QTest::newRow("Insert Items") << (QSet<int>() << 5 << 6) << 2 << 3 << (QSet<int>() << 2 << 3 << 5 << 6) - << InsertItems << (KItemRangeList() << KItemRange(1, 1) << KItemRange(5, 2) << KItemRange(10, 5)) + << InsertItems + << (QList<QVariant>() << QVariant::fromValue(KItemRangeList() << KItemRange(1, 1) << KItemRange(5, 2) << KItemRange(10, 5))) << (QSet<int>() << 3 << 4 << 8 << 9); QTest::newRow("Remove Items") << (QSet<int>() << 5 << 6) << 2 << 3 << (QSet<int>() << 2 << 3 << 5 << 6) - << RemoveItems << (KItemRangeList() << KItemRange(1, 1) << KItemRange(3, 1) << KItemRange(10, 5)) + << RemoveItems + << (QList<QVariant>() << QVariant::fromValue(KItemRangeList() << KItemRange(1, 1) << KItemRange(3, 1) << KItemRange(10, 5))) << (QSet<int>() << 1 << 2 << 3 << 4); QTest::newRow("Empty Anchored Selection") << QSet<int>() << 2 << 2 << QSet<int>() - << EndAnchoredSelection << KItemRangeList() + << EndAnchoredSelection + << QList<QVariant>() << QSet<int>(); QTest::newRow("Toggle selection") << (QSet<int>() << 1 << 3 << 4) << 6 << 8 << (QSet<int>() << 1 << 3 << 4 << 6 << 7 << 8) - << ToggleSelected << (KItemRangeList() << KItemRange(0, 10)) + << SetSelected + << (QList<QVariant>() << 0 << 10 << QVariant::fromValue(KItemListSelectionManager::Toggle)) << (QSet<int>() << 0 << 2 << 5 << 9); + + // Swap items 2, 3 and 4, 5 + QTest::newRow("Move items") + << (QSet<int>() << 0 << 1 << 2 << 3) + << -1 << -1 + << (QSet<int>() << 0 << 1 << 2 << 3) + << MoveItems + << (QList<QVariant>() << QVariant::fromValue(KItemRange(2, 4)) + << QVariant::fromValue(QList<int>() << 4 << 5 << 2 << 3)) + << (QSet<int>() << 0 << 1 << 4 << 5); + + // Revert sort order + QTest::newRow("Revert sort order") + << (QSet<int>() << 0 << 1) + << 3 << 4 + << (QSet<int>() << 0 << 1 << 3 << 4) + << MoveItems + << (QList<QVariant>() << QVariant::fromValue(KItemRange(0, 10)) + << QVariant::fromValue(QList<int>() << 9 << 8 << 7 << 6 << 5 << 4 << 3 << 2 << 1 << 0)) + << (QSet<int>() << 5 << 6 << 8 << 9); } void KItemListSelectionManagerTest::testChangeSelection() @@ -357,10 +412,10 @@ void KItemListSelectionManagerTest::testChangeSelection() QFETCH(QSet<int>, initialSelection); QFETCH(int, anchor); QFETCH(int, current); - QFETCH(QSet<int> , expectedSelection); + QFETCH(QSet<int>, expectedSelection); QFETCH(ChangeType, changeType); - QFETCH(KItemRangeList, changedItems); - QFETCH(QSet<int> , finalSelection); + QFETCH(QList<QVariant>, data); + QFETCH(QSet<int>, finalSelection); QSignalSpy spySelectionChanged(m_selectionManager, SIGNAL(selectionChanged(QSet<int>,QSet<int>))); @@ -406,19 +461,23 @@ void KItemListSelectionManagerTest::testChangeSelection() // Change the model by inserting or removing items. switch (changeType) { case InsertItems: - m_selectionManager->itemsInserted(changedItems); + m_selectionManager->itemsInserted(data.at(0).value<KItemRangeList>()); break; case RemoveItems: - m_selectionManager->itemsRemoved(changedItems); + m_selectionManager->itemsRemoved(data.at(0).value<KItemRangeList>()); + break; + case MoveItems: + m_selectionManager->itemsMoved(data.at(0).value<KItemRange>(), + data.at(1).value<QList<int> >()); break; case EndAnchoredSelection: m_selectionManager->endAnchoredSelection(); QVERIFY(!m_selectionManager->isAnchoredSelectionActive()); break; - case ToggleSelected: - foreach(const KItemRange& range, changedItems) { - m_selectionManager->setSelected(range.index, range.count, KItemListSelectionManager::Toggle); - } + case SetSelected: + m_selectionManager->setSelected(data.at(0).value<int>(), // index + data.at(1).value<int>(), // count + data.at(2).value<KItemListSelectionManager::SelectionMode>()); break; case NoChange: break; |
