[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdepimlibs] akonadi/calendar/tests: More unit-tests for the History class.
From: Sergio Martins <iamsergio () gmail ! com>
Date: 2013-09-25 18:56:37
Message-ID: E1VOuGL-0008BX-Mu () scm ! kde ! org
[Download RAW message or body]
Git commit 62ec41d15c608b26f3b20348a5caf9b58a88dd5f by Sergio Martins.
Committed on 25/09/2013 at 19:36.
Pushed by smartins into branch 'master'.
More unit-tests for the History class.
M +115 -0 akonadi/calendar/tests/historytest.cpp
http://commits.kde.org/kdepimlibs/62ec41d15c608b26f3b20348a5caf9b58a88dd5f
diff --git a/akonadi/calendar/tests/historytest.cpp b/akonadi/calendar/tests/historytest.cpp
index b881b35..a113fff 100644
--- a/akonadi/calendar/tests/historytest.cpp
+++ b/akonadi/calendar/tests/historytest.cpp
@@ -456,6 +456,115 @@ private Q_SLOTS:
QCOMPARE(mHistory->d->undoCount(), 0 );
}
+
+ // Tests a sequence of various create/delete/modify operations
+ void testMix_data()
+ {
+ QTest::addColumn<Akonadi::Item::List>("items");
+ QTest::addColumn<QList<Akonadi::IncidenceChanger::ChangeType> >("changeTypes");
+
+ Akonadi::Item::List items;
+ QList<Akonadi::IncidenceChanger::ChangeType> changeTypes;
+ //------------------------------------------------------------------------------------------
+ // Create two incidences
+ items.clear();
+ items << item() << item();
+ changeTypes.clear();
+ changeTypes << IncidenceChanger::ChangeTypeCreate << IncidenceChanger::ChangeTypeCreate;
+ QTest::newRow("create two - success ") << items << changeTypes;
+ //------------------------------------------------------------------------------------------
+ // Create one, then delete it
+ Akonadi::Item i = item();
+ items.clear();
+ items << i << i;
+ changeTypes.clear();
+ changeTypes << IncidenceChanger::ChangeTypeCreate << IncidenceChanger::ChangeTypeDelete;
+ QTest::newRow("create then delete") << items << changeTypes;
+ //------------------------------------------------------------------------------------------
+ // Create one, then modify it
+ i = item();
+ items.clear();
+ items << i << i;
+ changeTypes.clear();
+ changeTypes << IncidenceChanger::ChangeTypeCreate << IncidenceChanger::ChangeTypeModify;
+ //QTest::newRow("create then modify") << items << changeTypes; doesn't pass yet.
+ }
+
+ void testMix()
+ {
+ QFETCH(Akonadi::Item::List, items);
+ QFETCH(QList<Akonadi::IncidenceChanger::ChangeType>, changeTypes);
+ int lastChangeId = -1;
+ mHistory->clear();
+ mChanger->setDefaultCollection(mCollection);
+ mChanger->setRespectsCollectionRights(false);
+ mChanger->setDestinationPolicy(IncidenceChanger::DestinationPolicyNeverAsk);
+
+ for (int i=0; i<items.count(); ++i) {
+ Akonadi::Item item = items[i];
+ switch (changeTypes[i]) {
+ case IncidenceChanger::ChangeTypeCreate:
+ lastChangeId = mChanger->createIncidence(item.payload<KCalCore::Incidence::Ptr>());
+ QVERIFY(lastChangeId != -1);
+ mKnownChangeIds << lastChangeId;
+ ++mPendingSignals[CreationSignal];
+ waitForSignals();
+ break;
+ case IncidenceChanger::ChangeTypeDelete:
+ lastChangeId = mChanger->deleteIncidence(item.isValid() ? item : mItemByChangeId.value(lastChangeId));
+ QVERIFY(lastChangeId != -1);
+ mKnownChangeIds << lastChangeId;
+ ++mPendingSignals[DeletionSignal];
+ waitForSignals();
+ break;
+ case IncidenceChanger::ChangeTypeModify:
+ {
+ item = item.isValid() ? item : mItemByChangeId.value(lastChangeId);
+ QVERIFY(item.isValid());
+ QVERIFY(item.hasPayload<KCalCore::Incidence::Ptr>());
+ Incidence::Ptr originalPayload = Incidence::Ptr(item.payload<KCalCore::Incidence::Ptr>()->clone());
+ item.payload<KCalCore::Incidence::Ptr>()->setSummary(QLatin1String("Changed"));
+ QVERIFY(originalPayload);
+ lastChangeId = mChanger->modifyIncidence(item, originalPayload);
+ QVERIFY(lastChangeId != -1);
+ mKnownChangeIds << lastChangeId;
+ ++mPendingSignals[ModificationSignal];
+ waitForSignals();
+ }
+ break;
+ default:
+ QVERIFY(false);
+ }
+
+ }
+
+ QCOMPARE(mHistory->d->undoCount(), changeTypes.count());
+
+ // All operations are done, now undo them:
+ for (int i=0; i<changeTypes.count(); i++) {
+ QCOMPARE(mHistory->d->undoCount(), changeTypes.count()-i);
+ QCOMPARE(mHistory->d->redoCount(), i);
+ mPendingSignals[UndoSignal] = 1;
+ mHistory->undo();
+ waitForSignals();
+ }
+
+ QCOMPARE(mHistory->d->undoCount(), 0);
+ QCOMPARE(mHistory->d->redoCount(), changeTypes.count());
+
+ // Now redo them
+ for (int i=0; i<changeTypes.count(); i++) {
+ QCOMPARE(mHistory->d->undoCount(), i);
+ QCOMPARE(mHistory->d->redoCount(), changeTypes.count()-i);
+ mPendingSignals[RedoSignal] = 1;
+ mHistory->redo();
+ waitForSignals();
+ }
+
+ QCOMPARE(mHistory->d->undoCount(), changeTypes.count());
+ QCOMPARE(mHistory->d->redoCount(), 0);
+ }
+
private:
void waitForSignals()
{
@@ -536,12 +645,18 @@ public Q_SLOTS:
Akonadi::IncidenceChanger::ResultCode resultCode,
const QString &errorString )
{
+ if (mPendingSignals[ModificationSignal] == 0) {
+ qDebug() << "This shouldnt be zero";
+ return;
+ }
+
--mPendingSignals[ModificationSignal];
if ( !mKnownChangeIds.contains(changeId) )
return;
QVERIFY( changeId != -1 );
+ QCOMPARE( resultCode, IncidenceChanger::ResultCodeSuccess );
if ( resultCode == IncidenceChanger::ResultCodeSuccess )
QVERIFY( item.isValid() );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic