From db123a7e7ebfcd48233e81ff478d35c115c8deba Mon Sep 17 00:00:00 2001 From: Matt Ronge Date: Tue, 14 Aug 2007 22:01:38 -0500 Subject: [PATCH] Added new test data for attachments and wrote a unit test for attachments --- MailCore.xcodeproj/mronge.mode1v3 | 2 +- MailCore.xcodeproj/mronge.pbxuser | 28 ++- TestData/mime-tests/png_attachment | 388 +++++++++++++++++++++++++++++ Tests/CTMIMETests.m | 15 ++ 4 files changed, 429 insertions(+), 4 deletions(-) create mode 100644 TestData/mime-tests/png_attachment diff --git a/MailCore.xcodeproj/mronge.mode1v3 b/MailCore.xcodeproj/mronge.mode1v3 index 5656c5b..5694974 100644 --- a/MailCore.xcodeproj/mronge.mode1v3 +++ b/MailCore.xcodeproj/mronge.mode1v3 @@ -328,7 +328,7 @@ _historyCapacity 0 bookmark - F8430B2C0C72A21F00753941 + F8430B2F0C72A3E600753941 history F869B8E10C618FA80033E640 diff --git a/MailCore.xcodeproj/mronge.pbxuser b/MailCore.xcodeproj/mronge.pbxuser index 2d83781..73c5838 100644 --- a/MailCore.xcodeproj/mronge.pbxuser +++ b/MailCore.xcodeproj/mronge.pbxuser @@ -552,6 +552,8 @@ F8430B2A0C72A21F00753941 /* PBXTextBookmark */ = F8430B2A0C72A21F00753941 /* PBXTextBookmark */; F8430B2B0C72A21F00753941 /* PBXTextBookmark */ = F8430B2B0C72A21F00753941 /* PBXTextBookmark */; F8430B2C0C72A21F00753941 /* PBXTextBookmark */ = F8430B2C0C72A21F00753941 /* PBXTextBookmark */; + F8430B2D0C72A3D300753941 /* PBXTextBookmark */ = F8430B2D0C72A3D300753941 /* PBXTextBookmark */; + F8430B2F0C72A3E600753941 /* PBXTextBookmark */ = F8430B2F0C72A3E600753941 /* PBXTextBookmark */; F8584AAE0C4B0CE1007B6EF3 = F8584AAE0C4B0CE1007B6EF3 /* PBXTextBookmark */; F8584B4B0C4B2675007B6EF3 = F8584B4B0C4B2675007B6EF3 /* PBXTextBookmark */; F858CC950C51E42100EF1B3D = F858CC950C51E42100EF1B3D /* PBXTextBookmark */; @@ -732,9 +734,9 @@ }; F81A8AEC0C03FC58002F780A /* CTMIMETests.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1046, 1568}}"; - sepNavSelRange = "{6194, 0}"; - sepNavVisRange = "{0, 2255}"; + sepNavIntBoundsRect = "{{0, 0}, {1046, 1778}}"; + sepNavSelRange = "{7316, 0}"; + sepNavVisRange = "{4285, 3099}"; }; }; F81B88500A74AA7100143DF6 /* CTCoreAccount.h */ = { @@ -5441,6 +5443,26 @@ vrLen = 2255; vrLoc = 0; }; + F8430B2D0C72A3D300753941 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = F81A8AEC0C03FC58002F780A /* CTMIMETests.m */; + name = "CTMIMETests.m: 122"; + rLen = 0; + rLoc = 7261; + rType = 0; + vrLen = 3101; + vrLoc = 4285; + }; + F8430B2F0C72A3E600753941 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = F81A8AEC0C03FC58002F780A /* CTMIMETests.m */; + name = "CTMIMETests.m: 123"; + rLen = 0; + rLoc = 7316; + rType = 0; + vrLen = 3099; + vrLoc = 4285; + }; F8584AAE0C4B0CE1007B6EF3 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F81B88560A74AA7100143DF6 /* CTCoreMessage.h */; diff --git a/TestData/mime-tests/png_attachment b/TestData/mime-tests/png_attachment new file mode 100644 index 0000000..96fed9b --- /dev/null +++ b/TestData/mime-tests/png_attachment @@ -0,0 +1,388 @@ +Return-Path: +X-Original-To: mronge@theronge.com +Delivered-To: mronge@theronge.com +Received: from relay7.cso.uiuc.edu (relay7.cso.uiuc.edu [128.174.5.108]) + by theronge.com (Postfix) with ESMTP id D9110B847D + for ; Tue, 14 Aug 2007 19:56:25 -0700 (PDT) +Received: from theronge.com (theronge.com [69.12.216.205]) + by relay7.cso.uiuc.edu (8.14.1/8.14.1) with ESMTP id l7F2uKEQ009515 + for ; Tue, 14 Aug 2007 21:56:26 -0500 (CDT) +Received: from [192.168.0.197] (66-117-168-58.rev.dls.net [66.117.168.58]) + by theronge.com (Postfix) with ESMTP id 4B8E5B847D + for ; Tue, 14 Aug 2007 19:56:15 -0700 (PDT) +Date: Tue, 14 Aug 2007 21:56:13 -0500 (CDT) +From: Matt Ronge +X-X-Sender: mronge@Compie.local +To: mronge2@uiuc.edu +Subject: Test Message with Image Attachment +Message-ID: +MIME-Version: 1.0 +Content-Type: MULTIPART/MIXED; BOUNDARY="0-1595289667-1187146577=:11724" +X-Spam-Score: 0 +X-Spam-Details: rule=aggressive_notspam policy=aggressive score=0 spamscore=0 + ipscore=0 phishscore=1 bulkscore=1 adultscore=0 classifier=spam + adjust=0 reason=mlx engine=3.1.0-0708060001 + definitions=main-0708140149 +X-Spam-OrigSender: mronge@theronge.com +X-Spam-Bar: +X-Spambayes-Classification: ham; 0.05 + + This message is in MIME format. The first part should be readable text, + while the remaining parts are likely unreadable without MIME-aware tools. + +--0-1595289667-1187146577=:11724 +Content-Type: TEXT/PLAIN; format=flowed; charset=us-ascii + +Test message with an image attachment. +--0-1595289667-1187146577=:11724 +Content-Type: IMAGE/png; name="Picture 1.png" +Content-Transfer-Encoding: BASE64 +Content-ID: +Content-Description: +Content-Disposition: attachment; filename="Picture 1.png" + +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 + +--0-1595289667-1187146577=:11724-- + diff --git a/Tests/CTMIMETests.m b/Tests/CTMIMETests.m index 38fd5cd..00743eb 100644 --- a/Tests/CTMIMETests.m +++ b/Tests/CTMIMETests.m @@ -108,4 +108,19 @@ const NSString *filePrefix = @"/Users/mronge/Projects/MailCore/"; STAssertEqualObjects(img.filename, @"mytestimage.jpg", @"Filename of inline image not correct"); [msg release]; } + +- (void)testImagePNGAttachment { + CTCoreMessage *msg = [[CTCoreMessage alloc] initWithFileAtPath:[NSString stringWithFormat:@"%@%@",filePrefix,@"TestData/mime-tests/png_attachment"]]; + CTMIME *mime = [CTMIMEFactory createMIMEWithMIMEStruct:[msg messageStruct]->msg_mime forMessage:[msg messageStruct]]; + STAssertTrue([mime isKindOfClass:[CTMIME_MessagePart class]],@"Outmost MIME type should be Message but it's not!"); + STAssertTrue([[mime content] isKindOfClass:[CTMIME_MultiPart class]],@"Incorrect MIME structure found!"); + NSArray *multiPartContent = [[mime content] content]; + STAssertTrue([multiPartContent count] == 2, @"Incorrect MIME structure found!"); + STAssertTrue([[multiPartContent objectAtIndex:0] isKindOfClass:[CTMIME_TextPart class]], @"Incorrect MIME structure found!"); + STAssertTrue([[multiPartContent objectAtIndex:1] isKindOfClass:[CTMIME_ImagePart class]], @"Incorrect MIME structure found!"); + CTMIME_ImagePart *img = [multiPartContent objectAtIndex:1]; + STAssertTrue(img.attached == TRUE, @"Image is should be attached"); + STAssertEqualObjects(img.filename, @"Picture 1.png", @"Filename of inline image not correct"); + [msg release]; +} @end