]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Include parent-child relationships in KFileItemModel's consistency check
authorFrank Reininghaus <frank78ac@googlemail.com>
Sun, 10 Feb 2013 17:06:07 +0000 (18:06 +0100)
committerFrank Reininghaus <frank78ac@googlemail.com>
Sun, 10 Feb 2013 17:06:07 +0000 (18:06 +0100)
src/kitemviews/kfileitemmodel.cpp
src/tests/kfileitemmodeltest.cpp

index a763b3fff15d7f40ba836b664333902ffc298f73..d0fd3d77ca18181f6648144866924eb6d485427f 100644 (file)
@@ -2018,12 +2018,12 @@ void KFileItemModel::determineMimeTypes(const KFileItemList& items, int timeout)
 
 bool KFileItemModel::isConsistent() const
 {
-    // Check that m_items and m_itemData are consistent, and that the items are sorted.
     if (m_items.count() != m_itemData.count()) {
         return false;
     }
 
     for (int i = 0; i < count(); ++i) {
+        // Check if m_items and m_itemData are consistent.
         const KFileItem item = fileItem(i);
         if (item.isNull()) {
             qWarning() << "Item" << i << "is null";
@@ -2036,11 +2036,28 @@ bool KFileItemModel::isConsistent() const
             return false;
         }
 
+        // Check if the items are sorted correctly.
         if (i > 0 && !lessThan(m_itemData.at(i - 1), m_itemData.at(i))) {
             qWarning() << "The order of items" << i - 1 << "and" << i << "is wrong:"
                 << fileItem(i - 1) << fileItem(i);
             return false;
         }
+
+        // Check if all parent-child relationships are consistent.
+        const ItemData* data = m_itemData.at(i);
+        const ItemData* parent = data->parent;
+        if (parent) {
+            if (data->values.value("expandedParentsCount").toInt() != parent->values.value("expandedParentsCount").toInt() + 1) {
+                qWarning() << "expandedParentsCount is inconsistent for parent" << parent->item << "and child" << data->item;
+                return false;
+            }
+
+            const int parentIndex = index(parent->item);
+            if (parentIndex >= i) {
+                qWarning() << "Index" << parentIndex << "of parent" << parent->item << "is not smaller than index" << i << "of child" << data->item;
+                return false;
+            }
+        }
     }
 
     return true;
index 2ad18428a84fd5fe13c762b0e3967776a2cf3617..85a46488f51505d85b7882511fe6b716b249bac0 100644 (file)
@@ -486,6 +486,7 @@ void KFileItemModelTest::testExpandItems()
     QCOMPARE(spyRemoved.count(), 1);
     itemRangeList = spyRemoved.takeFirst().at(0).value<KItemRangeList>();
     QCOMPARE(itemRangeList, KItemRangeList() << KItemRange(1, 4)); // 4 items removed
+    QVERIFY(m_model->isConsistent());
 
     // Clear the model, reload the folder and try to restore the expanded folders.
     m_model->clear();
@@ -502,6 +503,7 @@ void KFileItemModelTest::testExpandItems()
     QVERIFY(m_model->isExpanded(3));
     QVERIFY(!m_model->isExpanded(4));
     QCOMPARE(m_model->expandedDirectories(), allFolders);
+    QVERIFY(m_model->isConsistent());
 
     // Move to a sub folder, then call restoreExpandedFolders() *before* going back.
     // This is how DolphinView restores the expanded folders when navigating in history.
@@ -564,6 +566,7 @@ void KFileItemModelTest::testExpandParentItems()
     QVERIFY(m_model->isExpanded(2));
     QVERIFY(m_model->isExpanded(3));
     QVERIFY(!m_model->isExpanded(4));
+    QVERIFY(m_model->isConsistent());
 }
 
 void KFileItemModelTest::testSorting()