email/pop3andsmtpmtm/clientmtms/test/src/T_imcm06.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_imcm06.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,1010 @@
+// 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_IMCM06
+// Component: IMCM
+// Brief description of test harness:
+// Tests the CImEmailMessage - GetBodyTextL(), GetMessageDigestEntriesL(), 
+// GetAttachmentsListL() for EThisMessageAndEmbeddedMessages and 
+// EThisMessageOnly types.  Also, it tests VCard,VCalenders, ICalendars and 
+// VEntries for GetAttachmentsL().  Also performs heap failure tests.
+// Detailed description of test harness:
+// As above.
+// Input files required to run test harness:
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82201.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82201.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82202.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82202.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82203.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82203.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82204.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82204.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82205.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82205.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82206.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82206.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82207.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82207.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82208.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82208.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82209.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82209.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82210.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82210.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82211.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82211.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82212.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82212.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82213.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82213.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82214.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82214.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82215.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82215.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82216.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82216.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82217.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82217.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82218.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82218.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82219.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82219.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82220.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82220.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82221.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82221.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82222.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82222.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82223.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82223.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82224.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82224.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82225.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82225.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82226.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82226.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82227.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82227.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82228.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82228.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82229.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82229.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82230.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82230.txt
+// \MSG\IMCMTSRC\RFCT_IMCM06\rfc82231.txt		<DRIVE>:\MSGTEST\IMCM\RFCT_IMCM06\rfc82231.txt
+// Intermediate files produced while running test harness:
+// None
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_IMCM06.<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_IMCM06.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_IMCM06.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_IMCM06.exe on the other platform
+// 
+//
+
+#include "emailtestutils.h"
+#include <miutmsg.h>
+#include <txtrich.h>
+
+#include <mmsvattachmentmanager.h>
+  
+// local variables etc //
+
+_LIT(KImcmTest, "T_IMCM06 - Testing URI resolving of real messages");
+RTest test(KImcmTest);
+
+
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D CEmailTestUtils* testUtils;
+LOCAL_D CRichText* rText;
+LOCAL_D CParaFormatLayer* pLayer;
+LOCAL_D CCharFormatLayer* cLayer;
+LOCAL_D CActiveScheduler* scheduler;
+LOCAL_D CMsvEntrySelection* msgList;
+LOCAL_D TInt globalError;
+
+//
+
+
+LOCAL_C void Closedown()
+	{
+	if (globalError)
+		testUtils->TestHarnessFailed(globalError);
+	else
+		testUtils->TestHarnessCompleted();
+	CleanupStack::PopAndDestroy(2, scheduler);  //testUtils, scheduler
+	}
+
+//
+
+LOCAL_C TInt AttachResult1L(const RPointerArray<CMsvAttachment>& array)
+	{
+	TInt error=0;
+	error=(array.Count()==1)?KErrNone : KErrNotFound;
+	if (error)
+		{
+		testUtils->WriteComment(_L("No attachments"));
+		return error;
+		}
+	CMsvAttachment* attachmentInfo=array[0];
+	if(attachmentInfo->Type()==(CMsvAttachment::EMsvFile) || attachmentInfo->Type()==(CMsvAttachment::EMsvLinkedFile))
+		{
+		error = (attachmentInfo->FilePath() == _L("C:\\Private\\1000484b\\Mail2\\00001001_S\\3\\00100003_F\\print.bmp")) ? KErrNone : KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("FilePath didn't match"));
+			return error;
+			}
+		}
+	else
+		testUtils->WriteComment(_L("This is a message entry. Hence filename does not exist"));
+		
+	error=(attachmentInfo->Id()==0x00100003)?KErrNone : KErrNotFound;
+	if (error)
+		{
+		testUtils->WriteComment(_L("Id didn't match"));
+		return error;
+		}
+	error=(attachmentInfo->Complete())?KErrNone : KErrNotFound;
+	if (error)
+		{
+		testUtils->WriteComment(_L("Complete didn't match"));
+		return error;
+		}
+	return error;
+	}
+	
+
+LOCAL_C TInt AttachResult3L(const RPointerArray<CMsvAttachment>& array)
+	{
+	TInt error=0;
+	CMsvAttachment* attachmentInfo;
+	error=(array.Count()==1)?KErrNone : KErrNotFound;
+	if (error)
+		{
+		testUtils->WriteComment(_L("No attachments"));
+		return error;
+		}
+	
+	attachmentInfo=array[0];
+	if(attachmentInfo->Type()==CMsvAttachment::EMsvFile || attachmentInfo->Type()==CMsvAttachment::EMsvLinkedFile)
+		{
+		error = (!attachmentInfo->FilePath().CompareF(_L("C:\\Private\\1000484b\\Mail2\\00001001_S\\7\\00100007_F\\Some Base64 encoded text"))) ? KErrNone : KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("FileName didn't match"));
+			return error;
+			}
+		}
+	else
+		testUtils->WriteComment(_L("This is a message entry. Hence filename does not exist"));
+	
+	error=(attachmentInfo->Id()==0x00100007)?KErrNone : KErrNotFound;
+	if (error)
+		{
+		testUtils->WriteComment(_L("Id didn't match"));
+		return error;
+		}
+	error=(attachmentInfo->Complete())?KErrNone : KErrNotFound;
+	if (error)
+		{
+		testUtils->WriteComment(_L("Complete didn't match"));
+		return error;
+		}
+	return error;
+	}
+	
+
+LOCAL_C void TestAttachmentResultsL(TInt aTest,const RPointerArray<CMsvAttachment>& array)
+	{
+	testUtils->TestStart(aTest);
+	TInt error=0;
+	switch (aTest)
+		{
+	case 0:  //has one attachment
+		error=AttachResult1L(array);
+		break;
+	case 2:
+		error=AttachResult3L(array);
+		break;
+	case 4:
+		error=(array.Count()==3)? KErrNone:KErrNotFound;
+		break;
+	case 6:
+		error=(array.Count()==6)?KErrNone : KErrNotFound;  
+		break;
+	case 8:
+		error=(array.Count()==4)?KErrNone : KErrNotFound;  
+		break;
+	case 18:
+	case 15:
+		error=(array.Count()==1)?KErrNone : KErrNotFound;  
+		break;
+	case 5:
+	case 9:
+	case 19:
+	case 20:
+		error=(array.Count()==1)?KErrNone : KErrNotFound;  
+		break;
+	case 23:
+		error=(array.Count()==3)? KErrNone:KErrNotFound;
+		break;
+	case 25:
+		error=(array.Count()==3)?KErrNone : KErrNotFound;  
+		break;
+	case 27:
+		error=(array.Count()==1)?KErrNone : KErrNotFound;  
+		break;
+	case 28:
+		error=(array.Count()==3)?KErrNone : KErrNotFound;  
+		break;
+	case 29:
+	case 30:
+		error=(array.Count()==1)?KErrNone : KErrNotFound;  
+		break;
+	case 31:
+		error=(array.Count()==1)?KErrNone : KErrNotFound;  
+		break;				
+	default:
+		error=(array.Count()==0)?KErrNone : KErrNotFound;  
+		break;
+		}
+	testUtils->TestFinish(aTest,error);
+	if (!globalError)
+		globalError=error;
+	}
+	
+
+LOCAL_C	void TestAttachmentsResultsInEmbeddedMsgsL(TInt aTest,const RPointerArray<CMsvAttachment>& array)
+	{
+	testUtils->TestStart(aTest);
+	TInt error=0;
+	switch (aTest)
+		{
+	case 0:  //has one attachment
+		error=AttachResult1L(array);
+		break;
+	case 2:
+		error=AttachResult3L(array);
+		break;
+	case 4:
+		error=(array.Count()==3)? KErrNone:KErrNotFound;
+		break;
+	case 6:
+		error=(array.Count()==6)?KErrNone : KErrNotFound;  
+		break;
+	case 8:
+		error=(array.Count()==4)?KErrNone : KErrNotFound;  
+		break;
+	case 5:
+	case 9:
+	case 19:
+	case 20:
+		error=(array.Count()==1)?KErrNone : KErrNotFound;  
+		break;
+	case 14:  //has one attachment
+		{
+		error=(array.Count()==2)?KErrNone : KErrNotFound;  //no attachments is 2
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of attachments is wrong"));
+			break;
+			}
+		CMsvAttachment* attachmentInfo1=array[0];
+		CMsvAttachment* attachmentInfo2=array[1];
+
+		if((attachmentInfo1->Type()==CMsvAttachment::EMsvFile || attachmentInfo1->Type()==CMsvAttachment::EMsvLinkedFile ) 
+		&&(attachmentInfo2->Type()==CMsvAttachment::EMsvFile || attachmentInfo2->Type()==CMsvAttachment::EMsvLinkedFile ))
+			{
+			error = (!attachmentInfo1->FilePath().CompareF(_L("C:\\Private\\1000484b\\Mail2\\00001001_S\\3\\00100053_F\\WAP Security Group Meeting -- Minutes, final.doc")))
+				&& (!attachmentInfo2->FilePath().CompareF(_L("C:\\Private\\1000484b\\Mail2\\00001001_S\\7\\00100057_F\\state_table_change.doc"))) ? KErrNone : KErrNotFound;
+			if (error)
+				{
+				testUtils->WriteComment(_L("FileName didn't match"));
+				break;
+				}
+			}
+		else
+			testUtils->WriteComment(_L("These are message entry. Hence filenames does not exist"));
+		break;
+		}
+	case 15:
+		{
+		error=(array.Count()==2)?KErrNone : KErrNotFound;  //no attachments is 2
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of attachments is wrong"));
+			break;
+			}
+		CMsvAttachment* attachmentInfo1=array[0];
+		CMsvAttachment* attachmentInfo2=array[1];
+
+		if((attachmentInfo1->Type()==CMsvAttachment::EMsvFile || attachmentInfo1->Type()==CMsvAttachment::EMsvLinkedFile)
+		&& (attachmentInfo2->Type()==CMsvAttachment::EMsvFile || attachmentInfo2->Type()==CMsvAttachment::EMsvLinkedFile))
+			{
+		error= (!attachmentInfo1->FilePath().CompareF(_L("C:\\Private\\1000484b\\Mail2\\00001001_S\\e\\0010005e_F\\Attachment.ll")))
+				 && (!attachmentInfo2->FilePath().CompareF(_L("C:\\Private\\1000484b\\Mail2\\00001001_S\\f\\0010005f_F\\§§§.txt"))) ? KErrNone : KErrNotFound;
+			if (error)
+				{
+				testUtils->WriteComment(_L("FileName didn't match"));
+				break;
+				}
+			}
+		else
+			testUtils->WriteComment(_L("These are message entry. Hence filenames does not exist"));	
+			
+		break;
+		}
+	case 18:
+		{
+		error=(array.Count()==2)?KErrNone : KErrNotFound;  //no attachments is 2
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of attachments is wrong"));
+			break;
+			}
+		
+		CMsvAttachment* attachmentInfo1=array[0];
+		CMsvAttachment* attachmentInfo2=array[1];
+
+		if((attachmentInfo1->Type()==CMsvAttachment::EMsvFile || attachmentInfo1->Type()==CMsvAttachment::EMsvLinkedFile) 
+		&& (attachmentInfo2->Type()==CMsvAttachment::EMsvFile || attachmentInfo2->Type()==CMsvAttachment::EMsvLinkedFile))
+			{
+		error= (!attachmentInfo1->FilePath().CompareF(_L("C:\\Private\\1000484b\\Mail2\\00001001_S\\0\\00100070_F\\Attachment.ll")))
+				 && (!attachmentInfo2->FilePath().CompareF(_L("C:\\Private\\1000484b\\Mail2\\00001001_S\\1\\00100071_F\\TELECA1.TXT.pgp"))) ? KErrNone : KErrNotFound;
+			if (error)
+				{
+				testUtils->WriteComment(_L("FileName didn't match"));
+				break;
+				}
+			}
+		else
+			testUtils->WriteComment(_L("These are message entry. Hence filenames does not exist"));	
+		break;
+		}
+	case 21:
+		{
+		error=(array.Count()==1)?KErrNone : KErrNotFound;  //no attachments is 1
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of attachments is wrong"));
+			break;
+			}
+		
+		CMsvAttachment* attachmentInfo1=array[0];
+		if(attachmentInfo1->Type()==CMsvAttachment::EMsvFile || attachmentInfo1->Type()==CMsvAttachment::EMsvLinkedFile)
+			{
+		error=(!attachmentInfo1->FilePath().CompareF(_L("C:\\Private\\1000484b\\Mail2\\00001001_S\\4\\00100084_F\\Word file.doc"))) ? KErrNone : KErrNotFound;
+			if (error)
+				{
+				testUtils->WriteComment(_L("FileName didn't match"));
+				break;
+				}
+			}
+			else
+				testUtils->WriteComment(_L("This is a message entry. Hence filename does not exist"));	
+			break;
+		}
+	case 23:
+		error=(array.Count()==3)? KErrNone:KErrNotFound;
+		break;
+	case 25:
+		error=(array.Count()==3)?KErrNone : KErrNotFound;  
+		break;
+	case 27:
+		error=(array.Count()==1)? KErrNone : KErrNotFound;  
+		break;
+	case 28:
+		error=(array.Count()==3)? KErrNone : KErrNotFound;  
+		break;
+	case 29:
+	case 30:
+		error=(array.Count()==1)? KErrNone : KErrNotFound;  
+		break;
+	case 31:
+		error=(array.Count()==1)? KErrNone : KErrNotFound;  
+		break;
+    default:
+		error=(array.Count()==0)?KErrNone : KErrNotFound;  
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of attachments is wrong"));
+			break;
+			}
+		break;
+		}
+	testUtils->TestFinish(aTest,error);
+	if (!globalError)
+		globalError=error;
+	}
+
+
+LOCAL_C void TestGetMsgDigestEntriesL(TInt aTest,const CMsvEntrySelection& aSel)
+	{
+	testUtils->TestStart(aTest);
+	TInt error=0;
+	switch (aTest)
+		{
+	case 14:  
+		error=(aSel.Count()==3)?KErrNone:KErrNotFound;  //has 3 digest entries at the same level
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of msgdigests are wrong"));
+			break;
+			}
+		error=(aSel[0]==0x0010004e && aSel[1]==0x00100050 && aSel[2]==0x00100054)?KErrNone:KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("Ids don't match"));
+			break;
+			}
+		break;
+	case 15:
+		error=(aSel.Count()==1)?KErrNone:KErrNotFound;  //has 3 digest entries at the same level
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of msgdigests are wrong"));
+			break;
+			}
+		error=(aSel[0]==0x0010005b)?KErrNone:KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("Id didn't match"));
+			break;
+			}
+		break;
+	case 16:
+		error=(aSel.Count()==1)?KErrNone:KErrNotFound;  //has 3 digest entries at the same level
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of msgdigests are wrong"));
+			break;
+			}
+		error=(aSel[0]==0x00100063)?KErrNone:KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("Id didn't match"));
+			break;
+			}
+		break;
+	case 17:
+		error=(aSel.Count()==1)?KErrNone:KErrNotFound;  //has 3 digest entries at the same level
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of msgdigests are wrong"));
+			break;
+			}
+		error=(aSel[0]==0x00100068)?KErrNone:KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("Id didn't match"));
+			break;
+			}
+		break;
+	case 18:
+		error=(aSel.Count()==1)?KErrNone:KErrNotFound;  //has 3 digest entries at the same level
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of msgdigests are wrong"));
+			break;
+			}
+		error=(aSel[0]==0x0010006d)?KErrNone:KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("Id didn't match"));
+			break;
+			}
+		break;
+	case 21:
+		error=(aSel.Count()==1)?KErrNone:KErrNotFound;  //has 3 digest entries at the same level
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of msgdigests are wrong"));
+			break;
+			}
+		error=(aSel[0]==0x0010007f)?KErrNone:KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("Id didn't match"));
+			break;
+			}
+
+		break;
+	case 24:
+		error=(aSel.Count()==2)?KErrNone:KErrNotFound;  //has 3 digest entries at the same level
+		if (error)
+			{
+			testUtils->WriteComment(_L("Number of msgdigests are wrong"));
+			break;
+			}
+		error=(aSel[0]==0x0010008e && aSel[1]==0x00100090)?KErrNone:KErrNotFound;
+		if (error)
+			{
+			testUtils->WriteComment(_L("Id didn't match"));
+			break;
+			}
+		break;
+	default:
+		error=(aSel.Count()==0)?KErrNone : KErrNotFound; 
+		break;
+		}
+	testUtils->TestFinish(aTest,error);
+	if (!globalError)
+		globalError=error;
+	}
+
+
+LOCAL_C void TestBodyTextL(TInt aTest,const CMsvEntrySelection& aSel,CImEmailMessage::TImEmailEntryType aEntryType)
+	{
+	testUtils->TestStart(aTest);
+	TInt error=0;
+	switch (aTest)
+		{
+	case 0:
+		error=(aSel.Count()==1)?KErrNone:KErrNotFound;
+		break;
+	case 1:
+		error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		break;
+	case 7:
+		error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		break;
+	case 9:
+		error=(aSel.Count()==2 )?KErrNone:KErrNotFound; 
+		break;
+	case 14:
+		if (aEntryType==CImEmailMessage::EThisMessageOnly)
+			error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		else
+			error=(aSel.Count()==4 )?KErrNone:KErrNotFound;
+		break;
+	case 15:
+		if (aEntryType==CImEmailMessage::EThisMessageOnly)
+			error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		else
+			error=(aSel.Count()==2 )?KErrNone:KErrNotFound;
+		break;
+	case 16:
+		error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		break;
+	case 17:
+		if (aEntryType==CImEmailMessage::EThisMessageOnly)
+			error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		else
+			error=(aSel.Count()==2 )?KErrNone:KErrNotFound;
+		break;
+	case 18:
+		if (aEntryType==CImEmailMessage::EThisMessageOnly)
+			error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		else
+			error=(aSel.Count()==2 )?KErrNone:KErrNotFound;
+		break;
+	case 20:
+		error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		break;
+	case 21:
+		if (aEntryType==CImEmailMessage::EThisMessageOnly)
+			error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		else
+			error=(aSel.Count()==2 )?KErrNone:KErrNotFound;
+		break;
+	case 22:
+		error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		break;
+	case 24:
+		if (aEntryType==CImEmailMessage::EThisMessageAndEmbeddedMessages)
+			error=(aSel.Count()==2 )?KErrNone:KErrNotFound;
+		break;
+	case 26:
+		error=(aSel.Count()==1 )?KErrNone:KErrNotFound;
+		break;
+	default:
+		break;
+		}
+	testUtils->TestFinish(aTest,error);
+	if (!globalError)
+		globalError=error;
+	}
+
+LOCAL_C void GetAttachmentInfoSelectionL(CImEmailMessage& aEmailMessage,RPointerArray<CMsvAttachment>& aAttachmentInfoArray)
+	{
+	MMsvAttachmentManager& attachmentMgr = aEmailMessage.AttachmentManager();
+	aAttachmentInfoArray.Reset();
+	CMsvAttachment* attachmentInfo;
+	for (TInt i= 0; i< attachmentMgr.AttachmentCount();i++)
+		{
+		attachmentInfo = attachmentMgr.GetAttachmentInfoL(i);
+		aAttachmentInfoArray.Append(attachmentInfo);
+		}
+	}
+
+LOCAL_C void GetAttachmentsL(TInt aTest,CImEmailMessage::TImAttachmentType aAttachmentType,CImEmailMessage::TImEmailEntryType aEntryType)
+	{	
+	RPointerArray<CMsvAttachment> attachmentArray;
+	CTestActive* testActive = new (ELeave) CTestActive;
+	CleanupStack::PushL(testActive);
+	testActive->StartL();
+	CImEmailMessage* emailMessage = CImEmailMessage::NewLC(*(testUtils->iMsvEntry));
+	emailMessage->GetAttachmentsListL(testActive->iStatus,(*msgList)[aTest],aAttachmentType,aEntryType);
+	CActiveScheduler::Start();
+	
+	if (aTest==25 && (aAttachmentType==CImEmailMessage::EVCards || aAttachmentType==CImEmailMessage::EVEntries))  
+		{//vcards test . there is only one msg with vcard
+		testUtils->TestStart(aTest);
+		if (aAttachmentType==CImEmailMessage::EVCards && emailMessage->AttachmentManager().AttachmentCount()==1)
+	
+			testUtils->TestFinish(aTest,0);
+		else if (aAttachmentType==CImEmailMessage::EVEntries && emailMessage->AttachmentManager().AttachmentCount()==3)
+			testUtils->TestFinish(aTest,0);
+		else
+			{
+			testUtils->TestFinish(aTest,KErrNotFound);
+			globalError=KErrNotFound;
+			}
+		}
+		
+	if ((aTest==27 || aTest==29 || aTest==30) && aAttachmentType==CImEmailMessage::EICalendars)  
+		{
+		testUtils->TestStart(aTest);
+		TInt iCalCount = emailMessage->AttachmentManager().AttachmentCount();
+		if (aAttachmentType==CImEmailMessage::EICalendars && emailMessage->AttachmentManager().AttachmentCount()==1)
+			{
+			testUtils->TestFinish(aTest,0);
+			}
+		else
+			{
+			testUtils->TestFinish(aTest,KErrNotFound);
+			globalError=KErrNotFound;
+			}
+		}
+		
+	if (aTest==28 && aAttachmentType==CImEmailMessage::EVCalendars)  
+		{
+		testUtils->TestStart(aTest);
+		TInt vCalCount = emailMessage->AttachmentManager().AttachmentCount();
+		if (aAttachmentType==CImEmailMessage::EVCalendars && emailMessage->AttachmentManager().AttachmentCount()==2)
+			{
+			testUtils->TestFinish(aTest,0);
+			}
+		else
+			{
+			testUtils->TestFinish(aTest,KErrNotFound);
+			globalError=KErrNotFound;
+			}
+		}
+	
+	if (aTest==31  && (aAttachmentType==CImEmailMessage::EVCards || aAttachmentType==CImEmailMessage::EVEntries))  
+		{
+		testUtils->TestStart(aTest);
+		if (aAttachmentType==CImEmailMessage::EVCards && emailMessage->AttachmentManager().AttachmentCount()==1)
+			testUtils->TestFinish(aTest,0);
+		else if (aAttachmentType==CImEmailMessage::EVEntries && emailMessage->AttachmentManager().AttachmentCount()==1)
+			testUtils->TestFinish(aTest,0);
+		else
+			{
+			testUtils->TestFinish(aTest,KErrNotFound);
+			globalError=KErrNotFound;
+			}
+		}
+			
+	if (aAttachmentType==CImEmailMessage::EAllAttachments && aEntryType==CImEmailMessage::EThisMessageOnly)
+		{
+		RPointerArray<CMsvAttachment> attachmentArray;
+		GetAttachmentInfoSelectionL(*emailMessage,attachmentArray);
+		TestAttachmentResultsL(aTest,attachmentArray);
+		attachmentArray.ResetAndDestroy();
+		}
+	
+		
+	if (aAttachmentType==CImEmailMessage::EAllAttachments && aEntryType==CImEmailMessage::EThisMessageAndEmbeddedMessages)
+		{
+		GetAttachmentInfoSelectionL(*emailMessage,attachmentArray);
+		TestAttachmentsResultsInEmbeddedMsgsL(aTest,attachmentArray);
+		attachmentArray.ResetAndDestroy();
+		}
+	
+		
+	CleanupStack::PopAndDestroy(2,testActive); // emailMessage,testActive
+	}
+
+LOCAL_C void GetMsgDigestEntriesL(TInt aTest)
+	{
+	CTestActive* testActive = new (ELeave) CTestActive;
+	CleanupStack::PushL(testActive);
+	testActive->StartL();	
+	CImEmailMessage* emailMessage = CImEmailMessage::NewLC(*(testUtils->iMsvEntry));	
+	emailMessage->GetMessageDigestEntriesL(testActive->iStatus,(*msgList)[aTest]);
+	CActiveScheduler::Start();	
+	TestGetMsgDigestEntriesL(aTest,emailMessage->Selection());
+	CleanupStack::PopAndDestroy(2,testActive); // emailMessage,testActive
+	}
+
+LOCAL_C void SetCharacterSetAndGetMsgDigestL(TInt aTest)
+	{
+	CTestActive* testActive = new (ELeave) CTestActive;
+	CleanupStack::PushL(testActive);
+	testActive->StartL();
+	CImEmailMessage* emailMessage = CImEmailMessage::NewLC(*(testUtils->iMsvEntry));	
+	emailMessage->SetCharacterSetL((*msgList)[aTest], 1);
+	emailMessage->GetMessageDigestEntriesL(testActive->iStatus,(*msgList)[aTest]);
+	CActiveScheduler::Start();	
+	CleanupStack::PopAndDestroy(2, testActive); // emailMessage,testActive
+	}
+
+LOCAL_C void GetBodyTextL(TInt aTest,CImEmailMessage::TImEmailEntryType aEntryType)
+	{
+	CTestActive* testActive = new (ELeave) CTestActive;
+	CleanupStack::PushL(testActive);
+	testActive->StartL();
+	CImEmailMessage* emailMessage = CImEmailMessage::NewLC(*(testUtils->iMsvEntry));
+	rText->Reset();	
+	emailMessage->GetBodyTextL(testActive->iStatus,(*msgList)[aTest],aEntryType,*rText,*pLayer,*cLayer);
+	CActiveScheduler::Start();	
+	TestBodyTextL(aTest,emailMessage->Selection(),aEntryType);
+	CleanupStack::PopAndDestroy(2, testActive); // emailMessage,testActive
+	}
+
+LOCAL_C void GetBodyTextWithHeapFailL(TInt aTest,CImEmailMessage::TImEmailEntryType aEntryType)
+	{
+	testUtils->TestStart(1);
+	CTestActive* testActive = new (ELeave) CTestActive;
+	CleanupStack::PushL(testActive);
+	CImEmailMessage* emailMessage = NULL;
+	TBool finished = EFalse;
+#ifdef _DEBUG	
+	TInt failCount=0; 
+#endif	
+	TInt err = KErrNone;
+	while (!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+		TRAP(err, emailMessage=CImEmailMessage::NewL(*(testUtils->iMsvEntry)));
+		__UHEAP_RESET;
+		if (err==KErrNone)
+			{
+			finished=ETrue;
+			CleanupStack::PushL(emailMessage);
+			}
+		else
+			{
+			test(err==KErrNoMemory);
+			test(emailMessage==NULL);
+			}
+
+		}
+	testUtils->WriteComment(_L("CImEmailMessage::NewL Heapfailure test succesful"));
+	testUtils->TestFinish(1,err);
+#ifdef _DEBUG
+	failCount=0;
+#endif
+	finished=EFalse;	
+	testUtils->TestStart(2);
+	testUtils->WriteComment(_L("Testing GetBodyText with HeapFailure"));
+	while(!finished)
+		{	
+		__UHEAP_FAILNEXT(failCount++);
+		rText->Reset();
+		TRAP(err,emailMessage->GetBodyTextL(testActive->iStatus,(*msgList)[aTest],aEntryType,*rText,*pLayer,*cLayer));
+		__UHEAP_RESET;
+		if (err == KErrNone)
+			{
+			testActive->StartL();
+			CActiveScheduler::Start();	
+			}
+		else
+			test(err == KErrNoMemory);
+
+		if (err== KErrNone && testActive->iStatus.Int()== KErrNone)
+			{
+			finished=ETrue;
+			if (aEntryType==CImEmailMessage::EThisMessageOnly)
+				{
+				test(emailMessage->Selection().Count()==1);
+				test(rText->DocumentLength()==128);
+				}
+			else
+				{
+				test(emailMessage->Selection().Count()==4);
+				test(rText->DocumentLength()==128+375+327+142+3);
+				}
+			}
+		}
+	testUtils->TestFinish(2,err);
+	CleanupStack::PopAndDestroy(2,testActive); // emailMessage,testActive
+	}
+
+LOCAL_C void GetAttachmentsWithHeapFailL(TInt aTest,CImEmailMessage::TImAttachmentType aAttachmentType,CImEmailMessage::TImEmailEntryType aEntryType)
+	{
+	testUtils->TestStart(1);
+	CTestActive* testActive = new (ELeave) CTestActive;
+	CleanupStack::PushL(testActive);
+	TBool finished = EFalse;
+#ifdef _DEBUG	
+	TInt failCount=0;
+#endif	
+	TInt err = KErrNone;
+	CImEmailMessage* emailMessage=NULL;
+	while (!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+		TRAP(err,emailMessage= CImEmailMessage::NewL(*(testUtils->iMsvEntry)));
+		__UHEAP_RESET;
+		if (err==KErrNone)
+			{
+			finished=ETrue;
+			CleanupStack::PushL(emailMessage);
+			}
+		else
+			{
+			test(err==KErrNoMemory);
+			test(emailMessage==NULL);
+			}
+		}
+	testUtils->WriteComment(_L("CImEmailMessage::NewL tested with heapfailure"));
+	testUtils->TestFinish(1,err);
+#ifdef _DEBUG
+	failCount=0;
+#endif	
+	finished=EFalse;
+	err=KErrNone;
+	testUtils->WriteComment(_L("Testing GetAttachmentsListL with heapfailure"));
+	testUtils->TestStart(2);
+	while(!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+		TRAP(err,emailMessage->GetAttachmentsListL(testActive->iStatus,(*msgList)[aTest],aAttachmentType,aEntryType));
+		__UHEAP_RESET;
+		if (err == KErrNone)
+			{
+			testActive->StartL();
+			CActiveScheduler::Start();	
+			}
+		else
+			test(err == KErrNoMemory);
+		
+		if (err== KErrNone && testActive->iStatus.Int()== KErrNone)
+			{
+			finished=ETrue;
+			test(emailMessage->AttachmentManager().AttachmentCount()==6);
+		
+			_LIT(KFilePath, "C:\\Private\\1000484b\\Mail2\\00001001_S\\3\\00100013_F\\text.txt");
+			RPointerArray<CMsvAttachment> attachmentArray;
+			GetAttachmentInfoSelectionL(*emailMessage,attachmentArray);		
+			const TDesC& ref=(attachmentArray[0]->FilePath());
+			test(ref==KFilePath);
+			
+			attachmentArray.ResetAndDestroy();			
+			}
+		}
+	testUtils->TestFinish(2,err);
+	CleanupStack::PopAndDestroy(2,testActive); // emailMessage,testActive
+	}
+
+LOCAL_C void InitL()
+	{
+	scheduler = new (ELeave) CActiveScheduler;
+	CleanupStack::PushL(scheduler);
+	CActiveScheduler::Install( scheduler );
+	testUtils = CEmailTestUtils::NewLC(test);
+	testUtils->CreateAllTestDirectories();
+	testUtils->CleanMessageFolderL();
+	testUtils->GoServerSideL();
+	}
+
+LOCAL_C void doMainL()
+	{
+	InitL();
+// Read the test message into the mail directory.
+	testUtils->CreateMessageFilesL(KMsvGlobalInBoxIndexEntryId, KMsvDraftEntryId,_L("c:\\mailtest\\rfcT_IMCM06\\"));
+	testUtils->GoClientSideL();
+	testUtils->WriteComment(_L("T_IMCM06 Test CImEmailMessage Get- BodyText,Attachments,MsgDigest Methods"));
+	testUtils->WriteComment(_L("this test code creates 31 messages of various structures and uses CImEmailMessage"));
+	testUtils->WriteComment(_L("to get - attachments, text and digest entries.  It is important to maintain the order"));
+	testUtils->WriteComment(_L("of the rfc files in t_imcm06 dir because the test code results are hardwired to the "));
+	testUtils->WriteComment(_L("corresponding files i.e message ID,  attachment name."));
+
+	CMsvEntry* entry = testUtils->iMsvEntry;
+	entry->SetEntryL(KMsvDraftEntryId);
+	msgList = entry->ChildrenL();
+	CleanupStack::PushL(msgList);
+	TInt count=msgList->Count();
+	if (count)
+		testUtils->WriteComment(_L("Messages created sucessfully"));
+	else
+		{
+		testUtils->WriteComment(_L("Failed to create messages"));
+		CleanupStack::PopAndDestroy();  //list
+		Closedown();
+		return;
+		}
+//	Testing attachments
+	testUtils->WriteComment(_L("Testing Get AllAttachments in EThisMessageOnly"));
+	for (TInt i=0;i<count;i++)
+		GetAttachmentsL(i,CImEmailMessage::EAllAttachments,CImEmailMessage::EThisMessageOnly);
+	testUtils->WriteComment(_L("Testing Get AllAttachments in EThisMessageOnly finished\n"));
+
+	testUtils->WriteComment(_L("Testing Get EVCards in EThisMessageOnly"));
+	for (TInt j=0;j<count;j++)
+		GetAttachmentsL(j,CImEmailMessage::EVCards,CImEmailMessage::EThisMessageOnly);
+	testUtils->WriteComment(_L("Testing Get EVCards in EThisMessageOnly finished\n"));
+
+	testUtils->WriteComment(_L("Testing Get EVEntries in EThisMessageOnly"));
+	for (TInt k=0;k<count;k++)
+		GetAttachmentsL(k,CImEmailMessage::EVEntries,CImEmailMessage::EThisMessageOnly);
+	testUtils->WriteComment(_L("Testing Get EVEntries in EThisMessageOnly finished\n"));
+	
+	testUtils->WriteComment(_L("Testing Get EICalendars in EThisMessageOnly"));
+	for (TInt l=0;l<count;l++)
+		GetAttachmentsL(l,CImEmailMessage::EICalendars,CImEmailMessage::EThisMessageOnly);
+	testUtils->WriteComment(_L("Testing Get EICalendars in EThisMessageOnly finished\n"));
+	
+	testUtils->WriteComment(_L("Testing Get EVCalendars in EThisMessageOnly"));
+	for (TInt m=0;m<count;m++)
+		GetAttachmentsL(m,CImEmailMessage::EVCalendars,CImEmailMessage::EThisMessageOnly);
+	testUtils->WriteComment(_L("Testing Get EVCalendars in EThisMessageOnly finished\n"));
+
+	//	testing attachments in embeded messages
+	testUtils->WriteComment(_L("Testing Get AllAttachments in EThisMessageAndEmbeddedMessages"));
+	for (TInt n=0;n<count;n++)
+		GetAttachmentsL(n,CImEmailMessage::EAllAttachments,CImEmailMessage::EThisMessageAndEmbeddedMessages);
+	testUtils->WriteComment(_L("Testing Get AllAttachments in EThisMessageAndEmbeddedMessages finished\n"));
+
+	//	testing getmsgdigest entries
+	testUtils->WriteComment(_L("Testing GetMessageDigestEntriesL"));
+	for (TInt o=0;o<count;o++)
+		GetMsgDigestEntriesL(o);
+	testUtils->WriteComment(_L("Testing GetMessageDigestEntriesL finished\n"));
+
+	// This email number 14 has embedded messages and attachments
+	// Test added for the defect DEF064292: Crash in CImEmailMessage
+	testUtils->WriteComment(_L("Testing SetCharacterSetAndGetMsgDigestL"));
+	SetCharacterSetAndGetMsgDigestL(14);
+	testUtils->WriteComment(_L("Testing SetCharacterSetAndGetMsgDigestL finished\n"));
+	
+	//	testing getbody text
+	pLayer = CParaFormatLayer::NewL();
+	CleanupStack::PushL(pLayer);
+	cLayer = CCharFormatLayer::NewL();
+	CleanupStack::PushL(cLayer);
+	rText = CRichText::NewL(pLayer, cLayer);
+	CleanupStack::PushL(rText);
+
+	testUtils->WriteComment(_L("Testing GetBodyTextL for EThisMessageOnly"));
+	for (TInt p=0;p<count;p++)
+		GetBodyTextL(p,CImEmailMessage::EThisMessageOnly);
+	testUtils->WriteComment(_L("Testing GetBodyTextL for EThisMessageOnly finished"));
+	
+	testUtils->WriteComment(_L("Testing GetBodyTextL for EThisMessageAndEmbeddedMessages"));
+	for (TInt q=0;q<count;q++)
+		GetBodyTextL(q,CImEmailMessage::EThisMessageAndEmbeddedMessages);
+	testUtils->WriteComment(_L("Testing GetBodyTextL for EThisMessageAndEmbeddedMessages finished"));
+	
+	testUtils->WriteComment(_L("Testing with HeapFailure"));	
+	
+	GetBodyTextWithHeapFailL(14,CImEmailMessage::EThisMessageOnly);
+
+	testUtils->WriteComment(_L("Testing GetBodyTextWithHeapFailL for EThisMessageAndEmbeddedMessages"));
+	GetBodyTextWithHeapFailL(14,CImEmailMessage::EThisMessageAndEmbeddedMessages);
+
+	GetAttachmentsWithHeapFailL(6,CImEmailMessage::EAllAttachments,CImEmailMessage::EThisMessageOnly);
+
+	CleanupStack::PopAndDestroy(4,msgList); //newMessageList,text,player,clayer
+	Closedown();
+	}
+
+
+GLDEF_C TInt E32Main()
+	{	
+	__UHEAP_MARK;
+	test.Start(_L("T_IMCM06 Test CImEmailMessage Get- BodyText,Attachments,MsgDigest Methods"));
+	theCleanup=CTrapCleanup::New();
+	TRAPD(ret,doMainL());		
+	test(ret==KErrNone);
+	delete theCleanup;	
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	User::Heap().Check();
+	return(KErrNone);
+	}