common/tools/ats/smoketest/email/email/smtp/src/T_SmtpCreateNewMessageWithPlainBodyText.cpp
changeset 719 d5603c08781b
child 872 17498133d9ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/email/email/smtp/src/T_SmtpCreateNewMessageWithPlainBodyText.cpp	Fri Oct 30 09:36:23 2009 +0000
@@ -0,0 +1,313 @@
+// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// @file 
+// [TestStep Name]
+// SmtpCreateNewMessageWithPlainBodyText
+// [Paramaters]
+// Subject			:	Subject line of the message.
+// FolderName		:	Destination local folder where message is to be created.
+// RecipientsAddress:	Recepient's address.
+// EmailFileName	:	Plain text file name from which body text part would be populated. 
+// Creates a new message entry with plain body text. For creating the message entry it uses
+// CImEmailOperation::CreateNewL() static metod. After creating the message  entry
+// it populates the body part with the contents of a plain text file.
+// [APIs Used]
+// CImPlainBodyText::CommitL
+// CImPlainBodyText::StoreChunkL
+// CImEmailOperation::CreateNewL
+// CImEmailMessage::OpenPlainBodyTextForWriteL
+// 
+//
+
+
+
+// User includes 
+#include "t_smtpcreatenewmessagewithplainbodytext.h"
+#include <t_utilscentralrepository.h>
+#include <t_utilsenumconverter.h>
+#include <t_utils.h>
+
+// Epoc includes 
+#include <miutmsg.h>
+#include <cimplainbodytext.h>
+
+// Literals Used 
+_LIT(KSubject, "Subject");
+_LIT(KFolderName, "FolderName");
+_LIT(KEmailFileName, "EmailFileName");
+_LIT(KRecipientsAddress, "RecipientsAddress");
+
+const TInt KChunkSize = 1024;
+
+/**
+  Function 		: CT_SmtpCreateNewMessageWithPlainBodyText
+  Description 	: Constructor
+  @param 		: aSharedDataSMTP		Reference to CT_MsgSharedDataSmtp
+  @return 		: N/A
+*/
+CT_SmtpCreateNewMessageWithPlainBodyText::CT_SmtpCreateNewMessageWithPlainBodyText(CT_MsgSharedDataSmtp& aSharedDataSMTP)
+:	CT_MsgAsyncStepSMTP(aSharedDataSMTP)
+,	iOperation(NULL)
+	{
+	SetTestStepName(KSmtpCreateNewMessageWithPlainBodyText);
+	}
+
+
+/**
+  Function 		: NewL
+  Description 	: Creates an object of CT_SmtpCreateNewMessageWithPlainBodyText 				 
+  @return 		: N/A
+*/
+CT_SmtpCreateNewMessageWithPlainBodyText* CT_SmtpCreateNewMessageWithPlainBodyText::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP)
+	{
+	CT_SmtpCreateNewMessageWithPlainBodyText* self = new(ELeave) CT_SmtpCreateNewMessageWithPlainBodyText(aSharedDataSMTP);
+	CleanupStack::PushL(self);
+	self->ConstructL(); 					 
+	CleanupStack::Pop(self);
+	return self;
+	}	
+
+	
+/**
+  Function 		: ~CT_SmtpCreateNewMessageWithPlainBodyText
+  Description 	: Destructor
+  @return 		: N/A
+*/
+CT_SmtpCreateNewMessageWithPlainBodyText::~CT_SmtpCreateNewMessageWithPlainBodyText()
+	{
+	delete iRecipientAddress;
+	delete iOperation;
+	}
+
+/**
+  Function 		: ProgressL
+  Description 	: Displays the status of the asynchronous operation
+  @return 		: N/A
+*/
+void CT_SmtpCreateNewMessageWithPlainBodyText::ProgressL(TBool /*bFinal*/)
+	{}
+
+
+/**
+  Function 		: CancelStep
+  Description 	: Cancels the asynchronous operation
+  @return 		: N/A
+*/
+void CT_SmtpCreateNewMessageWithPlainBodyText::CancelStep()
+	{
+	iOperation->Cancel();
+	}
+
+
+/**
+  Function 		: doTestStepL
+  Description 	: Reads the SMTP account name, folder names, download limts and the command name from 
+				  the ini file. A selection of the entries uner the remote folder is obtained and passed to 
+				  InvokeAsyncFunctionL based on the command.
+  @return 		: TVerdict - Test step result
+*/
+TVerdict CT_SmtpCreateNewMessageWithPlainBodyText::doTestStepL()
+	{
+	INFO_PRINTF1(_L("TestStep: SmtpCreateNewMessageWithPlainBodyText"));
+
+	// Read the name of the target folder from the ini file
+	TPtrC folderName;
+	if(!GetStringFromConfig( ConfigSection(), KFolderName, folderName))
+		{
+		ERR_PRINTF1(_L("Folder name is not specified"));
+		SetTestStepResult(EFail);
+		}
+
+	TMsvId folderId;
+	// Get the Id of the local folder
+	folderId= CT_MsgUtilsEnumConverter::FindFolderIdByName(folderName);
+	iSharedDataSMTP.iMtm->SwitchCurrentEntryL(folderId);
+	TImCreateMessageOptions createMessageOptions;
+	createMessageOptions.iMsvPartList = KMsvMessagePartBody;
+	createMessageOptions.iMessageType = KUidMsgTypeSMTP;
+	
+	TPckgBuf<TImCreateMessageOptions> paramPack(createMessageOptions);
+	
+	CT_MsgActive&	active=Active();
+	delete iOperation;
+	iOperation = NULL;
+	TRAPD(err2, iOperation = CImEmailOperation::CreateNewL(active.iStatus, *iSharedDataSMTP.iSession, folderId,KMsvNullIndexEntryId, paramPack().iMsvPartList, paramPack().iMsvEmailTypeList, paramPack().iMessageType, CActive::EPriorityStandard, ETrue));
+	active.Activate();
+	CActiveScheduler::Start();
+
+	SetHeaderPartL();
+	PopulateBodyPartL();
+	User::LeaveIfError(active.Result());
+	INFO_PRINTF2(_L("err2 : %d"), err2);
+	return TestStepResult();
+	}
+		
+
+/**
+  Function 		: PopulateBodyPartL
+  Description 	: Populates body part with the contents of a plain text file.
+  @return 		: N/A
+*/
+void CT_SmtpCreateNewMessageWithPlainBodyText::PopulateBodyPartL()
+	{
+	//Get the message ID from the CMsvOperation object
+	TMsvId temp;	
+	TPckgC<TMsvId> paramPack(temp);
+	const TDesC8& progBuf = iOperation->ProgressL();	
+	paramPack.Set(progBuf);
+	TMsvId newMessageId = paramPack();	
+	if (newMessageId!=NULL)
+		{
+		CMsvEntry *entry = CMsvEntry::NewL(*(iSharedDataSMTP.iSession), newMessageId, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue));
+		CleanupStack::PushL(entry);
+		entry->SetEntryL(newMessageId);
+		CImEmailMessage *emailMessage = CImEmailMessage::NewLC(*entry);
+		CImPlainBodyText* bodytext = emailMessage->OpenPlainBodyTextForWriteL();
+		CleanupStack::PushL(bodytext);
+		
+
+		TPtrC emailFileName;	
+		// Read the name of the email file from the ini
+		if(!GetStringFromConfig(ConfigSection(),KEmailFileName,emailFileName))
+			{
+			ERR_PRINTF1(_L("Email file name not specified"));
+			SetTestStepResult(EFail);
+			}
+		else
+			{
+			RFs	fs;
+			User::LeaveIfError(fs.Connect());
+			CleanupClosePushL(fs);
+
+			RFile	file;
+			User::LeaveIfError(file.Open(fs,emailFileName,EFileRead));
+			CleanupClosePushL(file);
+
+
+			TBuf8<KChunkSize> line;
+			TBuf8<1> aChar;				// To read one character from the file
+			TBool finished = FALSE;
+
+			// Read text from the file
+			do
+				{
+				line.FillZ();
+				line.SetLength(0);
+				// Read one line from email file
+				do 
+					{
+					file.Read(aChar, 1);
+					if(aChar.Length())
+						{
+						line.Append(aChar);
+						}
+					else
+						{
+						finished = TRUE;
+						}
+					}while(aChar.Length() && aChar[0] != 0x0A);
+				if(!line.Length())
+					{
+					break;
+					}
+				CT_MsgActive& active=Active();				
+				bodytext->StoreChunkL(line,active.iStatus);
+				active.Activate();
+				CActiveScheduler::Start();			
+				}while(!finished);
+				
+			CT_MsgActive& active=Active();	
+			bodytext->CommitL(active.iStatus);
+			active.Activate();
+			CActiveScheduler::Start();			
+			
+			CleanupStack::PopAndDestroy(2); // delete file,fs
+			}
+		CleanupStack::PopAndDestroy(3, entry); // delete bodytext,emailMessage,entry
+		}
+	}
+
+
+/**
+  Function 		: GetDefaultAddressL
+  Description 	: Retrieve the default email address from the default SMTP service.
+  @return 		: N/A
+*/
+void CT_SmtpCreateNewMessageWithPlainBodyText::GetDefaultAddressL()
+	{
+	CImSmtpSettings* settings = new(ELeave) CImSmtpSettings();
+	CleanupStack::PushL(settings);
+
+	CEmailAccounts* accounts = CEmailAccounts::NewLC();
+	TSmtpAccount smtpAccount;
+	smtpAccount.iSmtpService = KMsvNullIndexEntryId;
+	accounts->DefaultSmtpAccountL(smtpAccount);
+	accounts->LoadSmtpSettingsL(smtpAccount, *settings);
+	CleanupStack::PopAndDestroy(accounts);								// accounts
+	iRecipientAddress = settings->EmailAddress().AllocL();
+	INFO_PRINTF2(_L("Default Email Address is %s"),iRecipientAddress->Ptr());
+	CleanupStack::PopAndDestroy(settings);								// settings
+	}
+	
+	
+/**
+  Function 		: SetHeaderPartL
+  Description 	: Sets the message header fields. If the field values are not provided
+  				  as input, it takes the default values.
+  @return 		: N/A  				  
+*/
+void CT_SmtpCreateNewMessageWithPlainBodyText::SetHeaderPartL()
+	{
+	//check progress
+	TMsvId temp;	
+	TPckgC<TMsvId> paramPack(temp);
+	const TDesC8& progBuf = iOperation->ProgressL();	
+	paramPack.Set(progBuf);
+	TMsvId newMessageId = paramPack();	
+	if (newMessageId!=NULL)
+		{
+		CMsvEntry *entry = CMsvEntry::NewL(*(iSharedDataSMTP.iSession), newMessageId, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue));
+		CleanupStack::PushL(entry);
+		entry->SetEntryL(newMessageId);			// 
+		CMsvStore* store = entry->EditStoreL();
+		CleanupStack::PushL(store);
+		
+		CImHeader* header = CImHeader::NewLC(); 
+		header->RestoreL(*store); // Retrieves the email message header part from the message store
+		TPtrC subject;
+		if(GetStringFromConfig(ConfigSection(), KSubject, subject))
+			{
+			header->SetSubjectL(subject);
+			}
+		TPtrC recipientsAddress;	
+		if(GetStringFromConfig(ConfigSection(), KRecipientsAddress, recipientsAddress))
+			{
+			header->ToRecipients().AppendL(recipientsAddress);
+			}
+		else
+			{
+			GetDefaultAddressL();
+			header->ToRecipients().AppendL(*iRecipientAddress);
+			}
+		header->StoreL(*store);
+		store->CommitL();				// Saves the modifications to message store
+		TMsvEntry indexEntry = entry->Entry();
+		indexEntry.iDescription.Set(header->Subject());
+		INFO_PRINTF2(_L("Subject field created message : %S"), &(indexEntry.iDescription));
+		indexEntry.SetVisible(ETrue);
+		entry->ChangeL(indexEntry);			// Modify the corresponding index entry permanently
+
+		CleanupStack::PopAndDestroy(3,entry);				// 	header, store, 	entry
+		}
+	}