diff --git a/Tests/Unit/TestNGMimeMessageGenerator.m b/Tests/Unit/TestNGMimeMessageGenerator.m new file mode 100644 index 000000000..51b4e4745 --- /dev/null +++ b/Tests/Unit/TestNGMimeMessageGenerator.m @@ -0,0 +1,134 @@ +/* TestNGMimeMessageGenerator.m - this file is part of SOGo + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#import "SOGoTest.h" +#import + +@interface TestNGMimeMessageGenerator : SOGoTest +@end + +@implementation TestNGMimeMessageGenerator + +- (void) test_generateDataForHeaderField_value +{ + NGMimeMessageGenerator *generator; + NSArray *cases = [NSArray arrayWithObjects: + [NSArray arrayWithObjects: @"Message-ID", @"", @"", nil], + [NSArray arrayWithObjects: @"Content-Type", + @"text/plain; charset=utf-8; format=flowed", + @"text/plain; charset=utf-8; format=flowed", + nil], + [NSArray arrayWithObjects: @"X-FullHeaderOneHebrewOneLatin", + @"עs", + @"=?utf-8?q?=D7=A2s?=", + nil], + [NSArray arrayWithObjects: @"X-FullHeaderOneLatineOneHebrew", + @"sע", + @"=?utf-8?q?s=D7=A2?=", + nil], + [NSArray arrayWithObjects: @"X-FullHeaderOneCharacterHebrew", + @"ע", + @"=?utf-8?q?=D7=A2?=", + nil], + [NSArray arrayWithObjects: @"X-FullHeaderOneCharacterRussian", + @"Б", + @"=?utf-8?q?=D0=91?=", + nil], + + [NSArray arrayWithObjects: @"X-FullHeaderParameter", + @"parameter=ע", + @"parameter==?utf-8?q?=D7=A2?=", + nil], + [NSArray arrayWithObjects: @"X-MixedHeaderParameters", + @"plain; parameter=ע; parameter-plain; parameter2=ea", + @"plain;\n parameter==?utf-8?q?=D7=A2?=;\n parameter-plain; parameter2=ea", + nil], + [NSArray arrayWithObjects: @"X-MixedHeaderAndNoParameter", + @"plain; parameter=ע; parameter-plain; ע", + @"plain;\n parameter==?utf-8?q?=D7=A2?=; parameter-plain;\n =?utf-8?q?=D7=A2?=", + nil], + + [NSArray arrayWithObjects: @"X-MixedHeaderAndTwoParameter", + @"plain; parameter=ע; parameter-plain; z=ע", + @"plain;\n parameter==?utf-8?q?=D7=A2?=; parameter-plain;\n z==?utf-8?q?=D7=A2?=", + nil], + [NSArray arrayWithObjects: @"X-MixedHeaderExtrablanks", + @"plain; parameter=ע; parameter 2spaces; parameter2=ea", + @"plain;\n \\ parameter==?utf-8?q?=D7=A2?=;\n parameter 2spaces; parameter2=ea", + nil], + [NSArray arrayWithObjects: @"X-Encoded-Unbalanced-Paramter-Quote", + @"text/plain; name=\"ע", + @"text/plain;\n name==?utf-8?q?=22=D7=A2?=", + nil], + [NSArray arrayWithObjects: @"content-type", + @"text/plain; name=\"АБВГДЕЁЖЗИЙ, КЛМНОПРСТУФ y ЦЧШЩЪЫЬЭЮЯ.txt\"", + @"text/plain;\n name=\"=?utf-8?q?=D0=90=D0=91=D0=92=D0=93=D0=94=D0=95=D0=81=D0=96=D0=97=D0=98=D0=99=2C_=D0=9A=D0=9B=D0=9C=D0=9D=D0=9E=D0=9F=D0=A0=D0=A1=D0=A2=D0=A3=D0=A4_y_=D0=A6=D0=A7=D0=A8=D0=A9=D0=AA=D0=AB=D0=AC=D0=AD=D0=AE=D0=AF=2Etxt?=\"", + nil], + [NSArray arrayWithObjects: @"content-disposition", + @"attachment; filename=\"АБВГДЕЁЖЗИЙ, КЛМНОПРСТУФ y ЦЧШЩЪЫЬЭЮЯ.txt\"", + @"attachment;\n filename=\"=?utf-8?q?=D0=90=D0=91=D0=92=D0=93=D0=94=D0=95=D0=81=D0=96=D0=97=D0=98=D0=99=2C_=D0=9A=D0=9B=D0=9C=D0=9D=D0=9E=D0=9F=D0=A0=D0=A1=D0=A2=D0=A3=D0=A4_y_=D0=A6=D0=A7=D0=A8=D0=A9=D0=AA=D0=AB=D0=AC=D0=AD=D0=AE=D0=AF=2Etxt?=\"", + nil], + [NSArray arrayWithObjects: @"content-length", @"2912", @"2912", nil], + [NSArray arrayWithObjects: @"content-transfer-encoding", @"quoted-printable", @"quoted-printable", nil], + nil + ]; + NSEnumerator *enumerator; + NSArray *testCase; + + [NGMimeMessageGenerator initialize]; + generator = [[NGMimeMessageGenerator alloc] init]; + [generator autorelease]; + + enumerator = [cases objectEnumerator]; + while ((testCase = [enumerator nextObject]) != nil) + { + NSData *result; + NSMutableData *resultWithNulByte; + NSString *header = [testCase objectAtIndex: 0]; + NSData *headerData = [testCase objectAtIndex: 1]; + NSString *expected = [testCase objectAtIndex: 2]; + result = [generator generateDataForHeaderField: header + value: headerData]; + if (result == nil) + result = [@"[nil]" dataUsingEncoding: NSUTF8StringEncoding]; + + resultWithNulByte = [result mutableCopy]; + [resultWithNulByte appendBytes: "\0" length: 1]; + NSString *resultString = [NSString stringWithCString:[resultWithNulByte bytes]]; + + + BOOL testResult = [resultString isEqualToString: expected]; + + NSString *diff = [self stringFromDiffBetween: [NSString stringWithString: resultString] + and: [NSString stringWithString: expected]]; + NSString *testErrorMsg = [NSString + stringWithFormat: @">> For %@ header received:\n%@[END]\n>> instead of:\n%@[END]\n>> for:\n%@\n>> diff:\n%@\n>> lengthReceived: %u lengthExpected: %u", + header, + resultString, + expected, + headerData, + diff, + [resultString length], + [expected length] + ]; + + testWithMessage(testResult, testErrorMsg); + } +} + +@end