diff -r 000000000000 -r 8e480a14352b messagingfw/msgtestfw/TestActions/Email/Imap4/src/CMtfDoInvokeAsyncFunctionTestAction.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtestfw/TestActions/Email/Imap4/src/CMtfDoInvokeAsyncFunctionTestAction.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,172 @@ +// Copyright (c) 2004-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: +// + +/** + @file + @internalTechnology +*/ + + +// User include +#include "CMtfDoInvokeAsyncFunctionTestAction.h" +#include "CMtfTestCase.h" +#include "CMtfTestActionParameters.h" +#include "TMtfTestParameterType.h" +#include "MtfTestActionUtilsUser.h" + + +/** + Constructor +*/ +CMtfDoInvokeAsyncFunctionTestAction::CMtfDoInvokeAsyncFunctionTestAction + (CMtfTestCase& aTestCase) + : CMtfTestAction(aTestCase), iOperation(NULL) + { + } + + +/** + DoCancel + Cancels the pending asynchronous operation +*/ +void CMtfDoInvokeAsyncFunctionTestAction::DoCancel() + { + iOperation->Cancel(); + delete iOperation; + iOperation = NULL; + } + + +/** + InvokeAsyncImap4PopulateCommandL + Invokes asynchronous IMAP4-specific operation by calling + CImap4ClientMtm::InvokeAsyncFunctionL() for the IMAP4 command + provided as a input parameter. + @internalTechnology + @param aImap4Mtm Reference to the IMAP4 Mtm + @param aImap4Command IMAP4-specific command + @param aMailSelection Reference to the Mail selection + @param aDownloadLimits The CMtfTestParameter object holding a pointer of full + or partial download limits + @pre None + @post The asynchronous operation for the IMAP4 command is initiated + @leave KErrUnknown If download limits provided is not of type + TImImap4GetMailInfo or TImImap4GetPartialMailInfo +*/ +void CMtfDoInvokeAsyncFunctionTestAction::InvokeAsyncImap4PopulateCommandL + ( + TImap4Cmds aImap4Command, + CMsvEntrySelection& aMailSelection + ) + { + /* Set the status to Request Pending before calling the asynchronous + function. + */ + iStatus = KRequestPending; + + // Obtain input parameter IMAP4 Mtm + CImap4ClientMtm* paramMtm = ObtainParameterReferenceL + (TestCase(),ActionParameters().Parameter(1)); + + + /********************************************************************* + Get the download limits package. The download limits can be of type + TImImap4GetMailInfo or TImImap4GetPartialMailInfo. Hence, + TestCase.ObtainParameter() is called directly to get the reference to + CMtfTestParameter object that stores the type and the address of the + download limits that is set. The download limits object is retrieved + from the CMtfTestParameter object. + **********************************************************************/ + + const CMtfTestParameter& paramDownloadLimits = TestCase().ObtainParameterL + (ActionParameters().Parameter(2)); + + + /************************************************************************* + Check if the download limits is of type Full download or Partial download. + If it is one of the above 2 types, package the download limits object and + pass it to InvokeAsyncFunctionL(). If the type does not match, Leave with + error KErrUnknown. + *************************************************************************/ + + /************************************************************************* + The CMtfTestParameter stores the TImImap4GetMailInfo or + TImImap4GetPartialMailInfo object. To get the object from + CMtfTestParameter, the packaged object needs to be unpacked. This operation + is usually done in the ObtainValueParameterL(), but we need to perform + this operation explicilty as we are retrieving the CMtfTestParameter itself, + insted of the specific type of the parameter stored in CMTfTestParameter. + ***************************************************************************/ + HBufC8* buf=reinterpret_cast(paramDownloadLimits.Parameter()); + + if(paramDownloadLimits.SpecificTypeId() == EMtfTImImap4GetMailInfo) + { + // Get Full download limits + TImImap4GetMailInfo value; + TPckgC unpack(value); + unpack.Set(*buf); + TImImap4GetMailInfo fullDownloadLimits = unpack(); + + // Package of the download limits + TPckgBuf fullPack (fullDownloadLimits); + + // Invokes asynchronous IMAP4-specific operation + iOperation = paramMtm->InvokeAsyncFunctionL(aImap4Command,aMailSelection, + fullPack,iStatus); + } + else if(paramDownloadLimits.SpecificTypeId() == EMtfTImImap4GetPartialMailInfo) + { + // Get Parital download limits + TImImap4GetPartialMailInfo value; + TPckgC unpack(value); + unpack.Set(*buf); + TImImap4GetPartialMailInfo partialDownloadLimits = unpack(); + + // Package of the download limits + TPckgBuf partialPack(partialDownloadLimits); + + // Invokes asynchronous IMAP4-specific operation + iOperation = paramMtm->InvokeAsyncFunctionL( aImap4Command, aMailSelection, + partialPack, iStatus); + } + else + { + // The type of the input parameter does not match + User::Leave(KErrUnknown); + } + + CActiveScheduler::Add(this); + SetActive(); + } + +/** + RunL + Handles the asynchronous request completion event. Informs the completion + of the Test Action to the Test Case. + @internalTechnology + @pre None + @post None + @leave System wide error +*/ +void CMtfDoInvokeAsyncFunctionTestAction::RunL() + { + TInt err = MtfTestActionUtilsUser::FinalProgressStatus(*iOperation,iStatus); + User::LeaveIfError(err); + + delete iOperation; + iOperation = NULL; + + TestCase().ActionCompletedL(*this); + }