aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/test-all.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-all.cpp')
-rw-r--r--tests/test-all.cpp378
1 files changed, 378 insertions, 0 deletions
diff --git a/tests/test-all.cpp b/tests/test-all.cpp
new file mode 100644
index 00000000..2fc09e17
--- /dev/null
+++ b/tests/test-all.cpp
@@ -0,0 +1,378 @@
+//
+// test-all.cpp
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/29/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#include "test-all.h"
+
+#include <MailCore/MailCore.h>
+#if __APPLE__
+#include <CoreFoundation/CoreFoundation.h>
+#endif
+#if __linux__
+#include <glib.h>
+#endif
+
+extern "C" {
+ extern int mailstream_debug;
+}
+
+static mailcore::String * password = NULL;
+static mailcore::String * displayName = NULL;
+static mailcore::String * email = NULL;
+#if __linux
+static GMainLoop * s_main_loop = NULL;
+#endif
+
+class TestOperation : public mailcore::Operation {
+ void main()
+ {
+ MCLog("coin %p", this);
+ }
+};
+
+class TestCallback : public mailcore::Object, public mailcore::OperationCallback {
+ virtual void operationFinished(mailcore::Operation * op)
+ {
+ MCLog("callback coin %p %p %s", this, op, MCUTF8DESC(this));
+ }
+};
+
+static mailcore::Data * testMessageBuilder()
+{
+ mailcore::Address * address = new mailcore::Address();
+ address->setDisplayName(displayName);
+ address->setMailbox(email);
+
+ address->release();
+
+ mailcore::MessageBuilder * msg = new mailcore::MessageBuilder();
+
+ msg->header()->setFrom(mailcore::Address::addressWithDisplayName(displayName, email));
+ mailcore::Array * to = new mailcore::Array();
+ mailcore::Array * bcc = new mailcore::Array();
+ to->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Foo Bar"), MCSTR("foobar@to-recipient.org")));
+ to->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Other Recipient"), MCSTR("another-foobar@to-recipient.org")));
+ bcc->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Hidden Recipient"), MCSTR("foobar@bcc-recipient.org")));
+ msg->header()->setTo(to);
+ msg->header()->setBcc(bcc);
+ to->release();
+ bcc->release();
+ MCAssert(msg->header()->allExtraHeadersNames()->count() == 0);
+ msg->header()->setExtraHeader(MCSTR("X-Custom-Header"), MCSTR("Custom Header Value"));
+ msg->header()->setSubject(MCSTR("Mon projet d'été"));
+ msg->setHTMLBody(MCSTR("<div>Hello <img src=\"cid:1234\"></div>"));
+ msg->addAttachment(mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("first-filename")));
+ msg->addAttachment(mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("second-filename")));
+ mailcore::Attachment * attachment = mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("third-image-attachment"));
+ attachment->setContentID(MCSTR("1234"));
+ msg->addRelatedAttachment(attachment);
+
+ mailcore::Data * data = msg->data();
+
+ MCLog("%s", data->bytes());
+
+ mailcore::MessageBuilder * msg2 = new mailcore::MessageBuilder(msg);
+ mailcore::String *htmlBody = msg->htmlBody();
+ mailcore::String *htmlBody2 = msg2->htmlBody();
+ MCAssert(htmlBody->isEqual(htmlBody2));
+
+ msg->release();
+ msg2->release();
+
+ return data;
+}
+
+static void testMessageParser(mailcore::Data * data)
+{
+ mailcore::MessageParser * parser = mailcore::MessageParser::messageParserWithData(data);
+ MCLog("%s", MCUTF8DESC(parser));
+ MCLog("HTML rendering");
+ MCLog("%s", MCUTF8(parser->htmlRendering()));
+ MCLog("%s", MCUTF8(parser->plainTextBodyRendering(true)));
+ MCLog("%s", MCUTF8(parser->plainTextBodyRendering(false)));
+}
+
+static void testIMAP()
+{
+ mailcore::IMAPSession * session;
+ mailcore::ErrorCode error;
+
+ session = new mailcore::IMAPSession();
+ session->setHostname(MCSTR("imap.gmail.com"));
+ session->setPort(993);
+ session->setUsername(email);
+ session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeTLS);
+
+ mailcore::IMAPMessagesRequestKind requestKind = (mailcore::IMAPMessagesRequestKind)
+ (mailcore::IMAPMessagesRequestKindHeaders | mailcore::IMAPMessagesRequestKindStructure |
+ mailcore::IMAPMessagesRequestKindInternalDate | mailcore::IMAPMessagesRequestKindHeaderSubject |
+ mailcore::IMAPMessagesRequestKindFlags);
+ mailcore::Array * messages = session->fetchMessagesByUID(MCSTR("INBOX"),
+ requestKind, mailcore::IndexSet::indexSetWithRange(mailcore::RangeMake(1, UINT64_MAX)), NULL, &error);
+ MCLog("%s", MCUTF8DESC(messages));
+
+ session->release();
+}
+
+static void testSMTP(mailcore::Data * data)
+{
+ mailcore::SMTPSession * smtp;
+ mailcore::ErrorCode error;
+
+ smtp = new mailcore::SMTPSession();
+
+ smtp->setHostname(MCSTR("smtp.gmail.com"));
+ smtp->setPort(25);
+ smtp->setUsername(email);
+ smtp->setPassword(password);
+ smtp->setConnectionType(mailcore::ConnectionTypeStartTLS);
+
+ smtp->sendMessage(data, NULL, &error);
+
+ smtp->release();
+}
+
+static void testPOP()
+{
+ mailcore::POPSession * session;
+ mailcore::ErrorCode error;
+
+ session = new mailcore::POPSession();
+ session->setHostname(MCSTR("pop.gmail.com"));
+ session->setPort(995);
+ session->setUsername(email);
+ session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeTLS);
+
+ mailcore::Array * messages = session->fetchMessages(&error);
+ MCLog("%s", MCUTF8DESC(messages));
+
+ session->release();
+}
+
+static void testNNTP()
+{
+ mailcore::NNTPSession * session;
+ mailcore::ErrorCode error;
+
+ session = new mailcore::NNTPSession();
+ session->setHostname(MCSTR("news.gmane.org."));
+ session->setPort(119);
+// session->setUsername(email);
+// session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeClear);
+
+ session->checkAccount(&error);
+ mailcore::Array * messages = session->listAllNewsgroups(&error);
+ MCLog("%s", MCUTF8DESC(messages));
+
+ session->release();
+
+}
+
+static void testOperationQueue()
+{
+ mailcore::OperationQueue * queue = new mailcore::OperationQueue();
+
+ TestCallback * callback = new TestCallback();
+
+ for(unsigned int i = 0 ; i < 100 ; i ++) {
+ mailcore::Operation * op = new TestOperation();
+ op->setCallback(callback);
+ queue->addOperation(op);
+ op->release();
+ }
+
+#if __APPLE__
+ CFRunLoopRun();
+#elif __linux__
+ g_main_loop_run(s_main_loop);
+#endif
+
+ queue->release();
+}
+
+class TestSMTPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::SMTPOperationCallback {
+ virtual void operationFinished(mailcore::Operation * op)
+ {
+ MCLog("callback %s %s", MCUTF8DESC(op), MCUTF8DESC(this));
+ }
+
+ virtual void bodyProgress(mailcore::SMTPOperation * op, unsigned int current, unsigned int maximum)
+ {
+ MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
+ }
+};
+
+static void testAsyncSMTP(mailcore::Data * data)
+{
+ mailcore::SMTPAsyncSession * smtp;
+ TestSMTPCallback * callback = new TestSMTPCallback();
+
+ smtp = new mailcore::SMTPAsyncSession();
+
+ smtp->setHostname(MCSTR("smtp.gmail.com"));
+ smtp->setPort(25);
+ smtp->setUsername(email);
+ smtp->setPassword(password);
+ smtp->setConnectionType(mailcore::ConnectionTypeStartTLS);
+
+ mailcore::SMTPOperation * op = smtp->sendMessageOperation(data);
+ op->setSmtpCallback(callback);
+ op->setCallback(callback);
+ op->start();
+
+#if __APPLE__
+ CFRunLoopRun();
+#elif __linux__
+ g_main_loop_run(s_main_loop);
+#endif
+
+ //smtp->release();
+}
+
+class TestIMAPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::IMAPOperationCallback {
+ virtual void operationFinished(mailcore::Operation * op)
+ {
+ mailcore::IMAPFetchMessagesOperation * fetchOp = (mailcore::IMAPFetchMessagesOperation *) op;
+ (void) (fetchOp);
+ //MCLog("callback %s %s %s", MCUTF8DESC(op), MCUTF8DESC(fetchOp->messages()), MCUTF8DESC(this));
+ }
+
+ virtual void bodyProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
+ {
+ MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
+ }
+
+ virtual void itemProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
+ {
+ MCLog("item progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
+ }
+};
+
+static void testAsyncIMAP()
+{
+ mailcore::IMAPAsyncSession * session;
+ TestIMAPCallback * callback = new TestIMAPCallback();
+
+ session = new mailcore::IMAPAsyncSession();
+ session->setHostname(MCSTR("imap.gmail.com"));
+ session->setPort(993);
+ session->setUsername(email);
+ session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeTLS);
+
+ mailcore::IMAPMessagesRequestKind requestKind = (mailcore::IMAPMessagesRequestKind)
+ (mailcore::IMAPMessagesRequestKindHeaders | mailcore::IMAPMessagesRequestKindStructure |
+ mailcore::IMAPMessagesRequestKindInternalDate | mailcore::IMAPMessagesRequestKindHeaderSubject |
+ mailcore::IMAPMessagesRequestKindFlags);
+ mailcore::IMAPFetchMessagesOperation * op = session->fetchMessagesByUIDOperation(MCSTR("INBOX"), requestKind, mailcore::IndexSet::indexSetWithRange(mailcore::RangeMake(1, UINT64_MAX)));
+ op->setCallback(callback);
+ op->setImapCallback(callback);
+ op->start();
+ //MCLog("%s", MCUTF8DESC(messages));
+#if __APPLE__
+ CFRunLoopRun();
+#elif __linux__
+ g_main_loop_run(s_main_loop);
+#endif
+
+ //session->release();
+}
+
+class TestPOPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::POPOperationCallback {
+ virtual void operationFinished(mailcore::Operation * op)
+ {
+ mailcore::POPFetchMessagesOperation * fetchOp = (mailcore::POPFetchMessagesOperation *) op;
+ MCLog("callback %s %s", MCUTF8DESC(fetchOp->messages()), MCUTF8DESC(this));
+ }
+
+ virtual void bodyProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
+ {
+ MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
+ }
+};
+
+static void testAsyncPOP()
+{
+ mailcore::POPAsyncSession * session;
+ TestPOPCallback * callback = new TestPOPCallback();
+
+ session = new mailcore::POPAsyncSession();
+ session->setHostname(MCSTR("pop.gmail.com"));
+ session->setPort(995);
+ session->setUsername(email);
+ session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeTLS);
+
+ mailcore::POPFetchMessagesOperation * op = session->fetchMessagesOperation();
+ op->setCallback(callback);
+ op->setPopCallback(callback);
+ op->start();
+
+ //mailcore::Array * messages = session->fetchMessages(&error);
+ //MCLog("%s", MCUTF8DESC(messages));
+
+#if __APPLE__
+ CFRunLoopRun();
+#elif __linux__
+ g_main_loop_run(s_main_loop);
+#endif
+}
+
+static void testAddresses()
+{
+ mailcore::Address *addr = mailcore::Address::addressWithNonEncodedRFC822String(MCSTR("DINH Viêt Hoà <hoa@etpan.org>"));
+ MCLog("%s %s", MCUTF8DESC(addr->nonEncodedRFC822String()), MCUTF8DESC(addr->RFC822String()));
+
+ mailcore::Array *addresses = mailcore::Address::addressesWithNonEncodedRFC822String(MCSTR("My Email1 <email1@gmail.com>, DINH Viêt Hoà <hoa@etpan.org>,\"Email3, My\" <my.email@gmail.com>"));
+ MCLog("%s", MCUTF8DESC(addresses));
+ mailcore::String *str = mailcore::Address::nonEncodedRFC822StringForAddresses(addresses);
+ MCLog("%s", MCUTF8DESC(str));
+ str = mailcore::Address::RFC822StringForAddresses(addresses);
+ MCLog("%s", MCUTF8DESC(str));
+}
+
+static void testAttachments()
+{
+ mailcore::Attachment *attachment = mailcore::Attachment::attachmentWithText(MCSTR("Hello World"));
+ attachment->setCharset(NULL);
+ mailcore::String * str = attachment->decodedString();
+ MCLog("%s", MCUTF8DESC(str));
+}
+
+void testAll()
+{
+ mailcore::setICUDataDirectory(MCSTR("/usr/local/share/icu"));
+
+ email = MCSTR("email@gmail.com");
+ password = MCSTR("MyP4ssw0rd");
+ displayName = MCSTR("My Email");
+
+#if __linux__
+ s_main_loop = g_main_loop_new (NULL, FALSE);
+#endif
+
+ mailcore::AutoreleasePool * pool = new mailcore::AutoreleasePool();
+ MCLogEnabled = 1;
+ mailstream_debug = 1;
+
+ //mailcore::Data * data = testMessageBuilder();
+ //testMessageParser(data);
+ //testSMTP(data);
+ //testIMAP();
+ //testPOP();
+ //testNNTP();
+ //testAsyncSMTP(data);
+ //testAsyncIMAP();
+ //testAsyncPOP();
+ //testAddresses();
+ //testAttachments();
+
+ pool->release();
+}