qtmobility/tests/auto/qmessagestore/tst_qmessagestore.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 5 453da2cfceef
equal deleted inserted replaced
1:2b40d63a9c3d 4:90517678cc4f
    40 ****************************************************************************/
    40 ****************************************************************************/
    41 #include <QObject>
    41 #include <QObject>
    42 #include <QTest>
    42 #include <QTest>
    43 #include <QSharedPointer>
    43 #include <QSharedPointer>
    44 #include <QDebug>
    44 #include <QDebug>
       
    45 #include <QTimer>
       
    46 #include <QEventLoop>
       
    47 #include <QFile>
    45 
    48 
    46 #include "qtmessaging.h"
    49 #include "qtmessaging.h"
    47 #include "../support/support.h"
    50 #include "../support/support.h"
    48 
    51 
    49 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN) && defined(_WIN32_WCE))
    52 #if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN) && defined(_WIN32_WCE))
   237     QTest::addColumn<QString>("parentFolderPath");
   240     QTest::addColumn<QString>("parentFolderPath");
   238     QTest::addColumn<QString>("nameResult");
   241     QTest::addColumn<QString>("nameResult");
   239 
   242 
   240 	// Note: on Win CE, we can't use 'Inbox' 'Drafts' etc., becuase they're added automatically by the system
   243 	// Note: on Win CE, we can't use 'Inbox' 'Drafts' etc., becuase they're added automatically by the system
   241     QTest::newRow("Inbox") << "Unbox" << "Unbox" << "" << "Unbox";
   244     QTest::newRow("Inbox") << "Unbox" << "Unbox" << "" << "Unbox";
   242 #ifndef Q_OS_SYMBIAN
   245 #if !defined(Q_OS_SYMBIAN) && !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
   243     // Symbian does not currently support paths
   246     // Symbian does not currently support paths
   244     QTest::newRow("Drafts") << "Crafts" << "" << "" << "Crafts";
   247     QTest::newRow("Drafts") << "Crafts" << "" << "" << "Crafts";
   245     QTest::newRow("Archived") << "Unbox/Archived" << "Archived" << "Unbox" << "Archived";
   248     QTest::newRow("Archived") << "Unbox/Archived" << "Archived" << "Unbox" << "Archived";
   246     QTest::newRow("Backup") << "Unbox/Archived/Backup" << "Backup" << "Unbox/Archived" << "Backup";
   249     QTest::newRow("Backup") << "Unbox/Archived/Backup" << "Backup" << "Unbox/Archived" << "Backup";
   247 #endif    
   250 #endif    
   272     p.insert("path", path);
   275     p.insert("path", path);
   273     p.insert("name", name);
   276     p.insert("name", name);
   274     p.insert("parentAccountName", testAccountName);
   277     p.insert("parentAccountName", testAccountName);
   275     p.insert("parentFolderPath", parentFolderPath);
   278     p.insert("parentFolderPath", parentFolderPath);
   276 
   279 
   277 #if defined(Q_OS_SYMBIAN)
   280 #if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
   278     int originalCount = manager->countFolders(QMessageFolderFilter::byParentAccountId(testAccountId));
   281     int originalCount = manager->countFolders(QMessageFolderFilter::byParentAccountId(testAccountId));
   279 #else
   282 #else
   280     int originalCount = manager->countFolders();
   283     int originalCount = manager->countFolders();
   281 #endif    
   284 #endif    
   282 
   285 
   283     QMessageFolderId folderId(Support::addFolder(p));
   286     QMessageFolderId folderId(Support::addFolder(p));
   284     QVERIFY(folderId.isValid());
   287     QVERIFY(folderId.isValid());
   285     QVERIFY(folderId != QMessageFolderId());
   288     QVERIFY(folderId != QMessageFolderId());
   286 #if defined(Q_OS_SYMBIAN)
   289 #if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
   287     QCOMPARE(manager->countFolders(QMessageFolderFilter::byParentAccountId(testAccountId)), originalCount + 1);
   290     QCOMPARE(manager->countFolders(QMessageFolderFilter::byParentAccountId(testAccountId)), originalCount + 1);
   288 #else
   291 #else
   289     QCOMPARE(manager->countFolders(), originalCount + 1);
   292     QCOMPARE(manager->countFolders(), originalCount + 1);
   290 #endif    
   293 #endif    
   291     
   294     
   470         QMessageAccount acc(testAccountId);
   473         QMessageAccount acc(testAccountId);
   471     }
   474     }
   472     QVERIFY(testAccountId.isValid());
   475     QVERIFY(testAccountId.isValid());
   473 
   476 
   474     QMessageFolderId testFolderId;
   477     QMessageFolderId testFolderId;
   475 #ifndef Q_OS_SYMBIAN
   478 #if !defined(Q_OS_SYMBIAN) && !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
   476     QMessageFolderFilter filter(QMessageFolderFilter::byName("Inbox") & QMessageFolderFilter::byParentAccountId(testAccountId));
   479     QMessageFolderFilter filter(QMessageFolderFilter::byName("Inbox") & QMessageFolderFilter::byParentAccountId(testAccountId));
   477 #else
   480 #else
   478     // Created Messages can not be stored into "Inbox" folder in Symbian
   481     // Created Messages can not be stored into "Inbox" folder in Symbian & Meamo
   479     QMessageFolderFilter filter(QMessageFolderFilter::byName("Unbox") & QMessageFolderFilter::byParentAccountId(testAccountId));
   482     QMessageFolderFilter filter(QMessageFolderFilter::byName("Unbox") & QMessageFolderFilter::byParentAccountId(testAccountId));
   480 #endif
   483 #endif
   481     QMessageFolderIdList folderIds(manager->queryFolders(filter));
   484     QMessageFolderIdList folderIds(manager->queryFolders(filter));
   482     if (folderIds.isEmpty()) {
   485     if (folderIds.isEmpty()) {
   483         Support::Parameters p;
   486         Support::Parameters p;
   484 #ifndef Q_OS_SYMBIAN
   487 #if !defined(Q_OS_SYMBIAN) && !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
   485         p.insert("path", "Inbox");
   488         p.insert("path", "Inbox");
   486         p.insert("name", "Inbox");
   489         p.insert("name", "Inbox");
   487 #else
   490 #else
   488         // Created Messages can not be stored into "Inbox" folder in Symbian
   491         // Created Messages can not be stored into "Inbox" folder in Symbian & Maemo
   489         p.insert("path", "Unbox");
   492         p.insert("path", "Unbox");
   490         p.insert("name", "Unbox");
   493         p.insert("name", "Unbox");
   491 #endif
   494 #endif
   492         p.insert("parentAccountName", testAccountName);
   495         p.insert("parentAccountName", testAccountName);
   493         testFolderId = Support::addFolder(p);
   496         testFolderId = Support::addFolder(p);
   495         testFolderId = folderIds.first();
   498         testFolderId = folderIds.first();
   496     }
   499     }
   497     QVERIFY(testFolderId.isValid());
   500     QVERIFY(testFolderId.isValid());
   498 
   501 
   499     QMessageFolder testFolder(testFolderId);
   502     QMessageFolder testFolder(testFolderId);
       
   503 
       
   504 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
       
   505     // Wait 1/100 second to make sure that there is
       
   506     // enough time to start monitoring new folder
       
   507     {
       
   508         QEventLoop eventLoop;
       
   509         QTimer::singleShot(100, &eventLoop, SLOT(quit()));
       
   510         eventLoop.exec();
       
   511     }
       
   512     // Note: QTest::qSleep(100); can not be used
       
   513     //       because QTest::qSleep(100); blocks
       
   514     //       signaling from other threads
       
   515 #endif
   500 
   516 
   501     SignalCatcher catcher;
   517     SignalCatcher catcher;
   502     connect(manager, SIGNAL(messageAdded(QMessageId, QMessageManager::NotificationFilterIdSet)), &catcher, SLOT(messageAdded(QMessageId, QMessageManager::NotificationFilterIdSet)));
   518     connect(manager, SIGNAL(messageAdded(QMessageId, QMessageManager::NotificationFilterIdSet)), &catcher, SLOT(messageAdded(QMessageId, QMessageManager::NotificationFilterIdSet)));
   503     connect(manager, SIGNAL(messageUpdated(QMessageId, QMessageManager::NotificationFilterIdSet)), &catcher, SLOT(messageUpdated(QMessageId, QMessageManager::NotificationFilterIdSet)));
   519     connect(manager, SIGNAL(messageUpdated(QMessageId, QMessageManager::NotificationFilterIdSet)), &catcher, SLOT(messageUpdated(QMessageId, QMessageManager::NotificationFilterIdSet)));
   504 
   520 
   554     QMessageId messageId(Support::addMessage(p));
   570     QMessageId messageId(Support::addMessage(p));
   555     QVERIFY(messageId.isValid());
   571     QVERIFY(messageId.isValid());
   556     QVERIFY(messageId != QMessageId());
   572     QVERIFY(messageId != QMessageId());
   557     QCOMPARE(manager->countMessages(), originalCount + 1);
   573     QCOMPARE(manager->countMessages(), originalCount + 1);
   558 
   574 
       
   575 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
       
   576     // Wait 1 second to make sure that there is
       
   577     // enough time to get add signal
       
   578     {
       
   579         QEventLoop eventLoop;
       
   580         QTimer::singleShot(1000, &eventLoop, SLOT(quit()));
       
   581         eventLoop.exec();
       
   582     }
       
   583 #endif
       
   584 
   559 #if defined(Q_OS_WIN)
   585 #if defined(Q_OS_WIN)
   560 	// Give MAPI enough time to emit the message added notification
   586 	// Give MAPI enough time to emit the message added notification
   561 	QTest::qSleep(1000);
   587 	QTest::qSleep(1000);
   562 #endif
   588 #endif
   563     while (QCoreApplication::hasPendingEvents())
   589     while (QCoreApplication::hasPendingEvents())
   573     QCOMPARE(message.id(), messageId);
   599     QCOMPARE(message.id(), messageId);
   574     QCOMPARE(message.isModified(), false);
   600     QCOMPARE(message.isModified(), false);
   575 
   601 
   576     QMessageAddress toAddress;
   602     QMessageAddress toAddress;
   577     toAddress.setType(QMessageAddress::Email);
   603     toAddress.setType(QMessageAddress::Email);
   578     toAddress.setRecipient(to);
   604     toAddress.setAddressee(to);
   579     QVERIFY(!message.to().isEmpty());
   605     QVERIFY(!message.to().isEmpty());
   580     QCOMPARE(message.to().first(), toAddress);
   606     QCOMPARE(message.to().first(), toAddress);
   581     QCOMPARE(message.to().first().recipient(), to);
   607     QCOMPARE(message.to().first().addressee(), to);
   582 
   608 
       
   609 #if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
       
   610     // From address is currently taken automatically from account in Maemo implementation
   583     QMessageAddress fromAddress;
   611     QMessageAddress fromAddress;
   584     fromAddress.setType(QMessageAddress::Email);
   612     fromAddress.setType(QMessageAddress::Email);
   585     fromAddress.setRecipient(from);
   613     fromAddress.setAddressee(from);
   586     QCOMPARE(message.from(), fromAddress);
   614     QCOMPARE(message.from(), fromAddress);
   587     QCOMPARE(message.from().recipient(), from);
   615     QCOMPARE(message.from().addressee(), from);
   588 
   616 #endif
   589     QList<QMessageAddress> ccAddresses;
   617     QList<QMessageAddress> ccAddresses;
   590     foreach (const QString &element, cc.split(",", QString::SkipEmptyParts)) {
   618     foreach (const QString &element, cc.split(",", QString::SkipEmptyParts)) {
   591         QMessageAddress addr;
   619         QMessageAddress addr;
   592         addr.setType(QMessageAddress::Email);
   620         addr.setType(QMessageAddress::Email);
   593         addr.setRecipient(element.trimmed());
   621         addr.setAddressee(element.trimmed());
   594         ccAddresses.append(addr);
   622         ccAddresses.append(addr);
   595     }
   623     }
   596    
   624 
   597     QCOMPARE(message.cc(), ccAddresses);    
   625     QCOMPARE(message.cc(), ccAddresses);
   598 
   626 
       
   627 #if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
       
   628     // Dates can not be stored with addMessage in Maemo implementation
   599     QCOMPARE(message.date(), QDateTime::fromString(date, Qt::ISODate));
   629     QCOMPARE(message.date(), QDateTime::fromString(date, Qt::ISODate));
       
   630 #endif
   600     QCOMPARE(message.subject(), subject);
   631     QCOMPARE(message.subject(), subject);
   601 
   632 
   602     QCOMPARE(message.contentType().toLower(), messageType.toLower());
   633     QCOMPARE(message.contentType().toLower(), messageType.toLower());
   603     QCOMPARE(message.contentSubType().toLower(), messageSubType.toLower());
   634     QCOMPARE(message.contentSubType().toLower(), messageSubType.toLower());
   604 
   635 
   608         QVERIFY(message.contentIds().isEmpty());
   639         QVERIFY(message.contentIds().isEmpty());
   609     }
   640     }
   610 
   641 
   611     QCOMPARE(message.parentAccountId(), testAccountId);
   642     QCOMPARE(message.parentAccountId(), testAccountId);
   612     QCOMPARE(message.parentFolderId(), testFolderId);
   643     QCOMPARE(message.parentFolderId(), testFolderId);
   613 #ifndef Q_OS_SYMBIAN // Created Messages are not stored in Standard Folders in Symbian    
   644 #ifndef Q_OS_SYMBIAN // Created Messages are not stored in Standard Folders in Symbian & Maemo
   614     QCOMPARE(message.standardFolder(), QMessage::InboxFolder);
   645     QCOMPARE(message.standardFolder(), QMessage::DraftsFolder);
   615 #endif    
   646 #endif    
   616   
   647   
       
   648 #if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
       
   649     // Message size calculation is not yet good enough in Maemo implementation
   617     QAPPROXIMATECOMPARE(message.size(), messageSize, (messageSize / 2));
   650     QAPPROXIMATECOMPARE(message.size(), messageSize, (messageSize / 2));
       
   651 #endif
   618 
   652 
   619     QMessageContentContainerId bodyId(message.bodyId());
   653     QMessageContentContainerId bodyId(message.bodyId());
   620     QCOMPARE(bodyId.isValid(), true);
   654     QCOMPARE(bodyId.isValid(), true);
   621     QCOMPARE(bodyId != QMessageContentContainerId(), true);
   655     QCOMPARE(bodyId != QMessageContentContainerId(), true);
   622     QCOMPARE(QMessageContentContainerId(bodyId.toString()), bodyId);
   656     QCOMPARE(QMessageContentContainerId(bodyId.toString()), bodyId);
   646         int index = attachments.indexOf(attachment.suggestedFileName());
   680         int index = attachments.indexOf(attachment.suggestedFileName());
   647         QVERIFY(index != -1);
   681         QVERIFY(index != -1);
   648 
   682 
   649         // We cannot create nested multipart messages
   683         // We cannot create nested multipart messages
   650         QVERIFY(attachment.contentIds().isEmpty());
   684         QVERIFY(attachment.contentIds().isEmpty());
       
   685 
       
   686 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
       
   687         // Check attachment content
       
   688         QByteArray attachmentContent = attachment.content();
       
   689         QString fileName = QString(TESTDATA_DIR) + QString("/testdata/") + attachments[index];
       
   690         QFile attachmentFile(fileName);
       
   691         if (attachmentFile.open(QIODevice::ReadOnly)) {
       
   692             QByteArray originalAttachmentContent = attachmentFile.readAll();
       
   693             QCOMPARE(attachmentContent, originalAttachmentContent);
       
   694         }
       
   695 #endif
   651 
   696 
   652         QCOMPARE(attachment.contentType().toLower(), attachmentType[index].toLower());
   697         QCOMPARE(attachment.contentType().toLower(), attachmentType[index].toLower());
   653         QCOMPARE(attachment.contentSubType().toLower(), attachmentSubType[index].toLower());
   698         QCOMPARE(attachment.contentSubType().toLower(), attachmentSubType[index].toLower());
   654         QCOMPARE(attachment.suggestedFileName(), attachments[index]);
   699         QCOMPARE(attachment.suggestedFileName(), attachments[index]);
   655         QAPPROXIMATECOMPARE(attachment.size(), attachmentSize[index], (attachmentSize[index] / 2));
   700         QAPPROXIMATECOMPARE(attachment.size(), attachmentSize[index], (attachmentSize[index] / 2));
   669     QCOMPARE(body.contentCharset().toLower(), alternateCharset.toLower());
   714     QCOMPARE(body.contentCharset().toLower(), alternateCharset.toLower());
   670     QCOMPARE(body.isContentAvailable(), true);
   715     QCOMPARE(body.isContentAvailable(), true);
   671     QCOMPARE(body.textContent(), replacementText);
   716     QCOMPARE(body.textContent(), replacementText);
   672     QAPPROXIMATECOMPARE(body.size(), 72, 36);
   717     QAPPROXIMATECOMPARE(body.size(), 72, 36);
   673     
   718     
       
   719 #if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
       
   720     // Update does not yet work in Maemo
   674     QDateTime dt(QDateTime::fromString("1980-12-31T23:59:59Z", Qt::ISODate));
   721     QDateTime dt(QDateTime::fromString("1980-12-31T23:59:59Z", Qt::ISODate));
   675     dt.setTimeSpec(Qt::UTC);
   722     dt.setTimeSpec(Qt::UTC);
   676     message.setDate(dt);    
   723     message.setDate(dt);    
   677 
   724 
   678     manager->updateMessage(&message);
   725     manager->updateMessage(&message);
   736     QVERIFY(forward.bodyId().isValid());
   783     QVERIFY(forward.bodyId().isValid());
   737 
   784 
   738     // Verify that the attachments can be removed
   785     // Verify that the attachments can be removed
   739     updated.clearAttachments();
   786     updated.clearAttachments();
   740     QVERIFY(updated.attachmentIds().isEmpty());
   787     QVERIFY(updated.attachmentIds().isEmpty());
       
   788 #endif
   741 
   789 
   742     // Test message removal
   790     // Test message removal
   743     if (removeMessage == "byId") {
   791     if (removeMessage == "byId") {
   744         manager->removeMessage(message.id());
   792         manager->removeMessage(message.id());
   745     } else { // byFilter
   793     } else { // byFilter
   752 	QTest::qSleep(1000);
   800 	QTest::qSleep(1000);
   753 #endif
   801 #endif
   754     while (QCoreApplication::hasPendingEvents())
   802     while (QCoreApplication::hasPendingEvents())
   755         QCoreApplication::processEvents();
   803         QCoreApplication::processEvents();
   756 
   804 
   757 #ifndef Q_OS_SYMBIAN
   805 #if !defined(Q_OS_SYMBIAN)
   758     QCOMPARE(removeCatcher.removed.count(), 1);
   806     QCOMPARE(removeCatcher.removed.count(), 1);
   759     QCOMPARE(removeCatcher.removed.first().first, messageId);
   807     QCOMPARE(removeCatcher.removed.first().first, messageId);
       
   808 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
       
   809     QCOMPARE(removeCatcher.removed.first().second.count(), 2);
       
   810     QCOMPARE(removeCatcher.removed.first().second, QSet<QMessageManager::NotificationFilterId>() << filter2->id << filter3->id);
       
   811 #else
   760     QCOMPARE(removeCatcher.removed.first().second.count(), 1);
   812     QCOMPARE(removeCatcher.removed.first().second.count(), 1);
   761     QCOMPARE(removeCatcher.removed.first().second, QSet<QMessageManager::NotificationFilterId>() << filter3->id);
   813     QCOMPARE(removeCatcher.removed.first().second, QSet<QMessageManager::NotificationFilterId>() << filter3->id);
       
   814 #endif
   762 #endif    
   815 #endif    
   763 }
   816 }
   764 
   817