diff -r 000000000000 -r 8e480a14352b messagingfw/msgtestfw/TestActions/SendAs/src/CMtfTestActionSendAsCreateAttachment.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtestfw/TestActions/SendAs/src/CMtfTestActionSendAsCreateAttachment.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,175 @@ +// 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] +// SendAsCreateAttachment +// [Action Parameters] +// RSendAsMessage sendAsMessage : Reference of the RSendAsMessage object +// HBufC attachmentFile : The file to be attached as a linked attachment +// HBufC mimeType : MIME type.Default value implies that no MIME type is specified +// [Action Description] +// SendAsCreateAttachment Test Action is intended to create an attachment to the message. +// If the MIME type is provided as an input to the Test Action, the MIME type will be set. +// [APIs Used] +// RSendAsMessage::CreateAttachmentL(RFs& aFs, RFile& aAttachmentFile, const TDesC& aMimeType) +// RSendAsMessage::CreateAttachmentL(RFs& aFs, RFile& aAttachmentFile) +// __ACTION_INFO_END__ +// +// + +/** + @file + @internalTechnology +*/ + + +// User include +#include "sendas2.h" +#include "CMtfTestActionSendAsCreateAttachment.h" +#include "CMtfTestCase.h" +#include "CMtfTestActionParameters.h" + + +/** + NewL() + Constructs a CMtfTestActionSendAsCreateAttachment 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 CMtfTestActionSendAsCreateAttachment + @pre None + @post CMtfTestActionSendAsCreateAttachment object is created +*/ +CMtfTestAction* CMtfTestActionSendAsCreateAttachment:: + NewL(CMtfTestCase& aTestCase,CMtfTestActionParameters* aActionParameters) + { + CMtfTestActionSendAsCreateAttachment* self = + new (ELeave) CMtfTestActionSendAsCreateAttachment(aTestCase); + + CleanupStack::PushL(self); + self->ConstructL(aActionParameters); + CleanupStack::Pop(self); + return self; + } + + +/** + CMtfTestActionSendAsCreateAttachment constructor + Calls the base class' constructor + @internalTechnology + @param aTestCase Test Case to which this Test Action belongs + @pre None + @post None +*/ +CMtfTestActionSendAsCreateAttachment::CMtfTestActionSendAsCreateAttachment(CMtfTestCase& aTestCase) + : CMtfSynchronousTestAction(aTestCase) + { + } + + +/** + Function : ~CMtfTestActionSendAsCreateAttachment + Description : Destructor + @internalTechnology + @param : + @return : + @pre + @post +*/ +CMtfTestActionSendAsCreateAttachment::~CMtfTestActionSendAsCreateAttachment() + { + } + +/** + ExecuteActionL + Obtain the input parameters + 1. sendAsMessage + 2. attachmentFile + 3. mimeType (Default value implies empty string) + Create a File Server session and create a RFile for the attachment File + IF MIME type is specified + Call RSendAsMessage::CreateAttachmentL (RFs& aFs, RFile& aAttachmentFile, const TDesC& aMimeType) providing file session, RFile and the mimeType as input parameters + ELSE + Call RSendAsMessage::CreateAttachmentL (RFs& aFs, RFile& aAttachmentFile) providing file session, RFile as input parameter + END IF + Open the attachmentFile in Read-Only mode + Read the contents of the attachmentFile and write it to the attachment + file using the File handle provided by RSendAsMessage::CreateAttachmentL() function + Close the file handles + Close session with the file server + + @internalTechnology + @pre None + @post None + @leave System wide errors +*/ +void CMtfTestActionSendAsCreateAttachment::ExecuteActionL() + { + if((TestCase().TestStepResult()) == EPass) + { + RSendAsMessage sendAsMessage = ObtainValueParameterL(TestCase(), + ActionParameters().Parameter(0)); + HBufC* attachmentFileName = ObtainParameterReferenceL(TestCase(), + ActionParameters().Parameter(1)); + HBufC* attachmentFile = ObtainParameterReferenceL(TestCase(), + ActionParameters().Parameter(2)); + HBufC8* mimeType = ObtainParameterReferenceL(TestCase(), + ActionParameters().Parameter(3), NULL); + + RFs fs; + TInt err = KErrNone; + if(fs.Connect() == KErrNone) + { + CleanupClosePushL(fs); + + RFile createdAttachment; + if(mimeType == NULL) + { + TRAP(err,sendAsMessage.CreateAttachmentL(*attachmentFileName, createdAttachment)); + } + else + { + TRAP(err,sendAsMessage.CreateAttachmentL(*attachmentFileName, createdAttachment, *mimeType)); + } + CleanupClosePushL(createdAttachment); + + RFile attachFile; + + User::LeaveIfError(attachFile.Open(fs,*attachmentFile,EFileShareReadersOnly)); + CleanupClosePushL(attachFile); + + + TInt fileSize = 0; + User::LeaveIfError(attachFile.Size(fileSize)); + HBufC8* fileContents = HBufC8::NewLC(fileSize); + TPtr8 fileContentsptr = fileContents->Des(); + + User::LeaveIfError(attachFile.Read(fileContentsptr)); + + createdAttachment.Write(0, fileContentsptr); + + TInt fileSize1 = 0; + User::LeaveIfError(createdAttachment.Size(fileSize1)); + CleanupStack::PopAndDestroy(4); // fileContents, attachFile, createdAttachment,fs + } + else + { + TestCase().ERR_PRINTF1(_L("Failed to Connect to the File Server")); + } + + TestCase().INFO_PRINTF2(_L("Test Action %S completed."), &KTestActionSendAsCreateAttachment); + } + TestCase().ActionCompletedL(*this); + }