diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/clientmtms/test/src/t_cimemailmessage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/clientmtms/test/src/t_cimemailmessage.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,818 @@ +// Copyright (c) 2003-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: +// To build: bldmake bldfiles +// abld test build wins udeb +// To run from windows command prompt: +// cd epoc32\release\wins\udeb +// T_CIMEMAILMESSAGE -dtextshell -- +// +// + + +#include +#include +#include +#include +#include + +// Message Server headers for linking to msgs.dll. +#include +#include +#include +#include + +// Class under test. +#include + +#include + +#include "emailtestutils.h" + +typedef enum + { + EGetBodyTextL, + EFindFirstHTMLPageL, + EGetMessageDigestEntriesL, + EGetAttachmentListsL, + EDeleteAttachmentLId1, + EDeleteAttachmentLId2, + EFindUniversalResourceIdentifierL, + EAddMessageAsAttachmentLId1, + EAddMessageAsAttachmentLId2, + EAddRelatedPartL, + EStoreBodyTextL, + EGetCharacterSetL, + EDeleteAttachedMessageL + } TMethodType; + +// Forwards +class CMyScheduler; +class CObserver; + + +// Test harness constants and global variables... +_LIT(KTitle, "T_CIMEMAILMESSAGE"); +_LIT(KFolderName, "DeleteMe"); +CTrapCleanup* pcleanup = NULL; +CMyScheduler* pscheduler = NULL; +RTest test(KTitle); +LOCAL_D CEmailTestUtils* testUtils; +RFs gFs; +CMsvSession* pSession = NULL; +CObserver* pObserver = NULL; +CMsvEntry* pContext = NULL; +CTestActive* pTestActive = NULL; + +// Global email message entry identifiers. +TMsvId gEmailMessageID; +TMsvId gEmailMessageID2; +TMethodType gMethodType; + + +// Test utility classes +class CMyScheduler : public CActiveScheduler + { +private: + void Error(TInt aError) const; + }; +void CMyScheduler::Error(TInt /*aError*/) const {} + + +class CObserver : public MMsvSessionObserver + { + public: + void HandleSessionEvent(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3); + void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3); + }; + + +void CObserver::HandleSessionEvent(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) + { + } + + +void CObserver::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) + { + } + +// Test Case Prototypes +LOCAL_C TBool TestAttachmentFlagL(); +LOCAL_C void TestGetBodyTextL(CImEmailMessage* aEmailMessage, TRequestStatus& aStatus); +LOCAL_C void TestStoreBodyTextL(CImEmailMessage* aEmailMessage, TRequestStatus& aStatus); +LOCAL_C TBool TestPanicsL(); + +// Test Harness Prototypes +LOCAL_C void DoTestThreadWorkL(); +static TInt DoTestThreadStart(TAny*); +LOCAL_C void InitL(); +LOCAL_C void UninitL(); +LOCAL_C void doTests(); +LOCAL_C void doMainL(); +GLDEF_C TInt E32Main(); + +_LIT(KTestThreadName, "CImEmailMessage Test Thread"); + +LOCAL_C void TestGetBodyTextL(CImEmailMessage* aEmailMessage, TRequestStatus& aStatus) + { + CParaFormatLayer* paraFormatLayer=CParaFormatLayer::NewL(); + CleanupStack::PushL(paraFormatLayer); + + CCharFormatLayer* charFormatLayer=CCharFormatLayer::NewL(); + CleanupStack::PushL(charFormatLayer); + + CRichText* bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer, CEditableText::EFlatStorage, 256); + CleanupStack::PushL(bodyText); + + TBuf<100> bodyContents = _L("Test body contents so that we can test the store body text code."); + bodyText->InsertL(0, bodyContents); + aEmailMessage->GetBodyTextL( + aStatus, + gEmailMessageID2, + CImEmailMessage::EThisMessageOnly, + *bodyText, + *paraFormatLayer, + *charFormatLayer); + + CleanupStack::PopAndDestroy(3, paraFormatLayer); + } + +LOCAL_C void TestStoreBodyTextL(CImEmailMessage* aEmailMessage, TRequestStatus& aStatus) + { + CParaFormatLayer* paraFormatLayer=CParaFormatLayer::NewL(); + CleanupStack::PushL(paraFormatLayer); + + CCharFormatLayer* charFormatLayer=CCharFormatLayer::NewL(); + CleanupStack::PushL(charFormatLayer); + + CRichText* bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer, CEditableText::EFlatStorage, 256); + CleanupStack::PushL(bodyText); + + TBuf<100> bodyContents = _L("Test body contents so that we can test the store body text code."); + bodyText->InsertL(0, bodyContents); + aEmailMessage->StoreBodyTextL(gEmailMessageID2, *bodyText, aStatus); + + CleanupStack::PopAndDestroy(3, paraFormatLayer); + } + +LOCAL_C void DoTestThreadWorkL() + { + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CActiveScheduler::Install(scheduler); + CleanupStack::PushL(scheduler); + + // Connect to the Message Server... + CObserver* ob = new (ELeave) CObserver; + CleanupStack::PushL(ob); + + CMsvSession* session = CMsvSession::OpenSyncL(*ob); + CleanupStack::PushL(session); + + CMsvEntry* cEntry = CMsvEntry::NewL(*session, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering()); + CleanupStack::PushL(cEntry); + CImEmailMessage* emailMessage = CImEmailMessage::NewLC(*cEntry); + + switch(gMethodType) + { + case EGetBodyTextL: + TestGetBodyTextL(emailMessage, pTestActive->iStatus); + break; + + case EFindFirstHTMLPageL: + emailMessage->FindFirstHTMLPageL(gEmailMessageID2, pTestActive->iStatus); + break; + + case EGetMessageDigestEntriesL: + emailMessage->GetMessageDigestEntriesL(pTestActive->iStatus, gEmailMessageID2); + break; + + case EGetAttachmentListsL: + emailMessage->GetAttachmentsListL( + gEmailMessageID2, + CImEmailMessage::EAllAttachments, + CImEmailMessage::EThisMessageOnly); + break; + + case EDeleteAttachmentLId1: + { + TMsvAttachmentId attachmentId = gEmailMessageID; + emailMessage->AttachmentManager().RemoveAttachmentL(attachmentId,pTestActive->iStatus); + } + break; + + case EDeleteAttachmentLId2: + { + TMsvAttachmentId attachmentId = gEmailMessageID; + emailMessage->AttachmentManager().RemoveAttachmentL(attachmentId,pTestActive->iStatus); + } + break; + + case EFindUniversalResourceIdentifierL: + emailMessage->FindUniversalResourceIdentifierL( + gEmailMessageID2, + _L("a description"), + _L("http://someuri.com"), + pTestActive->iStatus); + break; + + case EAddMessageAsAttachmentLId1: + { + CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); + CleanupStack::PushL(attachmentInfo); + emailMessage->AttachmentManager().AddEntryAsAttachmentL(gEmailMessageID,attachmentInfo,pTestActive->iStatus); + CleanupStack::Pop(attachmentInfo); + } + break; + + case EAddMessageAsAttachmentLId2: + { + CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); + CleanupStack::PushL(attachmentInfo); + emailMessage->AttachmentManager().AddEntryAsAttachmentL(gEmailMessageID2,attachmentInfo,pTestActive->iStatus); + CleanupStack::Pop(attachmentInfo); + } + break; + + case EAddRelatedPartL: + emailMessage->AddRelatedPartL(gEmailMessageID2, _L("some text"), pTestActive->iStatus, gEmailMessageID, _L8("some text")); + break; + + case EStoreBodyTextL: + TestStoreBodyTextL(emailMessage, pTestActive->iStatus); + break; + + case EGetCharacterSetL: + { + TUint charSetId = 0; + TBool override = EFalse; + emailMessage->GetCharacterSetL(gEmailMessageID2, charSetId, override); + break; + } + case EDeleteAttachedMessageL: + { + TMsvAttachmentId attachmentId = gEmailMessageID; + emailMessage->AttachmentManager().RemoveAttachmentL(attachmentId,pTestActive->iStatus); + } + break; + } + + CleanupStack::PopAndDestroy(5, scheduler); + } + +static TInt DoTestThreadStart(TAny*) + { + // Entry function for the child thread which is created then killed. + CTrapCleanup* cleanup = CTrapCleanup::New(); + test(cleanup != NULL); + TRAPD(ret, DoTestThreadWorkL()); + delete cleanup; + return 0; + } + +LOCAL_C TBool TestAttachmentFlagL() + { + TBool result = EFalse; + TMsvId emailMessageID; + TMsvId attachMessageID; + + // Create an email message entry. + CImEmailOperation* emailOp = CImEmailOperation::CreateNewL(pTestActive->iStatus, *pSession, KMsvGlobalInBoxIndexEntryId, KMsvMessagePartBody, 0, KUidMsgTypeSMTP); + CleanupStack::PushL(emailOp); + pTestActive->StartL(); // Active object which stops the active scheduler + CActiveScheduler::Start(); + // Get the new message id. + TPckg param(emailMessageID); + param.Copy(emailOp->FinalProgress()); + CleanupStack::PopAndDestroy(emailOp); + + emailOp = CImEmailOperation::CreateNewL(pTestActive->iStatus, *pSession, KMsvGlobalInBoxIndexEntryId, KMsvMessagePartBody, 0, KUidMsgTypeSMTP); + CleanupStack::PushL(emailOp); + pTestActive->StartL(); // Active object which stops the active scheduler + CActiveScheduler::Start(); + TPckg param2(attachMessageID); + param2.Copy(emailOp->FinalProgress()); + CleanupStack::PopAndDestroy(emailOp); + + CImEmailMessage* obj = CImEmailMessage::NewLC(*pContext); + + pContext->SetEntryL(emailMessageID); + TMsvEntry entry = pContext->Entry(); + result = !(entry.Attachment()); + CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); + CleanupStack::PushL(attachmentInfo); + obj->AttachmentManager().AddEntryAsAttachmentL(attachMessageID,attachmentInfo,pTestActive->iStatus); + CleanupStack::Pop(attachmentInfo); + pTestActive->StartL(); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(obj); + obj = NULL; + + // Want to test that the entry's attachment flag is true; + pContext->SetEntryL(emailMessageID); + entry = pContext->Entry(); + result &= (entry.Attachment() != EFalse); + + pContext->DeleteL(attachMessageID); + pContext->DeleteL(emailMessageID); + + return result; + } + +LOCAL_C TBool TestPanicsL() + { + const TInt KMinTestHeapSize = 0x10000; + const TInt KMaxTestHeapSize = 0x100000; + + RThread testThread; + TRequestStatus requestStatus; + + TBool result = ETrue; + TMsvEntry entry; + + // Make sure paniced threads don't cause us trouble. + User::SetJustInTime(EFalse); + + // + //-------------------------------------------------------------------------- + // Create email message entries. + //-------------------------------------------------------------------------- + // + CImEmailOperation* emailOp = CImEmailOperation::CreateNewL(pTestActive->iStatus, *pSession, KMsvGlobalInBoxIndexEntryId, KMsvMessagePartBody, 0, KUidMsgTypeSMTP); + CleanupStack::PushL(emailOp); + pTestActive->StartL(); // Active object which stops the active scheduler + CActiveScheduler::Start(); + // Get the new message id. + TPckg param(gEmailMessageID); + param.Copy(emailOp->FinalProgress()); + CleanupStack::PopAndDestroy(emailOp); + + emailOp = CImEmailOperation::CreateNewL(pTestActive->iStatus, *pSession, KMsvGlobalInBoxIndexEntryId, KMsvMessagePartBody, 0, KUidMsgTypeSMTP); + CleanupStack::PushL(emailOp); + pTestActive->StartL(); // Active object which stops the active scheduler + CActiveScheduler::Start(); + TPckg param2(gEmailMessageID2); + param2.Copy(emailOp->FinalProgress()); + CleanupStack::PopAndDestroy(emailOp); + + CImEmailMessage* emailMessage = CImEmailMessage::NewLC(*pContext); + + pContext->SetEntryL(gEmailMessageID2); + entry = pContext->Entry(); + // Set to something inappropriate + entry.iType = KUidMsvAttachmentEntry; + pContext->ChangeL(entry); + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::GetBodyTextL ------------------------------------- + //-------------------------------------------------------------------------- + // + gMethodType = EGetBodyTextL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::FindFirstHTMLPageL ------------------------------- + //-------------------------------------------------------------------------- + // + gMethodType = EFindFirstHTMLPageL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::GetMessageDigestEntriesL ------------------------- + //-------------------------------------------------------------------------- + // + gMethodType = EGetMessageDigestEntriesL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::GetAttachmentListsL ------------------------------ + //-------------------------------------------------------------------------- + // + gMethodType = EGetAttachmentListsL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::DeleteAttachmentL -------------------------------- + //-------------------------------------------------------------------------- + // + + gMethodType = EDeleteAttachmentLId1; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + pContext->SetEntryL(gEmailMessageID2); + entry = pContext->Entry(); + entry.iType = KUidMsvMessageEntry; + pContext->ChangeL(entry); + + // The first message ID points to an entry of type KUidMsvMessageEntry. + // The second message ID will cause a leave because it isn't a KUidMsvAttachmentEntry + gMethodType = EDeleteAttachmentLId2; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + pContext->SetEntryL(gEmailMessageID2); + entry = pContext->Entry(); + entry.iType = KUidMsvAttachmentEntry; + pContext->ChangeL(entry); + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::FindUniversalResourceIdentifierL ----------------- + //-------------------------------------------------------------------------- + // + + gMethodType = EFindUniversalResourceIdentifierL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::AddMessageAsAttachmentL -------------------------- + //-------------------------------------------------------------------------- + // + + gMethodType = EAddMessageAsAttachmentLId1; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + // The first message ID points to an entry of type KUidMsvMessageEntry. + // The second message ID will cause a leave because it isn't a KUidMsvMessageEntry + gMethodType = EAddMessageAsAttachmentLId2; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::AddRelatedPartL ---------------------------------- + //-------------------------------------------------------------------------- + // + pContext->SetEntryL(KMsvGlobalInBoxIndexEntryId); + TMsvId folderId = 0; + TMsvEmailEntry folderEntry; + folderEntry.iType = KUidMsvFolderEntry; + folderEntry.iMtm = KUidMsvLocalServiceMtm; + folderEntry.iServiceId = KMsvLocalServiceIndexEntryId; + folderEntry.iDetails.Set(KFolderName); + // Set the relatedPartID's parent folder type to something acceptable + + TMsvLocalOperationProgress details; + CMsvOperation* opert = pContext->CreateL(folderEntry, pTestActive->iStatus); + CleanupStack::PushL(opert); + pTestActive->StartL(); // Active object which stops the active scheduler + CActiveScheduler::Start(); + TPckg folderParam(details); + folderParam.Copy(opert->FinalProgress()); + folderId = details.iId; + pContext->SetEntryL(folderId); + CleanupStack::PopAndDestroy(opert); + + // Set the relatedPartID's parent folder to the one just created + opert = NULL; + pContext->SetEntryL(KMsvGlobalInBoxIndexEntryId); + pTestActive->StartL(); // Active object which stops the active scheduler + opert = pContext->MoveL(gEmailMessageID2, folderId, pTestActive->iStatus); + CleanupStack::PushL(opert); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(opert); + + // emailMessageID2 is not of KUidMsvMessageEntry. + gMethodType = EAddRelatedPartL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::StoreBodyTextL ----------------- + //-------------------------------------------------------------------------- + // + + gMethodType = EStoreBodyTextL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::GetCharacterSetL ----------------- + //-------------------------------------------------------------------------- + // + + gMethodType = EGetCharacterSetL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + // + //-------------------------------------------------------------------------- + //- Test CImEmailMessage::DeleteAttachedMesageL ----------------- + //-------------------------------------------------------------------------- + // + + gMethodType = EDeleteAttachedMessageL; + testThread.Create( + KTestThreadName, + DoTestThreadStart, + KDefaultStackSize, + KMinTestHeapSize, + KMaxTestHeapSize, + NULL, + EOwnerThread); + testThread.Logon(requestStatus); + + // Let the thread run + testThread.Resume(); + User::WaitForRequest(requestStatus); + result &= + ((testThread.ExitType() == EExitPanic) && + (testThread.ExitReason() == EEntryIsNotMessage)); + testThread.Close(); + + User::SetJustInTime(ETrue); + + CleanupStack::PopAndDestroy(emailMessage); + emailMessage = NULL; + pContext->SetEntryL(gEmailMessageID2); + entry = pContext->Entry(); + entry.iType = KUidMsvMessageEntry; + pContext->ChangeL(entry); + + pContext->SetEntryL(KMsvGlobalInBoxIndexEntryId); + pContext->DeleteL(gEmailMessageID); + pContext->DeleteL(gEmailMessageID2); + pContext->DeleteL(folderId); + + return result; + } + + +LOCAL_C void InitL() + { + // Connect to the file system... + gFs.Connect(); + + // Connect to the Message Server... + pObserver = new (ELeave) CObserver(); + CleanupStack::PushL(pObserver); + pSession = CMsvSession::OpenSyncL(*pObserver); + CleanupStack::PushL(pSession); + + pContext = CMsvEntry::NewL(*pSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering()); + CleanupStack::PushL(pContext); + + pTestActive = new (ELeave) CTestActive(); + CleanupStack::PushL(pTestActive); + + testUtils = CEmailTestUtils::NewLC(test); + testUtils->CreateAllTestDirectories(); + testUtils->FileSession().SetSessionPath(_L("C:\\")); + } + + +LOCAL_C void UninitL() + { + CleanupStack::PopAndDestroy(testUtils); + CleanupStack::PopAndDestroy(pTestActive); + CleanupStack::PopAndDestroy(pContext); + CleanupStack::PopAndDestroy(pSession); + CleanupStack::PopAndDestroy(pObserver); + gFs.Close(); + } + + +LOCAL_C void doTests() + { + testUtils->TestStart(1); + + test.Start(_L("Testing CImEmailMessage attachment flag")); + test(TestAttachmentFlagL()); + test.End(); + testUtils->TestFinish(1); + + testUtils->TestStart(2); + test.Start(_L("Testing CImEmailMessage panics")); + test(TestPanicsL()); + test.End(); + testUtils->TestFinish(2); + testUtils->TestHarnessCompleted(); + } + + +LOCAL_C void doMainL() + { + InitL(); + doTests(); + UninitL(); + } + + +GLDEF_C TInt E32Main() + { + pcleanup = CTrapCleanup::New(); + pscheduler = new (ELeave) CMyScheduler(); + CActiveScheduler::Install(pscheduler); + TRAPD(ret,doMainL()); + delete pcleanup; + delete pscheduler; + return(KErrNone); + }