email/email/pop/src/T_CopyPopSelection.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/email/pop/src/T_CopyPopSelection.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,250 @@
+// Copyright (c) 2006-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:
+// [TestStep Name]
+// CopyPopSelection
+// [Paramaters]
+// PopAccountName				:	Name of the Pop account
+// TargetFolderName				:   Name of the target folder to which the entries need to be copied 				
+// Copies the entries to the target.
+// [APIs Used]
+// CMsvEntry::SetEntryL
+// CMsvEntry::CopyL
+// 
+//
+
+
+
+/**
+ @file
+*/
+
+// User includes
+#include "T_CopyPopSelection.h"
+#include <t_utilscentralrepository.h>
+#include <t_utils.h>
+#include <t_utilsenumconverter.h>
+#include "T_MsgSharedDataPop.h"
+
+
+// Literals Used
+_LIT(KPopAccountName,"PopAccountName");
+_LIT(KTargetFolderName,"TargetFolderName");
+_LIT(KMove, "Move");
+_LIT(KCopyWithinService, "CopyWithinService");
+
+/**
+CT_MsgCopyPopSelection()
+Sets the teststep name to KCopyPopSelection
+
+@param aSharedDataPOP
+Data shared across the POP test steps. Ex. Session
+*/
+CT_MsgCopyPopSelection::CT_MsgCopyPopSelection(CT_MsgSharedDataPop& aSharedDataPOP)
+:	CT_MsgAsyncStepPOP(aSharedDataPOP) 
+,	iOperation(NULL)
+	{
+	SetTestStepName(KCopyPopSelection);
+	}
+
+/**
+NewL()
+Allocates and creates a new CT_MsgCopyPopSelection object
+  
+@param aSharedDataPOP
+Data shared across the POP test steps. Ex. Session
+
+@leave KErrNoMemory
+@return
+Returns pointer to an object of CT_MsgComparePopEmailMsgs
+*/
+CT_MsgCopyPopSelection* CT_MsgCopyPopSelection::NewL(CT_MsgSharedDataPop& aSharedDataPOP)
+	{
+	CT_MsgCopyPopSelection* self = new(ELeave) CT_MsgCopyPopSelection(aSharedDataPOP);
+	CleanupStack::PushL(self);
+	self->ConstructL(); 					 // Call CT_AsyncStep::ConstructL()
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+/**
+~CT_MsgCopyPopSelection()
+Destructor
+*/
+CT_MsgCopyPopSelection::~CT_MsgCopyPopSelection()
+	{
+	delete iOperation;
+	iOperation=NULL;
+	}
+
+
+/**
+ProgressL()
+
+@param
+*/
+void CT_MsgCopyPopSelection::ProgressL(TBool bFinal)
+	{
+	//	TODO
+	if (bFinal)
+		{
+		//	Display final progress iOperation
+		}
+	else
+		{
+		//	Display current progress iOperation
+		}
+	}
+
+
+/**
+CancelStep()
+
+*/
+void CT_MsgCopyPopSelection::CancelStep()
+	{
+	iOperation->Cancel();
+	}
+
+
+/**
+doTestStepL()
+A connection with the POP server is established in the doTestStepPreambleL of the 
+base class. Reads the Pop account name from the ini file. It obtains a selection of
+the entires under POP account given. It copies these entries into the specified target folder.
+ 
+@return
+Returns the test step result
+*/
+TVerdict CT_MsgCopyPopSelection::doTestStepL()
+	{
+	INFO_PRINTF1(_L("TestStep : CopyPopSelection"));
+	// Read the POP account name from the ini file
+	TPtrC popAccountName;
+	if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName))
+		{
+		ERR_PRINTF1(_L("Pop Account Name is not specified"));
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		// Retrieving the Pop service Id for the given Pop account
+		TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName);
+		INFO_PRINTF2(_L("Pop service id is %d"),popServiceId);
+
+		if(popServiceId == KMsvNullIndexEntryId)
+			{
+			ERR_PRINTF1(_L("Invalid POP account name specified"));
+			SetTestStepResult(EFail);
+			}
+		else
+			{
+			TMsvId targetFolderId = KErrNotFound;
+			TBool copyWithinService = EFalse;
+			GetBoolFromConfig(ConfigSection(), KCopyWithinService, copyWithinService);
+
+			if (!copyWithinService)
+				{
+				TPtrC targetFolderName;
+				if(!GetStringFromConfig(ConfigSection(), KTargetFolderName, targetFolderName))
+					{
+					ERR_PRINTF1(_L("Target Folder is not specified"));
+					SetTestStepResult(EFail);
+					}
+				else
+					{
+					// Retrieves the folder Id based on the local folder name read from the ini file
+					targetFolderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(targetFolderName);
+					if(targetFolderId == KErrNotFound)
+						{
+						ERR_PRINTF1(_L("Invalid local folder name specified"));
+						SetTestStepResult(EFail);
+						}
+					}
+				}
+
+			if (copyWithinService || targetFolderId != KErrNotFound)
+				{
+				// Get a selection of the children entries for the Pop account
+				CMsvEntrySelection* selection =  CT_MsgUtils::CreateChildrenSelectionL(iSharedDataPOP.iSession,
+																			popServiceId);
+				CleanupStack::PushL(selection);
+					
+				// Check if there are no entries under the remote folder 
+				TInt count = selection->Count();
+				if (count == 0)
+					{
+					User::Leave(KErrArgument);
+					}
+				// Fetch the Id of the first entry
+				TMsvId entryId = (*selection)[0];
+
+				// Creates a new CMsvEntry for the specified entry ID.
+				CMsvEntry* entry = CMsvEntry::NewL(*iSharedDataPOP.iSession,entryId,TMsvSelectionOrdering());
+				CleanupStack::PushL(entry);
+						
+				// Sets the context to the parent of the specified entry.
+				entry->SetEntryL(entryId);
+				entry->SetEntryL(entry->Entry().Parent());
+
+				TBool isMove = EFalse;
+				if(GetBoolFromConfig(ConfigSection(), KMove, isMove))
+					{
+					INFO_PRINTF1(_L("Is move"));
+					}
+
+				CT_MsgActive&	active=Active();
+
+				if (copyWithinService)
+					{
+					if (isMove)
+						{
+						iOperation = entry->MoveL(*selection,popServiceId, active.iStatus);
+						}
+					else
+						{
+						iOperation = entry->CopyL(*selection,popServiceId, active.iStatus);						
+						}
+					}
+				else
+					{
+					if (isMove)
+						{
+						iOperation = entry->MoveL(*selection,targetFolderId, active.iStatus);
+						}
+					else
+						{
+						iOperation = entry->CopyL(*selection,targetFolderId, active.iStatus);						
+						}
+					}
+
+				active.Activate();
+				CActiveScheduler::Start();
+
+				// Get the error code from TPop3Progress
+				TPop3Progress temp;
+				TPckgC<TPop3Progress> paramPack(temp);
+				paramPack.Set(iOperation->ProgressL());
+				TPop3Progress progress=paramPack();
+				SetTestStepError(progress.iErrorCode);
+
+				delete iOperation;
+				iOperation=NULL;
+				CleanupStack::PopAndDestroy(2,selection); //operation,entry,selection
+				User::LeaveIfError(active.Result());
+				}		
+			}
+		}
+	return TestStepResult();
+	}