messagingfw/msgtest/integration/sms/src/T_SmsEnum.cpp
changeset 0 8e480a14352b
child 58 6c34d0baa0b1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/integration/sms/src/T_SmsEnum.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,422 @@
+// Copyright (c) 1999-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:
+//
+
+#include <e32test.h>
+#include <e32uid.h>
+#include <e32std.h>
+#include <smuthdr.h>
+#include <smscmds.h>
+#include "T_SmsEnum.h"
+#include <txtrich.h>
+
+void CSmsEnumTest::TestCopyFromSimL()
+	{
+	iSmsTest.Test().Next(_L("Copy From SIM"));
+	iState = EStateCopyFromSim;
+
+	MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
+
+	delete iSelection;
+	iSelection = MsvEntry().ChildrenL();
+	iSelection->InsertL(0,iSmsTest.iSmsServiceId);
+
+	TPckgBuf<TMsvId> pkg(KMsvGlobalInBoxIndexEntryId);
+
+	delete iOperation;
+	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandCopyFromPhoneStore, pkg, iStatus);
+	SetActive();
+	CActiveScheduler::Start();
+	}
+
+void CSmsEnumTest::TestMoveFromSimL()
+	{
+	iSmsTest.Test().Next(_L("Move From SIM"));
+	iState = EStateMoveFromSim;
+
+	MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
+
+	delete iSelection;
+	iSelection = MsvEntry().ChildrenL();
+	iSelection->InsertL(0,iSmsTest.iSmsServiceId);
+
+	TPckgBuf<TMsvId> pkg(KMsvGlobalInBoxIndexEntryId);
+
+	delete iOperation;
+	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandMoveFromPhoneStore, pkg, iStatus);
+	SetActive();
+	CActiveScheduler::Start();
+	}
+
+void CSmsEnumTest::TestDeleteFromSimL()
+	{
+	iSmsTest.Test().Next(_L("Delete From SIM"));
+	iState = EStateDeleteFromSim;
+
+	MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
+
+	delete iSelection;
+	iSelection = MsvEntry().ChildrenL();
+	iSelection->InsertL(0,iSmsTest.iSmsServiceId);
+
+	delete iOperation;
+	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandDeleteFromPhoneStore, TPtrC8(), iStatus);
+	SetActive();
+	CActiveScheduler::Start();
+	}
+
+void CSmsEnumTest::TestCopyToSimL()
+	{
+	iSmsTest.Test().Next(_L("Copy to SIM"));
+	iState = EStateCopyToSim;
+
+	iSelection->Reset();
+
+	TTime now;
+	now.HomeTime();
+	iSelection->Reset();
+	iSmsTest.ReadScriptL(iScriptFile, KMsvGlobalOutBoxIndexEntryId, *iSelection, now);
+	iSelection->InsertL(0,iSmsTest.iSmsServiceId);
+
+	iSmsTest(iSelection->Count());
+
+	delete iOperation;
+	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandCopyToPhoneStore, TPtrC8(), iStatus);
+	SetActive();
+	CActiveScheduler::Start();
+	}
+
+void CSmsEnumTest::TestEnumerateL()
+	{
+	iSmsTest.Test().Next(_L("Enumerate SIM"));
+	iState = EStateEnumerating;
+
+	iSelection->Reset();
+	iSelection->AppendL(iSmsTest.iSmsServiceId);
+
+	delete iOperation;
+	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandEnumeratePhoneStores, TPtrC8(), iStatus);
+	SetActive();
+	CActiveScheduler::Start();
+	}
+
+CSmsEnumTest::CSmsEnumTest(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest)
+: CSmsTestBase(aSmsTest, aScriptFile, aNextTest), iState(EStateWaiting)
+	{
+	}
+
+void CSmsEnumTest::RunAutoL()
+	{
+	iSmsTest.TestStart(++iNextTest, _L("Copy to SIM"));
+	TestCopyToSimL();
+	User::LeaveIfError(iStatus.Int());
+	iSmsTest.TestFinish(iNextTest, KErrNone);
+
+	iSmsTest.TestStart(++iNextTest, _L("Enumerate"));
+	TestEnumerateL();
+	User::LeaveIfError(iStatus.Int());
+	iSmsTest.TestFinish(iNextTest, KErrNone);
+
+	if (iSelection->Count())
+		{
+		iSmsTest.TestStart(++iNextTest, _L("Delete Remote Entries"));
+		TestDeleteRemoteEntryL();
+		User::LeaveIfError(iStatus.Int());
+		iSmsTest.TestFinish(iNextTest, KErrNone);
+		}
+
+	iSmsTest.TestStart(++iNextTest, _L("Enumerate"));
+	TestEnumerateL();
+	User::LeaveIfError(iStatus.Int());
+	iSmsTest.TestFinish(iNextTest, KErrNone);
+
+	if (iSelection->Count())
+		{
+		iSmsTest.TestStart(++iNextTest, _L("Move from SIM"));
+		TestCopyFromSimL();
+		User::LeaveIfError(iStatus.Int());
+		iSmsTest.TestFinish(iNextTest, KErrNone);
+		}
+
+	iSmsTest.TestStart(++iNextTest, _L("Enumerate"));
+	TestEnumerateL();
+	User::LeaveIfError(iStatus.Int());
+	iSmsTest.TestFinish(iNextTest, KErrNone);
+
+	if (iSelection->Count())
+		{
+		iSmsTest.TestStart(++iNextTest, _L("Move from SIM"));
+		TestMoveFromSimL();
+		User::LeaveIfError(iStatus.Int());
+		iSmsTest.TestFinish(iNextTest, KErrNone);
+		}
+	}
+
+void CSmsEnumTest::ConstructL()
+	{
+	SetTestNameL(KSmsEnumTestName);
+	iSmsTest.SetLogToFile();
+
+	iSelection = new (ELeave) CMsvEntrySelection();
+	iTimer = CTestTimer::NewL();
+	CActiveScheduler::Add(this);
+	}
+
+void CSmsEnumTest::ShowMenuL()
+	{
+	iSmsTest.ResetMenu();
+
+	iSmsTest.AppendToMenuL(_L("Enumerate SIM"));
+	iSmsTest.AppendToMenuL(_L("Copy To SIM"));
+	iSmsTest.AppendToMenuL(_L("Display Log"));
+	iSmsTest.AppendToMenuL(_L("Clear Log"));
+
+	TInt result = iSmsTest.DisplayMenu(_L("SMS Enumerate Sim Test"));
+
+	if (result <= 0)
+		return;
+
+	switch (result)
+		{
+		case 1:
+			TestEnumerateL();
+			break;
+		case 2:
+			TestCopyToSimL();
+			break;
+		case 3:
+			DisplayLogL();
+			break;
+		case 4:
+			ClearLogL();
+			break;
+		default:
+			User::Leave(KErrArgument);
+			break;
+		}
+
+	ShowMenuL();
+	}
+
+CSmsEnumTest::~CSmsEnumTest()
+	{
+	}
+
+CSmsEnumTest* CSmsEnumTest::NewLC(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest)
+	{
+	CSmsEnumTest* self = new (ELeave) CSmsEnumTest(aSmsTest, aScriptFile, aNextTest);
+	CleanupStack::PushL(self);
+
+	self->ConstructL();
+	return self;
+	}
+
+void CSmsEnumTest::RunL()
+	{
+	CActiveScheduler::Stop();
+
+	iSmsTest(iStatus.Int() == KErrNone);
+
+	iSmsTest.SetProgressL(*iOperation);
+
+	switch (iState)
+		{
+		case EStateEnumerating:
+			{
+			DoRunEnumerateL();
+			break;
+			}
+		case EStateCopyFromSim:
+		case EStateMoveFromSim:
+		case EStateDeleteFromSim:
+			{
+			DoRunCopyMoveDeleteFromSimL();
+			break;
+			}
+		case EStateCopyToSim:
+			{
+			DoRunCopyToSimL();
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+
+	delete iOperation;
+	iOperation = NULL;
+	}
+
+void CSmsEnumTest::DoRunCopyToSimL()
+	{
+	TInt err = iStatus.Int();
+
+	if (err == KErrNone)
+		{
+		err = iSmsTest.iProgress.iError;
+		}
+
+	iSmsTest.Printf(_L("Copy To SIM completed with error %d\n"), err);
+
+	iState = EStateWaiting;
+
+	if (!iSmsTest.RunAuto())
+		{
+		iSmsTest.Printf(_L("\nPress any key to continue...\n"));
+		iSmsTest.Test().Getch();
+		}
+	}
+
+void CSmsEnumTest::DoRunCopyMoveDeleteFromSimL()
+	{
+	TInt err = iStatus.Int();
+
+	if (err == KErrNone)
+		{
+		err = iSmsTest.iProgress.iError;
+		}
+
+	switch (iState)
+		{
+		case EStateCopyFromSim:
+			iSmsTest.Printf(_L("Copy From SIM completed with error %d\n"), err);
+			break;
+		case EStateMoveFromSim:
+			iSmsTest.Printf(_L("Move From SIM completed with error %d\n"), err);
+			break;
+		case EStateDeleteFromSim:
+			iSmsTest.Printf(_L("Delete From SIM completed with error %d\n"), err);
+			break;
+		default:
+			break;
+		}
+
+	iState = EStateWaiting;
+
+	if (!iSmsTest.RunAuto())
+		{
+		iSmsTest.Printf(_L("\nPress any key to continue...\n"));
+		iSmsTest.Test().Getch();
+		}
+	}
+
+void CSmsEnumTest::DoRunEnumerateL()
+	{
+	TInt err = iStatus.Int();
+
+	if (err == KErrNone)
+		{
+		err = iSmsTest.iProgress.iError;
+		iStatus = err;
+
+		if (err == KErrNone)
+			{
+			MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
+			delete iSelection;
+			iSelection = MsvEntry().ChildrenL();
+
+			iSmsTest.Printf(_L("%d message(s) on SIM. %d message(s) now contained in folder %d.\n"), iSmsTest.iProgress.iMsgCount, iSelection->Count(), iSmsTest.iProgress.iEnumerateFolder);
+			iSmsTest.DisplayMessagesL(*iSelection);
+			}
+		}
+
+	iSmsTest.Printf(_L("Enumerate SIM completed with %d\n"), err);
+	iState = EStateWaiting;
+
+	delete iOperation;
+	iOperation = NULL;
+
+	if (!iSmsTest.RunAuto())
+		{
+		iSmsTest.Printf(_L("\nPress any key to continue...\n"));
+		iSmsTest.Test().Getch();
+
+		if  (iSmsTest.iProgress.iMsgCount)
+			ShowMenuAfterEnumerateL();
+		}
+	}
+
+void CSmsEnumTest::ShowMenuAfterEnumerateL()
+	{
+	iSmsTest.ResetMenu();
+
+	iSmsTest.AppendToMenuL(_L("Copy From Sim To Inbox"));
+	iSmsTest.AppendToMenuL(_L("Move From Sim To Inbox"));
+	iSmsTest.AppendToMenuL(_L("Delete From Sim"));
+
+	TInt result = iSmsTest.DisplayMenu(_L("What to do with enumerated messages?"));
+
+	if (result <= 0)
+		return;
+
+	switch (result)
+		{
+		case 1:
+			TestCopyFromSimL();
+			break;
+		case 2:
+			TestMoveFromSimL();
+			break;
+		case 3:
+			TestDeleteFromSimL();
+			break;
+		default:
+			User::Leave(KErrArgument);
+			break;
+		}
+	}
+
+void CSmsEnumTest::DoCancel()
+	{
+	if (iOperation)
+		{
+		iOperation->Cancel();
+		iSmsTest.Printf(_L("Operation Cancelled!\n"));
+		}
+	else
+		{
+		iSmsTest.Printf(_L("No operation to cancel!\n"));
+		}
+
+	delete iOperation;
+	iOperation = NULL;
+	}
+
+void CSmsEnumTest::TestDeleteRemoteEntryL()
+	{
+	iSmsTest.Test().Next(_L("Test Delete Remote Entry\n"));
+
+	CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+	wait->Start();
+
+	iSmsTest.SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
+	iSmsTest.SetEntryL(iSmsTest.Entry().Parent());
+
+	CMsvOperation* op = iSmsTest.iMsvEntry->DeleteL(iSmsTest.iProgress.iEnumerateFolder, wait->iStatus);
+	CleanupStack::PushL(op);
+
+	CActiveScheduler::Start();
+
+	iSmsTest.Printf(_L("Remote DeleteL() completed with %d\n"), wait->iStatus.Int());
+
+	User::LeaveIfError(wait->iStatus.Int());
+
+	iSmsTest.SetProgressL(*op);
+
+	iSmsTest.Printf(_L("Operation completed with %d, msg count %d\n"), iSmsTest.iProgress.iError, iSmsTest.iProgress.iMsgCount);
+	User::LeaveIfError(iSmsTest.iProgress.iError);
+
+	CleanupStack::PopAndDestroy(2); //wait, op
+	}