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 |