┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/kfileitemmodeltest.cpp33
-rw-r--r--src/tests/kitemlistselectionmanagertest.cpp91
2 files changed, 103 insertions, 21 deletions
diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp
index ea8c19c05..f56ef9033 100644
--- a/src/tests/kfileitemmodeltest.cpp
+++ b/src/tests/kfileitemmodeltest.cpp
@@ -29,6 +29,7 @@ namespace {
};
Q_DECLARE_METATYPE(KItemRangeList)
+Q_DECLARE_METATYPE(QList<int>)
class KFileItemModelTest : public QObject
{
@@ -65,6 +66,7 @@ private:
void KFileItemModelTest::init()
{
+ qRegisterMetaType<KItemRange>("KItemRange");
qRegisterMetaType<KItemRangeList>("KItemRangeList");
qRegisterMetaType<KFileItemList>("KFileItemList");
@@ -355,23 +357,31 @@ void KFileItemModelTest::testSorting()
//QVERIFY(!m_model->showHiddenFiles());
QCOMPARE(itemsInModel(), QStringList() << "c" << "a" << "b" << "d" << "e");
+ QSignalSpy spyItemsMoved(m_model, SIGNAL(itemsMoved(KItemRange,QList<int>)));
+
// Sort by Name, descending
m_model->setSortOrder(Qt::DescendingOrder);
QCOMPARE(m_model->sortRole(), QByteArray("name"));
QCOMPARE(m_model->sortOrder(), Qt::DescendingOrder);
QCOMPARE(itemsInModel(), QStringList() << "c" << "e" << "d" << "b" << "a");
+ QCOMPARE(spyItemsMoved.count(), 1);
+ QCOMPARE(spyItemsMoved.takeFirst().at(1).value<QList<int> >(), QList<int>() << 0 << 4 << 3 << 2 << 1);
- // Sort by Date, decending
+ // Sort by Date, descending
m_model->setSortRole("date");
QCOMPARE(m_model->sortRole(), QByteArray("date"));
QCOMPARE(m_model->sortOrder(), Qt::DescendingOrder);
QCOMPARE(itemsInModel(), QStringList() << "c" << "b" << "d" << "a" << "e");
+ QCOMPARE(spyItemsMoved.count(), 1);
+ QCOMPARE(spyItemsMoved.takeFirst().at(1).value<QList<int> >(), QList<int>() << 0 << 4 << 2 << 1 << 3);
// Sort by Date, ascending
m_model->setSortOrder(Qt::AscendingOrder);
QCOMPARE(m_model->sortRole(), QByteArray("date"));
QCOMPARE(m_model->sortOrder(), Qt::AscendingOrder);
QCOMPARE(itemsInModel(), QStringList() << "c" << "e" << "a" << "d" << "b");
+ QCOMPARE(spyItemsMoved.count(), 1);
+ QCOMPARE(spyItemsMoved.takeFirst().at(1).value<QList<int> >(), QList<int>() << 0 << 4 << 3 << 2 << 1);
// Sort by Date, ascending, 'Sort Folders First' disabled
m_model->setSortFoldersFirst(false);
@@ -379,20 +389,33 @@ void KFileItemModelTest::testSorting()
QCOMPARE(m_model->sortOrder(), Qt::AscendingOrder);
QVERIFY(!m_model->sortFoldersFirst());
QCOMPARE(itemsInModel(), QStringList() << "e" << "a" << "c" << "d" << "b");
+ QCOMPARE(spyItemsMoved.count(), 1);
+ QCOMPARE(spyItemsMoved.takeFirst().at(1).value<QList<int> >(), QList<int>() << 2 << 0 << 1 << 3 << 4);
- // Default: Sort by Name, ascending, 'Sort Folders First' disabled
+ // Sort by Name, ascending, 'Sort Folders First' disabled
m_model->setSortRole("name");
QCOMPARE(m_model->sortOrder(), Qt::AscendingOrder);
QVERIFY(!m_model->sortFoldersFirst());
QCOMPARE(itemsInModel(), QStringList() << "a" << "b" << "c" << "d" << "e");
+ QCOMPARE(spyItemsMoved.count(), 1);
+ QCOMPARE(spyItemsMoved.takeFirst().at(1).value<QList<int> >(), QList<int>() << 4 << 0 << 2 << 3 << 1);
- // Sort by Size, ascending, 'Sort Folders First' enabled
+ // Sort by Size, ascending, 'Sort Folders First' disabled
m_model->setSortRole("size");
+ QCOMPARE(m_model->sortRole(), QByteArray("size"));
+ QCOMPARE(m_model->sortOrder(), Qt::AscendingOrder);
+ QVERIFY(!m_model->sortFoldersFirst());
+ QCOMPARE(itemsInModel(), QStringList() << "c" << "a" << "b" << "e" << "d");
+ QCOMPARE(spyItemsMoved.count(), 1);
+ QCOMPARE(spyItemsMoved.takeFirst().at(1).value<QList<int> >(), QList<int>() << 1 << 2 << 0 << 4 << 3);
+
+ // In 'Sort by Size' mode, folders are always first -> changing 'Sort Folders First' does not resort the model
m_model->setSortFoldersFirst(true);
QCOMPARE(m_model->sortRole(), QByteArray("size"));
QCOMPARE(m_model->sortOrder(), Qt::AscendingOrder);
QVERIFY(m_model->sortFoldersFirst());
QCOMPARE(itemsInModel(), QStringList() << "c" << "a" << "b" << "e" << "d");
+ QCOMPARE(spyItemsMoved.count(), 0);
// Sort by Size, descending, 'Sort Folders First' enabled
m_model->setSortOrder(Qt::DescendingOrder);
@@ -400,8 +423,8 @@ void KFileItemModelTest::testSorting()
QCOMPARE(m_model->sortOrder(), Qt::DescendingOrder);
QVERIFY(m_model->sortFoldersFirst());
QCOMPARE(itemsInModel(), QStringList() << "c" << "d" << "e" << "b" << "a");
-
- // TODO: How shall the sorting by size be done if 'Sort Folders First' is disabled?
+ QCOMPARE(spyItemsMoved.count(), 1);
+ QCOMPARE(spyItemsMoved.takeFirst().at(1).value<QList<int> >(), QList<int>() << 0 << 4 << 3 << 2 << 1);
// TODO: Sort by other roles; show/hide hidden files
}
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;