]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Add unit test for bug 314046
authorFrank Reininghaus <frank78ac@googlemail.com>
Wed, 30 Jan 2013 20:02:43 +0000 (21:02 +0100)
committerFrank Reininghaus <frank78ac@googlemail.com>
Wed, 30 Jan 2013 20:02:43 +0000 (21:02 +0100)
The regression happened in the master branch only, but I think it
doesn't hurt to add the test to the stable branch.

CCBUG: 314046

src/tests/kfileitemmodeltest.cpp

index 65368b75baf3addb2aa330ecf0fa172a6d5a26d3..719459c6f7acc08a1642f52aef782f9a46ef4ab7 100644 (file)
@@ -75,6 +75,7 @@ private slots:
     void testIndexForKeyboardSearch();
     void testNameFilter();
     void testEmptyPath();
+    void testRemoveHiddenItems();
 
 private:
     bool isModelConsistent() const;
@@ -798,6 +799,56 @@ void KFileItemModelTest::testEmptyPath()
     m_model->slotCompleted();
 }
 
+/**
+ * Verify that removing hidden files and folders from the model does not
+ * result in a crash, see https://bugs.kde.org/show_bug.cgi?id=314046
+ */
+void KFileItemModelTest::testRemoveHiddenItems()
+{
+    m_testDir->createDir(".a");
+    m_testDir->createDir(".b");
+    m_testDir->createDir("c");
+    m_testDir->createDir("d");
+    m_testDir->createFiles(QStringList() << ".f" << ".g" << "h" << "i");
+
+    QSignalSpy spyItemsInserted(m_model, SIGNAL(itemsInserted(KItemRangeList)));
+    QSignalSpy spyItemsRemoved(m_model, SIGNAL(itemsRemoved(KItemRangeList)));
+
+    m_model->setShowHiddenFiles(true);
+    m_model->loadDirectory(m_testDir->url());
+    QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
+    QCOMPARE(itemsInModel(), QStringList() << ".a" << ".b" << "c" << "d" <<".f" << ".g" << "h" << "i");
+    QCOMPARE(spyItemsInserted.count(), 1);
+    QCOMPARE(spyItemsRemoved.count(), 0);
+    KItemRangeList itemRangeList = spyItemsInserted.takeFirst().at(0).value<KItemRangeList>();
+    QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(0, 8));
+
+    m_model->setShowHiddenFiles(false);
+    QCOMPARE(itemsInModel(), QStringList() << "c" << "d" << "h" << "i");
+    QCOMPARE(spyItemsInserted.count(), 0);
+    QCOMPARE(spyItemsRemoved.count(), 1);
+    itemRangeList = spyItemsRemoved.takeFirst().at(0).value<KItemRangeList>();
+    QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(0, 2) << KItemRange(4, 2));
+
+    m_model->setShowHiddenFiles(true);
+    QCOMPARE(itemsInModel(), QStringList() << ".a" << ".b" << "c" << "d" <<".f" << ".g" << "h" << "i");
+    QCOMPARE(spyItemsInserted.count(), 1);
+    QCOMPARE(spyItemsRemoved.count(), 0);
+    itemRangeList = spyItemsInserted.takeFirst().at(0).value<KItemRangeList>();
+    QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(0, 2) << KItemRange(2, 2));
+
+    m_model->clear();
+    QCOMPARE(itemsInModel(), QStringList());
+    QCOMPARE(spyItemsInserted.count(), 0);
+    QCOMPARE(spyItemsRemoved.count(), 1);
+    itemRangeList = spyItemsRemoved.takeFirst().at(0).value<KItemRangeList>();
+    QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(0, 8));
+
+    // Hiding hidden files makes the dir lister emit its itemsDeleted signal.
+    // Verify that this does not make the model crash.
+    m_model->setShowHiddenFiles(false);
+}
+
 bool KFileItemModelTest::isModelConsistent() const
 {
     if (m_model->m_items.count() != m_model->m_itemData.count()) {