email/pop3andsmtpmtm/clientmtms/test/src/T_imcm04.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_imcm04.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,293 @@
+// 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:
+//
+
+#include "EmailTestUtils.h"
+#include "miutlog.h"
+#include <txtrich.h>
+#include <c32comm.h>
+
+// local variables etc //
+
+_LIT(KImcmTest, "T_IMCM04 - Testing MTM::InvokeAsyncFunctionL()");
+RTest test(KImcmTest);
+
+LOCAL_D TMsvId imap4Service;
+LOCAL_D TMsvId smtpService;
+LOCAL_D TMsvId pop3Service;
+
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D CImLog* log;
+LOCAL_D CEmailTestUtils* testUtils;
+
+LOCAL_D CMsvOperation* msvOperation;
+LOCAL_D CMsvEntrySelection* msvSelection;
+LOCAL_D CConsoleBase* console;
+
+class COperationActive;
+LOCAL_D COperationActive* opActive;
+
+//
+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;
+protected:
+	TestUiTimer(CConsoleBase* aConsole);
+	
+	CConsoleBase*		iConsole;
+	CMsvOperation*		iOperation;
+	};
+
+//
+TestUiTimer* TestUiTimer::NewLC(CConsoleBase* aConsole)
+	{
+	TestUiTimer* self = new(ELeave) TestUiTimer(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+TestUiTimer::TestUiTimer(CConsoleBase* aConsole)
+	: CTimer(1)
+	{
+	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();
+	}
+
+void TestUiTimer::RunL()
+	{
+	IssueRequest();
+	};
+
+//
+
+class COperationActive : public CActive
+	{
+public:
+	COperationActive();
+	~COperationActive();
+	static COperationActive* NewL();
+	void StartL();
+	void SetOperation(CMsvOperation*);
+	
+protected:
+	void DoCancel();
+	void RunL();
+	
+	TestUiTimer* iTimer;
+	};
+
+//
+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()
+	{
+	}
+
+void COperationActive::StartL()
+	{
+	iTimer->IssueRequest();	// Start the connect observation timer
+
+	SetActive();
+	test.Console()->SetPos(0, 17);
+	test.Printf(TRefByValue<const TDesC>_L("Operation TRequestStatus %d"), iStatus);
+	}
+
+void COperationActive::SetOperation(CMsvOperation *aOperation)
+	{
+	iTimer->SetOperation(aOperation);
+	}
+
+void COperationActive::RunL() 
+	{
+	iTimer->Cancel();
+	test.Console()->SetPos(25, 17);
+	test.Printf(_L("                "));
+	test.Console()->SetPos(0, 17);
+	test.Printf(TRefByValue<const TDesC>_L("Operation TRequestStatus %d"), iStatus);
+	CActiveScheduler::Stop();
+	}
+
+//
+
+LOCAL_C void CreateNewPlaintextMessageViaPop3MtmL()
+	{
+	log->AppendComment(_L8("Create new plaintext msg via POP3 MTM"));
+	
+	TMsvPartList partList = (KMsvMessagePartBody | KMsvMessagePartAttachments);
+	TMsvEmailTypeList msvEmailTypeList = 0;
+	
+	TImCreateMessageOptions msgOptions;
+	msgOptions.iMessageType = KUidMsgTypeSMTP;
+	msgOptions.iMsvPartList = partList;
+	msgOptions.iMsvEmailTypeList = msvEmailTypeList;
+	TPckgBuf<TImCreateMessageOptions> options(msgOptions);
+
+	msvSelection->ResizeL(0);
+	msvSelection->AppendL(KMsvGlobalOutBoxIndexEntryId); // destination folder is Global Outbox
+	
+	opActive->iStatus = KRequestPending;
+	msvOperation = testUtils->iPopClientMtm->InvokeAsyncFunctionL(KPOP3MTMCreateNewEmailMessage, *msvSelection, options, opActive->iStatus);
+	opActive->SetOperation(msvOperation);
+	opActive->StartL();	// Start the active object
+	}
+
+//
+
+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->GoServerSideL();
+
+	// Create Services
+	smtpService = testUtils->CreateSmtpServiceL();
+	pop3Service = testUtils->CreatePopServiceL();
+	imap4Service = testUtils->CreateImapServiceL();
+
+	log = CImLog::NewL(_L("c:\\logs\\email\\T_IMCM.log"), EAppend);
+	CleanupStack::PushL(log);
+	log->AppendComment(_L8("**** T_IMCM04 - Testing MTM::InvokeAsyncFunctionL() ****"));
+	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_IMCM04 Tests Complete    **********"));
+	log->AppendComment(_L8(""));
+
+	CleanupStack::PopAndDestroy(3);  //testUtils, log, scheduler
+	}
+
+//
+
+LOCAL_C void doMainL()
+	{
+	InitL();
+	testUtils->FileSession().SetSessionPath(_L("c:\\"));
+
+	// Instantiate the POP3 Client MTM
+	testUtils->GoClientSideL();
+	testUtils->InstantiatePopClientMtmL();
+	msvSelection = new (ELeave) CMsvEntrySelection;
+	CleanupStack::PushL(msvSelection);
+
+	opActive = COperationActive::NewL();
+	CleanupStack::PushL(opActive);
+	console->SetPos(0, 7);
+	test.Printf(_L("Creating new plaintext message via POP3 MTM       \n"));
+	CreateNewPlaintextMessageViaPop3MtmL();
+	CActiveScheduler::Start();
+	testUtils->FindChildrenL(KMsvRootIndexEntryId, EFalse);
+
+	CleanupStack::PopAndDestroy(); //opActive
+	CleanupStack::PopAndDestroy(); //msvSelection
+	testUtils->Reset();
+	Closedown();
+	}
+
+GLDEF_C TInt E32Main()
+	{	
+	__UHEAP_MARK;
+	test.Start(_L("T_IMCM04 - Testing MTM::InvokeAsyncFunctionL()"));
+	theCleanup=CTrapCleanup::New();
+	TRAPD(ret,doMainL());		
+	test(ret==KErrNone);
+	delete theCleanup;	
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	User::Heap().Check();
+	return(KErrNone);
+	}