email/pop3andsmtpmtm/clientmtms/test/src/T_MIUT05.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_MIUT05.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,852 @@
+// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Name of test harness: T_MIUT05
+// Component: IMCM
+// Owner: KP
+// Brief description of test harness:
+// Tests storing/retrieving data from CImMimeHeader - most of the 
+// functionality is tested - some new functions may not be tested!
+// Detailed description of test harness:
+// As above.
+// Input files required to run test harness:
+// None
+// Intermediate files produced while running test harness:
+// <DRIVE>:\msgtest\T_MIUT05\T_IMCM.log
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_MIUT05.<PLATFORM>.<VARIANT>.LOG.txt
+// Description of how to build test harness:
+// cd \msg\imcm\
+// bldmake bldfiles
+// abld test build
+// Description of how to run test harness:
+// The following instructions are the same for all platforms:
+// 1. Build T_DB test harness from COMMDB component:
+// cd \commdb\group
+// bldmake bldfiles
+// abld test build t_db
+// 2. Build the test utilities:
+// cd \msg\testutils\group\
+// bldmake bldfiles
+// abld build
+// WINS running instructions:
+// 1. \epoc32\release\wins\<VARIANT>\T_MIUT05.exe can be used at the command prompt
+// or executable can be run from Windows Explorer.
+// All other platform running instructions:
+// 1. Copy \epoc32\release\<PLATFORM>\<VARIANT>\T_MIUT05.exe onto the other platform
+// 2. Copy \epoc32\release\<PLATFORM>\<VARIANT>\MSVTESTUTILS.DLL into 
+// <DRIVE>:\system\libs on the other platform
+// 3. Copy \epoc32\release\<PLATFORM>\<VARIANT>\EMAILTESTUTILS.DLL into 
+// <DRIVE>:\system\libs on the other platform
+// 4. Run T_MIUT05.exe on the other platform
+// 
+//
+
+#include "emailtestutils.h"
+#include "miuthdr.h"    // CImHeader
+#include "miutlog.h" 
+#include <msvstd.h>
+#include <msvids.h>
+#include <cemailaccounts.h>
+#include <iapprefs.h>
+
+// local variables etc //
+
+RTest test(_L("MIUT05 Test CImMimeHeader class"));
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D CImMimeHeader* imMimeHeader;
+LOCAL_D CImMimeHeader* imMimeHeaderVerify;
+LOCAL_D TMsvEntry* entry; 
+LOCAL_D CImLog* log;
+LOCAL_D CEmailTestUtils* testUtils;
+
+
+//
+
+#define KImRelativePathString _L8("..\\..\\")
+#define KImailHeader1 _L8("TEXT")
+#define KImailHeader2 _L8("PLAIN")
+#define KImailHeader3 _L8("CHARSET")
+#define KImailHeader4 _L8("US-ASCII")
+
+#define KImailHeader5 _L8("<kjashd@jsdkjd.com")
+#define KImailHeader6 _L("http:\\\\abc\\def\\hij\\klmn.html")
+#define KImailHeader7 _L8("93245ihdflkjsd098325lksdf@09835.psion.com")
+#define KImailHeader8 _L8("US-ASCII")
+#define KImailHeader9 _L8("FILE")
+#define KImailHeader10 _L8("ATTACHMENT")
+#define KImailHeader11 _L8("CALENDAR")
+
+#define KImailParam1 _L8("charset")
+#define KImailParam2 _L8("ISO-8859-1")
+#define KImailParam3 _L8("filename")
+#define KImailParam4 _L8("ohio state.jpeg")
+#define KImailParam5 _L8("START")
+#define KImailParam6 _L8("0x1003")
+#define KImailParam7 _L8("method")
+#define KImailParam8 _L8("request")
+#define KImailParam9 _L8("component")
+#define KImailParam10 _L8("vevent")
+#define KImailParam11 _L8("event.ics")
+#define KMaxImMimeFieldLengthLong KMaxImMimeFieldLength+1
+
+//
+
+LOCAL_C void ResultOfTest(TBool aResult,TInt aTestNo)
+	{
+	if (aResult)
+		{
+		test.Printf(TRefByValue<const TDesC>_L("Passed test %d\n"),aTestNo);
+		}
+	else
+		{
+		test.Printf(TRefByValue<const TDesC>_L("\nFailed test %d\n"),aTestNo);
+		}
+	}
+
+LOCAL_C void StoreMessageSettingsL(CImMimeHeader* aimMimeHeader)
+	{
+	// create a new TmsvEntry in the index
+	CMsvStore* fileStore = testUtils->iMsvEntry->EditStoreL();
+	CleanupStack::PushL(fileStore);
+	aimMimeHeader->StoreL(*fileStore);
+	fileStore->CommitL();
+	CleanupStack::PopAndDestroy(); // filestore
+	log->AppendComment(_L8("\tStored Message Settings"));
+	}
+
+LOCAL_C void RestoreMessageSettingsL(CImMimeHeader* aimMimeHeader)
+	{
+	aimMimeHeader->Reset();
+	CMsvStore* fStore=testUtils->iMsvEntry->ReadStoreL();
+	CleanupStack::PushL(fStore);
+	aimMimeHeader->RestoreL(*fStore);
+	CleanupStack::PopAndDestroy(); //fStore
+	log->AppendComment(_L8("\tRestored Message Settings"));
+	}
+
+//
+
+LOCAL_C void CreateFilledMimeHeader()
+	{
+	imMimeHeader->SetContentTypeL(KImailHeader1);
+	imMimeHeader->SetContentSubTypeL(KImailHeader2);
+	imMimeHeader->SetContentDispositionL(KImailHeader9);
+	imMimeHeader->SetContentDescriptionL(KImailHeader1);
+	imMimeHeader->SetContentBaseL(KImailHeader3);
+	imMimeHeader->SetContentLocationL(KImailHeader6);
+	imMimeHeader->SetContentIDL(KImailHeader4);
+	imMimeHeader->SetRelativePathL(KImRelativePathString);
+	// test the string arrays
+	CDesC8Array& array=imMimeHeader->ContentTypeParams();
+	array.AppendL(KImailParam1);
+	array.AppendL(KImailParam2);
+	array.AppendL(KImailParam3);
+	array.AppendL(KImailParam4);
+
+	CDesC8Array& arrayB=imMimeHeader->ContentDispositionParams();
+	arrayB.AppendL(KImailParam3);
+	arrayB.AppendL(KImailParam4);
+	log->AppendComment(_L8("\tCreated Filled Mime Header"));
+	}
+
+LOCAL_C void CreateLongMimeHeader()
+	{
+	// a bunch of data for the header object....
+	// all the fields are set to a length greater than 1000 i.e 1001
+
+	TBuf8<KMaxImMimeFieldLengthLong> longValue;
+	TBuf16<KMaxImMimeFieldLengthLong> longValue1;
+	longValue.Fill('x',KMaxImMimeFieldLengthLong);
+	longValue1.Fill('x',KMaxImMimeFieldLengthLong);
+
+	imMimeHeader->SetContentTypeL(longValue);
+	imMimeHeader->SetContentSubTypeL(longValue);
+	imMimeHeader->SetContentDispositionL(longValue);
+	imMimeHeader->SetContentDescriptionL(longValue);
+	imMimeHeader->SetContentBaseL(longValue);
+	imMimeHeader->SetContentLocationL(longValue1);
+	imMimeHeader->SetContentIDL(longValue);
+	imMimeHeader->SetRelativePathL(longValue);
+	// test the string arrays
+	CDesC8Array& array=imMimeHeader->ContentTypeParams();
+	array.AppendL(longValue);
+	array.AppendL(longValue);
+	array.AppendL(longValue);
+	array.AppendL(longValue);
+
+	CDesC8Array& arrayB=imMimeHeader->ContentDispositionParams();
+	arrayB.AppendL(longValue);
+	arrayB.AppendL(longValue);
+	log->AppendComment(_L8("\tCreated Long Mime Header"));
+	}
+
+LOCAL_C void CreateICalendarMimeHeader()
+	{
+	imMimeHeader->SetContentTypeL(KImailHeader1);
+	imMimeHeader->SetContentSubTypeL(KImailHeader11);
+	imMimeHeader->SetContentDispositionL(KImailHeader10);
+	imMimeHeader->SetContentDescriptionL(KImailHeader1);
+	imMimeHeader->SetContentBaseL(KImailHeader3);
+	imMimeHeader->SetContentLocationL(KImailHeader6);
+	imMimeHeader->SetContentIDL(KImailHeader4);
+	imMimeHeader->SetRelativePathL(KImRelativePathString);
+	// test the string arrays
+	CDesC8Array& array=imMimeHeader->ContentTypeParams();
+	array.AppendL(KImailParam7);
+	array.AppendL(KImailParam8);
+	array.AppendL(KImailParam9);
+	array.AppendL(KImailParam10);
+	array.AppendL(KImailParam1);
+	array.AppendL(KImailParam2);
+
+	CDesC8Array& arrayB=imMimeHeader->ContentDispositionParams();
+	arrayB.AppendL(KImailParam3);
+	arrayB.AppendL(KImailParam11);
+	log->AppendComment(_L8("\tCreated ICalendar Mime Header"));
+	}
+
+LOCAL_C TBool CompareFilledMimeHeader(TInt aTest)
+	{
+	TBool result = ETrue;
+	log->AppendComment(_L8("\tComparing Filled Mime Header"));
+	TBool result1=((imMimeHeader->ContentType())==(imMimeHeaderVerify->ContentType()));
+	if (!result1)
+		log->AppendError(_L8("\t\tContent Types not identical"),-1);
+	result&= result1;
+	TBool result2=((imMimeHeader->ContentSubType())==(imMimeHeader->ContentSubType()));
+	if (!result2)
+		log->AppendError(_L8("\t\tContent SubTypes not identical"),-1);
+	result&= result2;
+	TBool result3=((imMimeHeader->ContentDisposition())==(imMimeHeader->ContentDisposition()));
+	if (!result3)
+		log->AppendError(_L8("\t\tContent Dispositions not identical"),-1);
+	result&= result3;
+	TBool result4=((imMimeHeader->ContentDescription())==(imMimeHeader->ContentDescription()));
+	if (!result4)
+		log->AppendError(_L8("\t\tContent Descriptions not identical"),-1);
+	result&= result4;
+	TBool result5=((imMimeHeader->ContentBase())==(imMimeHeader->ContentBase()));
+	if (!result5)
+		log->AppendError(_L8("\t\tContent Bases not identical"),-1);
+	result&= result5;
+	TBool result6=((imMimeHeader->ContentID())==(imMimeHeader->ContentID()));
+	if (!result6)
+		log->AppendError(_L8("\t\tContentIDs not identical"),-1);
+	result&= result6;
+
+	TBool result8=((imMimeHeader->ContentLocation())==(imMimeHeader->ContentLocation()));
+	if (!result8)
+		log->AppendError(_L8("\t\tContent Locations not identical"),-1);
+	result&= result8;
+	TBool result9=((imMimeHeader->RelativePath())==(imMimeHeader->RelativePath()));
+	if (!result9)
+		log->AppendError(_L8("\t\tRelative Paths not identical"),-1);
+	result&=result9;
+
+	TInt ii;
+	TBufC8<100> oldStr;
+	TBufC8<100>newStr;
+	TBool result11=ETrue;
+	for ( ii=0; ii<imMimeHeader->ContentTypeParams().Count(); ii++)
+		{
+		if (imMimeHeader->ContentTypeParams().Count()==imMimeHeaderVerify->ContentTypeParams().Count())
+			{
+			oldStr=imMimeHeader->ContentTypeParams()[ii];
+			newStr=imMimeHeaderVerify->ContentTypeParams()[ii];
+			result11&=((imMimeHeader->ContentTypeParams()[ii])==(imMimeHeaderVerify->ContentTypeParams()[ii]));
+			}
+		else
+			result11&=EFalse;
+		}
+	if (!result11)
+		log->AppendError(_L8("\t\tContent Type Parameters not identical"),-1);
+	result&=result11;
+	TBool result12=ETrue;
+	for ( ii=0; ii<imMimeHeader->ContentDispositionParams().Count(); ii++)
+		{
+		if (imMimeHeader->ContentDispositionParams().Count()==imMimeHeaderVerify->ContentDispositionParams().Count())
+			result12&=((imMimeHeader->ContentDispositionParams()[ii])==(imMimeHeaderVerify->ContentDispositionParams()[ii]));
+		else
+			result12&=EFalse;
+		}
+	if (!result12)
+		log->AppendError(_L8("\t\tContent Disposition Parameters not identical"),-1);
+	result&=result12;
+
+	ResultOfTest(result,aTest);
+	return result;
+	}
+
+LOCAL_C TBool CompareBlankMimeHeader(TInt aTest)
+	{
+	// need to check each of the fields of the stored header (imMimeHeaderVerify) are 
+	// the same as that originally entered (imMimeHeader).  Here the length should be 
+	// 0 so we don't actually need to compare!
+
+	TBool result = ETrue;
+	log->AppendComment(_L8("\tComparing Filled Mime Header"));
+	TBool result1=((imMimeHeader->ContentType().Length()==0)==(imMimeHeaderVerify->ContentType().Length()==0));
+	if (!result1)
+		log->AppendError(_L8("\t\tContent Types not identical"),-1);
+	result&=result1;
+	TBool result2=((imMimeHeader->ContentSubType().Length()==0)==(imMimeHeader->ContentSubType().Length()==0));
+	if (!result2)
+		log->AppendError(_L8("\t\tContent SubTypes not identical"),-1);
+	result&=result2;
+	TBool result3=((imMimeHeader->ContentDisposition().Length()==0)==(imMimeHeader->ContentDisposition().Length()==0));
+	if (!result3)
+		log->AppendError(_L8("\t\tContent Dispositions not identical"),-1);
+	result&=result3;
+	TBool result4=((imMimeHeader->ContentDescription().Length()==0)==(imMimeHeader->ContentDescription().Length()==0));
+	if (!result4)
+		log->AppendError(_L8("\t\tContent Descriptions not identical"),-1);
+	result&=result4;
+	TBool result5=((imMimeHeader->ContentBase().Length()==0)==(imMimeHeader->ContentBase().Length()==0));
+	if (!result5)
+		log->AppendError(_L8("\t\tContent Bases not identical"),-1);
+	result&=result5;
+	TBool result6=((imMimeHeader->ContentID().Length()==0)==(imMimeHeader->ContentID().Length()==0));
+	if (!result6)
+		log->AppendError(_L8("\t\tContentIDs not identical"),-1);
+	result&=result6;
+
+	TBool result8=((imMimeHeader->ContentLocation().Length()==0)==(imMimeHeader->ContentLocation().Length()==0));
+	if (!result8)
+		log->AppendError(_L8("\t\tContent Locations not identical"),-1);
+	result&=result8;
+	TBool result9=((imMimeHeader->RelativePath().Length()==0)==(imMimeHeader->RelativePath().Length()==0));
+	if (!result9)
+		log->AppendError(_L8("\t\tRelative Paths not identical"),-1);
+	result&=result9;
+
+	TBool result10=((imMimeHeader->ContentTypeParams().Count())==(imMimeHeaderVerify->ContentTypeParams().Count()));
+	if (!result10)
+		log->AppendError(_L8("\t\tContent Type Parameters not identical"),-1);
+	result&=result10;
+	TBool result11=((imMimeHeader->ContentDispositionParams().Count())==(imMimeHeaderVerify->ContentDispositionParams().Count()));
+	if (!result11)
+		log->AppendError(_L8("\t\tContent Disposition Parameters not identical"),-1);
+	result&=result11;
+	
+	ResultOfTest(result,aTest);
+
+	return result;
+	}
+
+
+LOCAL_C TBool TestContentTypeParamCode(TInt aTest)
+	{
+	// search for an existing entry
+	TPtrC8 param1 = imMimeHeader->GetContentTypeValue(KImailParam3);
+	TBool result= KErrNone==param1.Compare(KImailParam4);
+
+	TPtrC8 param2 = imMimeHeader->GetContentTypeValue(KImailParam1);
+	result &= KErrNone==param2.Compare(KImailParam2);
+	
+	TPtrC8 unknownParam = imMimeHeader->GetContentTypeValue(KImailParam6);	// matches value, not a parameter
+	result &= KErrNone != unknownParam.Compare(KImailParam2);
+
+	
+	TPtrC8 unknown2 = imMimeHeader->GetContentTypeValue(_L8("I don't exist"));	// parameter text is not in array
+	result &= KErrNone != unknown2.Compare(KImailParam2);
+
+	ResultOfTest(result,aTest);
+	return result;
+	}
+	
+LOCAL_C TBool TestICalendarContentTypeParamCode(TInt aTest)
+	{
+	// search for an existing entry
+	TPtrC8 param1 = imMimeHeader->GetContentTypeValue(KImailParam7);
+	TBool result= KErrNone==param1.Compare(KImailParam8);
+
+	TPtrC8 param2 = imMimeHeader->GetContentTypeValue(KImailParam9);
+	result &= KErrNone==param2.Compare(KImailParam10);
+	
+	TPtrC8 param3 = imMimeHeader->GetContentTypeValue(KImailParam1);
+	result &= KErrNone==param3.Compare(KImailParam2);
+	
+	
+	TPtrC8 unknownParam = imMimeHeader->GetContentTypeValue(KImailParam6);	// matches value, not a parameter
+	result &= KErrNone != unknownParam.Compare(KImailParam2);
+
+	TPtrC8 unknown2 = imMimeHeader->GetContentTypeValue(_L8("I don't exist"));	// parameter text is not in array
+	result &= KErrNone != unknown2.Compare(KImailParam2);
+
+	ResultOfTest(result,aTest);
+	return result;
+	}
+
+
+LOCAL_C TBool CompareLongMimeHeader(TInt aTest)
+	{
+	TBool result = ETrue;
+	log->AppendComment(_L8("\tComparing Long Mime Header"));
+	TBool result1=((imMimeHeader->ContentType().Left(KMaxImMimeFieldLength))==(imMimeHeaderVerify->ContentType()));
+	if (!result1)
+		log->AppendError(_L8("\t\tContent Types not identical"),-1);
+	result&=result1;
+	TBool result2=((imMimeHeader->ContentSubType().Left(KMaxImMimeFieldLength))==(imMimeHeaderVerify->ContentSubType()));
+	if (!result2)
+		log->AppendError(_L8("\t\tContent SubTypes not identical"),-1);
+	result&=result2;
+	TBool result3=((imMimeHeader->ContentDisposition().Left(KMaxImMimeFieldLength))==(imMimeHeaderVerify->ContentDisposition()));
+	if (!result3)
+		log->AppendError(_L8("\t\tContent Dispositions not identical"),-1);
+	result&=result3;
+	TBool result4=((imMimeHeader->ContentDescription().Left(KMaxImMimeFieldLength))==(imMimeHeaderVerify->ContentDescription()));
+	if (!result4)
+		log->AppendError(_L8("\t\tContent Descriptions not identical"),-1);
+	result&=result4;
+	TBool result5=((imMimeHeader->ContentBase().Left(KMaxImMimeFieldLength))==(imMimeHeaderVerify->ContentBase()));
+	if (!result5)
+		log->AppendError(_L8("\t\tContent Bases not identical"),-1);
+	result&=result5;
+	TBool result6=((imMimeHeader->ContentID().Left(KMaxImMimeFieldLength))==(imMimeHeaderVerify->ContentID()));
+	if (!result6)
+		log->AppendError(_L8("\t\tContentIDs not identical"),-1);
+	result&=result6;
+
+	TBool result8=((imMimeHeader->ContentLocation().Left(KMaxImMimeFieldLength))==(imMimeHeaderVerify->ContentLocation()));
+	if (!result8)
+		log->AppendError(_L8("\t\tContent Locations not identical"),-1);
+	result&=result8;
+	TBool result9=((imMimeHeader->RelativePath().Left(KMaxImMimeFieldLength))==(imMimeHeaderVerify->RelativePath()));
+	if (!result9)
+		log->AppendError(_L8("\t\tRelative Paths not identical"),-1);
+	result&=result9;
+
+	TBool result10 = ETrue;
+	TInt ii;
+	TBuf8<KMaxImMimeFieldLengthLong> contentTypeParamsBuffer;
+	for ( ii=0; ii<imMimeHeader->ContentTypeParams().Count(); ii++)
+		{
+		if (imMimeHeader->ContentTypeParams().Count()==imMimeHeaderVerify->ContentTypeParams().Count())
+			{
+			contentTypeParamsBuffer=(imMimeHeader->ContentTypeParams()[ii]);
+			contentTypeParamsBuffer.SetLength(KMaxImMimeFieldLength);
+			result10&=((contentTypeParamsBuffer)==(imMimeHeaderVerify->ContentTypeParams()[ii].Left(KMaxImMimeFieldLength)));
+			}
+		else
+			result10&=EFalse;
+		}
+	if (!result10)
+		log->AppendError(_L8("\t\tContent Type Parameters not identical"),-1);
+	result&=result10;
+
+	TBuf8<KMaxImMimeFieldLengthLong> contentDispositionParamsBuffer;
+	TBool result11 = ETrue;
+	for ( ii=0; ii<imMimeHeader->ContentDispositionParams().Count(); ii++)
+		{
+		if (imMimeHeader->ContentDispositionParams().Count()==imMimeHeaderVerify->ContentDispositionParams().Count())
+			{
+			contentDispositionParamsBuffer=(imMimeHeader->ContentDispositionParams()[ii]);
+			contentDispositionParamsBuffer.SetLength(KMaxImMimeFieldLength);
+			result11&=((contentDispositionParamsBuffer)==(imMimeHeaderVerify->ContentDispositionParams()[ii].Left(KMaxImMimeFieldLength)));
+			}
+		else
+			result11&=EFalse;
+		}
+	if (!result11)
+		log->AppendError(_L8("\t\tContent Disposition Parameters not identical"),-1);
+	result&=result11;
+
+	ResultOfTest(result,aTest);
+
+	return result;
+	}
+	
+LOCAL_C TBool CompareICalendarMimeHeader(TInt aTest)
+	{
+	TBool result = ETrue;
+	log->AppendComment(_L8("\tComparing ICalendar Mime Header"));
+	TBool result1=((imMimeHeader->ContentType())==(imMimeHeaderVerify->ContentType()));
+	if (!result1)
+		log->AppendError(_L8("\t\tContent Types not identical"),-1);
+	result&= result1;
+	TBool result2=((imMimeHeader->ContentSubType())==(imMimeHeaderVerify->ContentSubType()));
+	if (!result2)
+		log->AppendError(_L8("\t\tContent SubTypes not identical"),-1);
+	result&= result2;
+	TBool result3=((imMimeHeader->ContentDisposition())==(imMimeHeaderVerify->ContentDisposition()));
+	if (!result3)
+		log->AppendError(_L8("\t\tContent Dispositions not identical"),-1);
+	result&= result3;
+	TBool result4=((imMimeHeader->ContentDescription())==(imMimeHeaderVerify->ContentDescription()));
+	if (!result4)
+		log->AppendError(_L8("\t\tContent Descriptions not identical"),-1);
+	result&= result4;
+	TBool result5=((imMimeHeader->ContentBase())==(imMimeHeaderVerify->ContentBase()));
+	if (!result5)
+		log->AppendError(_L8("\t\tContent Bases not identical"),-1);
+	result&= result5;
+	TBool result6=((imMimeHeader->ContentID())==(imMimeHeaderVerify->ContentID()));
+	if (!result6)
+		log->AppendError(_L8("\t\tContentIDs not identical"),-1);
+	result&= result6;
+
+	TBool result8=((imMimeHeader->ContentLocation())==(imMimeHeaderVerify->ContentLocation()));
+	if (!result8)
+		log->AppendError(_L8("\t\tContent Locations not identical"),-1);
+	result&= result8;
+	TBool result9=((imMimeHeader->RelativePath())==(imMimeHeaderVerify->RelativePath()));
+	if (!result9)
+		log->AppendError(_L8("\t\tRelative Paths not identical"),-1);
+	result&=result9;
+
+	TInt ii;
+	TBufC8<100> oldStr;
+	TBufC8<100>newStr;
+	TBool result11=ETrue;
+	for ( ii=0; ii<imMimeHeader->ContentTypeParams().Count(); ii++)
+		{
+		if (imMimeHeader->ContentTypeParams().Count()==imMimeHeaderVerify->ContentTypeParams().Count())
+			{
+			oldStr=imMimeHeader->ContentTypeParams()[ii];
+			newStr=imMimeHeaderVerify->ContentTypeParams()[ii];
+			result11&=((imMimeHeader->ContentTypeParams()[ii])==(imMimeHeaderVerify->ContentTypeParams()[ii]));
+			}
+		else
+			result11&=EFalse;
+		}
+	if (!result11)
+		log->AppendError(_L8("\t\tContent Type Parameters not identical"),-1);
+	result&=result11;
+	TBool result12=ETrue;
+	for ( ii=0; ii<imMimeHeader->ContentDispositionParams().Count(); ii++)
+		{
+		if (imMimeHeader->ContentDispositionParams().Count()==imMimeHeaderVerify->ContentDispositionParams().Count())
+			{
+			oldStr=imMimeHeader->ContentDispositionParams()[ii];
+			newStr=imMimeHeaderVerify->ContentDispositionParams()[ii];
+			result12&=((imMimeHeader->ContentDispositionParams()[ii])==(imMimeHeaderVerify->ContentDispositionParams()[ii]));
+			}
+		else
+			result12&=EFalse;
+		}
+	if (!result12)
+		log->AppendError(_L8("\t\tContent Disposition Parameters not identical"),-1);
+	result&=result12;
+
+	ResultOfTest(result,aTest);
+	return result;
+	}
+
+//
+
+LOCAL_C TBool FilledMimeHeader(TInt aTest)
+	{
+	log->AppendComment(_L8("\tFilled Mime Header Test (Test 1)"));
+	
+	entry = new(ELeave) TMsvEntry;
+	entry->iDescription.Set(_L("Description"));
+	entry->iDetails.Set(_L("Details"));
+	entry->iType = KUidMsvMessageEntry;
+	entry->iMtm = KUidMsgTypeIMAP4;
+	entry->iServiceId = KMsvLocalServiceIndexEntryId;
+	
+	testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId);
+	testUtils->iMsvEntry->CreateL(*entry);
+	TRAPD(error,testUtils->iMsvEntry->SetEntryL(entry->Id()));
+	
+	imMimeHeader=CImMimeHeader::NewLC();
+	imMimeHeaderVerify=CImMimeHeader::NewLC();
+	CreateFilledMimeHeader();
+	StoreMessageSettingsL(imMimeHeader);
+	RestoreMessageSettingsL(imMimeHeaderVerify);
+	
+	TBool result=CompareFilledMimeHeader(aTest);
+	result &= TestContentTypeParamCode(aTest);
+
+	delete entry;
+	CleanupStack::PopAndDestroy(2);	//imMimeHeader, imMimeHeaderVerify
+
+	return result;
+	}
+
+LOCAL_C TBool BlankMimeHeader(TInt aTest)
+	{
+	log->AppendComment(_L8("\tBlank Mime Header Test (Test 2)"));
+	entry = new(ELeave) TMsvEntry;
+	entry->iDescription.Set(_L("Description"));
+	entry->iDetails.Set(_L("Details"));
+	entry->iType = KUidMsvServiceEntry;
+	imMimeHeader=CImMimeHeader::NewLC();
+	imMimeHeaderVerify=CImMimeHeader::NewLC();
+	StoreMessageSettingsL(imMimeHeader);
+	RestoreMessageSettingsL(imMimeHeaderVerify);
+	
+	TBool result=CompareBlankMimeHeader(aTest);
+	delete entry;
+	CleanupStack::PopAndDestroy(2);	//imMimeHeader, imMimeHeaderVerify
+
+	return result;
+	}
+
+LOCAL_C TBool LongMimeHeader(TInt aTest)
+	{
+	log->AppendComment(_L8("\tLong Mime Header Test (Test 3)"));
+	entry = new(ELeave) TMsvEntry;
+	entry->iDescription.Set(_L("Description"));
+	entry->iDetails.Set(_L("Details"));
+	entry->iType = KUidMsvMessageEntry;
+	entry->iMtm = KUidMsgTypeIMAP4;
+	entry->iServiceId = KMsvLocalServiceIndexEntryId;
+	
+	testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId);
+	testUtils->iMsvEntry->CreateL(*entry);
+	TRAPD(error,testUtils->iMsvEntry->SetEntryL(entry->Id()));
+	
+	imMimeHeader=CImMimeHeader::NewLC();
+	imMimeHeaderVerify=CImMimeHeader::NewLC();
+	CreateLongMimeHeader();
+	StoreMessageSettingsL(imMimeHeader);
+	RestoreMessageSettingsL(imMimeHeaderVerify);
+	
+	TBool result=CompareLongMimeHeader(aTest);
+	delete entry;
+	CleanupStack::PopAndDestroy(2);	//imMimeHeader, imMimeHeaderVerify
+
+	return result;
+	}
+	
+LOCAL_C TBool ICalendarHeader(TInt aTest)
+	{
+	log->AppendComment(_L8("\tICalendar Mime Header Test (Test 1)"));
+	entry = new(ELeave) TMsvEntry;
+	entry->iDescription.Set(_L("Description"));
+	entry->iDetails.Set(_L("Details"));
+	entry->iType = KUidMsvServiceEntry;
+	imMimeHeader=CImMimeHeader::NewLC();
+	imMimeHeaderVerify=CImMimeHeader::NewLC();
+	CreateICalendarMimeHeader();
+	StoreMessageSettingsL(imMimeHeader);
+	RestoreMessageSettingsL(imMimeHeaderVerify);
+	
+	TBool result=CompareICalendarMimeHeader(aTest);
+	result &= TestICalendarContentTypeParamCode(aTest);
+
+	delete entry;
+	CleanupStack::PopAndDestroy(2);	//imMimeHeader, imMimeHeaderVerify
+
+	return result;
+	}
+
+LOCAL_C TBool TestContentTransferEncoding(TInt aTest)
+	{
+	log->AppendComment(_L8("\tTesting Content Transfer Encoding (Test 4)"));
+
+	CImMimeHeader* mimeHeader = CImMimeHeader::NewLC();
+	CImMimeHeader* mimeHeaderVerify=CImMimeHeader::NewLC();
+	TBool result = ETrue;
+	
+	mimeHeader->SetContentTransferEncodingL(_L8("base64"));
+	StoreMessageSettingsL(mimeHeader);
+	RestoreMessageSettingsL(mimeHeaderVerify);
+	TBool result1 = (mimeHeader->ContentTransferEncoding() == mimeHeaderVerify->ContentTransferEncoding());
+	if (!result1)
+		log->AppendError(_L8("\t\tContent Transfer Encoding values not identical"),-1);
+	result &= result1;
+	mimeHeader->SetContentTransferEncodingL(_L8("quoted-printable"));
+	StoreMessageSettingsL(mimeHeader);
+	RestoreMessageSettingsL(mimeHeaderVerify);
+	TBool result2 = (mimeHeader->ContentTransferEncoding() == mimeHeaderVerify->ContentTransferEncoding());
+	if (!result2)
+		log->AppendError(_L8("\t\tContent Transfer Encoding values not identical"),-1);
+	result &= result2;
+	mimeHeader->SetContentTransferEncodingL(_L8("7bit"));
+	StoreMessageSettingsL(mimeHeader);
+	RestoreMessageSettingsL(mimeHeaderVerify);
+	TBool result3 = (mimeHeader->ContentTransferEncoding() == mimeHeaderVerify->ContentTransferEncoding());
+	if (!result3)
+		log->AppendError(_L8("\t\tContent Transfer Encoding values not identical"),-1);
+	result &= result3;
+	mimeHeader->SetContentTransferEncodingL(_L8("8bit"));
+	StoreMessageSettingsL(mimeHeader);
+	RestoreMessageSettingsL(mimeHeaderVerify);
+	TBool result4 = (mimeHeader->ContentTransferEncoding() == mimeHeaderVerify->ContentTransferEncoding());
+	if (!result4)
+		log->AppendError(_L8("\t\tContent Transfer Encoding values not identical"),-1);
+	result &= result4;
+	mimeHeader->SetContentTransferEncodingL(_L8("binary"));
+	StoreMessageSettingsL(mimeHeader);
+	RestoreMessageSettingsL(mimeHeaderVerify);
+	TBool result5 = (mimeHeader->ContentTransferEncoding() == mimeHeaderVerify->ContentTransferEncoding());
+	if (!result5)
+		log->AppendError(_L8("\t\tContent Transfer Encoding values not identical"),-1);
+	result &= result5;
+	mimeHeader->SetContentTransferEncodingL(_L8("uu"));
+	StoreMessageSettingsL(mimeHeader);
+	RestoreMessageSettingsL(mimeHeaderVerify);
+	TBool result6 = (mimeHeader->ContentTransferEncoding() == mimeHeaderVerify->ContentTransferEncoding());
+	if (!result6)
+		log->AppendError(_L8("\t\tContent Transfer Encoding values not identical"),-1);
+	result &= result6;
+
+	CleanupStack::PopAndDestroy(2); // mimeHeader, mimeHeaderVerify
+
+	ResultOfTest(result,aTest);
+
+	return result;
+	}
+
+//
+
+LOCAL_C void InitL()
+	{
+	CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+	CActiveScheduler::Install(scheduler);
+	CleanupStack::PushL(scheduler);
+
+	testUtils = CEmailTestUtils::NewLC(test);
+	testUtils->CreateAllTestDirectories();
+	testUtils->FileSession().SetSessionPath(_L("C:\\"));
+	testUtils->CleanMessageFolderL();
+	testUtils->GoServerSideL();
+
+	log = CImLog::NewL(_L("c:\\logs\\email\\T_IMCM.log"), EAppend);
+	CleanupStack::PushL(log);
+	log->AppendComment(_L8("********** T_MIUT05 Test CImMimeHeader class **********"));
+	TBuf8<80> buf;
+
+#if defined(__WINS__)	
+	buf.Append(_L8("WINS "));
+#else
+	buf.Append(_L8("MARM "));
+#endif
+#if defined(_UNICODE)
+	buf.Append(_L8("U"));
+#endif
+#if defined(_DEBUG)
+	buf.Append(_L8("DEB"));
+#else
+	buf.Append(_L8("REL"));
+#endif
+	log->AppendComment(buf);
+	}
+	
+LOCAL_C void Closedown()
+	{
+	log->AppendComment(_L8("**********    T_MIUT05 Tests Complete    **********"));
+	log->AppendComment(_L8(""));
+
+	CleanupStack::PopAndDestroy(3);  //testUtils, log, scheduler
+	}
+
+
+#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
+LOCAL_C void CreateAccount()
+	{
+	log->AppendComment(_L8("\tCreating email accounts..."));
+	CEmailAccounts* accounts = CEmailAccounts::NewLC();
+	CImImap4Settings* imapSetting = new (ELeave) CImImap4Settings;
+	CImIAPPreferences* iap = CImIAPPreferences::NewLC();
+
+	_LIT(KIMAPAccountName, "ImapAccount");
+	accounts->PopulateDefaultImapSettingsL(*imapSetting, *iap);
+	TImapAccount imapAccount = accounts->CreateImapAccountL(KIMAPAccountName, *imapSetting, *iap, EFalse);
+	CleanupStack::PopAndDestroy(2);
+	delete imapSetting;
+	log->AppendComment(_L8("\tAccount Created succesfully."));
+	}
+	
+#endif
+
+
+//
+
+LOCAL_C void doMainL()
+	{
+	InitL();
+	testUtils->GoClientSideL();
+	test.Printf(_L("Performing Header Tests"));
+
+#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
+	CreateAccount();
+#endif
+	
+	TBool result = ETrue;
+	testUtils->TestStart(1);
+	TBool result1 = FilledMimeHeader(1);
+	if (result1)
+		log->AppendComment(_L8("PASSED Test 1"));
+	else
+		log->AppendError(_L8("FAILED Test 1"),-1);
+	result&=result1;
+	testUtils->TestFinish(1);
+
+	testUtils->TestStart(2);
+	TBool result2 = BlankMimeHeader(2);
+	if (result2)
+		log->AppendComment(_L8("PASSED Test 2"));
+	else
+		log->AppendError(_L8("FAILED Test 2"),-1);
+	result&=result2;
+	testUtils->TestFinish(2);
+
+	testUtils->TestStart(3);
+	TBool result3 = LongMimeHeader(3);
+	if (result3)
+		log->AppendComment(_L8("PASSED Test 3"));
+	else
+		log->AppendError(_L8("FAILED Test 3"),-1);
+	result&=result3;
+	testUtils->TestFinish(3);
+
+	testUtils->TestStart(4);
+	TBool result4 = TestContentTransferEncoding(4);
+	if (result4)
+		log->AppendComment(_L8("PASSED Test 4"));
+	else
+		log->AppendError(_L8("FAILED Test 4"),-1);
+	result&=result4;
+	testUtils->TestFinish(4);
+	
+	testUtils->TestStart(5);
+	TBool result5 = ICalendarHeader(5);
+	if (result5)
+		log->AppendComment(_L8("PASSED Test 5"));
+	else
+		log->AppendError(_L8("FAILED Test 5"),-1);
+	result&=result5;
+	testUtils->TestFinish(5);
+
+	if (result)
+		{
+		log->AppendComment(_L8("PASSED All tests Correctly"));
+		test.Printf(_L("PASSED all Tests"));
+		testUtils->TestHarnessCompleted();
+		}
+	else
+		{
+		test.Printf(_L("\nFAILED Tests"));
+		log->AppendError(_L8("FAILED At Least one test"),-1);
+		testUtils->TestHarnessFailed(KErrGeneral);
+		}
+	Closedown();
+	}
+
+GLDEF_C TInt E32Main()
+	{	
+	__UHEAP_MARK;
+	test.Start(_L("MIUT05 Test CImMimeHeader class"));
+	theCleanup=CTrapCleanup::New();
+	TRAPD(ret,doMainL());		
+	test(ret==KErrNone);
+	delete theCleanup;	
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	return(KErrNone);
+	}