aboutsummaryrefslogtreecommitdiffhomepage
path: root/unittest/unittest.mm
diff options
context:
space:
mode:
Diffstat (limited to 'unittest/unittest.mm')
-rw-r--r--unittest/unittest.mm196
1 files changed, 196 insertions, 0 deletions
diff --git a/unittest/unittest.mm b/unittest/unittest.mm
new file mode 100644
index 00000000..fc604e1b
--- /dev/null
+++ b/unittest/unittest.mm
@@ -0,0 +1,196 @@
+//
+// unittest.m
+// unittest
+//
+// Created by Hoa V. DINH on 10/20/14.
+// Copyright (c) 2014 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <XCTest/XCTest.h>
+#import <MailCore/MailCore.h>
+
+@interface MCOMessageBuilder (UnitTest)
+
+- (void) _setBoundaries:(NSArray *)boundaries;
+
+@end
+
+@interface MCOMessageHeader (UnitTest)
+
+- (void) prepareForUnitTest;
+
+@end
+
+@implementation MCOMessageHeader (UnitTest)
+
+- (void) prepareForUnitTest
+{
+ if ([[self date] timeIntervalSinceNow] <= 2) {
+ // Date might be generated, set to known date.
+ [self setDate:[NSDate dateWithTimeIntervalSinceReferenceDate:0]];
+ }
+ if ([[self receivedDate] timeIntervalSinceNow] <= 2) {
+ // Date might be generated, set to known date.
+ [self setReceivedDate:[NSDate dateWithTimeIntervalSinceReferenceDate:0]];
+ }
+ if ([self isMessageIDAutoGenerated]) {
+ [self setMessageID:@"MyMessageID123@mail.gmail.com"];
+ }
+}
+
+@end
+
+@interface MCOAbstractPart (UnitTest)
+
+- (void) prepareForUnitTest;
+
+@end
+
+@implementation MCOAbstractPart (UnitTest)
+
+- (void) prepareForUnitTest
+{
+}
+
+@end
+
+@implementation MCOAbstractMessagePart (UnitTest)
+
+- (void) prepareForUnitTest
+{
+ [[self header] prepareForUnitTest];
+ [[self mainPart] prepareForUnitTest];
+}
+
+@end
+
+@implementation MCOAbstractMultipart (UnitTest)
+
+- (void) prepareForUnitTest
+{
+ for(MCOAbstractPart * part in [self parts]) {
+ [part prepareForUnitTest];
+ }
+}
+
+@end
+
+@interface unittest : XCTestCase
+
+@end
+
+@implementation unittest {
+ NSString * _mainPath;
+ NSString * _builderPath;
+ NSString * _parserPath;
+ NSString * _builderOutputPath;
+ NSString * _parserOutputPath;
+}
+
+- (void)setUp {
+ [super setUp];
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+ _mainPath = [[[NSBundle bundleForClass:[self class]] resourcePath] stringByAppendingPathComponent:@"data"];
+ _builderPath = [_mainPath stringByAppendingPathComponent:@"builder/input"];
+ _builderOutputPath = [_mainPath stringByAppendingPathComponent:@"builder/output"];
+ _parserPath = [_mainPath stringByAppendingPathComponent:@"parser/input"];
+ _parserOutputPath = [_mainPath stringByAppendingPathComponent:@"parser/output"];
+}
+
+- (void)tearDown {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ [super tearDown];
+}
+
+- (void)testMessageBuilder1 {
+ // This is an example of a functional test case.
+ //XCTAssert(YES, @"Pass");
+ MCOMessageBuilder * builder = [[MCOMessageBuilder alloc] init];
+ [[builder header] setFrom:[MCOAddress addressWithRFC822String:@"Hoà <dinh.viet.hoa@gmail.com>"]];
+ [[builder header] setTo:@[[MCOAddress addressWithRFC822String:@"Foo Bar <dinh.viet.hoa@gmail.com>"]]];
+ [[builder header] setSubject:@"testMessageBuilder1"];
+ [[builder header] setDate:[NSDate dateWithTimeIntervalSinceReferenceDate:0]];
+ [[builder header] setMessageID:@"MyMessageID123@mail.gmail.com"];
+ [builder setHTMLBody:@"<html><body>This is a HTML content</body></html>"];
+ NSString * path = [_builderOutputPath stringByAppendingPathComponent:@"builder1.eml"];
+ NSData * expectedData = [NSData dataWithContentsOfFile:path];
+ [builder _setBoundaries:@[@"1", @"2", @"3", @"4", @"5"]];
+ //[[builder data] writeToFile:@"/Users/hoa/builder1-now.eml" atomically:YES];
+ XCTAssertEqualObjects([builder data], expectedData, @"Pass");
+}
+
+- (void)testMessageBuilder2 {
+ MCOMessageBuilder * builder = [[MCOMessageBuilder alloc] init];
+ [[builder header] setFrom:[MCOAddress addressWithRFC822String:@"Hoà <dinh.viet.hoa@gmail.com>"]];
+ [[builder header] setTo:@[[MCOAddress addressWithRFC822String:@"Foo Bar <dinh.viet.hoa@gmail.com>"], [MCOAddress addressWithRFC822String:@"Other Recipient <another-foobar@to-recipient.org>"]]];
+ [[builder header] setCc:@[[MCOAddress addressWithRFC822String:@"Carbon Copy <dinh.viet.hoa@gmail.com>"], [MCOAddress addressWithRFC822String:@"Other Recipient <another-foobar@to-recipient.org>"]]];
+ [[builder header] setSubject:@"testMessageBuilder2"];
+ [[builder header] setDate:[NSDate dateWithTimeIntervalSinceReferenceDate:0]];
+ [[builder header] setMessageID:@"MyMessageID123@mail.gmail.com"];
+ [builder setHTMLBody:@"<html><body>This is a HTML content</body></html>"];
+ NSString * path = [_builderPath stringByAppendingPathComponent:@"photo.jpg"];
+ [builder addAttachment:[MCOAttachment attachmentWithContentsOfFile:path]];
+ path = [_builderPath stringByAppendingPathComponent:@"photo2.jpg"];
+ [builder addAttachment:[MCOAttachment attachmentWithContentsOfFile:path]];
+ [builder _setBoundaries:@[@"1", @"2", @"3", @"4", @"5"]];
+ path = [_builderOutputPath stringByAppendingPathComponent:@"builder2.eml"];
+ NSData * expectedData = [NSData dataWithContentsOfFile:path];
+ //[[builder data] writeToFile:@"/Users/hoa/builder2-now.eml" atomically:YES];
+ XCTAssertEqualObjects([builder data], expectedData, @"Pass");
+}
+
+- (void)testMessageBuilder3 {
+ MCOMessageBuilder * builder = [[MCOMessageBuilder alloc] init];
+ [[builder header] setFrom:[MCOAddress addressWithRFC822String:@"Hoà <dinh.viet.hoa@gmail.com>"]];
+ [[builder header] setTo:@[[MCOAddress addressWithRFC822String:@"Foo Bar <dinh.viet.hoa@gmail.com>"], [MCOAddress addressWithRFC822String:@"Other Recipient <another-foobar@to-recipient.org>"]]];
+ [[builder header] setCc:@[[MCOAddress addressWithRFC822String:@"Carbon Copy <dinh.viet.hoa@gmail.com>"], [MCOAddress addressWithRFC822String:@"Other Recipient <another-foobar@to-recipient.org>"]]];
+ [[builder header] setSubject:@"testMessageBuilder3"];
+ [[builder header] setDate:[NSDate dateWithTimeIntervalSinceReferenceDate:0]];
+ [[builder header] setMessageID:@"MyMessageID123@mail.gmail.com"];
+ [builder setHTMLBody:@"<html><body><div>This is a HTML content</div><div><img src=\"cid:123\"></div></body></html>"];
+ NSString * path = [_builderPath stringByAppendingPathComponent:@"photo.jpg"];
+ [builder addAttachment:[MCOAttachment attachmentWithContentsOfFile:path]];
+ path = [_builderPath stringByAppendingPathComponent:@"photo2.jpg"];
+ MCOAttachment * attachment = [MCOAttachment attachmentWithContentsOfFile:path];
+ [attachment setContentID:@"123"];
+ [builder addRelatedAttachment:attachment];
+ [builder _setBoundaries:@[@"1", @"2", @"3", @"4", @"5"]];
+ path = [_builderOutputPath stringByAppendingPathComponent:@"builder3.eml"];
+ NSData * expectedData = [NSData dataWithContentsOfFile:path];
+ //[[builder data] writeToFile:@"/Users/hoa/builder3-now.eml" atomically:YES];
+ XCTAssertEqualObjects([builder data], expectedData, @"Pass");
+}
+
+- (void)testMessageParser {
+ NSArray * list = [[NSFileManager defaultManager] subpathsAtPath:_parserPath];
+ for(NSString * name in list) {
+ NSString * path = [_parserPath stringByAppendingPathComponent:name];
+ BOOL isDirectory = NO;
+ [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDirectory];
+ if (isDirectory) {
+ continue;
+ }
+ NSData * data = [NSData dataWithContentsOfFile:path];
+ MCOMessageParser * parser = [[MCOMessageParser alloc] initWithData:data];
+ [[parser header] prepareForUnitTest];
+ [[parser mainPart] prepareForUnitTest];
+ mailcore::MessageParser * mcParser = MCO_FROM_OBJC(mailcore::MessageParser, parser);
+ NSDictionary * result = MCO_TO_OBJC(mcParser->serializable());
+
+ path = [_parserOutputPath stringByAppendingPathComponent:name];
+ NSData * expectedData = [NSData dataWithContentsOfFile:path];
+ NSDictionary * expectedResult = [NSJSONSerialization JSONObjectWithData:expectedData options:0 error:NULL];
+
+ XCTAssertEqualObjects(result, expectedResult, @"file %@", name);
+
+ //mailcore::String * jsonString = mailcore::JSON::objectToJSONString(mcParser->serializable());
+ //NSString * str = MCO_TO_OBJC(jsonString);
+ //NSString * resultPath = [@"/Users/hoa/mc2-results" stringByAppendingPathComponent:name];
+ //NSString * directory = [resultPath stringByDeletingLastPathComponent];
+ //[[NSFileManager defaultManager] createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:NULL];
+ //[str writeToFile:resultPath atomically:YES encoding:NSUTF8StringEncoding error:NULL];
+ }
+}
+
+@end