┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2013-01-27 15:19:39 +0100
committerFrank Reininghaus <[email protected]>2013-01-27 15:19:39 +0100
commitf76f3a165419b048f9f8bcdfcb40042397b9af9b (patch)
tree9bddd01912d2b954550b12923474d1ee7a4ba7ac
parentd1b75d1d64d803d2b1099fb26f114342092249e3 (diff)
Move the consistency check for KFileItemModel from the test to the class
This makes it possible to check the model's consistency also in other places, e.g., in KFileItemModel's benchmark.
-rw-r--r--src/kitemviews/kfileitemmodel.cpp30
-rw-r--r--src/kitemviews/kfileitemmodel.h5
-rw-r--r--src/tests/kfileitemmodelbenchmark.cpp2
-rw-r--r--src/tests/kfileitemmodeltest.cpp38
4 files changed, 44 insertions, 31 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index 5ee4a7877..ab39e55e5 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -2016,4 +2016,34 @@ 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) {
+ const KFileItem item = fileItem(i);
+ if (item.isNull()) {
+ qWarning() << "Item" << i << "is null";
+ return false;
+ }
+
+ const int itemIndex = index(item);
+ if (itemIndex != i) {
+ qWarning() << "Item" << i << "has a wrong index:" << itemIndex;
+ return false;
+ }
+
+ 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;
+ }
+ }
+
+ return true;
+}
+
#include "kfileitemmodel.moc"
diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h
index 14383d66e..903291a4c 100644
--- a/src/kitemviews/kfileitemmodel.h
+++ b/src/kitemviews/kfileitemmodel.h
@@ -434,6 +434,11 @@ private:
*/
static void determineMimeTypes(const KFileItemList& items, int timeout);
+ /**
+ * Checks if the model's internal data structures are consistent.
+ */
+ bool isConsistent() const;
+
private:
KFileItemModelDirLister* m_dirLister;
diff --git a/src/tests/kfileitemmodelbenchmark.cpp b/src/tests/kfileitemmodelbenchmark.cpp
index f1be69da3..7017863ab 100644
--- a/src/tests/kfileitemmodelbenchmark.cpp
+++ b/src/tests/kfileitemmodelbenchmark.cpp
@@ -183,6 +183,8 @@ void KFileItemModelBenchmark::insertAndRemoveManyItems()
QCOMPARE(model.count(), initialItems.count() + newItems.count() - removedItems.count());
}
+ QVERIFY(model.isConsistent());
+
for (int i = 0; i < model.count(); ++i) {
QCOMPARE(model.fileItem(i), expectedFinalItems.at(i));
}
diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp
index 9d53ea7e6..3fc2b7c9a 100644
--- a/src/tests/kfileitemmodeltest.cpp
+++ b/src/tests/kfileitemmodeltest.cpp
@@ -78,7 +78,6 @@ private slots:
void testNameFilter();
private:
- bool isModelConsistent() const;
QStringList itemsInModel() const;
private:
@@ -153,7 +152,7 @@ void KFileItemModelTest::testNewItems()
QCOMPARE(m_model->count(), 3);
- QVERIFY(isModelConsistent());
+ QVERIFY(m_model->isConsistent());
}
void KFileItemModelTest::testRemoveItems()
@@ -163,13 +162,13 @@ void KFileItemModelTest::testRemoveItems()
m_model->loadDirectory(m_testDir->url());
QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
QCOMPARE(m_model->count(), 2);
- QVERIFY(isModelConsistent());
+ QVERIFY(m_model->isConsistent());
m_testDir->removeFile("a.txt");
m_model->m_dirLister->updateDirectory(m_testDir->url());
QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsRemoved(KItemRangeList)), DefaultTimeout));
QCOMPARE(m_model->count(), 1);
- QVERIFY(isModelConsistent());
+ QVERIFY(m_model->isConsistent());
}
void KFileItemModelTest::testDirLoadingCompleted()
@@ -212,7 +211,7 @@ void KFileItemModelTest::testDirLoadingCompleted()
QCOMPARE(itemsRemovedSpy.count(), 2);
QCOMPARE(m_model->count(), 4);
- QVERIFY(isModelConsistent());
+ QVERIFY(m_model->isConsistent());
}
void KFileItemModelTest::testSetData()
@@ -233,7 +232,7 @@ void KFileItemModelTest::testSetData()
values = m_model->data(0);
QCOMPARE(values.value("customRole1").toString(), QString("Test1"));
QCOMPARE(values.value("customRole2").toString(), QString("Test2"));
- QVERIFY(isModelConsistent());
+ QVERIFY(m_model->isConsistent());
}
void KFileItemModelTest::testSetDataWithModifiedSortRole_data()
@@ -314,7 +313,7 @@ void KFileItemModelTest::testSetDataWithModifiedSortRole()
QCOMPARE(m_model->data(0).value("rating").toInt(), ratingIndex0);
QCOMPARE(m_model->data(1).value("rating").toInt(), ratingIndex1);
QCOMPARE(m_model->data(2).value("rating").toInt(), ratingIndex2);
- QVERIFY(isModelConsistent());
+ QVERIFY(m_model->isConsistent());
}
void KFileItemModelTest::testModelConsistencyWhenInsertingItems()
@@ -353,7 +352,7 @@ void KFileItemModelTest::testModelConsistencyWhenInsertingItems()
QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
}
- QVERIFY(isModelConsistent());
+ QVERIFY(m_model->isConsistent());
}
QCOMPARE(m_model->count(), 201);
@@ -774,29 +773,6 @@ void KFileItemModelTest::testNameFilter()
QCOMPARE(m_model->count(), 5);
}
-bool KFileItemModelTest::isModelConsistent() const
-{
- if (m_model->m_items.count() != m_model->m_itemData.count()) {
- return false;
- }
-
- for (int i = 0; i < m_model->count(); ++i) {
- const KFileItem item = m_model->fileItem(i);
- if (item.isNull()) {
- qWarning() << "Item" << i << "is null";
- return false;
- }
-
- const int itemIndex = m_model->index(item);
- if (itemIndex != i) {
- qWarning() << "Item" << i << "has a wrong index:" << itemIndex;
- return false;
- }
- }
-
- return true;
-}
-
QStringList KFileItemModelTest::itemsInModel() const
{
QStringList items;