diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/clientmtms/test/src/T_POPC.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_POPC.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,2325 @@ +// 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_POPC +// Component: IMCM +// Owner: KP +// Brief description of test harness: +// Tests the client-side API of POP3 MTM; Query capability; standard POP3 +// functionality; CImPop3GetMail API. +// Detailed description of test harness: +// As above. +// Input files required to run test harness: +// None +// Intermediate files produced while running test harness: +// :\msglogs\T_POPC\T_IMCM.log +// :\msglogs\T_POPC\Entry_Structure.txt +// Output files produced by running test harness: +// :\msglogs\T_POPC...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_POPC.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_POPC.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_POPC.exe on the other platform +// +// + +#include "emailtestutils.h" +#include +#include +#include +#include +#include "TESTENV.h" +#include +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include "cimmessagepart.h" +#endif + + +// For loading the serial comms device drivers +#if defined (__WINS__) + #define PDD_NAME _L("ECDRV") + #define LDD_NAME _L("ECOMM") +#else + #define PDD_NAME _L("EUART1") + #define LDD_NAME _L("ECOMM") +#endif + +// local variables etc // + +_LIT(KImcmTest, "T_POPC - Testing CImPop3GetMail"); +RTest test(KImcmTest); + +_LIT(KTestParams,"-testparams"); +enum TCmdLineArgs + { + EArgProgramName, + EArgTestParams, + EArgServerAddress, + EArgLogin, + EArgPassword, + EArgPopulationLimit, + EArgEnd + }; + + +LOCAL_D TMsvId Pop3Service; +LOCAL_D TMsvId smtpService; + +LOCAL_D CTrapCleanup* theCleanup; +LOCAL_D CEmailTestUtils* testUtils; + +LOCAL_D CMsvOperation* msvOperation; +LOCAL_D CMsvEntrySelection* msvSelection; + +LOCAL_D CMsvEntrySelection* messageSelection; + +LOCAL_D CConsoleBase* console; + +class COperationActive; +LOCAL_D COperationActive* opActive; +LOCAL_D TInt testNo = 1; +LOCAL_D TInt globalError = 0; +LOCAL_D TBool iDoCancel = EFalse; + +_LIT(KTestSettingsServerAddress,"2.2.2.2"); +const TInt KTestSettingsPort = 111; +_LIT8(KTestSettingsLoginName,"testuser"); +_LIT8(KTestSettingsPassword,"password"); +const TInt KTestPopulationLimit=30; + +_LIT(KServer, "lon-cn-exchng2k.msexchange2k.closedtest.intra"); +_LIT8(KLoginName, "t_popc"); +_LIT8(KPassword, "t_popc"); + + +// +class TestUiTimer : public CTimer + { +public: + static TestUiTimer* NewLC(CConsoleBase* aConsole); + ~TestUiTimer(); + + void RunL(); + void DoCancel(); + void ConstructL(); + void IssueRequest(); + void SetOperation(CMsvOperation* aOperation); + TTimeIntervalMicroSeconds32 period; + TPtrC Progress(TInt progressNumber); + void SetCancelState(TInt aState); +protected: + TestUiTimer(CConsoleBase* aConsole); + + CConsoleBase* iConsole; +public: + CMsvOperation* iOperation; +private: + TInt iCancelState; + }; + +// +TestUiTimer* TestUiTimer::NewLC(CConsoleBase* aConsole) + { + TestUiTimer* self = new(ELeave) TestUiTimer(aConsole); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +TestUiTimer::TestUiTimer(CConsoleBase* aConsole) + : CTimer(1), iCancelState(KMaxTInt) + { + iConsole = aConsole; + period = 10000; + } + +TestUiTimer::~TestUiTimer() + { + delete iOperation; + } + +void TestUiTimer::ConstructL() + { + CTimer::ConstructL(); + CActiveScheduler::Add(this); + } + +void TestUiTimer::IssueRequest() + { + After(period); + } + +void TestUiTimer::SetOperation(CMsvOperation* aOperation) + { + if(iOperation) + { + delete iOperation; + iOperation=NULL; + } + iOperation = aOperation; + } + +void TestUiTimer::DoCancel() + { + CTimer::DoCancel(); + } + +TPtrC TestUiTimer::Progress(TInt progressNumber) + { + switch (progressNumber) + { + case 0: + return _L("Refreshing "); + case 1: + return _L("Copying "); + case 2: + return _L("Deleting "); + case 3: + return _L("Connecting "); + case 4: + return _L("Tidying "); + case 5: + return _L("Connected and Idle "); + case 6: + return _L("Disconnecting "); + case 7: + return _L("Disconnected "); + case 8: + return _L("Moving "); + case 9: + return _L("Copying New Mail "); + case 10: + return _L("Moving New Mail "); + case 11: + return _L("Copying Mail Selection "); + case 12: + return _L("Moving Mail Selection "); + case 13: + return _L("Copying All Mail "); + case 14: + return _L("Moving All Mail "); + default: + return _L("Unknown Progress "); + } + } + +void TestUiTimer::SetCancelState(TInt aState) + { + iCancelState = aState; + } + +void TestUiTimer::RunL() + { + // display the current progress + if(iOperation!=NULL) + { + if(iDoCancel == TBool(ETrue)) + { + iOperation->Cancel(); + } + TPop3Progress temp; + TPckgC paramPack(temp); + paramPack.Set(iOperation->ProgressL()); + TPop3Progress progress=paramPack(); + + if (iCancelState == progress.iPop3SubStateProgress) + { + iConsole->Printf(_L(" Calling Cancel\n")); + iOperation->Cancel(); + } + + iConsole->SetPos(0, 12); + TBuf<80> progressBuf = Progress(progress.iPop3Progress); + iConsole->Printf(TRefByValue_L(" Super Operation Progress: %S "), &progressBuf); + iConsole->SetPos(0, 13); + progressBuf = Progress(progress.iPop3SubStateProgress); + iConsole->Printf(TRefByValue_L(" Sub Operation Progress : %S "), &progressBuf); + iConsole->SetPos(0, 14); + iConsole->Printf(TRefByValue_L(" Progress: %d/%d %d/%d Total:%d \n"), + progress.iTotalMsgs-progress.iMsgsToProcess, + progress.iTotalMsgs, + progress.iBytesDone, + progress.iTotalBytes, + progress.iTotalSize); + iConsole->SetPos(0, 15); + iConsole->Printf(TRefByValue_L(" Error: %d \n"), progress.iErrorCode); + if (progress.iErrorCode && !globalError) + { + if(!iDoCancel || progress.iErrorCode!=KErrCancel) + {// we should not report KErrCancel as an error when iDoCancel is true because that is expected behviour + globalError=progress.iErrorCode; + } + } + } + IssueRequest(); + }; + +// + +class COperationActive : public CActive + { +public: + COperationActive(); + ~COperationActive(); + static COperationActive* NewL(); + void StartL(TBool aDisableProgress = EFalse); + void SetOperation(CMsvOperation*); + void SetCancelState(TInt aCancelState); + +protected: + void DoCancel(); + void RunL(); +public: + TestUiTimer* iTimer; +private: + TBool iSetActive; + }; + +// +COperationActive::COperationActive() +: CActive(0) + { + } + +COperationActive::~COperationActive() + { + Cancel(); + delete iTimer; + } + +COperationActive* COperationActive::NewL() + { + COperationActive* self = new (ELeave) COperationActive; + CActiveScheduler::Add(self); + + self->iSetActive = ETrue; + self->iTimer = TestUiTimer::NewLC(test.Console()); + CleanupStack::Pop(); + return self; + } + +void COperationActive::DoCancel() + { + iTimer->DoCancel(); + } + +void COperationActive::StartL(TBool aDisableProgress) + { + if(aDisableProgress) + { + iTimer->IssueRequest(); // Start the connect observation timer + SetActive(); + test.Printf(TRefByValue_L("POP3 progress disabled")); + } + else + { + TPop3Progress temp; + TPckgC paramPack(temp); + paramPack.Set(iTimer->iOperation->ProgressL()); + TPop3Progress progress=paramPack(); + + switch(progress.iPop3Progress) + { + case TPop3Progress::EPopDisconnected: + case TPop3Progress::EPopDisconnecting: + // don't set active + iSetActive = EFalse; + break; + case TPop3Progress::EPopCopyNewMail: + case TPop3Progress::EPopMoveNewMail: + case TPop3Progress::EPopCopyMailSelection: + case TPop3Progress::EPopMoveMailSelection: + case TPop3Progress::EPopCopyAllMail: + case TPop3Progress::EPopMoveAllMail: + case TPop3Progress::EPopPopulating: + default: + switch(progress.iPop3SubStateProgress) + { + // don't set active if we are in the disconnecting state or if we have disconnected. + case TPop3Progress::EPopDisconnected: + case TPop3Progress::EPopDisconnecting: + default: + // don't set active + iSetActive = EFalse; + break; + case TPop3Progress::EPopCopying: + case TPop3Progress::EPopDeleting: + case TPop3Progress::EPopConnectedAndIdle: + case TPop3Progress::EPopMoving: + case TPop3Progress::EPopRefreshing: + case TPop3Progress::EPopConnecting: + case TPop3Progress::EPopTidying: + { + if (iSetActive && iTimer->iOperation->IsActive()) + { + + iTimer->IssueRequest(); // Start the connect observation timer + SetActive(); + + } + } + } + } + + test.Console()->SetPos(0, 17); + test.Printf(TRefByValue_L("Operation TRequestStatus %d"), iStatus); + + } + } + +void COperationActive::SetOperation(CMsvOperation *aOperation) + { + iTimer->SetOperation(aOperation); + } + +void COperationActive::SetCancelState(TInt aCancelState) + { + iTimer->SetCancelState(aCancelState); + } + +void COperationActive::RunL() + { + iTimer->Cancel(); + test.Console()->SetPos(25, 17); + test.Printf(_L(" ")); + test.Console()->SetPos(0, 17); + test.Printf(TRefByValue_L("Operation TRequestStatus %d"), iStatus); + CActiveScheduler::Stop(); + } + +// + +LOCAL_C void StoreClientSettingsL() +// +// Dummy settings for checking that StoreSettingsL work for the client mtm +// + { + testUtils->WriteComment(_L("Storing settings in client mtm")); + CImPop3Settings* pop3Settings = new(ELeave)CImPop3Settings; + CleanupStack::PushL(pop3Settings); + pop3Settings->CopyL(testUtils->iPopClientMtm->Settings()); + pop3Settings->SetServerAddressL(KTestSettingsServerAddress); + pop3Settings->SetPort(KTestSettingsPort); + pop3Settings->SetLoginNameL(KTestSettingsLoginName); + pop3Settings->SetPasswordL(KTestSettingsPassword); + pop3Settings->SetPopulationLimitL(KTestPopulationLimit); + testUtils->iPopClientMtm->SetSettingsL(*pop3Settings); + CleanupStack::PopAndDestroy(pop3Settings); + testUtils->iPopClientMtm->StoreSettingsL(); + } + +LOCAL_C TInt VerifyStoredClientSettingsL() +// +// Comparison of the settings stored to see that the client commits after storing +// + { + // Handle command line arguments + CCommandLineArguments* cmdLineArg=CCommandLineArguments::NewLC(); + TInt count = cmdLineArg->Count(); + TBool isCmdLine=FALSE; + if (count>2) // Command line arguments? + { + if ((!(cmdLineArg->Arg(EArgTestParams).Compare(KTestParams))) && count==EArgEnd) + isCmdLine=TRUE; + } + + testUtils->WriteComment(_L("Checking stored settings in client mtm")); + testUtils->iPopClientMtm->RestoreSettingsL(); + CImPop3Settings* pop3Settings = new(ELeave)CImPop3Settings; + CleanupStack::PushL(pop3Settings); + pop3Settings->CopyL(testUtils->iPopClientMtm->Settings()); + + TInt result=0; + result += pop3Settings->ServerAddress().Compare(KTestSettingsServerAddress); + result += pop3Settings->Port() - KTestSettingsPort; + result += pop3Settings->LoginName().Compare(KTestSettingsLoginName); + result += pop3Settings->Password().Compare(KTestSettingsPassword); + result += (pop3Settings->PopulationLimit()!=KTestPopulationLimit); + + pop3Settings->Reset(); + + if (isCmdLine) + { + TBuf<100> buf; + TLex lex(cmdLineArg->Arg(EArgServerAddress)); + buf=lex.NextToken(); + pop3Settings->SetServerAddressL(buf); + } + else + { + pop3Settings->SetServerAddressL(KServer); + } + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgLogin)); + buf=lex.NextToken(); + data.Copy(buf); + pop3Settings->SetLoginNameL(data); + } + else + { + pop3Settings->SetLoginNameL(KLoginName); + } + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgPassword)); + buf=lex.NextToken(); + data.Copy(buf); + pop3Settings->SetPasswordL(data); + } + else + { + pop3Settings->SetPasswordL(KPassword); + } + + if (isCmdLine) + { + TBuf<100> buf; + TLex lex(cmdLineArg->Arg(EArgPopulationLimit)); + buf=lex.NextToken(); + TInt limit; + TLex lex2(buf); + lex2.Val(limit); + pop3Settings->SetPopulationLimitL(limit); + } + else + { + TInt populationLimit=40; + pop3Settings->SetPopulationLimitL(populationLimit); + } + + + pop3Settings->SetPort(110); + testUtils->iPopClientMtm->SetSettingsL(*pop3Settings); + testUtils->iPopClientMtm->StoreSettingsL(); + + TRequestStatus st; + TMsvId s=0; + TMsvPartList retPart=KMsvMessagePartBody; + TUint id=0; + TInt add=0; + + TBuf<1> des; + TBuf8<1> des8; + + TRAP_IGNORE(testUtils->iPopClientMtm->SaveMessageL()); + TRAP_IGNORE(testUtils->iPopClientMtm->ReplyL(s,retPart,st)); + TRAP_IGNORE(testUtils->iPopClientMtm->ForwardL(s,retPart,st)); + testUtils->iPopClientMtm->ValidateMessage(retPart); + TRAP_IGNORE(testUtils->iPopClientMtm->AddAddresseeL(des)); + TRAP_IGNORE(testUtils->iPopClientMtm->AddAddresseeL(des,des)); + testUtils->iPopClientMtm->RemoveAddressee(add); + TRAP_IGNORE(testUtils->iPopClientMtm->AddAttachmentL(des, des8,id,st)); + TRAP_IGNORE(testUtils->iPopClientMtm->AddLinkedAttachmentL(des,des8,id,st)); + TRAP_IGNORE(testUtils->iPopClientMtm->AddEntryAsAttachmentL(s,st)); + TRAP_IGNORE(testUtils->iPopClientMtm->CreateMessageL(s)); + TRAP_IGNORE(testUtils->iPopClientMtm->DefaultServiceL()); + TRAP_IGNORE(testUtils->iPopClientMtm->RemoveDefaultServiceL()); + TRAP_IGNORE(testUtils->iPopClientMtm->ChangeDefaultServiceL(s)); + + CleanupStack::PopAndDestroy(pop3Settings); + CleanupStack::PopAndDestroy(); // cmdLineArg + return result; + } + +LOCAL_C void ConnectToServerL() + { + testUtils->WriteComment(_L("Connecting to the Pop3 server")); + TBuf8<1> aParameter; + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnect, *msvSelection, aParameter, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the connect active object + } + +LOCAL_C void DisconnectFromServerL() + { + testUtils->WriteComment(_L("Disconnecting from the Pop3 server")); + TBuf8<1> aParameter; + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMDisconnect, *msvSelection, aParameter, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the disconnect active object + } + +// +// Get Mail when already Connected tests +// + +LOCAL_C void CopyNewMailWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Copying New Mail when already connected")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMCopyNewMailWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); // Start the copy new mail active object + } + + +LOCAL_C void MoveNewMailWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Moving New Mail when already connected")); + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize=KMaxTInt; + Pop3GetMailInfo.iDestinationFolder= KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMMoveNewMailWhenAlreadyConnected,*msvSelection,package,opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); + } + + +LOCAL_C void CopyAllMailWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Copying All Mail when already connected")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMCopyAllMailWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); // Start the copy all mail active object + } + + +LOCAL_C void MoveAllMailWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Moving All Mails when already connected")); + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMMoveAllMailWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); + } + + +LOCAL_C void CopyMailSelectionWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Copying Mail Selection when already connected")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + + testUtils->SetEntryL(Pop3Service); + CMsvEntrySelection* sel = testUtils->iMsvEntry->ChildrenL(); + CleanupStack::PushL(sel); + if (sel->Count()>1) + { + msvSelection->AppendL((*sel)[0]); + msvSelection->AppendL((*sel)[1]); + } + else if (sel->Count()) + msvSelection->AppendL((*sel)[0]); + CleanupStack::PopAndDestroy(); //sel + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMCopyMailSelectionWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); // Start the copy mail selection active object + } + + +LOCAL_C void MoveMailSelectionWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Moving Mail Selection when already connected")); + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); //Pop3Service is already set while connecting to the server + testUtils->SetEntryL(Pop3Service); + CMsvEntrySelection* sel = testUtils->iMsvEntry->ChildrenL(); + CleanupStack::PushL(sel); + if (sel->Count()>1) + { + msvSelection->AppendL((*sel)[0]); + msvSelection->AppendL((*sel)[1]); + } + else if (sel->Count()) + msvSelection->AppendL((*sel)[0]); + CleanupStack::PopAndDestroy(); //sel + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMMoveMailSelectionWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); // Start the move mail selection active object + } + + +// +// Connect, Get Mail and Disconnect tests +// + +LOCAL_C void ConnectAndCopyNewMailAndDisconnectL() + { + testUtils->WriteComment(_L("Connect, Copying New Mail, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndCopyNewMailAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the copy new mail active object + } + +LOCAL_C void ConnectAndMoveNewMailAndDisconnectL() + { + testUtils->WriteComment(_L("Connect, Move New Mail, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndMoveNewMailAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); + } + +LOCAL_C void ConnectAndCopyAllMailAndDisconnectL() + { + testUtils->WriteComment(_L("Connect, Copying All Mail, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndCopyAllMailAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the copy all mail active object + } + + +LOCAL_C void ConnectAndMoveAllMailAndDisconnectL() + { + testUtils->WriteComment(_L("Connect, Moving All Mail, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndMoveAllMailAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); + } + + + + + +LOCAL_C void ConnectAndCopyMailSelectionAndDisconnectL(TBool aEmptyMessageSelection = EFalse) + { + testUtils->WriteComment(_L("Connect, Copying Mail Selection, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + + if (!aEmptyMessageSelection) + { + testUtils->SetEntryL(Pop3Service); + CMsvEntrySelection* sel = testUtils->iMsvEntry->ChildrenL(); + CleanupStack::PushL(sel); + if (sel->Count()>1) + { + msvSelection->AppendL((*sel)[0]); + msvSelection->AppendL((*sel)[1]); + } + else if (sel->Count()) + msvSelection->AppendL((*sel)[0]); + CleanupStack::PopAndDestroy(); //sel + } + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndCopyMailSelectionAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the copy all mail active object + } + + +LOCAL_C void ConnectAndMoveMailSelectionAndDisconnectL(TBool aEmptyMessageSelection = EFalse) + { + testUtils->WriteComment(_L("Connect, Move Mail Selection, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + + if (!aEmptyMessageSelection) + { + testUtils->SetEntryL(Pop3Service); + CMsvEntrySelection* sel = testUtils->iMsvEntry->ChildrenL(); + CleanupStack::PushL(sel); + if (sel->Count()>1) + { + msvSelection->AppendL((*sel)[0]); + msvSelection->AppendL((*sel)[1]); + } + else if (sel->Count()) + msvSelection->AppendL((*sel)[0]); + CleanupStack::PopAndDestroy(); //sel + } + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndMoveMailSelectionAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); + } + +// +// Connect, Get Mail and Stay Online tests +// + +LOCAL_C void ConnectAndCopyNewMailAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Copying New Mail, Stay Online")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndCopyNewMailAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the copy new mail active object + } + + +LOCAL_C void ConnectAndMoveNewMailAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Moving New Mail, Stay Online")); + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndMoveNewMailAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); + } + +LOCAL_C void ConnectAndCopyAllMailAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Copying All Mail, Stay Online")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndCopyAllMailAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the copy all mail active object + } + + +LOCAL_C void ConnectAndMoveAllMailAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Move All Mail, Stay Online")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + msvSelection->AppendL(0x00100002); // remote inbox + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndMoveAllMailAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); + } + + +LOCAL_C void ConnectAndCopyMailSelectionAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Copying Mail Selection, Stay Online")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + + testUtils->SetEntryL(Pop3Service); + CMsvEntrySelection* sel = testUtils->iMsvEntry->ChildrenL(); + CleanupStack::PushL(sel); + if (sel->Count()>1) + { + msvSelection->AppendL((*sel)[0]); + msvSelection->AppendL((*sel)[1]); + } + else if (sel->Count()) + msvSelection->AppendL((*sel)[0]); + CleanupStack::PopAndDestroy(); //sel + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndCopyMailSelectionAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the copy message selection active object + } + +LOCAL_C void ConnectAndMoveMailSelectionAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Move Mail Selection, Stay Online")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(Pop3Service); + + testUtils->SetEntryL(Pop3Service); + CMsvEntrySelection* sel = testUtils->iMsvEntry->ChildrenL(); + CleanupStack::PushL(sel); + if (sel->Count()>1) + { + msvSelection->AppendL((*sel)[0]); + msvSelection->AppendL((*sel)[1]); + } + else if (sel->Count()) + msvSelection->AppendL((*sel)[0]); + CleanupStack::PopAndDestroy(); //sel + + TImPop3GetMailInfo Pop3GetMailInfo; + Pop3GetMailInfo.iMaxEmailSize = KMaxTInt; + Pop3GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + TPckgBuf package(Pop3GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMConnectAndMoveMailSelectionAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); + } + + +// + +LOCAL_C void ConnectAndDisconnectL() + { + console->SetPos(0, 6); + test.Printf(_L("\nPerforming Tests\n")); + console->SetPos(0, 7); + test.Printf(_L("Connecting to Pop server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + } + +// + + +LOCAL_C void CreateReplyEmailMessage() + { + testUtils->WriteComment(_L("Creating a Reply Email Message")); + msvSelection->ResizeL(0); + + testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); + messageSelection = testUtils->iMsvEntry->ChildrenWithTypeL(KUidMsvMessageEntry); + //CleanupStack::PushL(messageSelection); + msvSelection->AppendL(KMsvGlobalOutBoxIndexEntryId); //destination id + msvSelection->AppendL(messageSelection->At(5)); // message id to which the reply is to be assigned + //CleanupStack::PopAndDestroy(); //messageSelection + + //create an object of type TImCreateMessageOptions + TImCreateMessageOptions Pop3CreateMessage; + + //Initialize the member variables of TImCreateMessageOptions suitably + Pop3CreateMessage.iMsvPartList = KMsvMessagePartBody; + Pop3CreateMessage.iMsvEmailTypeList = 0; + Pop3CreateMessage.iMessageType = KUidMsgTypeSMTP; + TPckgBuf package(Pop3CreateMessage); + + //set the status + opActive->iStatus = KRequestPending; + + //invoke the func InvokeAsyncFunctionL() + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMCreateReplyEmailMessage, *msvSelection, package, opActive->iStatus); + + //start the operation + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); + delete messageSelection; + } + + +LOCAL_C void CreateForwardEmailMessage() + { + testUtils->WriteComment(_L("Creating a Forward Email Message")); + msvSelection->ResizeL(0); + + testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); + messageSelection = testUtils->iMsvEntry->ChildrenWithTypeL(KUidMsvMessageEntry); + msvSelection->AppendL(KMsvGlobalOutBoxIndexEntryId); //destination id + msvSelection->AppendL(messageSelection->At(5)); // message id to which the reply is to be assigned + + //create an object of type TImCreateMessageOptions + TImCreateMessageOptions Pop3CreateMessage; + + //Initialize the member variables of TImCreateMessageOptions suitably + Pop3CreateMessage.iMsvPartList = KMsvMessagePartBody; + Pop3CreateMessage.iMsvEmailTypeList = 0; + Pop3CreateMessage.iMessageType = KUidMsgTypeSMTP; + TPckgBuf package(Pop3CreateMessage); + + //set the status + opActive->iStatus = KRequestPending; + + //invoke the func InvokeAsyncFunctionL() + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMCreateForwardEmailMessage, *msvSelection, package, opActive->iStatus); + + //start the operation + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); + delete messageSelection; + } + + +LOCAL_C void CreateForwardAsAttachmentEmailMessage() + { + testUtils->WriteComment(_L("Creating a Forward As Attachment Email Message")); + msvSelection->ResizeL(0); + + testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); + messageSelection = testUtils->iMsvEntry->ChildrenWithTypeL(KUidMsvMessageEntry); + + msvSelection->AppendL(Pop3Service); //destination id + msvSelection->AppendL(messageSelection->At(1)); // message id to which the reply is to be assigned + + + //create an object of type TImCreateMessageOptions + TImCreateMessageOptions Pop3CreateMessage; + + //Initialize the member variables of TImCreateMessageOptions suitably + Pop3CreateMessage.iMsvPartList =KMsvMessagePartBody | KMsvMessagePartAttachments; + Pop3CreateMessage.iMsvEmailTypeList = KMsvEmailTypeListMHTMLMessage; + Pop3CreateMessage.iMessageType = KUidMsgTypeSMTP; + TPckgBuf package(Pop3CreateMessage); + + //set the status + opActive->iStatus = KRequestPending; + + //invoke the func InvokeAsyncFunctionL() + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMCreateForwardAsAttachmentEmailMessage, *msvSelection, package, opActive->iStatus); + + //start the operation + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); + delete messageSelection; + } + + +LOCAL_C void CreateReceiptEmailMessage() + { + testUtils->WriteComment(_L("Creating a Receipt Email Message")); + msvSelection->ResizeL(0); + + testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); + messageSelection = testUtils->iMsvEntry->ChildrenWithTypeL(KUidMsvMessageEntry); + + msvSelection->AppendL(KMsvGlobalOutBoxIndexEntryId); //destination id + msvSelection->AppendL(messageSelection->At(5)); // message id + + + //create an object of type TImCreateMessageOptions + TImCreateMessageOptions Pop3CreateMessage; + + //Initialize the member variables of TImCreateMessageOptions suitably + Pop3CreateMessage.iMsvPartList = KMsvMessagePartBody; + Pop3CreateMessage.iMsvEmailTypeList = 0; + Pop3CreateMessage.iMessageType = KUidMsgTypeSMTP; + TPckgBuf package(Pop3CreateMessage); + + //set the status + opActive->iStatus = KRequestPending; + + //invoke the func InvokeAsyncFunctionL() + msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMCreateReceiptEmailMessage, *msvSelection, package, opActive->iStatus); + + //start the operation + opActive->SetOperation(msvOperation); + opActive->StartL(ETrue); + delete messageSelection; + } + + +LOCAL_C void TestCapabilityL() + { + TInt response = 0; + test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQuerySupportedBody, response) == KErrNone); + test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQuerySupportAttachments, response) == KErrNone); +// test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQuerySupportSubject, response) == KErrNone); +// test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQuerySupportsFolder, response) == KErrNotSupported); +// test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQueryOffLineAllowed, response) == KErrNotSupported); + test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQueryCanSendMsg, response) == KErrNotSupported); + test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQueryCanReceiveMsg, response) == KErrNone); + test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQuerySendAsRequiresRenderedImage, response) == KErrNotSupported); + test(testUtils->iPopClientMtm->QueryCapability(KUidMtmQueryMaxRecipientCount, response) == KErrNotSupported); + } + +LOCAL_C void DeleteAndCreateServicesL() + { + // Handle command line arguments + CCommandLineArguments* cmdLineArg=CCommandLineArguments::NewLC(); + TInt count = cmdLineArg->Count(); + TBool isCmdLine=FALSE; + if (count>2) // Command line arguments? + { + if ((!(cmdLineArg->Arg(EArgTestParams).Compare(KTestParams))) && count==EArgEnd) + isCmdLine=TRUE; + } + + // delete services + testUtils->iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + testUtils->iMsvEntry->DeleteL(Pop3Service); + testUtils->iMsvEntry->DeleteL(smtpService); + + // Create Services + smtpService = testUtils->CreateSmtpServiceL(); + Pop3Service = testUtils->CreatePopServiceL(); + + testUtils->iMsvEntry->SetEntryL(Pop3Service); + +// TUint32 iap=0; +// CCommsDatabase* db =CCommsDatabase::NewL(); +// CleanupStack::PushL(db); +// db->GetGlobalSettingL(TPtrC(DIAL_OUT_IAP),iap); +// CleanupStack::PopAndDestroy(); //db + + //overwrite the settings with test code one. Don't want the default settings. + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + + CImPop3Settings* settings = new(ELeave) CImPop3Settings(); + CleanupStack::PushL(settings); + settings->Reset(); + + if (isCmdLine) + { + TBuf<100> buf; + TLex lex(cmdLineArg->Arg(EArgServerAddress)); + buf=lex.NextToken(); + settings->SetServerAddressL(buf); + } + else + { + settings->SetServerAddressL(KServer); + } + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgLogin)); + buf=lex.NextToken(); + data.Copy(buf); + settings->SetLoginNameL(data); + } + else + { + settings->SetLoginNameL(KLoginName); + } + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgPassword)); + buf=lex.NextToken(); + data.Copy(buf); + settings->SetPasswordL(data); + } + else + { + settings->SetPasswordL(KPassword); + } + + settings->SetPort(110); + TPopAccount pop3AccountId; + accounts->GetPopAccountL(Pop3Service, pop3AccountId); + accounts->SavePopSettingsL( pop3AccountId, *settings); + + CleanupStack::PopAndDestroy(2); //settings, store/accounts + CleanupStack::PopAndDestroy(); // cmdLineArg + } + +LOCAL_C void InitL() + { + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CActiveScheduler::Install(scheduler); + CleanupStack::PushL(scheduler); + + testUtils = CEmailTestUtils::NewLC(test); + console = test.Console(); + testUtils->FileSession().SetSessionPath(_L("C:\\")); + testUtils->CleanMessageFolderL(); + testUtils->ClearEmailAccountsL(); + // Create Services + testUtils->GoClientSideL(); + testUtils->ClearEmailAccountsL(); + smtpService = testUtils->CreateSmtpServiceL(); + Pop3Service = testUtils->CreatePopServiceL(); + testUtils->GoServerSideL(); + + console->SetPos(0, 3); + test.Printf(_L("Create Data Component FileStores")); + testUtils->CreateSmtpServerMtmRegL(); + testUtils->CreatePopServerMtmRegL(); + + // Load the DLLs + testUtils->CreateRegistryObjectAndControlL(); + testUtils->InstallSmtpMtmGroupL(); + testUtils->InstallPopMtmGroupL(); + + // Create Services + + testUtils->WriteComment(_L("********** T_POPC Test CImPop3GetMail class **********")); + + } + +LOCAL_C void Closedown() + { + // mkn testUtils->WriteComment(_L("********** T_POPC Tests Complete **********")); + + CleanupStack::PopAndDestroy(2); //testUtils, scheduler + } + +// + +LOCAL_C TPtrC Progress(TInt progressNumber) + { + switch (progressNumber) + { + case 0: + return _L("Refreshing "); + case 1: + return _L("Copying "); + case 2: + return _L("Deleting "); + case 3: + return _L("Connecting "); + case 4: + return _L("Tidying "); + case 5: + return _L("Connected and Idle "); + case 6: + return _L("Disconnecting "); + case 7: + return _L("Disconnected "); + case 8: + return _L("Moving "); + case 9: + return _L("Copying New Mail "); + case 10: + return _L("Moving New Mail "); + case 11: + return _L("Copying Mail Selection "); + case 12: + return _L("Moving Mail Selection "); + case 13: + return _L("Copying All Mail "); + case 14: + return _L("Moving All Mail "); + default: + return _L("Unknown Progress "); + } + } + +LOCAL_C void doMainL() + { + InitL(); + testUtils->FileSession().SetSessionPath(_L("c:\\")); + + testUtils->CreateMessageFilesL(Pop3Service, KMsvGlobalInBoxIndexEntryId, _L("c:\\mailtest\\IMCM\\")); + // Load the serial comms device drivers. If this is not done, + // connecting via NT-RAS returns KErrNotFound (-1). + TInt driverErr; + driverErr=User::LoadPhysicalDevice(PDD_NAME); + if (driverErr!=KErrNone && driverErr!=KErrAlreadyExists) + User::Leave(driverErr); + driverErr=User::LoadLogicalDevice(LDD_NAME); + if (driverErr!=KErrNone && driverErr!=KErrAlreadyExists) + User::Leave(driverErr); + + // Delete any *.scr files in c:\logs\email directory. + testUtils->DeleteScriptFilesFromLogsDirL(); + + // Instantiate the Pop3 Client MTM + testUtils->GoClientSideL(); + + testUtils->iMsvEntry->SetEntryL(Pop3Service); + + TMsvEntry entry=testUtils->iMsvEntry->Entry(); + testUtils->iMsvEntry->ChangeL(entry); + + // Handle command line arguments + CCommandLineArguments* cmdLineArg=CCommandLineArguments::NewLC(); + TInt count = cmdLineArg->Count(); + TBool isCmdLine=FALSE; + if (count>2) // Command line arguments? + { + if ((!(cmdLineArg->Arg(EArgTestParams).Compare(KTestParams))) && count==EArgEnd) + isCmdLine=TRUE; + } + + //overwrite the settings with test code one. Don't want the default settings. + CImPop3Settings* settings = new(ELeave) CImPop3Settings(); + CleanupStack::PushL(settings); + + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + + TPopAccount pop3AccountId; + accounts->GetPopAccountL(Pop3Service, pop3AccountId); + accounts->LoadPopSettingsL(pop3AccountId, *settings); + + if (isCmdLine) + { + TBuf<100> buf; + TLex lex(cmdLineArg->Arg(EArgServerAddress)); + buf=lex.NextToken(); + test.Printf(_L("Server address: %S\n"),&buf); + settings->SetServerAddressL(buf); + } + else + { + settings->SetServerAddressL(KServer); + } + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgLogin)); + buf=lex.NextToken(); + test.Printf(_L("Login: %S\n"),&buf); + data.Copy(buf); + settings->SetLoginNameL(data); + } + else + { + settings->SetLoginNameL(KLoginName); + } + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgPassword)); + buf=lex.NextToken(); + test.Printf(_L("Password: %S\n"),&buf); + data.Copy(buf); + settings->SetPasswordL(data); + } + else + { + settings->SetPasswordL(KPassword); + } + + if (isCmdLine) + { + TBuf<100> buf; + TLex lex(cmdLineArg->Arg(EArgPopulationLimit)); + buf=lex.NextToken(); + TInt limit; + TLex lex2(buf); + lex2.Val(limit); + settings->SetPopulationLimitL(limit); + } + else + { + TInt populationLimit=40; + settings->SetPopulationLimitL(populationLimit); + } + + settings->SetPort(110); + accounts->SavePopSettingsL(pop3AccountId, *settings); + CleanupStack::PopAndDestroy(2); // store/accounts, settings + CleanupStack::PopAndDestroy(); // cmdLineArg + + console->SetPos(0, 3); + test.Printf(_L("Instantiating POP3 Client MTM")); + testUtils->InstantiatePopClientMtmL(); + testUtils->WriteComment(_L("Instantiated POP3 Client MTM")); + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + // Check that CPop3ClientMtm::StoreSettingsL() really works. + testUtils->TestStart(testNo++); + console->SetPos(0, 7); + test.Printf(_L("Storing settings \n")); + StoreClientSettingsL(); + TInt result = VerifyStoredClientSettingsL(); + test(result == KErrNone); + testUtils->TestFinish(testNo-1); + + // Copy New Mail when already connected to server + testUtils->TestStart(testNo++); + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to Pop server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Copy New Mail when already connected to server \n")); + CopyNewMailWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + iDoCancel = ETrue; + CActiveScheduler::Start(); + iDoCancel = EFalse; + + { + // wait 5 seconds so that user can see the final progess! + CTestTimer* timer = CTestTimer::NewL(); + timer->After(10000000); + CActiveScheduler::Start(); + delete timer; + } + + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + /*Step1: Connect to the POP3 server*/ + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0,7); + test.Printf(_L("Connecting to Pop server\n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); //opActive + + /*Step2: Move new mails*/ + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0,7); + test.Printf(_L("Move new mail when already connected to server \n")); + MoveNewMailWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); //opActive + + /*Step 3: Disconnect from the server */ + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0,7); + test.Printf(_L("Disconnecting from server\n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + //cleanup for next test + CleanupStack::PopAndDestroy(2); //opActive, msvSelection + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + // Copy All Mail when already connected to server + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to Pop server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Copy All Mail when already connected to server \n")); + CopyAllMailWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + // Step 1: connect to server + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to Pop server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + //Step 2: Move All Mails + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Move All Mail when already connected to server \n")); + MoveAllMailWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + //Step 3: Disconnect the server + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + testUtils->TestStart(testNo++); + // Copy Mail Selection when already connected to server + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to Pop server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Copy Msg selection when already connected \n")); + CopyMailSelectionWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + //Step 1: connect to server + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to Pop server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + //Step 2: Move Selected mails when already connected + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Move Mail selection when already connected \n")); + MoveMailSelectionWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + //Step 3:Disconnect the server + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + //clean up for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + // + // Tests for Creating Replies and Forwards // + // + //Creating a Reply Email Message + + testUtils->TestStart(testNo++); + // Connecting to server + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Create Reply Email Message \n")); + CreateReplyEmailMessage(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + //Creating a Forward Email Message + + testUtils->TestStart(testNo++); + // Connecting to server + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Create Reply Email Message \n")); + CreateForwardEmailMessage(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + //Creating a Forward As Attachment Email Message + + testUtils->TestStart(testNo++); + // Connecting to server + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Create a Forward As Attachment Email Message \n")); + CreateForwardAsAttachmentEmailMessage(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + //Create Receipt Email Message + + testUtils->TestStart(testNo++); + // Connecting to server + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Create a Receipt Email Message \n")); + CreateReceiptEmailMessage(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + // Connect, Copy New Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + + test.Printf(_L("Connect, Copy New Mail, Disconnect \n")); + ConnectAndCopyNewMailAndDisconnectL(); + CActiveScheduler::Start(); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + // Connect, Move New Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + + test.Printf(_L("Connect, Move New Mail, Disconnect \n")); + ConnectAndMoveNewMailAndDisconnectL(); + CActiveScheduler::Start(); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + // Connect, Copy All Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Copy All Mail, Disconnect \n")); + ConnectAndCopyAllMailAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + testUtils->TestStart(testNo++); + + // Connect, Move All Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect,Move All Mail, Disconnect \n")); + ConnectAndMoveAllMailAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + testUtils->TestStart(testNo++); + + + // connect and then disconnect to update mailbox + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Disconnect \n")); + ConnectAndDisconnectL(); + CleanupStack::PopAndDestroy(); // opActive + + // Connect, Copy Mail Selection and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Copy Mail Selection, Disconnect \n")); + ConnectAndCopyMailSelectionAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + testUtils->TestStart(testNo++); + + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Move Mail Selection, Disconnect \n")); + ConnectAndMoveMailSelectionAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + // Connect, Copy New Mail and Stay Online + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Copy New Mail, Stay Online \n")); + ConnectAndCopyNewMailAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + // Connect, Move New Mail and Stay Online + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Move New Mail, Stay Online \n")); + ConnectAndMoveNewMailAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + + + testUtils->TestStart(testNo++); + // Connect, Copy All Mail and Stay Online + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Copy All Mail, Stay Online \n")); + ConnectAndCopyAllMailAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + testUtils->TestStart(testNo++); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Move All Mail, Stay Online \n")); + ConnectAndMoveAllMailAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + testUtils->TestStart(testNo++); + // connect and then disconnect to update mailbox + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Disconnect \n")); + ConnectAndDisconnectL(); + CleanupStack::PopAndDestroy(); // opActive + + // Connect, Copy Mail Selection and Stay Online + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Copy Msg Selection, Stay Online \n")); + ConnectAndCopyMailSelectionAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Move Msg Selection, Stay Online \n")); + ConnectAndMoveMailSelectionAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + +// +// Test an empty message selection (does not cause a panic!) +// + + testUtils->TestStart(testNo++); + // Connect, Copy All Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Copy Empty Message Selection, Disconnect\n")); + ConnectAndCopyMailSelectionAndDisconnectL(ETrue); + CActiveScheduler::Start(); + + // check that final progress showing the correct information + TPckgBuf progress; + progress.Copy(opActive->iTimer->iOperation->FinalProgress()); + + console->SetPos(0, 11); + console->Printf(_L("Final Progress: ")); + console->SetPos(0, 12); + TBuf<80> progressBuf = Progress(progress().iPop3Progress); + console->Printf(TRefByValue_L(" Super Operation Progress: %S "), &progressBuf); + console->SetPos(0, 13); + progressBuf = Progress(progress().iPop3SubStateProgress); + console->Printf(TRefByValue_L(" Sub Operation Progress : %S "), &progressBuf); + console->SetPos(0, 14); + console->Printf(TRefByValue_L(" Progress: %d/%d %d/%d Total:%d \n"), + progress().iTotalMsgs-progress().iMsgsToProcess, + progress().iTotalMsgs, + progress().iBytesDone, + progress().iTotalBytes, + progress().iTotalSize); + console->SetPos(0, 15); + console->Printf(TRefByValue_L(" Error: %d \n"), progress().iErrorCode); + + // wait 5 seconds so that user can see the final progess! + CTestTimer* timer = CTestTimer::NewL(); + timer->After(5000000); + CActiveScheduler::Start(); + delete timer; + + testUtils->TestFinish(testNo-1); + +// +// Do Cancel Operation Tests +// + + testUtils->WriteComment(_L("Doing Cancel Tests")); + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + testUtils->TestStart(testNo++); + // Connect, Copy New Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 11); + console->Printf(_L(" ")); + console->SetPos(0, 7); + opActive->SetCancelState(TPop3Progress::EPopConnecting); + test.Printf(_L("Connect, Copy New Mail, Disconnect \n")); + ConnectAndCopyNewMailAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + testUtils->TestStart(testNo++); + // Connect, Copy New Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + opActive->SetCancelState(TPop3Progress::EPopRefreshing); + test.Printf(_L("Connect, Copy New Mail, Disconnect \n")); + ConnectAndCopyNewMailAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + testUtils->TestStart(testNo++); + // Connect, Copy New Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + opActive->SetCancelState(TPop3Progress::EPopCopying); + test.Printf(_L("Connect, Copy New Mail, Disconnect \n")); + ConnectAndCopyNewMailAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + DeleteAndCreateServicesL(); + testUtils->iPopClientMtm->SwitchCurrentEntryL(Pop3Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + + + testUtils->TestStart(testNo++); + // Connect, Copy New Mail and then disconnect + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + opActive->SetCancelState(TPop3Progress::EPopDisconnecting); + test.Printf(_L("Connect, Copy New Mail, Disconnect \n")); + ConnectAndCopyNewMailAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(testNo-1); + + testUtils->TestStart(testNo++); + TestCapabilityL(); + testUtils->TestFinish(testNo-1); + if (globalError) + testUtils->TestHarnessFailed(globalError); + else + testUtils->TestHarnessCompleted(); + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + testUtils->Reset(); + Closedown(); + } + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + test.Start(_L("T_POPC Test CImPop3GetMail class")); + theCleanup=CTrapCleanup::New(); + TRAPD(ret,doMainL()); + test(ret==KErrNone); + delete theCleanup; + test.End(); + test.Close(); + __UHEAP_MARKEND; + User::Heap().Check(); + return(KErrNone); + }