┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/CMakeLists.txt9
-rw-r--r--src/tests/kfileitemlistviewtest.cpp14
-rw-r--r--src/tests/kfileitemmodeltest.cpp63
-rw-r--r--src/tests/kitemlistselectionmanagertest.cpp172
4 files changed, 240 insertions, 18 deletions
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 5038ee8d7..b35dc3b8b 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -1,6 +1,15 @@
set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_BUILD_DIR}/.. ${KDE4_INCLUDES} )
+# KItemListSelectionManagerTest
+set(kitemlistselectionmanagertest_SRCS
+ kitemlistselectionmanagertest.cpp
+ ../kitemviews/kitemlistselectionmanager.cpp
+ ../kitemviews/kitemmodelbase.cpp
+)
+kde4_add_unit_test(kitemlistselectionmanagertest TEST ${kitemlistselectionmanagertest_SRCS})
+target_link_libraries(kitemlistselectionmanagertest dolphinprivate ${KDE4_KIO_LIBS} ${QT_QTTEST_LIBRARY})
+
# KFileItemListViewTest
set(kfileitemlistviewtest_SRCS
kfileitemlistviewtest.cpp
diff --git a/src/tests/kfileitemlistviewtest.cpp b/src/tests/kfileitemlistviewtest.cpp
index 1b9e1b312..a7493d17f 100644
--- a/src/tests/kfileitemlistviewtest.cpp
+++ b/src/tests/kfileitemlistviewtest.cpp
@@ -38,8 +38,6 @@ private slots:
void init();
void cleanup();
- void testFeffi();
-
private:
KFileItemListView* m_listView;
KFileItemModel* m_model;
@@ -83,18 +81,6 @@ void KFileItemListViewTest::cleanup()
m_testDir = 0;
}
-void KFileItemListViewTest::testFeffi()
-{
- QStringList files;
- files << "a.txt" << "b.txt" << "c.txt";
- m_testDir->createFiles(files);
-
- m_dirLister->openUrl(m_testDir->url());
- QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
-
- QCOMPARE(m_model->count(), 3);
-}
-
QTEST_KDEMAIN(KFileItemListViewTest, GUI)
#include "kfileitemlistviewtest.moc"
diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp
index 82fc3fbc0..74706d49a 100644
--- a/src/tests/kfileitemmodeltest.cpp
+++ b/src/tests/kfileitemmodeltest.cpp
@@ -24,9 +24,11 @@
#include "testdir.h"
namespace {
- const int DefaultTimeout = 2000;
+ const int DefaultTimeout = 5000;
};
+Q_DECLARE_METATYPE(KItemRangeList)
+
class KFileItemModelTest : public QObject
{
Q_OBJECT
@@ -39,7 +41,8 @@ private slots:
void testDefaultSortRole();
void testDefaultGroupRole();
void testNewItems();
- void testInsertingItems();
+ void testModelConsistencyWhenInsertingItems();
+ void testItemRangeConsistencyWhenInsertingItems();
void testExpansionLevelsCompare_data();
void testExpansionLevelsCompare();
@@ -120,9 +123,9 @@ void KFileItemModelTest::testNewItems()
QVERIFY(isModelConsistent());
}
-void KFileItemModelTest::testInsertingItems()
+void KFileItemModelTest::testModelConsistencyWhenInsertingItems()
{
- // QSKIP("Temporary disabled", SkipSingle);
+ QSKIP("Temporary disabled", SkipSingle);
// KFileItemModel prevents that inserting a punch of items sequentially
// results in an itemsInserted()-signal for each item. Instead internally
@@ -164,6 +167,58 @@ void KFileItemModelTest::testInsertingItems()
QCOMPARE(m_model->count(), 201);
}
+void KFileItemModelTest::testItemRangeConsistencyWhenInsertingItems()
+{
+ QStringList files;
+ files << "B" << "E" << "G";
+ m_testDir->createFiles(files);
+
+ // Due to inserting the 3 items one item-range with index == 0 and
+ // count == 3 must be given
+ QSignalSpy spy1(m_model, SIGNAL(itemsInserted(KItemRangeList)));
+ m_dirLister->openUrl(m_testDir->url());
+ QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
+
+ QCOMPARE(spy1.count(), 1);
+ QList<QVariant> arguments = spy1.takeFirst();
+ KItemRangeList itemRangeList = arguments.at(0).value<KItemRangeList>();
+ QCOMPARE(itemRangeList.count(), 1);
+ KItemRange itemRange = itemRangeList.first();
+ QCOMPARE(itemRange.index, 0);
+ QCOMPARE(itemRange.count, 3);
+
+ // The indexes of the item-ranges must always be related to the model before
+ // the items have been inserted. Having:
+ // 0 1 2
+ // B E G
+ // and inserting A, C, D, F the resulting model will be:
+ // 0 1 2 3 4 5 6
+ // A B C D E F G
+ // and the item-ranges must be:
+ // index: 0, count: 1 for A
+ // index: 1, count: 2 for B, C
+ // index: 2, count: 1 for G
+
+ files.clear();
+ files << "A" << "C" << "D" << "F";
+ m_testDir->createFiles(files);
+
+ QSignalSpy spy2(m_model, SIGNAL(itemsInserted(KItemRangeList)));
+ m_dirLister->updateDirectory(m_testDir->url());
+ QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
+
+ QCOMPARE(spy2.count(), 1);
+ arguments = spy2.takeFirst();
+ itemRangeList = arguments.at(0).value<KItemRangeList>();
+ QCOMPARE(itemRangeList.count(), 3);
+ QCOMPARE(itemRangeList.at(0).index, 0);
+ QCOMPARE(itemRangeList.at(0).count, 1);
+ QCOMPARE(itemRangeList.at(1).index, 1);
+ QCOMPARE(itemRangeList.at(1).count, 2);
+ QCOMPARE(itemRangeList.at(2).index, 2);
+ QCOMPARE(itemRangeList.at(2).count, 1);
+}
+
void KFileItemModelTest::testExpansionLevelsCompare_data()
{
QTest::addColumn<QString>("urlA");
diff --git a/src/tests/kitemlistselectionmanagertest.cpp b/src/tests/kitemlistselectionmanagertest.cpp
new file mode 100644
index 000000000..6fdf01b84
--- /dev/null
+++ b/src/tests/kitemlistselectionmanagertest.cpp
@@ -0,0 +1,172 @@
+/***************************************************************************
+ * Copyright (C) 2011 by Peter Penz <[email protected]> *
+ * *
+ * 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 <qtest_kde.h>
+
+#include "kitemviews/kitemmodelbase.h"
+#include "kitemviews/kitemlistselectionmanager.h"
+
+class DummyModel : public KItemModelBase
+{
+public:
+ DummyModel();
+ virtual int count() const;
+ virtual QHash<QByteArray, QVariant> data(int index) const;
+};
+
+DummyModel::DummyModel() :
+ KItemModelBase()
+{
+}
+
+int DummyModel::count() const
+{
+ return 100;
+}
+
+QHash<QByteArray, QVariant> DummyModel::data(int index) const
+{
+ Q_UNUSED(index);
+ return QHash<QByteArray, QVariant>();
+}
+
+
+
+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<int>("index");
+ QTest::addColumn<int>("count");
+ QTest::addColumn<int>("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<int> 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<int> 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"