Autotest for crash when moving a collection in kmail.

Was fixed in Qt and kitemmodels.
wilder
David Faure 9 years ago
parent 426870cc46
commit 22a10f2385
  1. 47
      autotests/foldertreewidgettest.cpp

@ -32,6 +32,7 @@
#include <AkonadiCore/CollectionDeleteJob>
#include <AkonadiCore/CollectionCreateJob>
#include <AkonadiCore/CollectionFetchJob>
#include <AkonadiCore/CollectionMoveJob>
#include <AkonadiCore/EntityOrderProxyModel>
#include <KMime/Message>
@ -53,6 +54,8 @@
#include "dummykernel.cpp"
//#define SHOW_WIDGET
using namespace Akonadi;
class FolderTreeWidgetTest : public QObject
@ -179,6 +182,48 @@ private Q_SLOTS:
QCOMPARE(collectNames(mTopModel), mFolderNames);
}
void testMoveFolder()
{
#if QT_VERSION < QT_VERSION_CHECK(5, 8, 1) || KITEMMODELS_VERSION < QT_VERSION_CHECK(5, 30, 0)
QSKIP("This test requires fixes in QSFPM, QIPM (which were made in Qt 5.8.1) and KExtraColumnsProxyModel >= 5.30");
#endif
// Given a source folder with 2 levels of parents (res1/sub1/sub2)
const QStringList folderNames = collectNames(mCollectionModel);
const QModelIndex res1Index = mCollectionModel->index(folderNames.indexOf("res1"), 0, QModelIndex());
const Collection topLevelCollection = res1Index.data(EntityTreeModel::CollectionRole).value<Collection>();
QCOMPARE(topLevelCollection.name(), QStringLiteral("res1"));
const int parentCount = 2;
Collection currentColl = topLevelCollection;
for (int number = 0; number < parentCount; ++number) {
Collection mailCollection;
mailCollection.setParentCollection(currentColl);
mailCollection.setName(QStringLiteral("sub%1").arg(number+1));
CollectionCreateJob *collCreateJob = new CollectionCreateJob(mailCollection);
AKVERIFYEXEC(collCreateJob);
currentColl = collCreateJob->collection();
}
QTRY_COMPARE(mCollectionModel->rowCount(res1Index), 1);
// ... and a dest folder in another resource
const QPersistentModelIndex res2Index = mCollectionModel->index(folderNames.indexOf("res2"), 0, QModelIndex());
const int origRowCount = mCollectionModel->rowCount(res2Index);
const Collection newParentCollection = res2Index.data(EntityTreeModel::CollectionRole).value<Collection>();
QCOMPARE(newParentCollection.name(), QStringLiteral("res2"));
QTest::qWait(100); // #### akonadi bug? Without this, a warning "Only resources can modify remote identifiers" appears
// When moving the source folder (sub2) to the dest folder
CollectionMoveJob *collMoveJob = new CollectionMoveJob(currentColl, newParentCollection);
AKVERIFYEXEC(collMoveJob);
// wait for Akonadi::Monitor::collectionMoved
QTRY_COMPARE(mCollectionModel->rowCount(res2Index), origRowCount+1);
#ifdef SHOW_WIDGET
QTest::qWait(1000);
#endif
}
private:
static Collection topLevelCollectionForResource(const QString &identifier)
{
@ -202,6 +247,7 @@ private:
static void checkMailFolders(const QModelIndex &parent)
{
const QAbstractItemModel *model = parent.model();
QVERIFY(model);
for (int row = 0; row < model->rowCount(parent); ++row) {
QModelIndex idx = model->index(row, 0, parent);
QModelIndex col1idx = model->index(row, 1, parent);
@ -221,6 +267,7 @@ private:
QStringList FolderTreeWidgetTest::collectNames(QAbstractItemModel *model)
{
QStringList ret;
ret.reserve(model->rowCount());
for (int row = 0; row < model->rowCount(); ++row) {
ret.append(model->index(row, 0).data().toString());
}

Loading…
Cancel
Save