diff -r 000000000000 -r 8e480a14352b messagingfw/msgtestfw/TestActions/SendAs/src/CMtfTestActionVerifyRecipients.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtestfw/TestActions/SendAs/src/CMtfTestActionVerifyRecipients.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,263 @@ +// 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: +// __ACTION_INFO_BEGIN__ +// [Action Name] +// VerifyRecipients +// [Action Parameters] +// CMsvEntry paramMsgEntry : Reference to the message entry object +// CMsvStore paramMsgStore : Reference to the message's store object +// TFieldList paramRecipientType : Enumeration specifying the message field type +// (One of the enumeration values: ETo, ECc EBcc. +// Other enumerations are currently not supported) +// HBufC Address1 : String containing Recipient Address +// HBufC Address2 : String containing Recipient Address +// HBufC addressN : String containing Recipient Address +// [Action Description] +// VerifyRecipients Test Action is intended verify the recipient address set for +// the message using SendAs API, by comparing it with the recipient addresses provided +// as input to the Test Action. +// [APIs Used] +// CImHeader::RestoreL () +// CImHeader::ToRecipients () +// CImHeader::CcRecipients () +// CImHeader::BccRecipients () +// CSmsHeader::RestoreL () +// CSmsHeader::Recipients() +// CSmsNumber::Address() +// CIrHeader::RestoreL () +// CBtHeader::RestoreL() +// CObexMtmHeader::Addr () +// __ACTION_INFO_END__ +// +// + +/** + @file + @internalTechnology +*/ + + +// User include +#include "CMtfTestActionVerifyRecipients.h" +#include "CMtfTestCase.h" +#include "CMtfTestActionParameters.h" +#include "CMtfTestActionUtilsMessage.h" + +#include "btmsgtypeuid.h" +#include "irmsgtypeuid.h" + +//Granularity for CArrayFixFlat arrays +const TInt KArrayGranularity = 16; + +/** + NewL() + Constructs a CMtfTestActionVerifyRecipients object. + Uses two phase construction and leaves nothing on the CleanupStack. + @internalTechnology + @param aTestCase Test Case to which this Test Action belongs + @param aActionParameters Action parameters, must not be NULL + @return Created object of type CMtfTestActionVerifyRecipients + @pre None + @post CMtfTestActionVerifyRecipients object is created +*/ +CMtfTestAction* CMtfTestActionVerifyRecipients:: + NewL(CMtfTestCase& aTestCase,CMtfTestActionParameters* aActionParameters) + { + CMtfTestActionVerifyRecipients* self = + new (ELeave) CMtfTestActionVerifyRecipients(aTestCase); + + CleanupStack::PushL(self); + self->ConstructL(aActionParameters); + CleanupStack::Pop(self); + return self; + } + + +/** + CMtfTestActionVerifyRecipients constructor + Calls the base class' constructor + @internalTechnology + @param aTestCase Test Case to which this Test Action belongs + @pre None + @post None +*/ +CMtfTestActionVerifyRecipients::CMtfTestActionVerifyRecipients(CMtfTestCase& aTestCase) + : CMtfSynchronousTestAction(aTestCase) + { + } + +/** + Function : ~CMtfTestActionVerifyRecipients + Description : Destructor + @internalTechnology + @param : + @return : + @pre + @post +*/ +CMtfTestActionVerifyRecipients::~CMtfTestActionVerifyRecipients() + { + } + +/** + ExecuteActionL + Verifies whther the recipient address of a specified type (ETo, ECc EBcc) + is set by comparing the set value(s) with the expected recipient address string(s) + @internalTechnology + @pre None + @post None + @leave System wide errors +*/ +void CMtfTestActionVerifyRecipients::ExecuteActionL() + { + if((TestCase().TestStepResult()) == EPass) + { + TestCase().INFO_PRINTF2(_L("Test Action %S start..."), &KTestActionVerifyRecipients); + + // Get Test Action input parameters + CMsvEntry* paramMsgEntry = ObtainParameterReferenceL(TestCase(), + ActionParameters().Parameter(0)); + + TImHeaderEncodingInfo::TFieldList paramRecipientType = + ObtainValueParameterL(TestCase(), ActionParameters().Parameter(1)); + + if (paramMsgEntry == NULL) + { + TestCase().ERR_PRINTF1(_L("Invalid parameter: Message Entry value is NULL")); + TestCase().SetTestStepResult(EFail); + } + + if((TestCase().TestStepResult()) == EPass) + { + CMsvStore * msvStore = NULL; + + if(paramMsgEntry->HasStoreL()) + { + msvStore = paramMsgEntry->ReadStoreL(); + CleanupStack::PushL(msvStore); + } + + CDesC16ArrayFlat* recipientArray = new (ELeave) CDesC16ArrayFlat(KArrayGranularity); + CleanupStack::PushL(recipientArray); + + // Read the recipient address and alias names from the ini file + TRAPD(result, ObtainRecipientsL(paramMsgEntry , *recipientArray)); + + if (result != KErrNone) + { + TestCase().ERR_PRINTF2(_L("Failure while reading the recipients from ini file: %d"), result); + TestCase().SetTestStepResult(EFail); + } + else + { + // Call function to verify the recipient address for the message + result = VerifyRecipientsL(*paramMsgEntry, *msvStore, paramRecipientType, *recipientArray); + if (result == KErrNone) + { + TestCase().INFO_PRINTF2(_L("Verification of recipient address was successful: %d"), result); + } + else if (result == KErrNotFound) + { + TestCase().ERR_PRINTF1(_L("Recipient address was not found in the message")); + TestCase().SetTestStepResult(EFail); + } + else + { + TestCase().ERR_PRINTF2(_L("Verification of Recipient address failed with error: %d"), result); + TestCase().SetTestStepResult(EFail); + } + } + CleanupStack::PopAndDestroy(recipientArray); + CleanupStack::PopAndDestroy(msvStore); + } + } + + TestCase().INFO_PRINTF2(_L("Test Action %S completed."), &KTestActionVerifyRecipients); + TestCase().ActionCompletedL(*this); + } + + +/** + Reads the recipient address and the alias names from the ini file and formats the + recipient address if the alias type is specified +*/ +void CMtfTestActionVerifyRecipients::ObtainRecipientsL(CMsvEntry* aMsvEntry, CDesC16ArrayFlat& aRecipientArray) + { + TInt numberOfParameters = ActionParameters().Count(); + + for(TInt index = 2; index < numberOfParameters ; index+=2) + { + HBufC* recipientAddr = ObtainParameterReferenceL(TestCase(), + ActionParameters().Parameter(index)); + + HBufC* aliasBuf = ObtainParameterReferenceL(TestCase(), + ActionParameters().Parameter(index+1),NULL); + + // If alias is not provided, then copy the address into the array + // For IR, BT and SMS, ignore the alias type set in the ini file + if((aliasBuf == NULL) || (aMsvEntry->Entry().iMtm != (KUidMsgTypeSMTP))) + { + TPtrC ptr16 = recipientAddr->Des(); + aRecipientArray.AppendL(ptr16); + } + else + { + // For SMTP message, format the recipient address with the alias + if((aMsvEntry->Entry().iMtm) == (KUidMsgTypeSMTP)) + { + // To be done: String formating to include both alias and address + TPtrC ptr16 = recipientAddr->Des(); + _LIT(KFormat,"\"%S\" <%S>"); + TBuf<256> x; + x.Format(KFormat,aliasBuf,recipientAddr); + aRecipientArray.AppendL(x); + } + } + } + } + + +/** + Based on the type of the message, calls the corresponding utility function + to verify the specified type of recipient address +*/ +TInt CMtfTestActionVerifyRecipients::VerifyRecipientsL (CMsvEntry& aMsgEntry, + CMsvStore & aMsgStore, + TImHeaderEncodingInfo::TFieldList recipientType, + CDesC16Array& aRecipientArray) + { + TInt returnValue = KErrNone; + TUid msgMtmType = aMsgEntry.Entry().iMtm; + + if( (msgMtmType == KUidMsgTypeIMAP4) || (msgMtmType == KUidMsgTypePOP3) || (msgMtmType == KUidMsgTypeSMTP) ) + { + returnValue = CMtfTestActionUtilsMessage::VerifyEmailRecipientsL(aMsgStore, aRecipientArray,recipientType); + } + else if((msgMtmType == KUidMsgTypeBt) || (msgMtmType == KUidMsgTypeIrUID)) + { + returnValue = CMtfTestActionUtilsMessage::VerifyObexRecipientL(aMsgEntry, aMsgStore, aRecipientArray); + } + else if (msgMtmType == KUidMsgTypeSMS) + { + returnValue = CMtfTestActionUtilsMessage::VerifySmsRecipientsL(aMsgStore,aRecipientArray); + } + else + { + returnValue = KErrUnknown; + } + + return returnValue; + } + +