diff options
| author | Peter Penz <[email protected]> | 2011-08-08 23:41:18 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-08-09 16:22:36 +0200 |
| commit | 3957884bf2e44619a4ed35ba0ffead519988885b (patch) | |
| tree | d8a5bf1a015cc6001adb4afc5f0f1da721908a22 /src/tests | |
| parent | 4692eb7c96f57328479862c0d17d7945b4e87188 (diff) | |
Improvements for selections, smooth scrolling, tooltips and info-panel
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | src/tests/kfileitemlistviewtest.cpp | 14 | ||||
| -rw-r--r-- | src/tests/kfileitemmodeltest.cpp | 63 | ||||
| -rw-r--r-- | src/tests/kitemlistselectionmanagertest.cpp | 172 |
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" |
