diff options
author | Valerio Valerio <valerio.valerio@nokia.com> | 2012-01-02 10:56:35 +0200 |
---|---|---|
committer | Valerio Valerio <valerio.valerio@nokia.com> | 2012-01-02 10:56:35 +0200 |
commit | 199908c8a14e78e98e65f229e6f4b48446bf41b2 (patch) | |
tree | e7247c5c73e6569ab3d9300058cf8b38097e3a1b | |
parent | 82056aabb7feaf7f261b4e1f68d007e0f889f3a8 (diff) |
Fix duplicate signal emission of addMessages(Revert of Patrick's patch).
Fix duplicate signal emission of addMessages and updateMessagesMetaData.
Add UTs to verify that the signals are emitted only once per message added.
-rw-r--r-- | src/libraries/qmfclient/qmailstore.cpp | 7 | ||||
-rw-r--r-- | tests/tst_qmailstore/tst_qmailstore.cpp | 29 |
2 files changed, 34 insertions, 2 deletions
diff --git a/src/libraries/qmfclient/qmailstore.cpp b/src/libraries/qmfclient/qmailstore.cpp index b8e50d82..00fb858e 100644 --- a/src/libraries/qmfclient/qmailstore.cpp +++ b/src/libraries/qmfclient/qmailstore.cpp @@ -296,6 +296,8 @@ bool QMailStore::addMessages(const QList<QMailMessage*>& messages) emitMessageNotification(Added, addedMessageIds); emitThreadNotification(Added, addedThreadIds); + emitMessageDataNotification(Added, dataList(messages, addedMessageIds)); + emitMessageDataNotification(Updated, dataList(messages, updatedMessageIds)); emitMessageNotification(Updated, updatedMessageIds); emitFolderNotification(ContentsModified, modifiedFolderIds); emitThreadNotification(ContentsModified, modifiedThreadIds); @@ -322,6 +324,8 @@ bool QMailStore::addMessages(const QList<QMailMessageMetaData*>& messages) if (!d->addMessages(messages, &addedMessageIds, &addedThreadIds, &updatedMessageIds, &modifiedFolderIds, &modifiedThreadIds, &modifiedAccountIds)) return false; + emitMessageNotification(Added, addedMessageIds); + emitMessageNotification(Updated, updatedMessageIds); emitMessageDataNotification(Added, dataList(messages, addedMessageIds)); emitThreadNotification(Added, addedThreadIds); emitMessageDataNotification(Updated, dataList(messages, updatedMessageIds)); @@ -690,6 +694,7 @@ bool QMailStore::updateMessagesMetaData(const QMailMessageKey& key, if (!d->updateMessagesMetaData(key, properties, data, &updatedMessages, &modifiedFolders, &modifiedAccounts)) return false; + emitMessageNotification(Updated, updatedMessages); emitMessageDataNotification(updatedMessages, properties, data); emitFolderNotification(ContentsModified, modifiedFolders); emitAccountNotification(ContentsModified, modifiedAccounts); @@ -1276,8 +1281,6 @@ void QMailStore::emitMessageNotification(ChangeType type, const QMailMessageIdLi // Ensure there are no duplicates in the list QMailMessageIdList idList(ids.toSet().toList()); - d->notifyMessagesChange(type, idList); - switch (type) { case Added: emit messagesAdded(idList); diff --git a/tests/tst_qmailstore/tst_qmailstore.cpp b/tests/tst_qmailstore/tst_qmailstore.cpp index 88a1824a..da30fdb0 100644 --- a/tests/tst_qmailstore/tst_qmailstore.cpp +++ b/tests/tst_qmailstore/tst_qmailstore.cpp @@ -42,6 +42,7 @@ #include <QObject> #include <QTest> #include <QSqlQuery> +#include <QSignalSpy> #include <qmailstore.h> #include <QSettings> #include <qmailnamespace.h> @@ -335,6 +336,9 @@ void tst_QMailStore::addFolder() void tst_QMailStore::addMessage() { + QSignalSpy spyMessagesAdded(QMailStore::instance(), SIGNAL(messagesAdded(QMailMessageIdList))); + QSignalSpy spyMessageDataAdded(QMailStore::instance(), SIGNAL(messageDataAdded(QMailMessageMetaDataList))); + QMailAccount account; account.setName("Account"); @@ -423,10 +427,17 @@ void tst_QMailStore::addMessage() QCOMPARE(message3.customField("answer"), QString("Fido")); QCOMPARE(message3.dataModified(), false); QCOMPARE(message3.contentModified(), false); + + //Verify that the signals are only emitted once + QCOMPARE(spyMessagesAdded.count(), 1); + QCOMPARE(spyMessageDataAdded.count(), 1); } void tst_QMailStore::addMessages() { + QSignalSpy spyMessagesAdded(QMailStore::instance(), SIGNAL(messagesAdded(QMailMessageIdList))); + QSignalSpy spyMessageDataAdded(QMailStore::instance(), SIGNAL(messageDataAdded(QMailMessageMetaDataList))); + QMailAccount account; account.setName("Account"); @@ -496,6 +507,10 @@ void tst_QMailStore::addMessages() QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 9, 0), messageIds.mid(0, 9)); QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 9, 1), messageIds.mid(1, 9)); QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 10, 0), messageIds); + + //Verify that the signals are only emitted once + QCOMPARE(spyMessagesAdded.count(), 1); + QCOMPARE(spyMessageDataAdded.count(), 1); } void tst_QMailStore::addMessages2() @@ -848,6 +863,9 @@ void tst_QMailStore::updateFolder() void tst_QMailStore::updateMessage() { + QSignalSpy spyMessagesUpdated(QMailStore::instance(), SIGNAL(messagesUpdated(QMailMessageIdList))); + QSignalSpy spyMessagesDataUpdated(QMailStore::instance(), SIGNAL(messageDataUpdated(QMailMessageMetaDataList))); + QMailAccount account; account.setName("Account"); @@ -949,6 +967,10 @@ void tst_QMailStore::updateMessage() QCOMPARE(message2.dataModified(), false); QCOMPARE(message2.contentModified(), false); + //Verify that the signals are only emitted once + QCOMPARE(spyMessagesUpdated.count(), 1); + QCOMPARE(spyMessagesDataUpdated.count(), 1); + // Add an additional message QMailMessage message3; message3.setParentAccountId(account.id()); @@ -1117,6 +1139,9 @@ void tst_QMailStore::updateMessage() void tst_QMailStore::updateMessages() { + QSignalSpy spyMessagesUpdated(QMailStore::instance(), SIGNAL(messagesUpdated(QMailMessageIdList))); + QSignalSpy spyMessagesDataUpdated(QMailStore::instance(), SIGNAL(messageDataUpdated(QMailMessageMetaDataList))); + QMailAccount account; account.setName("Account"); @@ -1190,6 +1215,10 @@ void tst_QMailStore::updateMessages() QCOMPARE(message.subject(), QString("Message %1").arg(i + 100)); QCOMPARE(message.body().data(), QString("Hi #%1").arg(i + 100)); } + + //Verify that the signals are only emitted once + QCOMPARE(spyMessagesUpdated.count(), 1); + QCOMPARE(spyMessagesDataUpdated.count(), 1); } void tst_QMailStore::removeAccount() |