--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/qmessage/tst_qmessage.cpp Wed Aug 25 15:49:42 2010 +0300
@@ -0,0 +1,464 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QObject>
+#include <QTest>
+#include <QDebug>
+
+#include "qmessage.h"
+#include "../support/support.h"
+
+#if (defined(Q_OS_SYMBIAN) || defined(Q_OS_WIN) && defined(_WIN32_WCE))
+# if defined(TESTDATA_DIR)
+# undef TESTDATA_DIR
+# endif
+# define TESTDATA_DIR "."
+#endif
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+QTM_USE_NAMESPACE
+#ifdef Q_OS_WIN
+const QByteArray defaultCharset("UTF-16");
+#else
+const QByteArray defaultCharset("UTF-8");
+#endif
+
+template<typename T1, typename T2>
+void approximateCompare(const T1 &actual, const T2 &expected, const T2 &variance, int line)
+{
+ if (!((expected - variance) < actual) ||
+ !(actual < (expected + variance))) {
+ qWarning() << "at line:" << line;
+ qWarning() << "\tactual:" << actual;
+ qWarning() << "\texpected:" << expected;
+ qWarning() << "\tvariance:" << variance;
+ }
+ QVERIFY((expected - variance) < actual);
+ QVERIFY(actual < (expected + variance));
+}
+#define QAPPROXIMATECOMPARE(a,e,v) approximateCompare(a,e,v,(__LINE__))
+
+/*
+ Unit test for QMessage class.
+*/
+class tst_QMessage : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QMessage();
+ virtual ~tst_QMessage();
+
+private slots:
+ void initTestCase();
+ void cleanup();
+ void cleanupTestCase();
+
+ void testType();
+ void testParentAccountId();
+ void testFrom();
+ void testSubject();
+ void testDate();
+ void testReceivedDate();
+ void testTo();
+ void testCc();
+ void testBcc();
+ void testStatus();
+ void testPriority();
+ void testPreferredCharsets_data();
+ void testPreferredCharsets();
+ void testMessageAddress_data();
+ void testMessageAddress();
+ void testHeaderFields();
+ void testStandardFolder();
+
+private:
+ QMessageAccountId testAccountId;
+ QMessageFolderId testFolderId;
+};
+
+QTEST_MAIN(tst_QMessage)
+
+#include "tst_qmessage.moc"
+
+tst_QMessage::tst_QMessage()
+{
+}
+
+tst_QMessage::~tst_QMessage()
+{
+}
+
+void tst_QMessage::initTestCase()
+{
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
+ if (!Support::mapiAvailable())
+ QSKIP("Skipping tests because a MAPI subsystem does not appear to be available", SkipAll);
+#endif
+
+ Support::clearMessageStore();
+
+ {
+ Support::Parameters p;
+ p.insert("name", "testAccount");
+
+ testAccountId = Support::addAccount(p);
+ QVERIFY(testAccountId.isValid());
+ }
+
+ {
+ Support::Parameters p;
+ p.insert("path", "/root");
+ p.insert("name", "Root");
+ p.insert("parentAccountName", "testAccount");
+
+ testFolderId = Support::addFolder(p);
+ QVERIFY(testFolderId.isValid());
+ }
+}
+
+void tst_QMessage::cleanup()
+{
+}
+
+void tst_QMessage::cleanupTestCase()
+{
+}
+
+void tst_QMessage::testType()
+{
+ QMessage msg;
+ QCOMPARE(msg.type(), QMessage::NoType);
+ QCOMPARE(msg.isModified(), false);
+
+ msg.setType(QMessage::Email);
+ QCOMPARE(msg.type(), QMessage::Email);
+ QCOMPARE(msg.isModified(), true);
+
+ msg.setType(QMessage::Mms);
+ QCOMPARE(msg.type(), QMessage::Mms);
+}
+
+void tst_QMessage::testParentAccountId()
+{
+ QMessage msg;
+ QCOMPARE(msg.parentAccountId(), QMessageAccountId());
+ QCOMPARE(msg.isModified(), false);
+
+ msg.setParentAccountId(testAccountId);
+ QCOMPARE(msg.parentAccountId(), testAccountId);
+ QCOMPARE(msg.isModified(), true);
+}
+
+void tst_QMessage::testFrom()
+{
+ QMessage msg;
+ QCOMPARE(msg.from(), QMessageAddress());
+ QCOMPARE(msg.isModified(), false);
+
+ QMessageAddress addr(QMessageAddress::Email, "alice@example.org");
+ msg.setFrom(addr);
+ QCOMPARE(msg.from(), addr);
+ QCOMPARE(msg.from() != QMessageAddress(), true);
+ QCOMPARE(msg.isModified(), true);
+
+ addr = QMessageAddress(QMessageAddress::InstantMessage, "bob@example.org");
+ msg.setFrom(addr);
+ QCOMPARE(msg.from(), addr);
+ QCOMPARE(msg.from() != QMessageAddress(), true);
+}
+
+void tst_QMessage::testSubject()
+{
+ QMessage msg;
+ QCOMPARE(msg.subject(), QString());
+ QCOMPARE(msg.isModified(), false);
+
+ QString subject("Short message");
+ msg.setSubject(subject);
+ QCOMPARE(msg.subject(), subject);
+ QCOMPARE(msg.isModified(), true);
+
+ subject = QString("A slightly longer message than the predecessor message");
+ msg.setSubject(subject);
+ QCOMPARE(msg.subject(), subject);
+}
+
+void tst_QMessage::testDate()
+{
+ QMessage msg;
+ QCOMPARE(msg.date(), QDateTime());
+ QCOMPARE(msg.isModified(), false);
+
+ QDateTime now(QDateTime::fromString(QDateTime::currentDateTime().toString(Qt::ISODate), Qt::ISODate));
+ msg.setDate(now);
+ QCOMPARE(msg.date(), now);
+ QCOMPARE(msg.isModified(), true);
+
+ now = QDateTime::fromString("2000-01-01T00:00:01Z", Qt::ISODate);
+ msg.setDate(now);
+ QCOMPARE(msg.date(), now);
+}
+
+void tst_QMessage::testReceivedDate()
+{
+ QMessage msg;
+ QCOMPARE(msg.receivedDate(), QDateTime());
+ QCOMPARE(msg.isModified(), false);
+
+ QDateTime now(QDateTime::fromString(QDateTime::currentDateTime().toString(Qt::ISODate), Qt::ISODate));
+ msg.setReceivedDate(now);
+ QCOMPARE(msg.receivedDate(), now);
+ QCOMPARE(msg.isModified(), true);
+
+ now = QDateTime::fromString("2000-01-01T00:00:01Z", Qt::ISODate);
+ msg.setReceivedDate(now);
+ QCOMPARE(msg.receivedDate(), now);
+}
+
+void tst_QMessage::testTo()
+{
+ QMessage msg;
+ QCOMPARE(msg.to(), QMessageAddressList());
+ QCOMPARE(msg.isModified(), false);
+
+ QMessageAddressList addresses;
+ addresses.append(QMessageAddress(QMessageAddress::Email, "alice@example.org"));
+ addresses.append(QMessageAddress(QMessageAddress::Email, "bob@example.org"));
+
+ msg.setTo(addresses);
+ QCOMPARE(msg.to(), addresses);
+ QCOMPARE(msg.isModified(), true);
+
+ addresses = QMessageAddressList();
+ addresses.append(QMessageAddress(QMessageAddress::System, "charlie@example.org"));
+ msg.setTo(addresses);
+ QCOMPARE(msg.to(), addresses);
+}
+
+void tst_QMessage::testCc()
+{
+ QMessage msg;
+ QCOMPARE(msg.isModified(), false);
+ QCOMPARE(msg.cc(), QMessageAddressList());
+ QCOMPARE(msg.isModified(), false);
+
+ QMessageAddressList addresses;
+ addresses.append(QMessageAddress(QMessageAddress::Email, "alice@example.org"));
+ addresses.append(QMessageAddress(QMessageAddress::Email, "bob@example.org"));
+
+ msg.setCc(addresses);
+ QCOMPARE(msg.cc(), addresses);
+ QCOMPARE(msg.isModified(), true);
+
+ addresses = QMessageAddressList();
+ addresses.append(QMessageAddress(QMessageAddress::Phone, "charlie@example.org"));
+ msg.setCc(addresses);
+ QCOMPARE(msg.cc(), addresses);
+}
+
+void tst_QMessage::testBcc()
+{
+ QMessage msg;
+ QCOMPARE(msg.bcc(), QMessageAddressList());
+ QCOMPARE(msg.isModified(), false);
+
+ QMessageAddressList addresses;
+ addresses.append(QMessageAddress(QMessageAddress::Email, "alice@example.org"));
+ addresses.append(QMessageAddress(QMessageAddress::Email, "bob@example.org"));
+
+ msg.setBcc(addresses);
+ QCOMPARE(msg.bcc(), addresses);
+ QCOMPARE(msg.isModified(), true);
+
+ addresses = QMessageAddressList();
+ addresses.append(QMessageAddress(QMessageAddress::InstantMessage, "charlie@example.org"));
+ msg.setBcc(addresses);
+ QCOMPARE(msg.bcc(), addresses);
+}
+
+void tst_QMessage::testStatus()
+{
+ QMessage msg;
+ QCOMPARE(msg.status(), static_cast<QMessage::StatusFlags>(0));
+ QCOMPARE(msg.isModified(), false);
+
+ msg.setStatus(QMessage::Removed);
+ QCOMPARE(msg.status(), QMessage::Removed);
+ QCOMPARE(msg.isModified(), true);
+
+ msg.setStatus(QMessage::Read | QMessage::HasAttachments);
+ QCOMPARE(msg.status(), QMessage::Read | QMessage::HasAttachments);
+}
+
+void tst_QMessage::testPriority()
+{
+ QMessage msg;
+ QCOMPARE(msg.priority(), QMessage::NormalPriority);
+ QCOMPARE(msg.isModified(), false);
+
+ msg.setPriority(QMessage::HighPriority);
+ QCOMPARE(msg.priority(), QMessage::HighPriority);
+ QCOMPARE(msg.isModified(), true);
+
+ msg.setPriority(QMessage::LowPriority);
+ QCOMPARE(msg.priority(), QMessage::LowPriority);
+}
+
+void tst_QMessage::testPreferredCharsets_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<QByteArray>("preferred");
+ QTest::addColumn<QByteArray>("encoded");
+
+ const QString asciiText("ASCII text");
+
+ QTest::newRow("ascii")
+ << asciiText
+ << QByteArray("ISO-8859-1")
+ << QByteArray("ISO-8859-1");
+
+ const QChar koreanChars[] = { 0xd55c };
+ const QString koreanText(koreanChars, 1);
+
+#ifndef _WIN32_WCE
+ // Qt for Win CE does not appear to include EUC-KR support...
+ QTest::newRow("euc-kr")
+ << koreanText
+ << QByteArray("EUC-KR")
+ << QByteArray("EUC-KR");
+#endif
+
+ const QChar arabicChars[] = { 0x0636 };
+ const QString mixedText(koreanText + QString(arabicChars, 1));
+
+ QTest::newRow("mixed")
+ << mixedText
+ << QByteArray("")
+ << defaultCharset;
+}
+
+void tst_QMessage::testPreferredCharsets()
+{
+ QFETCH(QString, text);
+ QFETCH(QByteArray, preferred);
+ QFETCH(QByteArray, encoded);
+
+ QCOMPARE(QMessage::preferredCharsets(), QList<QByteArray>());
+
+ QList<QByteArray> preferredCharsets;
+ preferredCharsets << "ISO-8859-1" << "EUC-KR";
+
+ QMessage::setPreferredCharsets(preferredCharsets);
+ QCOMPARE(QMessage::preferredCharsets(), preferredCharsets);
+
+ QCOMPARE(QMessage::preferredCharsetFor(text).toLower(), preferred.toLower());
+
+ QMessage msg;
+ msg.setBody(text, "text/plain");
+
+ QMessageContentContainer body(msg.find(msg.bodyId()));
+ QCOMPARE(body.contentCharset().toLower(), encoded.toLower());
+
+ QMessage::setPreferredCharsets(QList<QByteArray>());
+}
+
+void tst_QMessage::testMessageAddress_data()
+{
+ QTest::addColumn<QString>("from");
+ QTest::addColumn<QString>("targetName");
+ QTest::addColumn<QString>("targetAddress");
+
+ QTest::newRow("no angle brackets")
+ << "wizard@oz.test"
+ << "wizard@oz.test"
+ << "wizard@oz.test";
+
+ QTest::newRow("name and address")
+ << "Wizard of Oz <wizard@oz.test>"
+ << "Wizard of Oz"
+ << "wizard@oz.test";
+
+ QTest::newRow("quoted name and address")
+ << "\"First Last\" <first.last@example.com>"
+ << "\"First Last\""
+ << "first.last@example.com";
+
+ QTest::newRow("quoted name with bracket and address")
+ << "\"First <Middle> Last\" <first.last@example.com>"
+ << "\"First <Middle> Last\""
+ << "first.last@example.com";
+}
+
+void tst_QMessage::testMessageAddress()
+{
+ QFETCH(QString, from);
+ QFETCH(QString, targetName);
+ QFETCH(QString, targetAddress);
+
+ QString name;
+ QString address;
+ QMessageAddress::parseEmailAddress(from, &name, &address);
+ QCOMPARE(targetName, name);
+ QCOMPARE(targetAddress, address);
+}
+
+void tst_QMessage::testHeaderFields()
+{
+ QMessage msg;
+
+ QCOMPARE(msg.headerFields().isEmpty(), true);
+ QCOMPARE(msg.headerFieldValues("Subject").isEmpty(), true);
+ QCOMPARE(msg.headerFieldValues("From").isEmpty(), true);
+ QCOMPARE(msg.headerFieldValues("To").isEmpty(), true);
+ QCOMPARE(msg.headerFieldValues("X-None").isEmpty(), true);
+ QCOMPARE(msg.headerFieldValue("Subject").isEmpty(), true);
+ QCOMPARE(msg.headerFieldValue("From").isEmpty(), true);
+ QCOMPARE(msg.headerFieldValue("To").isEmpty(), true);
+ QCOMPARE(msg.headerFieldValue("X-None").isEmpty(), true);
+}
+
+void tst_QMessage::testStandardFolder()
+{
+ QMessage msg;
+ QCOMPARE(msg.standardFolder(), QMessage::DraftsFolder);
+}