messagingappbase/smsmtm/test/src/T_SmsEnum.cpp
changeset 25 84d9eb65b26f
parent 23 238255e8b033
child 27 e4592d119491
child 37 518b245aa84c
child 79 2981cb3aa489
--- a/messagingappbase/smsmtm/test/src/T_SmsEnum.cpp	Fri Apr 16 14:56:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1238 +0,0 @@
-// 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 <smutset.h>
-#include <smscmds.h>
-#include "T_SmsEnum.h"
-#include <txtrich.h>
-#include <csmsaccount.h>
-
-RTest test(_L("T_SmsEnum Testrig"));
-CTrapCleanup* theCleanup;
-
-_LIT(KSmsScript, "smsenum.script");
-
-#if defined (__WINS__)
-_LIT(KPddName,"ECDRV");
-_LIT(KLddName,"ECOMM");
-#else	//__WINS__
-_LIT(KPddSirName,"ESIR");
-_LIT(KPddUartName,"ECUART4");
-_LIT(KLddName,"ECOMM");
-#endif	//__WINS__
-
-_LIT(KMessageData, "This is a simple text message");
-_LIT(KRecipientOk,		"+447973500446");
-
-void CSmsEnumTest::TestCopyFromSimL(TMsvId aFolderId)
-/**
-	Tests copying messages from SIM
- */
-	{
-	iSmsTest.Test().Next(_L("Copy From SIM"));
-	iState = EStateCopyFromSim;
-
-	if (aFolderId == KErrNotFound)
-		MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
-	else
-		MsvEntry().SetEntryL(aFolderId);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-	iSelection->InsertL(0,iSmsTest.iSmsServiceId);
-
-	TPckgBuf<TMsvId> pkg(KMsvGlobalInBoxIndexEntryId);
-
-	delete iOperation;
-	iOperation = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandCopyFromPhoneStore, pkg, iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	}
-
-void CSmsEnumTest::TestMoveFromSimL(TMsvId aFolderId)
-/**
-	Tests moving messages from SIM
- */
-	{
-	iSmsTest.Test().Next(_L("Move From SIM"));
-	iState = EStateMoveFromSim;
-
-	if (aFolderId == KErrNotFound)
-		MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
-	else
-		MsvEntry().SetEntryL(aFolderId);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-	iSelection->InsertL(0,iSmsTest.iSmsServiceId);
-
-	TPckgBuf<TMsvId> pkg(KMsvGlobalInBoxIndexEntryId);
-
-	delete iOperation;
-	iOperation = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandMoveFromPhoneStore, pkg, iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	}
-
-void CSmsEnumTest::TestDeleteFromSimL()
-/**
-	Tests deleting messages from SIM
- */
-	{
-	iSmsTest.Test().Next(_L("Delete From SIM"));
-	iState = EStateDeleteFromSim;
-
-	MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-	iSelection->InsertL(0,iSmsTest.iSmsServiceId);
-
-	delete iOperation;
-	iOperation = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandDeleteFromPhoneStore, TPtrC8(), iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	}
-
-TInt CSmsEnumTest::GetInboxMsgsCountL()
-/**
-	Count messages in Inbox
- */
-	{
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-	return iSelection->Count();
-	}
-
-void CSmsEnumTest::ClearInboxL()
-/**
-	Remove all messages from the Inbox
- */
-	{
-	iState = EStateClearInbox;
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-
-	if (iSelection->Count() > 0)
-		{
-		delete iOperation;
-		iOperation = NULL;
-		iOperation = MsvEntry().DeleteL(*iSelection, iStatus);
-		SetActive();
-		CActiveScheduler::Start();
-		}
-	}
-
-void CSmsEnumTest::SaveClass2FolderIdL(TMsvId aFolderId)
-/**
-	Set the class 2 folder in the service Id
-	so that it will be picked up correctly by SMSS
- */
-	{
-	MsvEntry().SetEntryL(iSmsTest.iSmsServiceId);
-	CSmsSettings *settings=CSmsSettings::NewL();
-	CleanupStack::PushL(settings);
-
-	CSmsAccount* account = CSmsAccount::NewLC();
-	TRAPD(error, account->LoadSettingsL(*settings));
-	if (error)
-		{
-		account->InitialiseDefaultSettingsL(*settings);
-		}
-
-	settings->SetClass2Folder(aFolderId);
-
-	account->SaveSettingsL(*settings);
-	CleanupStack::PopAndDestroy(account);
-	CleanupStack::PopAndDestroy(settings);
-	}
-
-TMsvId CSmsEnumTest::CreateEnumerateFolderLC(TMsvId aParent)
-	{
-	iSmsTest.SetEntryL(aParent);
-
-	TMsvEntry entry;
-	entry.SetVisible(EFalse);
-	entry.iType = KUidMsvFolderEntry;
-	entry.iMtm = KUidMsgTypeSMS;
-	entry.iServiceId = iSmsTest.iSmsServiceId;
-	iSmsTest.CreateEntryL(entry);
-
-	iSmsTest.iMsvSession->CleanupEntryPushL(entry.Id());
-	return entry.Id();
-	}
-
-void CSmsEnumTest::TestCopyToSimL()
-/**
-	Tests copying messages to SIM
- */
-	{
-	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 = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandCopyToPhoneStore, TPtrC8(), iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	}
-
-void CSmsEnumTest::TestMoveToSimL(TMsvId aSourceFolderId)
-/**
-	Tests copying messages to SIM
- */
-	{
-	iSmsTest.Test().Next(_L("Move to SIM"));
-	iState = EStateMoveToSim;
-
-	MsvEntry().SetEntryL(aSourceFolderId);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-	iSelection->InsertL(0,iSmsTest.iSmsServiceId);
-
-	iSmsTest(iSelection->Count());
-
-	delete iOperation;
-	iOperation = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandMoveToPhoneStore, TPtrC8(), iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	}
-
-void CSmsEnumTest::TestEnumerateL(TMsvId aFolderId)
-/**
-	Enumerates
- */
-	{
-	iSmsTest.Test().Next(_L("Enumerate SIM"));
-	iState = EStateEnumerating;
-
-	iSmsTest.Printf(_L("TestEnumerateL(%d)\n"), aFolderId);
-
-	if (aFolderId != KErrNotFound)
-		{
-		iLastEnumerateFolder() = aFolderId;
-		iLastEnumerateFolder.SetLength(4);
-		}
-	else
-		iLastEnumerateFolder.SetLength(0);
-
-	iSelection->Reset();
-	iSelection->AppendL(iSmsTest.iSmsServiceId);
-
-	delete iOperation;
-	iOperation = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandEnumeratePhoneStores, iLastEnumerateFolder, iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	}
-
-void CSmsEnumTest::TestEnumerateAndDescLengthL(TMsvId aFolderId)
-/**
-	Tests both enumeration and changing the default description length.
-*/
-	{
-	iSmsTest.Test().Next(_L("Enumerate SIM and non-default description length"));
-	iState = EStateEnumeratingAndDescLength;
-
-	iSmsTest.Printf(_L("TestEnumerateAndDescLength(%d)\n"), aFolderId);
-
-	if (aFolderId != KErrNotFound)
-		{
-		iLastEnumerateFolder() = aFolderId;
-		iLastEnumerateFolder.SetLength(4);
-		}
-	else
-		iLastEnumerateFolder.SetLength(0);
-
-	// Set the description length - first restore the sms settings
-	iSmsTest.SetEntryL(iSmsTest.iSmsServiceId);
-
-	CSmsAccount* account = CSmsAccount::NewLC();
-	account->LoadSettingsL(*iSmsTest.iServiceSettings);
-
-	// Set the description length to 1
-	iSmsTest.iServiceSettings->SetDescriptionLength(1);
-
-	// Store the sms settings
-	account->SaveSettingsL(*iSmsTest.iServiceSettings);
-	CleanupStack::PopAndDestroy(account);
-
-	iSelection->Reset();
-	iSelection->AppendL(iSmsTest.iSmsServiceId);
-
-	delete iOperation;
-	iOperation = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandEnumeratePhoneStores, iLastEnumerateFolder, iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	}
-
-void CSmsEnumTest::TestEnumerateAndDetailsFieldL()
-	{
-	iSmsTest.Test().Next(_L("Enumerate SIM and test that details field is ok."));
-	iState = EStateEnumeratingAndDetailsField;
-	
-	// First create deliver message in the inbox.
-	TMsvEntry entry;
-	entry.SetVisible(ETrue); 
-	entry.SetInPreparation(ETrue); 
-	entry.iServiceId = iSmsTest.iSmsServiceId; 
-	entry.iType = KUidMsvMessageEntry; 
-	entry.iMtm = KUidMsgTypeSMS; 
-	entry.iDate.HomeTime(); 
-	entry.iSize = 0; 
-	entry.iDescription.Set(KNullDesC); 
-	entry.iDetails.Set(KNullDesC); 
-	entry.SetSendingState(KMsvSendStateNotApplicable); 
-
-	// Create the SMS header object...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *iSmsTest.iRichText);
-	CleanupStack::PushL(header);
-	
-	// Set the body text...
-	iSmsTest.iRichText->Reset();
-	iSmsTest.iRichText->InsertL(0, KMessageData);
-	
-	// Copy the message settings...
-	header->SetSmsSettingsL(*iSmsTest.iServiceSettings); 
-	
-	// Set recipient - need to set directly in the CSmsMessage as this a Deliver PDU
-	header->Message().SetToFromAddressL(KRecipientOk);
-	
-	// Update entry description and details...
-	entry.iDetails.Set(header->Message().ToFromAddress());
-	entry.iDescription.Set(iSmsTest.iRichText->Read(0, iSmsTest.iServiceSettings->DescriptionLength()));
-	entry.SetInPreparation(EFalse);
-	
-	// Create the entry - set context to the global outbox.
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().CreateL(entry);
-
-	// Create new store and save header information 
-	MsvEntry().SetEntryL(entry.Id()); 
-	CMsvStore* store = MsvEntry().EditStoreL(); 
-	CleanupStack::PushL(store); 
-	header->StoreL(*store);
-	store->StoreBodyTextL(*iSmsTest.iRichText);
-	store->CommitL(); 
-	CleanupStack::PopAndDestroy(2, header); 
-	
-	// Move the message to the SIM
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = new (ELeave) CMsvEntrySelection();
-	iSelection->AppendL(iSmsTest.iSmsServiceId);
-	iSelection->AppendL(entry.Id());
-	
-	iSmsTest(iSelection->Count());
-
-	delete iOperation;
-	iOperation = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandMoveToPhoneStore, TPtrC8(), iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	
-	// Enumerate the SIM - first create the folder into which to enumerate
-	TMsvId folder = CreateEnumerateFolderLC(KMsvGlobalInBoxIndexEntryId);
-	
-	iLastEnumerateFolder() = folder;
-	iLastEnumerateFolder.SetLength(4);
-
-	iSelection->Reset();
-	iSelection->AppendL(iSmsTest.iSmsServiceId);
-
-	delete iOperation;
-	iOperation = NULL;
-	iOperation = Session().TransferCommandL(*iSelection, ESmsMtmCommandEnumeratePhoneStores, iLastEnumerateFolder, iStatus);
-	SetActive();
-	CActiveScheduler::Start();
-	
-	// Ok see if things are how it should be...
-	iSmsTest.SetEntryL(folder);
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-	iSmsTest.Test()(iSelection->Count() == 1);
-
-	iSmsTest.SetEntryL(iSelection->At(0));
-	entry = MsvEntry().Entry();
-	iSmsTest.Test()(entry.iDetails.Length() > 0);
-	
-	// Destroy the enumerate folder
-	CleanupStack::PopAndDestroy();	
-	}
-
-void CSmsEnumTest::TestMultipleRecipientEnumerateL()
-	{
-	// Clean the existing messages
-	ClearInboxL();
-	TestEnumerateL();
-	User::LeaveIfError(iStatus.Int());
-	if (iSelection->Count())
-		{
-		TestDeleteFromSimL();
-		User::LeaveIfError(iStatus.Int());
-		}
-	
-	// Copy to SIM
-	TestCopyToSimL();
-	User::LeaveIfError(ErrorStatus());
-	// Count the number of messages to be copied onto SIM,
-	// including multiple msgs for multiple recipients.
-	TInt msgCount = 0;
-	for (TInt index=1; index < (iSelection->Count()); index++)
-		{
-		CSmsHeader* smsHeader = iSmsTest.GetHeaderLC(iSelection->At(index));
-		if (smsHeader->Message().Type() == CSmsPDU::ESmsSubmit)
-			{
-			msgCount += smsHeader->Recipients().Count();
-			}
-		else
-			{
-			++msgCount;
-			}
-		CleanupStack::PopAndDestroy(smsHeader);
-		}
-
-	TestEnumerateL();
-	User::LeaveIfError(iStatus.Int());
-	//Count the number of messages copied onto SIM
-	TInt simMsgCount = iSmsTest.iProgress.iMsgCount;
-
-	// Check msg count on SIM after copy
-	iSmsTest.Printf(_L("Count msgs on SIM: Expected msgs %d, Copied msgs %d\n"), msgCount, simMsgCount);
-	if (msgCount != simMsgCount)
-		{
-		User::LeaveIfError(KErrNotFound);
-		}
-	
-	// Clean local Inbox and copy msgs from sim
-	if (iSelection->Count())
-		{
-		ClearInboxL();
-		TestCopyFromSimL();
-		User::LeaveIfError(ErrorStatus());
-		}
-	msgCount = GetInboxMsgsCountL();
-
-	// Check msg count in local inbox after copy from SIM
-	iSmsTest.Printf(_L("Count msgs in Inbox: Expected msgs %d, Copied msgs %d\n"), simMsgCount, msgCount);
-	if (msgCount != simMsgCount)
-		{
-		User::LeaveIfError(KErrNotFound);
-		}
-
-	}
-
-
-CSmsEnumTest::CSmsEnumTest(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest)
-: CSmsTestBase(aSmsTest, aScriptFile, aNextTest), iState(EStateWaiting)
-	{
-	CActiveScheduler::Add(this);
-	}
-
-LOCAL_C void doMainL()
-	{
-#if defined (__WINS__)
-	User::LoadPhysicalDevice(KPddName);
-	User::LoadLogicalDevice(KLddName);
-#else	//__WINS__
-	User::LoadPhysicalDevice(KPddSirName);
-	User::LoadPhysicalDevice(KPddUartName);
-    User::LoadLogicalDevice(KLddName);
-#endif	//__WINS__
-
-	TInt r = StartC32();
-	if( (r != KErrNone) && (r != KErrAlreadyExists) )
-		test.Printf(_L("Failed to start C32 %d\n"), r);
-
-	CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
-	CleanupStack::PushL(scheduler);
-	CActiveScheduler::Install( scheduler );
-
-	CSmsTestUtils* smsTest = CSmsTestUtils::NewL(test);
-	CleanupStack::PushL(smsTest);
-	TInt nextTest = 0;
-
-	smsTest->NotifySaPhoneOnL();
-
-	CSmsEnumTest* enumTest = CSmsEnumTest::NewLC(*smsTest, KSmsScript, nextTest);
-
-	smsTest->WaitForInitializeL();
-
-	enumTest->StartL();
-
-	//CleanupStack::PopAndDestroy(3); //SmsTest, scheduler
-	CleanupStack::PopAndDestroy(enumTest);
-	CleanupStack::PopAndDestroy(smsTest);
-	CleanupStack::PopAndDestroy(scheduler);
-	}
-
-GLDEF_C TInt E32Main()
-	{	
-	__UHEAP_MARK;
-	test.Start(_L("Setup"));
-	theCleanup = CTrapCleanup::New();
-	TRAPD(ret,doMainL());
-	test.Printf(_L("doMainL completed with %d\n"), ret);
-	test(ret==KErrNone);
-	delete theCleanup;	
-	test.Console()->SetPos(0, 13);
-	test.End();
-	test.Close();
-	__UHEAP_MARKEND;
-	return(KErrNone);
-	}
-
-void CSmsEnumTest::RunAutoL()
-/**
-	Runs tests in sequence, checks iStatus
- */
-	{
-	// Wait 5 seconds for everything to start up
-	User::After(5000000);
-
-	// Initial clean-up
-	iSmsTest.TestStart(++iNextTest, _L("(Cleanup) Enumerate"));
-	TestEnumerateL();
-	User::LeaveIfError(iStatus.Int());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	if (iSelection->Count())
-		{
-		iSmsTest.TestStart(++iNextTest, _L("(Cleanup) Delete from SIM"));
-		TestDeleteFromSimL();
-		User::LeaveIfError(iStatus.Int());
-		iSmsTest.TestFinish(iNextTest, KErrNone);
-		}
-
-	// Actual testing
-	ClearInboxL();
-	iSmsTest.TestStart(++iNextTest, _L("Enumerate - check details field"));
-	TestEnumerateAndDetailsFieldL();
-	User::LeaveIfError(ErrorStatus());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-	ClearInboxL();
-
-	iSmsTest.TestStart(++iNextTest, _L("Copy to SIM"));
-	TestCopyToSimL();
-	User::LeaveIfError(ErrorStatus());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	iSmsTest.TestStart(++iNextTest, _L("Enumerate"));
-	TestEnumerateL();
-	User::LeaveIfError(iStatus.Int());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-//	iSmsTest.TestStart(++iNextTest, _L("Test UnRead Status - all messages un-read after 1st enumerate"));
-//	TestUnreadStatusL();
-//	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	iSmsTest.TestStart(++iNextTest, _L("Enumerate and non-default description length"));
-	TestEnumerateAndDescLengthL();
-	User::LeaveIfError(iStatus.Int());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	iSmsTest.TestStart(++iNextTest, _L("Test Read Status - all messages read after 2nd enumerate"));
-	TestReadStatusL();
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	SaveClass2FolderIdL(iSmsTest.iProgress.iEnumerateFolder);
-	TMsvId class2Folder = iSmsTest.iProgress.iEnumerateFolder;
-	ClearInboxL();
-
-	if (iSelection->Count())
-		{
-		iSmsTest.TestStart(++iNextTest, _L("Move from SIM"));
-		TestMoveFromSimL(class2Folder);
-		User::LeaveIfError(ErrorStatus());
-		iSmsTest.TestFinish(iNextTest, KErrNone);
-		}
-	
-	iSmsTest.TestStart(++iNextTest, _L("Copy to SIM"));
-	TestCopyToSimL();
-	User::LeaveIfError(ErrorStatus());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	iSmsTest.TestStart(++iNextTest, _L("Test SIM store status after copy to SIM"));
-	TestSimStoreStatusL(class2Folder);
-	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(class2Folder);
-		User::LeaveIfError(ErrorStatus());
-		iSmsTest.TestFinish(iNextTest, KErrNone);
-		}
-
-	iSmsTest.TestStart(++iNextTest, _L("Test phone store status after move from SIM"));
-	TestPhoneStoreStatusL(KMsvGlobalInBoxIndexEntryId);
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	iSmsTest.TestStart(++iNextTest, _L("Move to SIM"));
-	TestMoveToSimL(KMsvGlobalInBoxIndexEntryId);
-	User::LeaveIfError(ErrorStatus());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	iSmsTest.TestStart(++iNextTest, _L("Test SIM store status after move to SIM"));
-	TestSimStoreStatusL(class2Folder);
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	iSmsTest.TestStart(++iNextTest, _L("Copy from SIM"));
-	TestCopyFromSimL(class2Folder);
-	User::LeaveIfError(ErrorStatus());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	iSmsTest.TestStart(++iNextTest, _L("Test phone store status after copy from SIM"));
-	TestPhoneStoreStatusL(KMsvGlobalInBoxIndexEntryId);
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	// Copy to SIM, multiple recipients
-	iSmsTest.TestStart(++iNextTest, _L("Copy to SIM, multiple recipients"));
-	TestMultipleRecipientEnumerateL();
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	TestAllEnumerateL();
-	TMsvId folder = CreateEnumerateFolderLC(KMsvGlobalInBoxIndexEntryId);
-	TestAllEnumerateL(folder);
-	TestAllEnumerateL(folder);
-	folder = CreateEnumerateFolderLC(KMsvGlobalInBoxIndexEntryId);
-	TestAllEnumerateL(folder);
-	CleanupStack::PopAndDestroy(2);
-
-	iSmsTest.TestStart(++iNextTest, _L("Enumerate before move"));
-	TestEnumerateL(KErrNotFound);
-	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::TestAllEnumerateL(TMsvId aFolderId)
-	{
-	iSmsTest.TestStart(++iNextTest, _L("Enumerate"));
-	TestEnumerateL(aFolderId);
-	User::LeaveIfError(iStatus.Int());
-	iSmsTest.TestFinish(iNextTest, KErrNone);
-
-	if (iSelection->Count())
-		{
-		iSmsTest.TestStart(++iNextTest, _L("Copy from SIM"));
-		TestCopyFromSimL(aFolderId);
-		User::LeaveIfError(ErrorStatus());
-		iSmsTest.TestFinish(iNextTest, KErrNone);
-		}
-	}
-
-void CSmsEnumTest::ConstructL()
-	{
-	SetTestNameL(KSmsEnumTestName);
-	iSmsTest.SetLogToFile();
-
-	iSelection = new (ELeave) CMsvEntrySelection();
-	iTimer = CTestTimer::NewL();
-
-	User::LeaveIfError(iSocketServ.Connect());
-	TProtocolDesc protoinfo;
-	TProtocolName protocolname(KSmsDatagram);
-	User::LeaveIfError(iSocketServ.FindProtocol(protocolname,protoinfo));
-	User::LeaveIfError(iSocket.Open(iSocketServ,protoinfo.iAddrFamily,protoinfo.iSockType,protoinfo.iProtocol));
-	
-	TSmsAddr smsaddr;
-	smsaddr.SetSmsAddrFamily(ESmsAddrSendOnly);
-	User::LeaveIfError(iSocket.Bind(smsaddr));
-
-	iParaFormat = CParaFormatLayer::NewL();
-	iCharFormat = CCharFormatLayer::NewL();
-	iBody = CRichText::NewL(iParaFormat, iCharFormat);
-	iHeader = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *iBody);
-	}
-
-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()
-	{
-	delete iBody;
-	delete iHeader;
-	delete iParaFormat;
-	delete iCharFormat;
-
-	iSocket.Close();
-	iSocketServ.Close();
-	}
-
-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()
-/**
-	Handles completed async operations
- */
-	{
-	CActiveScheduler::Stop();
-
-	iSmsTest(iStatus.Int() == KErrNone);
-
-	iSmsTest.SetProgressL(*iOperation);
-
-	switch (iState)
-		{
-		case EStateEnumerating:
-			{
-			DoRunEnumerateL();
-			break;
-			}
-		case EStateEnumeratingAndDescLength:
-			{
-			DoRunEnumerateAndDescLengthL();
-			} break;
-		case EStateCopyFromSim:
-		case EStateMoveFromSim:
-		case EStateDeleteFromSim:
-			{
-			DoRunCopyMoveDeleteFromSim();
-			break;
-			}
-		case EStateCopyToSim:
-			{
-			DoRunCopyToSim();
-			break;
-			}
-		case EStateClearInbox:
-			{
-			DoRunClearInbox();
-			break;
-			}
-		default:
-			{
-			break;
-			}
-		}
-
-	delete iOperation;
-	iOperation = NULL;
-	}
-
-TInt CSmsEnumTest::ErrorStatus()
-	{
-	if (iStatus.Int() == KErrNone)
-		return(iSmsTest.iProgress.iError);
-	else
-		return(iStatus.Int());
-	}
-
-void CSmsEnumTest::DoRunClearInbox()
-/**
-	Checks status
- */
-	{
-	TInt err = iStatus.Int();
-	iSmsTest.Printf(_L("Clear Inbox completed with error %d\n"), err);
-	iState = EStateWaiting;
-	}
-
-void CSmsEnumTest::DoRunCopyToSim()
-/**
-	Checks status
- */
-	{
-	iSmsTest.Printf(_L("Copy To SIM completed with error %d\n"), ErrorStatus());
-
-	iState = EStateWaiting;
-
-	if (!iSmsTest.RunAuto())
-		{
-		iSmsTest.Printf(_L("\nPress any key to continue...\n"));
-		iSmsTest.Test().Getch();
-		}
-	}
-
-void CSmsEnumTest::DoRunMoveToSim()
-/**
-	Checks status
- */
-	{
-	iSmsTest.Printf(_L("Move To SIM completed with error %d\n"), ErrorStatus());
-
-	iState = EStateWaiting;
-
-	if (!iSmsTest.RunAuto())
-		{
-		iSmsTest.Printf(_L("\nPress any key to continue...\n"));
-		iSmsTest.Test().Getch();
-		}
-	}
-
-void CSmsEnumTest::DoRunCopyMoveDeleteFromSim()
-/**
-	Checks status
- */
-	{
-	switch (iState)
-		{
-		case EStateCopyFromSim:
-			iSmsTest.Printf(_L("Copy From SIM completed with error %d\n"), ErrorStatus());
-			break;
-		case EStateMoveFromSim:
-			iSmsTest.Printf(_L("Move From SIM completed with error %d\n"), ErrorStatus());
-			break;
-		case EStateDeleteFromSim:
-			iSmsTest.Printf(_L("Delete From SIM completed with error %d\n"), ErrorStatus());
-			break;
-		default:
-			break;
-		}
-
-	iState = EStateWaiting;
-
-	if (!iSmsTest.RunAuto())
-		{
-		iSmsTest.Printf(_L("\nPress any key to continue...\n"));
-		iSmsTest.Test().Getch();
-		}
-	}
-
-void CSmsEnumTest::DoRunEnumerateL()
-/**
-	Checks status
- */
-	{
-	TInt err = iStatus.Int();
-
-	if (err == KErrNone)
-		{
-		err = iSmsTest.iProgress.iError;
-		iStatus = err;
-
-		if (err == KErrNone)
-			{
-			MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
-			delete iSelection;
-			iSelection = NULL;
-			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;
-
-	CheckParentAfterEnumerateL();
-
-	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::DoRunEnumerateAndDescLengthL()
-	{
-	// Print out messages and check that the description is only a char in length
-	TInt err = iStatus.Int();
-
-	if (err == KErrNone)
-		{
-		err = iSmsTest.iProgress.iError;
-		iStatus = err;
-
-		if (err == KErrNone)
-			{
-			MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
-			delete iSelection;
-			iSelection = NULL;
-			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);
-			TInt count = iSelection->Count();
-			
-			for (TInt i = 0; i < count && err==KErrNone; ++i)
-				{
-				// Display the message and then check the description
-				TMsvId id = (*iSelection)[i];
-				iSmsTest.DisplayMessageL(id);
-
-				iSmsTest.SetEntryL(id);
-				if( iSmsTest.Entry().iDescription.Length() != 1 )
-					err = KErrCorrupt;
-				}
-			}
-		}
-
-	iSmsTest.Printf(_L("Enumerate SIM completed with %d\n"), err);
-	iState = EStateWaiting;
-
-	CheckParentAfterEnumerateL();
-
-	delete iOperation;
-	iOperation = NULL;
-
-	if (!iSmsTest.RunAuto())
-		{
-		iSmsTest.Printf(_L("\nPress any key to continue...\n"));
-		iSmsTest.Test().Getch();
-
-		if  (iSmsTest.iProgress.iMsgCount)
-			ShowMenuAfterEnumerateL();
-		}
-
-	// Restore the description length
-	iSmsTest.SetEntryL(iSmsTest.iSmsServiceId);
-
-	CSmsAccount* account = CSmsAccount::NewLC();
-	account->LoadSettingsL(*iSmsTest.iServiceSettings);
-
-	// Set the description length to default
-	iSmsTest.iServiceSettings->SetDescriptionLength(KSmsDescriptionLength);
-
-	// Store the sms settings
-	account->SaveSettingsL(*iSmsTest.iServiceSettings);
-	CleanupStack::PopAndDestroy(account);
-	}
-
-void CSmsEnumTest::CheckParentAfterEnumerateL()
-	{
-	if (iLastEnumerateFolder.Length() == 0)
-		{
-		iSmsTest.SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
-		const TMsvId parent = iSmsTest.Entry().Parent();
-		if (parent != iSmsTest.iSmsServiceId)
-			{
-			iSmsTest.Printf(_L("Parent of enum folder is not the SMS service [parent=%d folder=%d service=%d]\n"),
-				parent, iSmsTest.iProgress.iEnumerateFolder, iSmsTest.iSmsServiceId);
-			User::Leave(KErrGeneral);
-			}
-		}
-	else if (iSmsTest.iProgress.iEnumerateFolder != iLastEnumerateFolder())
-		{
-		iSmsTest.Printf(_L("Folder does not match [folder=%d request=%d]\n"),
-			iSmsTest.iProgress.iEnumerateFolder, iLastEnumerateFolder());
-		User::Leave(KErrGeneral);
-		}
-	}
-
-void CSmsEnumTest::ShowMenuAfterEnumerateL()
-/**
-	Shows menu after enumerating
- */
-	{
-	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()
-/**
-	Cancels the async operation
- */
-	{
-	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()
-/**
-	Tests deleting remote entries 
- */
-	{
-	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
-	}
-
-void CSmsEnumTest::TestUnreadStatusL()
-/**
-	Tests that the unread flag of any messaged on the SIM is propagated
-	to the entries created in the class 2 folder
-
-	These should have the Unread() flag SET after the first enumeration.
- */
-	{
-	iSmsTest.Test().Next(_L("Test Unread Status\n"));
-
-	MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-
-	TInt count = iSelection->Count();
-	TInt status = KErrNone;
-
-	while (count--)
-		{
-		MsvEntry().SetEntryL(iSelection->At(count));
-		if (!MsvEntry().Entry().Unread())
-			{
-			status = KErrCorrupt;
-			break;
-			}
-		}
-
-	iSmsTest.Printf(_L("TestUnreadStatusL() completed with %d\n"), status);
-	User::LeaveIfError(status);
-	}
-
-void CSmsEnumTest::TestReadStatusL()
-/**
-	Tests that the unread flag of any messaged on the SIM is propagated
-	to the entries created in the class 2 folder
-
-	These should have the Unread() flag UNSET after the second enumeration.
- */
-	{
-	iSmsTest.Test().Next(_L("Test Unread Status\n"));
-
-	MsvEntry().SetEntryL(iSmsTest.iProgress.iEnumerateFolder);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-
-	TInt count = iSelection->Count();
-	TInt status = KErrNone;
-
-	while (count--)
-		{
-		MsvEntry().SetEntryL(iSelection->At(count));
-		if (MsvEntry().Entry().Unread())
-			{
-			status = KErrCorrupt;
-			break;
-			}
-		}
-
-	iSmsTest.Printf(_L("TestReadStatusL() completed with %d\n"), status);
-	User::LeaveIfError(status);
-	}
-
-void CSmsEnumTest::TestPhoneStoreStatusL(TMsvId aFolderId)
-/**
-	Tests that the messages in the specified folder have the storage
-	set to ESmsPhoneStorage and have no iSlotArray members.
- */
-	{
-	iSmsTest.Test().Next(_L("Test Phone Store Status\n"));
-
-	MsvEntry().SetEntryL(aFolderId);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-
-	TInt count = iSelection->Count();
-	TInt status = KErrNone;
-
-	while (count--)
-		{
-		MsvEntry().SetEntryL(iSelection->At(count));
-		CMsvStore* store = MsvEntry().ReadStoreL();
-		CleanupStack::PushL(store);
-		iHeader->RestoreL(*store);
-		CSmsMessage& smsmessage = iHeader->Message();
-
-		if ((smsmessage.iSlotArray.Count() > 0) ||
-		    (smsmessage.Storage() != CSmsMessage::ESmsPhoneStorage))
-			{
-			status = KErrCorrupt;
-			}
-
-		CleanupStack::PopAndDestroy(store);
-		}
-
-	iSmsTest.Printf(_L("TestPhoneStoreStatusL() completed with %d\n"), status);
-	User::LeaveIfError(status);
-	}
-
-void CSmsEnumTest::TestSimStoreStatusL(TMsvId aFolderId)
-/**
-	Tests that the messages in the specified folder have the storage
-	set to ESmsSimStorage and have at least 1 iSlotArray member.
- */
-	{
-	iSmsTest.Test().Next(_L("Test Sim Store Status\n"));
-
-	MsvEntry().SetEntryL(aFolderId);
-
-	delete iSelection;
-	iSelection = NULL;
-	iSelection = MsvEntry().ChildrenL();
-
-	TInt count = iSelection->Count();
-	TInt status = KErrNone;
-
-	while (count--)
-		{
-		MsvEntry().SetEntryL(iSelection->At(count));
-		CMsvStore* store = MsvEntry().ReadStoreL();
-		CleanupStack::PushL(store);
-		iHeader->RestoreL(*store);
-		CSmsMessage& smsmessage = iHeader->Message();
-
-		if ((smsmessage.iSlotArray.Count() < 1) ||
-		    (smsmessage.Storage() != CSmsMessage::ESmsSIMStorage))
-			{
-			status = KErrCorrupt;
-			}
-
-		CleanupStack::PopAndDestroy(store);
-		}
-
-	iSmsTest.Printf(_L("TestSimStoreStatusL() completed with %d\n"), status);
-	User::LeaveIfError(status);
-	}