diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/clientmtms/test/src/T_IMCM01.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_IMCM01.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,1289 @@ +// 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_IMCM01 +// Component: IMCM +// Owner: KP +// Brief description of test harness: +// Installs SMTP, POP3, IMAP4 MTMs, creates SMTP, POP3 IMAP4 emails and tests +// global find implementation in SMTP, POP3, IMAP4 client +// Detailed description of test harness: +// As above +// Input files required to run test harness: +// None +// Intermediate files produced while running test harness: +// :\msglogs\T_IMCM01\T_IMCM.log +// Output files produced by running test harness: +// :\msglogs\T_IMCM01...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\\T_IMCM01.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\\\T_IMCM01.exe onto the other platform +// 2. Copy \epoc32\release\\\MSVTESTUTILS.DLL into +// :\system\libs on the other platform +// 3. Copy \epoc32\release\\\EMAILTESTUTILS.DLL into +// :\system\libs on the other platform +// 4. Run T_IMCM01.exe on the other platform +// +// + +#include "emailtestutils.h" + +#include +#include +#include +#include + + +#define _L8(a) (TPtrC8((const TText8 *)(a))) + +RTest test(_L("Find Testrig")); +LOCAL_D CEmailTestUtils* testUtils; +LOCAL_D CTrapCleanup* theCleanup; +LOCAL_D CImLog* log; + +LOCAL_D TMsvId folderId; +LOCAL_D TMsvId entry1Id; +LOCAL_D TMsvId entry2Id; +LOCAL_D TMsvId entry3Id; + + +TBuf<32> ShortDescription(_L("find some text in here")); +TBuf<32> ShortDetails(_L("find some text in here")); + +TBuf<32> MatchingDescription(_L("abcDEFghi Jkl mno")); +TBuf<32> MatchingDetails(_L("abcDEFghi Jkl mno")); + +const TUid KUidFindTestPOP3Mtm = {0x10001029}; +const TUid KUidFindTestSMTPMtm = {0x10001028}; +const TUid KUidFindTestIMAP4Mtm = {0x1000102A}; + +_LIT(KMiutSubject, "short mail about something interesting"); +_LIT8(KMiutMsgId, "0123456789AB.CdeFGHIj@symbian.com"); +_LIT(KMiutFrom, "ralph-greenwell@psion.com"); +_LIT(KMiutReplyTo, "ralph.greenwell@virgin.net"); +_LIT(KMiutToRecipients1, "recipient1@address.com"); +_LIT(KMiutToRecipients2, "recipient2@address.com"); +_LIT(KMiutCcRecipients1, "cc1@address.com"); +_LIT(KMiutCcRecipients2, "cc2@address.com"); +_LIT(KMiutBccRecipients, "bcc@address.com"); +_LIT8(KMiutResentMsgId, "0123456789AB.CdeFGHIj@symbian.com"); +_LIT(KMiutResentFrom, "test@psion6.demon.co.uk"); +_LIT(KMiutResentToRecipients1, "recipient1@address.com"); +_LIT(KMiutResentToRecipients2, "recipient2@address.com"); +_LIT(KMiutResentCcRecipients1, "cc1@address.com"); +_LIT(KMiutResentCcRecipients2, "cc2@address.com"); +_LIT(KMiutResentBccRecipients, "bcc@address.com"); + +#define KMiutRemoteSize 123456 +#define KMaxImHeaderStringLengthLong KMaxImHeaderStringLength+1 + + +LOCAL_D TBuf longValue; +LOCAL_D TBuf8 longValue2; + + +// + +//********************************** +// TMsvFindResultDateRange +//********************************** +// +// An enumeration that specifies the date comparison to perform +// + +enum TMsvFindResultDateRange + { + EMsvOnDate, + EMsvBeforeDate, + EMsvAfterDate + }; + +//********************************** +// CMsvFindDateOperation +//********************************** +// +// An operation that extends global find to restrict searching by date +// + +class CMsvFindDateOperation : public CMsvFindOperation + { +public: + static CMsvFindDateOperation* FindInSelectionL(CMsvSession& aMsvSession, const TDesC& aTextToFind, const CMsvEntrySelection& aSel, TMsvPartList aPartList, const TTime& aDate, TMsvFindResultDateRange aRange, TRequestStatus& aObserverRequestStatus); + static CMsvFindDateOperation* FindInChildrenL(CMsvSession& aMsvSession, const TDesC& aTextToFind, TMsvId aId, TMsvPartList aPartList, const TTime& aDate, TMsvFindResultDateRange aRange, TRequestStatus& aObserverRequestStatus); + // +protected: + CMsvFindDateOperation(CMsvSession& aMsvSession, const TDesC& aTextToFind, TMsvPartList aPartList, const TTime& aDate, TMsvFindResultDateRange aRange, TRequestStatus& aObserverRequestStatus); + // +private: + TBool IsValid(const TMsvEntry& aEntry) const; + // +private: + TTime iDate; + TMsvFindResultDateRange iRange; + }; + +CMsvFindDateOperation* CMsvFindDateOperation::FindInSelectionL(CMsvSession& aMsvSession, const TDesC& aTextToFind, const CMsvEntrySelection& aSel, TMsvPartList aPartList, const TTime& aDate, TMsvFindResultDateRange aRange, TRequestStatus& aObserverRequestStatus) +// +// +// + { + CMsvFindDateOperation* self = new(ELeave)CMsvFindDateOperation(aMsvSession, aTextToFind, aPartList, aDate, aRange, aObserverRequestStatus); + CleanupStack::PushL(self); + self->ConstructFindInSelectionL(aSel); + CleanupStack::Pop(); // self + return self; + } + +CMsvFindDateOperation* CMsvFindDateOperation::FindInChildrenL(CMsvSession& aMsvSession, const TDesC& aTextToFind, TMsvId aId, TMsvPartList aPartList, const TTime& aDate, TMsvFindResultDateRange aRange, TRequestStatus& aObserverRequestStatus) +// +// +// + { + CMsvFindDateOperation* self = new(ELeave)CMsvFindDateOperation(aMsvSession, aTextToFind, aPartList, aDate, aRange, aObserverRequestStatus); + CleanupStack::PushL(self); + self->ConstructFindInChildrenL(aId); + CleanupStack::Pop(); // self + return self; + } + +CMsvFindDateOperation::CMsvFindDateOperation(CMsvSession& aMsvSession, const TDesC& aTextToFind, TMsvPartList aPartList, const TTime& aDate, TMsvFindResultDateRange aRange, TRequestStatus& aObserverRequestStatus) +: CMsvFindOperation(aMsvSession, aTextToFind, aPartList, aObserverRequestStatus), iDate(aDate), iRange(aRange) + { + } + +TBool CMsvFindDateOperation::IsValid(const TMsvEntry& aEntry) const +// +// +// + { + TDateTime dt; + + dt = aEntry.iDate.DateTime(); + TTime date1(TDateTime(dt.Year(), dt.Month(), dt.Day(), 0, 0, 0, 0)); + + dt = iDate.DateTime(); + TTime date2(TDateTime(dt.Year(), dt.Month(), dt.Day(), 0, 0, 0, 0)); + + switch (iRange) + { + case EMsvOnDate: + return date1 == date2; + case EMsvBeforeDate: + return date1 < date2; + case EMsvAfterDate: + return date1 > date2; + } + return EFalse; + } + +// + +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_IMCM01 Test Client MTM Global Find *******")); + 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_IMCM01 Tests Complete **********")); + log->AppendComment(_L8("")); + + CleanupStack::PopAndDestroy(3); //testUtils, log, scheduler + } + +LOCAL_C void CreateMessageHeader(CImHeader& imHeader) + { + // a bunch of data for the header object.... + imHeader.Reset(); + imHeader.SetSubjectL(KMiutSubject); + + imHeader.SetImMsgIdL(KMiutMsgId); + + imHeader.SetFromL(KMiutFrom); + imHeader.SetReplyToL(KMiutReplyTo); + imHeader.SetRemoteSize(KMiutRemoteSize); + + imHeader.ToRecipients().AppendL(KMiutToRecipients1); + imHeader.ToRecipients().AppendL(KMiutToRecipients2); + imHeader.CcRecipients().AppendL(KMiutCcRecipients1); + imHeader.CcRecipients().AppendL(KMiutCcRecipients2); + imHeader.BccRecipients().AppendL(KMiutBccRecipients); + } + +LOCAL_C void CreateMessageHeader2(CImHeader& imHeader) + { + // a bunch of data for the header object.... + imHeader.Reset(); + imHeader.SetSubjectL(KMiutSubject); + + imHeader.SetImMsgIdL(KMiutMsgId); + + imHeader.SetFromL(KMiutFrom); + imHeader.SetReplyToL(KMiutReplyTo); + imHeader.SetRemoteSize(KMiutRemoteSize); + + imHeader.ToRecipients().AppendL(KMiutToRecipients1); + imHeader.ToRecipients().AppendL(KMiutToRecipients2); + imHeader.CcRecipients().AppendL(KMiutCcRecipients1); + imHeader.CcRecipients().AppendL(KMiutCcRecipients2); + imHeader.BccRecipients().AppendL(KMiutBccRecipients); + + imHeader.SetResentMsgIdL(KMiutResentMsgId); + imHeader.SetResentFromL(KMiutResentFrom); + imHeader.ResentToRecipients().AppendL(KMiutResentToRecipients1); + imHeader.ResentToRecipients().AppendL(KMiutResentToRecipients2); + imHeader.ResentCcRecipients().AppendL(KMiutResentCcRecipients1); + imHeader.ResentCcRecipients().AppendL(KMiutResentCcRecipients2); + imHeader.ResentBccRecipients().AppendL(KMiutResentBccRecipients); + } + +LOCAL_C void CreateLongMessageHeader(CImHeader& imHeader) + { + // a bunch of data for the header object.... + // all the fields are set to a length greater than 1000 i.e 1001 + + imHeader.Reset(); + longValue.Fill('x',KMaxImHeaderStringLengthLong); + longValue2.Fill('x',KMaxImHeaderStringLengthLong); + + imHeader.SetSubjectL(longValue); + + imHeader.SetImMsgIdL(longValue2); + + imHeader.SetFromL(longValue); + imHeader.SetReplyToL(longValue); + imHeader.SetRemoteSize(KMiutRemoteSize); + + imHeader.ToRecipients().AppendL(longValue); + imHeader.ToRecipients().AppendL(longValue); + imHeader.CcRecipients().AppendL(longValue); + imHeader.CcRecipients().AppendL(longValue); + imHeader.BccRecipients().AppendL(longValue); + + imHeader.SetResentMsgIdL(longValue2); + imHeader.SetResentFromL(longValue); + } + +LOCAL_C void CreateMessagesL(TUid aMtm) + { + CParaFormatLayer* paraLayer = CParaFormatLayer::NewL(); + CleanupStack::PushL(paraLayer); + CCharFormatLayer* charLayer = CCharFormatLayer::NewL(); + CleanupStack::PushL(charLayer); + + // create entry to work under + TMsvEntry folder; + folder.iType = KUidMsvFolderEntry; + folder.iMtm = KUidMsvLocalServiceMtm; + folder.iServiceId = KMsvLocalServiceIndexEntryId; + testUtils->SetEntryL(KMsvGlobalInBoxIndexEntryId); + testUtils->iMsvEntry->CreateL(folder); + testUtils->iMsvEntry->SetEntryL(folder.Id()); + folderId=folder.Id(); + + TMsvEntry entry1; + entry1.iType = KUidMsvMessageEntry; + entry1.iServiceId = KMsvLocalServiceIndexEntryId; + entry1.iMtm = aMtm; + testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); + testUtils->iMsvEntry->CreateL(entry1); + TRAPD(error,testUtils->iMsvEntry->SetEntryL(entry1.Id())); + entry1Id=entry1.Id(); + + CMsvStore* fileStore = testUtils->iMsvEntry->EditStoreL(); + CleanupStack::PushL(fileStore); + + CImHeader* header = CImHeader::NewLC(); // Cleaned up when exiting this menu selection + CreateMessageHeader(*header); + header->StoreL(*fileStore); + fileStore->CommitL(); + CleanupStack::PopAndDestroy(2); // filestore, header + + TMsvEmailEntry ementry1; + ementry1.iMtm = aMtm; + ementry1.iServiceId = testUtils->iMsvEntry->Entry().iServiceId; + ementry1.iType = KUidMsvEmailTextEntry; + testUtils->iMsvEntry->CreateL(ementry1); + TRAP(error,testUtils->iMsvEntry->SetEntryL(ementry1.Id())); + + fileStore=NULL; + fileStore = testUtils->iMsvEntry->EditStoreL(); + CleanupStack::PushL(fileStore); + + CRichText* text1=CRichText::NewL(paraLayer, charLayer); + CleanupStack::PushL(text1); + text1->InsertL(0,_L("Some Rich Text 1")); + fileStore->StoreBodyTextL(*text1); + fileStore->CommitL(); + CleanupStack::PopAndDestroy(2); // filestore + + + fileStore=NULL; + TMsvEntry entry2; + entry2.iType = KUidMsvMessageEntry; + entry2.iMtm = aMtm; + entry2.iServiceId = KMsvLocalServiceIndexEntryId; + testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); + testUtils->iMsvEntry->CreateL(entry2); + TRAP(error,testUtils->iMsvEntry->SetEntryL(entry2.Id())); + entry2Id=entry2.Id(); + + fileStore = testUtils->iMsvEntry->EditStoreL(); + CleanupStack::PushL(fileStore); + CImHeader* header1 = CImHeader::NewLC(); + CreateMessageHeader2(*header1); + header1->StoreL(*fileStore); + fileStore->CommitL(); + CleanupStack::PopAndDestroy(2); // filestore,header + + + TMsvEmailEntry ementry2; + ementry2.iMtm = aMtm; + ementry2.iServiceId = testUtils->iMsvEntry->Entry().iServiceId; + ementry2.iType = KUidMsvEmailTextEntry; + testUtils->iMsvEntry->CreateL(ementry2); + TRAP(error,testUtils->iMsvEntry->SetEntryL(ementry2.Id())); + + fileStore=NULL; + fileStore = testUtils->iMsvEntry->EditStoreL(); + CleanupStack::PushL(fileStore); + CRichText* text2=CRichText::NewL(paraLayer, charLayer); + CleanupStack::PushL(text2); + text2->InsertL(0,_L("Some Rich Text 2")); + fileStore->StoreBodyTextL(*text2); + fileStore->CommitL(); + CleanupStack::PopAndDestroy(2); // filestore,text + + + fileStore=NULL; + TMsvEntry entry3; + entry3.iType = KUidMsvMessageEntry; + entry3.iMtm = aMtm; + entry3.iServiceId = KMsvLocalServiceIndexEntryId; + testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); + testUtils->iMsvEntry->CreateL(entry3); + TRAP(error,testUtils->iMsvEntry->SetEntryL(entry3.Id())); + entry3Id=entry3.Id(); + + fileStore = testUtils->iMsvEntry->EditStoreL(); + CleanupStack::PushL(fileStore); + CImHeader* header2 = CImHeader::NewLC(); + CreateLongMessageHeader(*header2); + header2->StoreL(*fileStore); + fileStore->CommitL(); + CleanupStack::PopAndDestroy(2); // filestore,header + + + TMsvEmailEntry ementry3; + ementry3.iMtm = aMtm; + ementry3.iServiceId = testUtils->iMsvEntry->Entry().iServiceId; + ementry3.iType = KUidMsvEmailTextEntry; + testUtils->iMsvEntry->CreateL(ementry3); + TRAP(error,testUtils->iMsvEntry->SetEntryL(ementry3.Id())); + + fileStore=NULL; + fileStore = testUtils->iMsvEntry->EditStoreL(); + CleanupStack::PushL(fileStore); + CRichText* text3=CRichText::NewL(paraLayer, charLayer); + CleanupStack::PushL(text3); + text3->InsertL(0,_L("Some Rich Text 3")); + fileStore->StoreBodyTextL(*text3); + fileStore->CommitL(); + CleanupStack::PopAndDestroy(4); // filestore,header,text,layers + } + + +LOCAL_C void TestFindInSelectionL() + { + CMsvOperationWait* active = CMsvOperationWait::NewLC(); + CMsvFindOperation* find = NULL; + CMsvEntrySelection* selection = new(ELeave)CMsvEntrySelection; + CleanupStack::PushL(selection); + + selection->AppendL(folderId); + selection->AppendL(entry1Id); + selection->AppendL(entry2Id); + selection->AppendL(entry3Id); + + // Test invalid arguments + TRAPD(error, CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("short mail"), *selection, KMsvMessagePartDescription, /*TMsvFindResultAny(),*/ active->iStatus)); + test(error == KErrArgument); + + selection->Delete(0); + selection->InsertL(1, folderId); + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("short mail"), *selection, KMsvMessagePartDescription, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + TPckgBuf progress; + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrArgument); + test(progress().iCompleted == 1); + test(progress().iRemaining == 3); + + selection->Delete(1); + selection->InsertL(2, folderId); + + // Test results + test(find->GetFindResult().Count() == 1); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("short mail"), *selection, KMsvMessagePartDescription, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrArgument); + test(progress().iCompleted == 2); + test(progress().iRemaining == 2); + + selection->Delete(2); + selection->InsertL(3, folderId); + + // Test results + test(find->GetFindResult().Count() == 2); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("short mail"), *selection, KMsvMessagePartDescription, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrArgument); + test(progress().iCompleted == 3); + test(progress().iRemaining == 1); + + selection->Delete(3); + + // Test results + test(find->GetFindResult().Count() == 2); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("short mail"), *selection, KMsvMessagePartDescription, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + test(find->GetFindResult().Count() == 2); + + test(selection->At(0) == find->GetFindResult().At(0).iId); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartDescription); + + CleanupStack::PopAndDestroy(3); // find, selection, active, testUtils->iMsvEntry, testUtils->iMsvSession, ob + } + + + +LOCAL_C void TestFindDescriptionSelectionL() + { + CMsvOperationWait* active = CMsvOperationWait::NewLC(); + + CMsvEntrySelection* selection = new(ELeave)CMsvEntrySelection; + CleanupStack::PushL(selection); + + CMsvFindOperation* find = NULL; + + selection->AppendL(entry1Id); + selection->AppendL(entry2Id); + selection->AppendL(entry3Id); + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("short mail"), *selection, KMsvMessagePartDescription, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + TPckgBuf progress; + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartDescription); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartDescription); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("something"), *selection, KMsvMessagePartDescription, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartDescription); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartDescription); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("mail"), *selection, KMsvMessagePartDescription | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartDescription); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("mai"), *selection, KMsvMessagePartDescription | KMsvFindWholeWord, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("interesting"), *selection, KMsvMessagePartDescription | KMsvFindWholeWord, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartDescription); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartDescription); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word and case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("Mail"), *selection, KMsvMessagePartDescription | KMsvFindWholeWord | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word and case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("something"), *selection, KMsvMessagePartDescription | KMsvFindWholeWord | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartDescription); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartDescription); + + CleanupStack::PopAndDestroy(); // find + + CleanupStack::PopAndDestroy(2); // selection, active, + } + +LOCAL_C void TestFindOriginatorSelectionL() + { + CMsvOperationWait* active = CMsvOperationWait::NewLC(); + + CMsvEntrySelection* selection = new(ELeave)CMsvEntrySelection; + CleanupStack::PushL(selection); + + CMsvFindOperation* find = NULL; + + selection->AppendL(entry1Id); + selection->AppendL(entry2Id); + selection->AppendL(entry3Id); + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("psion.com"), *selection, KMsvMessagePartOriginator, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + TPckgBuf progress; + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartOriginator); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartOriginator); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("PSION.COM"), *selection, KMsvMessagePartOriginator, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartOriginator); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartOriginator); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("psion"), *selection, KMsvMessagePartOriginator | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartOriginator); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("ps"), *selection, KMsvMessagePartOriginator | KMsvFindWholeWord, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("ralph-greenwell@psion.com"), *selection, KMsvMessagePartOriginator | KMsvFindWholeWord, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartOriginator); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartOriginator); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word and case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("ralph-greenwell@psio"), *selection, KMsvMessagePartOriginator | KMsvFindWholeWord | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word and case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("ralph-greenwell@psion.com"), *selection, KMsvMessagePartOriginator | KMsvFindWholeWord | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartOriginator); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartOriginator); + + CleanupStack::PopAndDestroy(); // find + + CleanupStack::PopAndDestroy(2); // selection, active, + } + + +LOCAL_C void TestFindRecipientSelectionL() + { + CMsvOperationWait* active = CMsvOperationWait::NewLC(); + + CMsvEntrySelection* selection = new(ELeave)CMsvEntrySelection; + CleanupStack::PushL(selection); + + selection->AppendL(entry1Id); + selection->AppendL(entry2Id); + selection->AppendL(entry3Id); + + CMsvFindOperation* find = NULL; + + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("address"), *selection, KMsvMessagePartRecipient, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + TPckgBuf progress; + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartRecipient); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartRecipient); + + CleanupStack::PopAndDestroy(); // find + + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("xxx"), *selection, KMsvMessagePartRecipient, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 1); + test(find->GetFindResult().At(0).iId == entry3Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartRecipient); + + CleanupStack::PopAndDestroy(); // find + + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("Address"), *selection, KMsvMessagePartRecipient | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("addr"), *selection, KMsvMessagePartRecipient | KMsvFindWholeWord, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("recipient2@address.com"), *selection, KMsvMessagePartRecipient | KMsvFindCaseSensitive | KMsvFindWholeWord, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 2); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartRecipient); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartRecipient); + + CleanupStack::PopAndDestroy(); // find + + CleanupStack::PopAndDestroy(2); // selection, active, testUtils->iMsvEntry, testUtils->iMsvSession, ob + } + + +LOCAL_C void TestFindBodySelectionL() + { + CMsvOperationWait* active = CMsvOperationWait::NewLC(); + + CMsvEntrySelection* selection = new(ELeave)CMsvEntrySelection; + CleanupStack::PushL(selection); + + CMsvFindOperation* find = NULL; + + selection->AppendL(entry1Id); + selection->AppendL(entry2Id); + selection->AppendL(entry3Id); + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("rich"), *selection, KMsvMessagePartBody, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + TPckgBuf progress; + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 3); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartBody); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartBody); + test(find->GetFindResult().At(2).iId == entry3Id); + test(find->GetFindResult().At(2).iPartList == KMsvMessagePartBody); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("RICH"), *selection, KMsvMessagePartBody, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 3); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartBody); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartBody); + test(find->GetFindResult().At(2).iId == entry3Id); + test(find->GetFindResult().At(2).iPartList == KMsvMessagePartBody); + + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("rich"), *selection, KMsvMessagePartBody | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("ric"), *selection, KMsvMessagePartBody | KMsvFindWholeWord, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("rich"), *selection, KMsvMessagePartBody | KMsvFindWholeWord, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 3); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartBody); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartBody); + test(find->GetFindResult().At(2).iId == entry3Id); + test(find->GetFindResult().At(2).iPartList == KMsvMessagePartBody); + + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word and case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("rich"), *selection, KMsvMessagePartBody | KMsvFindWholeWord | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 0); + + CleanupStack::PopAndDestroy(); // find + + // Test find in selection - match whole word and case sensitive + active->Start(); + find = CMsvFindOperation::FindInSelectionL(*testUtils->iMsvSession, _L("Rich"), *selection, KMsvMessagePartBody | KMsvFindWholeWord | KMsvFindCaseSensitive, /*TMsvFindResultAny(),*/ active->iStatus); + CleanupStack::PushL(find); + CActiveScheduler::Start(); + + // Test the progress + progress.Copy(find->FinalProgress()); + test(progress().iError == KErrNone); + test(progress().iCompleted == 3); + test(progress().iRemaining == 0); + + // Test results + + test(find->GetFindResult().Count() == 3); + test(find->GetFindResult().At(0).iId == entry1Id); + test(find->GetFindResult().At(0).iPartList == KMsvMessagePartBody); + test(find->GetFindResult().At(1).iId == entry2Id); + test(find->GetFindResult().At(1).iPartList == KMsvMessagePartBody); + test(find->GetFindResult().At(2).iId == entry3Id); + test(find->GetFindResult().At(2).iPartList == KMsvMessagePartBody); + + CleanupStack::PopAndDestroy(3); // selection, find,active + } + + +LOCAL_C void doMainL() + { + InitL(); + + testUtils->GoClientSideL(); + CreateMessagesL(KUidFindTestPOP3Mtm); + testUtils->TestStart(1); + test.Start(_L("POP3 - Finding text in selection")); + TestFindInSelectionL(); + log->AppendComment(_L8("Test 1 OK")); + testUtils->TestFinish(1); + testUtils->TestStart(2); + test.Next(_L("POP3 - Finding text in description")); + TestFindDescriptionSelectionL(); + log->AppendComment(_L8("Test 2 OK")); + testUtils->TestFinish(2); + + testUtils->TestStart(3); + test.Next(_L("POP3 - Finding text in recipient")); + TestFindRecipientSelectionL(); + log->AppendComment(_L8("Test 3 OK")); + testUtils->TestFinish(3); + + testUtils->TestStart(4); + test.Next(_L("POP3 - Finding text in originator")); + TestFindOriginatorSelectionL(); + log->AppendComment(_L8("Test 4 OK")); + testUtils->TestFinish(4); + + testUtils->TestStart(5); + test.Next(_L("POP3 - Finding text in body")); + TestFindBodySelectionL(); + log->AppendComment(_L8("Test 5 OK")); + testUtils->TestFinish(5); + + testUtils->TestStart(6); + CreateMessagesL(KUidFindTestSMTPMtm); + test.Next(_L("SMTP - Finding text in selection")); + TestFindInSelectionL(); + log->AppendComment(_L8("Test 6 OK")); + testUtils->TestFinish(6); + + testUtils->TestStart(7); + test.Next(_L("SMTP - Finding text in description")); + TestFindDescriptionSelectionL(); + log->AppendComment(_L8("Test 7 OK")); + testUtils->TestFinish(7); + + testUtils->TestStart(8); + test.Next(_L("SMTP - Finding text in recipient")); + TestFindRecipientSelectionL(); + log->AppendComment(_L8("Test 8 OK")); + testUtils->TestFinish(8); + + testUtils->TestStart(9); + test.Next(_L("SMTP - Finding text in originator")); + TestFindOriginatorSelectionL(); + log->AppendComment(_L8("Test 9 OK")); + testUtils->TestFinish(9); + + testUtils->TestStart(10); + test.Next(_L("SMTP - Finding text in body")); + TestFindBodySelectionL(); + log->AppendComment(_L8("Test 10 OK")); + testUtils->TestFinish(10); + + testUtils->TestStart(11); + CreateMessagesL(KUidFindTestIMAP4Mtm); + test.Next(_L("IMAP4 - Finding text in selection")); + TestFindInSelectionL(); + log->AppendComment(_L8("Test 11 OK")); + testUtils->TestFinish(11); + + testUtils->TestStart(12); + test.Next(_L("IMAP4 - Finding text in description")); + TestFindDescriptionSelectionL(); + log->AppendComment(_L8("Test 12 OK")); + testUtils->TestFinish(12); + + testUtils->TestStart(13); + test.Next(_L("IMAP4 - Finding text in recipient")); + TestFindRecipientSelectionL(); + log->AppendComment(_L8("Test 13 OK")); + testUtils->TestFinish(13); + + testUtils->TestStart(14); + test.Next(_L("IMAP4 - Finding text in originator")); + TestFindOriginatorSelectionL(); + log->AppendComment(_L8("Test 14 OK")); + testUtils->TestFinish(14); + + testUtils->TestStart(15); + test.Next(_L("IMAP4 - Finding text in body")); + TestFindBodySelectionL(); + log->AppendComment(_L8("Test 15 OK")); + testUtils->TestFinish(15); + + log->AppendComment(_L8("TESTS PASSED")); + testUtils->TestHarnessCompleted(); + Closedown(); + } + + +LOCAL_C void doFindTestL() + { + InitL(); + + testUtils->GoClientSideL(); + CreateMessagesL(KUidFindTestPOP3Mtm); + testUtils->TestStart(1); + test.Start(_L("POP3 - Finding text in Header")); + log->AppendComment(_L8("Test 1 OK")); + testUtils->TestFinish(1); + + log->AppendComment(_L8("TESTS PASSED")); + testUtils->TestHarnessCompleted(); + Closedown(); + } + + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + theCleanup=CTrapCleanup::New(); + TRAPD(ret,doMainL()); + test(ret==KErrNone); + delete theCleanup; + test.Console()->SetPos(0, 13); + test.End(); + test.Close(); + __UHEAP_MARKEND; + return(KErrNone); + } +