messagingappbase/smsmtm/test/src/t_smsdeliver.cpp
changeset 25 84d9eb65b26f
parent 23 238255e8b033
child 27 e4592d119491
child 37 518b245aa84c
child 79 2981cb3aa489
--- a/messagingappbase/smsmtm/test/src/t_smsdeliver.cpp	Fri Apr 16 14:56:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2380 +0,0 @@
-// Copyright (c) 2003-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 "t_smsdeliver.h"
-
-#include <e32test.h>
-#include <smutset.h>
-#include <smuthdr.h>
-#include <txtrich.h>
-#include <smstestutils.h>
-#include <msvuids.h>
-#include <smsuaddr.h>
-#include <csmsaccount.h>
-
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS  
-#include <tmsvsmsentry.h>
-#endif
-
-_LIT(KFailed,"Failed to complete tests.");
-_LIT(KRecipientOk,		"+447747065438");  // has to be valid number and switched on
-_LIT(KRecipientBad,		"+442071541467");
-_LIT(KRecipientFail,	"+34933753717");
-_LIT(KMessageData, "This is a simple text message");
-_LIT(KTestDeliverOneRecipientOk,		"Single recipient, deliver ok");
-_LIT(KTestDeliverOneRecipientFail, 		"Single recipient, deliver fail");
-_LIT(KTestDeliverMultiRecipientsOk_1,	"Multi (2) recipients, deliver ok"); 
-_LIT(KTestDeliverMultiRecipientsOk_2,	"Multi (2) recipients, deliver ok, but 1 fails to send");
-_LIT(KTestDeliverMultiRecipientsOk_3,	"Multi (3) recipients, deliver ok, but 1 fails to send");
-_LIT(KTestDeliverNoMatching,			"Single recipient, no matching");
-_LIT(KTestDeliverNoStatusReports,		"Single recipient, no status reports");
-_LIT(KTestDeliverNotSent,				"Single recipient, not sent");
-_LIT(KTestDeliverMultiRecipientsFail_1,	"Multi (2) recipients, deliver failure");
-_LIT(KTestDeliverMultiRecipientsMixed_1,"Multi (2) recipients, 1 deliver ok, 1 deliver failure");
-_LIT(KTestDeliverMultiRecipientsMixed_2,"Multi (2) recipients, 2 deliver failures");
-
-#if defined (__WINS__)
-_LIT(KPddName,"ECDRV");
-_LIT(KLddName,"ECOMM");
-#else	//__WINS__
-_LIT(KPddSirName,"ESIR");
-_LIT(KPddUartName,"ECUART4");
-_LIT(KLddName,"ECOMM");
-#endif	//__WINS__
-
-RTest test(_L("T_SmsDeliver Test Harness"));
-
-const TTimeIntervalMicroSeconds32 KWaitForWatchersToStart = 20000000;
-const TTimeIntervalMicroSeconds32 KWaitForWatchersToStartDisplayInterval = 5000000;
-
-LOCAL_C void DoTestsL()
-	{
-#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);
-	
-	// Create and install the active scheduler
- 	CActiveScheduler* scheduler= new (ELeave) CActiveScheduler();
-	CleanupStack::PushL(scheduler);
-	CActiveScheduler::Install(scheduler);
-
-	// Create the test engine
-	CTestEngine* testEngine = CTestEngine::NewL();
-	CleanupStack::PushL(testEngine);
-
-	// Do tests...
-	testEngine->DoTestsL();
-	
-	CleanupStack::PopAndDestroy(2, scheduler);	
-	}
-
-GLDEF_C TInt E32Main()
-	{	
-	__UHEAP_MARK;
-	CTrapCleanup* tc=CTrapCleanup::New();
-	TRAPD(err,DoTestsL());
-	if (err!=KErrNone)
-		User::Panic(KFailed, err);
-	delete tc;
-	test.Close();
-	__UHEAP_MARKEND;
-	return KErrNone;
-	}
-	
-/*
- *	CTestEngine
- */
-	
-CTestEngine* CTestEngine::NewL()
-	{
-	CTestEngine* self = new (ELeave) CTestEngine();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CTestEngine::~CTestEngine()
-	{
-	delete iTestUtils;
-	delete iWatchers;
-
-	iSocket.Close();
-	iSocketServ.Close();
-	}
-
-CTestEngine::CTestEngine()
-: CBase()
-	{
-	}
-	
-void CTestEngine::DoTestsL()
-	{
-
-	CTestDeliverBase* testCase = NULL;
-	
-	testCase = CTestDeliverOneRecipientOk::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-
-	testCase = CTestDeliverMultiRecipientsOk_1::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-
-	testCase = CTestDeliverMultiRecipientsOk_2::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-
-	testCase = CTestDeliverMultiRecipientsOk_3::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-
-	testCase = CTestDeliverNoMatching::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-	
-	testCase = CTestDeliverNoStatusReports::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-
-	testCase = CTestDeliverNotSent::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-
-	testCase = CTestDeliverOneRecipientFail::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-	
-	testCase = 	CTestDeliverMultiRecipientsFail_1::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-
-	testCase = 	CTestDeliverMultiRecipientsMixed_1::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-
-	testCase = 	CTestDeliverMultiRecipientsMixed_2::NewL(*iTestUtils);
-	RunTestCaseL(*testCase);
-	}
-	
-void CTestEngine::RunTestCaseL(CTestDeliverBase& aTestCase)
-	{
-	CleanupStack::PushL(&aTestCase);
-	aTestCase.Start();
-	CActiveScheduler::Start();
-	CleanupStack::PopAndDestroy(&aTestCase);
-	}
-
-void CTestEngine::ConstructL()
-	{
-	// This should create the SMS service, including the service settings.
-	iTestUtils = CSmsTestUtils::NewL(test);
-	
-	// Notify the system agent that the phone is on.
-	iTestUtils->NotifySaPhoneOnL();
-	
-	// Tell the tests utils to log to file
-	iTestUtils->SetLogToFile();
-	
-	// Restore the service settings.
-	iTestUtils->SetEntryL(iTestUtils->iSmsServiceId);
-	CSmsAccount* account = CSmsAccount::NewLC();
-	account->LoadSettingsL(*iTestUtils->iServiceSettings);
-	
-	// Remove the default service centres from the service settings
-	TInt count = iTestUtils->iServiceSettings->ServiceCenterCount();
-	while( count-- )
-		{
-		iTestUtils->iServiceSettings->RemoveServiceCenter(count);
-		}
-		
-	// Add the Vodafone service centre - store the settings.
-	iTestUtils->iServiceSettings->AddServiceCenterL(_L("Vodafone"), _L("+447785016005"));
-
-	// Set delivery options - do matching and make reports visible.	
-	iTestUtils->iServiceSettings->SetDeliveryReport(ETrue);
-	iTestUtils->iServiceSettings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisibleAndMatch);
-
-	account->SaveSettingsL(*iTestUtils->iServiceSettings);
-	CleanupStack::PopAndDestroy(account);
-	
-	// Create a session with the SMS stack - note order of the next few things
-	// is important.
-	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));
-	
-	// Initialise phone...
-	iTestUtils->WaitForInitializeL();
-	
-	// Start watchers...
-	StartWatcherL();
-	}
-	
-TBool CTestEngine::WatchersAlreadyRunningL()
-	{
-	RSocketServ server;
-	RSocket socket;
-
-	User::LeaveIfError(server.Connect());
-	CleanupClosePushL(server);
-
-		// test if it's there... 
-	TProtocolDesc protoInfo;
-	TProtocolName protocolname;
-	protocolname.Copy(KSmsDatagram);
-	User::LeaveIfError(server.FindProtocol(protocolname,protoInfo));
-
-	User::LeaveIfError(socket.Open(server,
-										protoInfo.iAddrFamily,
-										protoInfo.iSockType, 
-										protoInfo.iProtocol));
-	CleanupClosePushL(socket);
-
-	TSmsAddr addr;
-	addr.SetSmsAddrFamily(ESmsAddrRecvAny);
-	TInt err = socket.Bind(addr);
-
-	CleanupStack::Pop(2, &server);
-	socket.CancelAll();
-	socket.Close();
-	server.Close();
-	return (err == KErrAlreadyExists);
-	}
-	
-void CTestEngine::StartWatcherL()
-	{
-	iTestUtils->Printf(_L("Start the Watcher"));
-
-	if( WatchersAlreadyRunningL() )
-		{
-		iTestUtils->Printf(_L("Watchers are already running\n"));
-		return;
-		}
-
-	iWatchers = CTestUtilsWatcherStarter::NewL();
-
-	TTimeIntervalMicroSeconds32 wait = KWaitForWatchersToStart;
-	TBool started = EFalse;
-	while( !started && wait.Int() > 0 )
-		{
-		iTestUtils->Printf(_L("Waiting %d secs for watchers to start...\n"), wait.Int() / 1000000);
-		wait = wait.Int() - KWaitForWatchersToStartDisplayInterval.Int();
-		User::After(KWaitForWatchersToStartDisplayInterval);
-		started = WatchersAlreadyRunningL();
-		}
-
-	if( !WatchersAlreadyRunningL() )
-		{
-		iTestUtils->Printf(_L("WARNING: NBS Watcher has not started yet\n"));
-		}
-	}
-	
-/*
- * CTestDeliverBase
- */
- 
-CTestDeliverBase::~CTestDeliverBase()
-	{
-	delete iEntryForObserver;
-	delete iOperation;
-	}	
-	
-void CTestDeliverBase::Start()
-	{
-	iTestUtils.Printf(_L("Starting %S\n"), &TestName());
-	iState = EClearFolders;
-	CompleteSelf();
-	}
-	
-CTestDeliverBase::CTestDeliverBase(CSmsTestUtils& aTestUtils)
-: CActive(CActive::EPriorityStandard), iTestUtils(aTestUtils)
-	{
-	CActiveScheduler::Add(this);
-	}
-	
-void CTestDeliverBase::ConstructL()
-	{
-	iEntryForObserver = Session().GetEntryL(KMsvGlobalInBoxIndexEntryId);
-	}
-	
-void CTestDeliverBase::CompleteSelf()
-	{
-	TRequestStatus* pStat = &iStatus;
-	User::RequestComplete(pStat, KErrNone);
-	SetActive();
-	}
-	
-CMsvSession& CTestDeliverBase::Session()
-	{
-	return *iTestUtils.iMsvSession;
-	}
-
-CMsvEntry& CTestDeliverBase::MsvEntry()
-	{
-	return *iTestUtils.iMsvEntry;
-	}
-
-CSmsClientMtm& CTestDeliverBase::Client()
-	{
-	return *iTestUtils.iSmsClientMtm;
-	}
-	
-CSmsSettings& CTestDeliverBase::ServiceSettings()
-	{
-	return *iTestUtils.iServiceSettings;
-	}
-		
-void CTestDeliverBase::ClearFoldersL()
-	{
-	iTestUtils.DeleteSmsMessagesL(KMsvGlobalOutBoxIndexEntryId);
-	iTestUtils.DeleteSmsMessagesL(KMsvGlobalInBoxIndexEntryId);
-	iTestUtils.DeleteSmsMessagesL(KMsvSentEntryId);		
-	}
-	
-void CTestDeliverBase::TestComplete()
-	{
-	iTestUtils.Printf(_L("Test Complete\n"));
-	CActiveScheduler::Stop();
-	}
-	
-void CTestDeliverBase::CreateMessageL()
-	{
-	iTestUtils.Printf(_L("Creating message...\n"));
-	
-	TMsvEntry entry;
-	entry.SetVisible(ETrue); 
-	entry.SetInPreparation(ETrue); 
-	entry.iServiceId = iTestUtils.iSmsServiceId; 
-	entry.iType = KUidMsvMessageEntry; 
-	entry.iMtm = KUidMsgTypeSMS; 
-	entry.iDate.HomeTime(); 
-	entry.iSize = 0; 
-	entry.iDescription.Set(KNullDesC); 
-	entry.iDetails.Set(KNullDesC); 
-
-	// Check send options...
-	TUint sendState = KMsvSendStateWaiting; 
-	switch( ServiceSettings().Delivery() )  
-		{ 
-	case ESmsDeliveryScheduled: 
-		sendState = KMsvSendStateScheduled; 
-		break; 
-	case ESmsDeliveryUponRequest: 
-		sendState = KMsvSendStateUponRequest; 
-		break; 
-	default: 
-		sendState = KMsvSendStateWaiting; 
-		break;
-		}
-	entry.SetSendingState(sendState); 
-
-	// Create the SMS header object...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-	
-	// Set the body text...
-	iTestUtils.iRichText->Reset();
-	iTestUtils.iRichText->InsertL(0, KMessageData);
-	
-	// Copy the message settings...
-	header->SetSmsSettingsL(ServiceSettings()); 
-	
-	// Set the service centre
-	TInt defaultIndex = ServiceSettings().DefaultServiceCenter();
-	header->SetServiceCenterAddressL(ServiceSettings().GetServiceCenter(defaultIndex).Address());
-
-	// Set recipient - ask derived class
-	SetRecipientsL(*header);
-	
-	// Update entry description and details...
-	CArrayPtrFlat<CSmsNumber>& recipient = header->Recipients();
-	entry.iDetails.Set(recipient[0]->Address());
-	entry.iDescription.Set(iTestUtils.iRichText->Read(0, ServiceSettings().DescriptionLength()));
-	entry.SetInPreparation(EFalse);
-	
-	// Create the entry - set context to the global outbox.
-	MsvEntry().SetEntryL(KMsvGlobalOutBoxIndexEntryId);
-	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(*iTestUtils.iRichText);
-	store->CommitL(); 
-	CleanupStack::PopAndDestroy(2, header); 
-	
-	iMessageId = entry.Id();
-	}
-	
-void CTestDeliverBase::SendMessageL()
-	{
-	iTestUtils.Printf(_L("Sending message %d\n"), iMessageId);
-
-	delete iOperation;
-	iOperation = NULL;
-
-	CMsvEntrySelection* sel = new (ELeave) CMsvEntrySelection();
-	CleanupStack::PushL(sel);
-	sel->AppendL(iMessageId);
-
-	iTestUtils.DisplayMessageL(iMessageId);
-	
-	MsvEntry().SetEntryL(KMsvGlobalOutBoxIndexEntryId);
-	iOperation = MsvEntry().CopyL(*sel, iTestUtils.iSmsServiceId, iStatus);
-	CleanupStack::PopAndDestroy(sel);
-
-	SetActive();
-	}
-	
-void CTestDeliverBase::ChangeServiceSettingsL()
-	{
-	// Restore the service settings.
-	iTestUtils.SetEntryL(iTestUtils.iSmsServiceId);
-	CSmsAccount* account = CSmsAccount::NewLC();
-	account->LoadSettingsL(*iTestUtils.iServiceSettings);
-	
-	// Set the service settings 
-	iTestUtils.iServiceSettings->SetValidityPeriod(TTimeIntervalMinutes(5));
-	iTestUtils.iServiceSettings->SetDeliveryReport(ETrue);
-	iTestUtils.iServiceSettings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisibleAndMatch);
-	
-	// Store the new service settings
-	account->SaveSettingsL(*iTestUtils.iServiceSettings);
-	CleanupStack::PopAndDestroy(account);
-	}
-	
-void CTestDeliverBase::CheckCreatedMessageL()
-	{
-	// Need to check the following - 
-	// 1. All recipients have correct delivery status - ENoAckRequested.
-	// 2. The index summary is correct - ENoAckSummary
-	// 3. The index message IS is invalid.
-	
-	iTestUtils.Printf(_L("Checking created message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	TInt rcptCount = header->Recipients().Count();
-	for( TInt ii = 0; ii < rcptCount; ++ii )
-		{
-		CSmsNumber* rcpt = header->Recipients()[ii];
-		iTestUtils.Printf(_L("--Recipient %d - Delivery status -> %d - should be %d (ENoAckRequested)\n"), ii, rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-		iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);
-		}
-		
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (ENoAckSummary)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::ENoAckSummary);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::ENoAckSummary);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId == EFalse);
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-TMsvId CTestDeliverBase::GetObserverEntry()
-	{
-	return iMessageId;
-	}
-
-// methods from CActive
-
-void CTestDeliverBase::RunL()
-	{
-	User::LeaveIfError(iStatus.Int());
-	
-	switch( iState )
-		{
-	case EClearFolders:
-		{
-		ClearFoldersL();
-		iState = EChangeServiceSettings;
-		CompleteSelf();
-		} break;
-	case EChangeServiceSettings:
-		{
-		ChangeServiceSettingsL();
-		iState = ECreateMessage;
-		CompleteSelf();
-		} break;			
-	case ECreateMessage:
-		{
-		CreateMessageL();
-		iState = ECheckCreatedMessage;
-		CompleteSelf();
-		} break;
-	case ECheckCreatedMessage:
-		{
-		CheckCreatedMessageL();
-		iState = ESendMessage;
-		CompleteSelf();
-		} break;
-	case ESendMessage:
-		{
-		SendMessageL();
-		iState = ECheckSentMessage;
-		} break;
-	case ECheckSentMessage:
-		{
-		CheckSentMessageL();
-		
-		TMsvId entryId = GetObserverEntry();
-		
-		if( entryId != KMsvNullIndexEntryId )
-			{
-			// Need to observe something - move observer entry to specified entry 
-			// and wait for it to be updated
-			iEntryForObserver->SetEntryL(entryId);
-			iEntryForObserver->AddObserverL(*this);
-			
-			iState = EPendingDeliveryReport;
-			}
-		else
-			{
-			// Not observing anything - end of test.
-			TestComplete();
-			}
-		} break;
-	case EPendingDeliveryReport:
-		{
-		// End the test...
-		TestComplete();
-		} break;			
-	default:
-		User::Invariant();
-		break;
-		}
-	}
-	
-void CTestDeliverBase::DoCancel()
-	{
-	}
-	
-TInt CTestDeliverBase::RunError(TInt /*aError*/)
-	{
-	return KErrNone;
-	}
-	
-//	methods from MMsvEntryObserver	
-	
-void CTestDeliverBase::HandleEntryEventL(TMsvEntryEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
-	{
-	__ASSERT_DEBUG( iState == EPendingDeliveryReport, User::Invariant() );
-	
-	if( aEvent == EMsvEntryChanged )
-		{
-		iTestUtils.Printf(_L("Message entry has been updated\n"));
-
-		// Check that the sent message has been updated.
-		CheckDeliveredMessageL();
-		}
-	}
-	
-/*
- * CTestDeliverOneRecipientOk
- */
- 
- CTestDeliverOneRecipientOk* CTestDeliverOneRecipientOk::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverOneRecipientOk* self = new (ELeave) CTestDeliverOneRecipientOk(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverOneRecipientOk::~CTestDeliverOneRecipientOk()
-	{
-	}
-	
-CTestDeliverOneRecipientOk::CTestDeliverOneRecipientOk(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-		
-//	 methods from CTestDeliverBase
-
-void CTestDeliverOneRecipientOk::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting single recipient\n"));
-	
-	CSmsNumber* rcpt = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt);
-	rcpt->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt);
-	CleanupStack::Pop(rcpt);
-	}
-
-void CTestDeliverOneRecipientOk::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 1);
-	iTestUtils.Test()(header->Recipients().Count() == 1);
-	
-	CSmsNumber* rcpt = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId != EFalse);
-		
-	iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, rcpt->LogId());
-	iTestUtils.Test()(logId == rcpt->LogId());
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverOneRecipientOk::CheckDeliveredMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status correctly set
-	// 3. The index summary is correctly set
-	
-	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 1);
-	iTestUtils.Test()(header->Recipients().Count() == 1);
-	
-	CSmsNumber* rcpt = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-	iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EAllSuccessful)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EAllSuccessful);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EAllSuccessful);
-	
-	// Test is no ended - complete self to stop.
-	CompleteSelf();		
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverOneRecipientOk::TestName()
-	{
-	return KTestDeliverOneRecipientOk();
-	}
-	
-/*
- * CTestDeliverOneRecipientFail
- */
- 
- CTestDeliverOneRecipientFail* CTestDeliverOneRecipientFail::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverOneRecipientFail* self = new (ELeave) CTestDeliverOneRecipientFail(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverOneRecipientFail::~CTestDeliverOneRecipientFail()
-	{
-	}
-	
-CTestDeliverOneRecipientFail::CTestDeliverOneRecipientFail(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-		
-//	 methods from CTestDeliverBase
-
-void CTestDeliverOneRecipientFail::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting single recipient\n"));
-	
-	CSmsNumber* rcpt = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt);
-	rcpt->SetAddressL(KRecipientFail);
-	aHeader.Recipients().AppendL(rcpt);
-	CleanupStack::Pop(rcpt);
-	}
-	
-void CTestDeliverOneRecipientFail::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 1);
-	iTestUtils.Test()(header->Recipients().Count() == 1);
-	
-	CSmsNumber* rcpt = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId != EFalse);
-		
-	iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, rcpt->LogId());
-	iTestUtils.Test()(logId == rcpt->LogId());
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverOneRecipientFail::CheckDeliveredMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status correctly set
-	// 3. The index summary is correctly set
-	
- 	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 1);
-	iTestUtils.Test()(header->Recipients().Count() == 1);
-	
-	CSmsNumber* rcpt = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Delivery status -> %d - should be %d (EAckError)\n"), rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-	iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-	
-	iTestUtils.Printf(_L("- Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt->Status(), CMsvRecipient::EFailedToSend);
-	iTestUtils.Test()(rcpt->Status()==CMsvRecipient::EFailedToSend);
-
-	iTestUtils.Printf(_L("- Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-	iTestUtils.Test()(rcpt->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EAllFailed)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EAllFailed);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EAllFailed);
-	
-	// Test is no ended - complete self to stop.
-	CompleteSelf();		
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverOneRecipientFail::TestName()
-	{
-	return KTestDeliverOneRecipientFail();
-	}
-	
-/*
- * CTestDeliverMultiRecipientsOk_1
- */
- 
-CTestDeliverMultiRecipientsOk_1* CTestDeliverMultiRecipientsOk_1::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverMultiRecipientsOk_1* self = new (ELeave) CTestDeliverMultiRecipientsOk_1(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverMultiRecipientsOk_1::~CTestDeliverMultiRecipientsOk_1()
-	{
-	}
-	
-CTestDeliverMultiRecipientsOk_1::CTestDeliverMultiRecipientsOk_1(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-	
-//	methods from CTestDeliverBase
-
-void CTestDeliverMultiRecipientsOk_1::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting multiple (2) recipients\n"));
-	
-	CSmsNumber* rcpt0 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt0);
-	rcpt0->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt0);
-	CleanupStack::Pop(rcpt0);
-	
-	CSmsNumber* rcpt1 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt1);
-	rcpt1->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt1);
-	CleanupStack::Pop(rcpt1);
-	}
-	
-void CTestDeliverMultiRecipientsOk_1::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipients have delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	
-	iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);	
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId == EFalse);
-		
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverMultiRecipientsOk_1::CheckDeliveredMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status is correctly set
-	// 3. The index summary is correctly set
-
-	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set - round %d...\n"), iMessageId, ++iCheckCount);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-
-	if( iCheckCount == 1 )
-		{
-		// At least one of the recipients has been delivered to ok - check the 
-		// status of recipient 0 and make decisions based on that.
-		CSmsNumber* pendingRcpt = NULL;
-		
-		if( rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck )
-			{
-			// Recipient 1 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-			
-			pendingRcpt = rcpt0;
-			}
-		else
-			{
-			// Recipient 0 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-			
-			pendingRcpt = rcpt1;
-			}
-		TLogId logId = 0;	
-		TBool validId = entry.MessageId(logId);
-		
-		iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-		iTestUtils.Test()(validId != EFalse);
-			
-		iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, pendingRcpt->LogId());
-		iTestUtils.Test()(logId == pendingRcpt->LogId());
-		}
-	else
-		{
-		// Both recipients has been delivered to ok - check the status of both
-		// recipients
-		iTestUtils.Printf(_L("--Second check of flags -> both recipients have been delivered to\n"));
-		
-		iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-		iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-	
-		iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-		iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-		
-		iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EAllSuccessful)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EAllSuccessful);
-		iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EAllSuccessful);
-
-		// Test is no ended - complete self to stop.
-		CompleteSelf();		
-		}
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverMultiRecipientsOk_1::TestName()
-	{
-	return KTestDeliverMultiRecipientsOk_1();
-	}
-	
-/*
- * CTestDeliverMultiRecipientsOk_2
- */
- 
-CTestDeliverMultiRecipientsOk_2* CTestDeliverMultiRecipientsOk_2::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverMultiRecipientsOk_2* self = new (ELeave) CTestDeliverMultiRecipientsOk_2(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverMultiRecipientsOk_2::~CTestDeliverMultiRecipientsOk_2()
-	{
-	}
-	
-CTestDeliverMultiRecipientsOk_2::CTestDeliverMultiRecipientsOk_2(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-	
-//	methods from CTestDeliverBase
-
-void CTestDeliverMultiRecipientsOk_2::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting multiple (2) recipients\n"));
-	
-	CSmsNumber* rcpt0 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt0);
-	rcpt0->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt0);
-	CleanupStack::Pop(rcpt0);
-	
-	CSmsNumber* rcpt1 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt1);
-	rcpt1->SetAddressL(KRecipientBad);
-	aHeader.Recipients().AppendL(rcpt1);
-	CleanupStack::Pop(rcpt1);
-	}
-
-void CTestDeliverMultiRecipientsOk_2::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipients have delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	
-	iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (ENoAckRequested)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-	iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);	
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId != EFalse);
-		
-	iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, rcpt0->LogId());
-	iTestUtils.Test()(logId == rcpt0->LogId());
-		
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverMultiRecipientsOk_2::CheckDeliveredMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status is correctly set
-	// 3. The index summary is correctly set
-
-	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-
-	iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-	iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-	
-	iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (ENoAckRequested)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-	iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EAllSuccessful)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EAllSuccessful);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EAllSuccessful);
-
-	// Test is no ended - complete self to stop.
-	CompleteSelf();		
-
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverMultiRecipientsOk_2::TestName()
-	{
-	return KTestDeliverMultiRecipientsOk_2();
-	}
-	
-/*
- * CTestDeliverMultiRecipientsOk_3
- */
- 
-CTestDeliverMultiRecipientsOk_3* CTestDeliverMultiRecipientsOk_3::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverMultiRecipientsOk_3* self = new (ELeave) CTestDeliverMultiRecipientsOk_3(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverMultiRecipientsOk_3::~CTestDeliverMultiRecipientsOk_3()
-	{
-	}
-	
-CTestDeliverMultiRecipientsOk_3::CTestDeliverMultiRecipientsOk_3(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-	
-//	methods from CTestDeliverBase
-
-void CTestDeliverMultiRecipientsOk_3::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting multiple (3) recipients\n"));
-	
-	CSmsNumber* rcpt0 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt0);
-	rcpt0->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt0);
-	CleanupStack::Pop(rcpt0);
-	
-	CSmsNumber* rcpt1 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt1);
-	rcpt1->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt1);
-	CleanupStack::Pop(rcpt1);
-
-	CSmsNumber* rcpt2 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt2);
-	rcpt2->SetAddressL(KRecipientBad);
-	aHeader.Recipients().AppendL(rcpt2);
-	CleanupStack::Pop(rcpt2);
-	}
-
-void CTestDeliverMultiRecipientsOk_3::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipients have delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 3);
-	iTestUtils.Test()(header->Recipients().Count() == 3);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	
-	iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);	
-	
-	CSmsNumber* rcpt2 = header->Recipients()[2];
-	
-	iTestUtils.Printf(_L("--Recipient 2 - Delivery status -> %d - should be %d (ENoAckRequested)\n"), rcpt2->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-	iTestUtils.Test()(rcpt2->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);
-
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId == EFalse);
-		
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverMultiRecipientsOk_3::CheckDeliveredMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status is correctly set
-	// 3. The index summary is correctly set
-
-	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set - round %d...\n"), iMessageId, ++iCheckCount);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 3);
-	iTestUtils.Test()(header->Recipients().Count() == 3);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	CSmsNumber* rcpt2 = header->Recipients()[2];
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-		
-	if( iCheckCount == 1 )
-		{
-		// At least one of the recipients has been delivered to ok - check the 
-		// status of recipient 0 and make decisions based on that.
-		CSmsNumber* pendingRcpt = NULL;
-		
-		if( rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck )
-			{
-			// Recipient 2 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-			
-			iTestUtils.Printf(_L("--Recipient 2 - Delivery status -> %d - should be %d (ENoAckRequested)\n"), rcpt2->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-			iTestUtils.Test()(rcpt2->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);
-			
-			pendingRcpt = rcpt0;
-			}
-		else
-			{
-			// Recipient 0 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-			
-			iTestUtils.Printf(_L("--Recipient 2 - Delivery status -> %d - should be %d (ENoAckRequested)\n"), rcpt2->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-			iTestUtils.Test()(rcpt2->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);
-			
-			pendingRcpt = rcpt1;
-			}
-		TLogId logId = 0;	
-		TBool validId = entry.MessageId(logId);
-		
-		iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-		iTestUtils.Test()(validId != EFalse);
-			
-		iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, pendingRcpt->LogId());
-		iTestUtils.Test()(logId == pendingRcpt->LogId());
-		}
-	else
-		{
-		// Both recipients has been delivered to ok - check the status of both
-		// recipients
-		iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-		iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-		
-		iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-		iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-		
-		iTestUtils.Printf(_L("--Recipient 2 - Delivery status -> %d - should be %d (ENoAckRequested)\n"), rcpt2->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-		iTestUtils.Test()(rcpt2->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);
-
-		iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EAllSuccessful)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EAllSuccessful);
-		iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EAllSuccessful);
-
-		// Test is no ended - complete self to stop.
-		CompleteSelf();		
-		}
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverMultiRecipientsOk_3::TestName()
-	{
-	return KTestDeliverMultiRecipientsOk_3();
-	}
-	
-/*
- * CTestDeliverNoMatching
- */
- 
- CTestDeliverNoMatching* CTestDeliverNoMatching::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverNoMatching* self = new (ELeave) CTestDeliverNoMatching(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverNoMatching::~CTestDeliverNoMatching()
-	{
-	}
-	
-CTestDeliverNoMatching::CTestDeliverNoMatching(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-	
-//	methods from MMsvEntryObserver	
-	
-void CTestDeliverNoMatching::HandleEntryEventL(TMsvEntryEvent aEvent, TAny* aArg1, TAny* /*aArg2*/, TAny* /*aArg3*/)
-	{
-	if( aEvent == EMsvNewChildren )
-		{
-		iTestUtils.Printf(_L("Received new message in Inbox - should be status report...\n"));
-		
-		CMsvEntrySelection* sel = static_cast<CMsvEntrySelection*>(aArg1);
-
-		// Check how many mesasges there are - should be just 1
-		TInt count = sel->Count();
-
-		iTestUtils.Printf(_L("--Number of new messages -> %d - should be %d\n"), count, 1);
-		iTestUtils.Test()(count == 1);
-		
-		// Restore the message
-
-		CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-		CleanupStack::PushL(header);
-
-		MsvEntry().SetEntryL((*sel)[0]);
-		CMsvStore* store = MsvEntry().ReadStoreL();
-		CleanupStack::PushL(store);
-
-		header->RestoreL(*store);
-		iTestUtils.iRichText->Reset();
-		store->RestoreBodyTextL(*iTestUtils.iRichText);
-
-		CleanupStack::PopAndDestroy(store);
-		
-		// Check that it's a Status Report...
-		iTestUtils.Printf(_L("--Message type -> %d - should be %d\n"), header->Type(), CSmsPDU::ESmsStatusReport);
-		iTestUtils.Test()(header->Type() == CSmsPDU::ESmsStatusReport);
-		
-		// Check the message reference
-		TLogId logId = header->Message().LogServerId();
-		iTestUtils.Printf(_L("--Log Server Id -> %d - should be %d\n"), logId, iLogId);
-		iTestUtils.Test()(logId == iLogId);
-		
-		// Check the deliver status
-		CSmsStatusReport& report = header->StatusReport();
-		iTestUtils.Printf(_L("--Deliver status -> %d - should be %d (ESmsShortMessageReceivedBySME)\n"), report.Status(), TSmsStatus::ESmsShortMessageReceivedBySME);
-		iTestUtils.Test()(report.Status() == TSmsStatus::ESmsShortMessageReceivedBySME);
-		
-		CleanupStack::PopAndDestroy(header);
-		
-		// Check that the sent message has been updated.
-		CheckDeliveredMessageL();
-		}
-	}
-				
-//	 methods from CTestDeliverBase
-
-void CTestDeliverNoMatching::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting single recipient\n"));
-	
-	CSmsNumber* rcpt = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt);
-	rcpt->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt);
-	CleanupStack::Pop(rcpt);
-	}
-
-void CTestDeliverNoMatching::ChangeServiceSettingsL()
-	{
-	// Restore the service settings.
-	iTestUtils.SetEntryL(iTestUtils.iSmsServiceId);
-	CSmsAccount* account = CSmsAccount::NewLC();
-	account->LoadSettingsL(*iTestUtils.iServiceSettings);
-	
-	// Set the service settings 
-	iTestUtils.iServiceSettings->SetValidityPeriod(TTimeIntervalMinutes(5));
-	iTestUtils.iServiceSettings->SetDeliveryReport(ETrue);
-	iTestUtils.iServiceSettings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisible);
-	
-	// Store the new service settings
-	account->SaveSettingsL(*iTestUtils.iServiceSettings);
-	CleanupStack::PopAndDestroy(account);
-	}
-	
-TMsvId CTestDeliverNoMatching::GetObserverEntry()
-	{
-	return KMsvGlobalInBoxIndexEntryId;
-	}
-
-void CTestDeliverNoMatching::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 1);
-	iTestUtils.Test()(header->Recipients().Count() == 1);
-	
-	CSmsNumber* rcpt = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId != EFalse);
-		
-	iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, rcpt->LogId());
-	iTestUtils.Test()(logId == rcpt->LogId());
-	
-	iLogId = rcpt->LogId();
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverNoMatching::CheckDeliveredMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status correctly set
-	// 3. The index summary is correctly set
-	
-	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 1);
-	iTestUtils.Test()(header->Recipients().Count() == 1);
-	
-	CSmsNumber* rcpt = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	// Test is no ended - complete self to stop.
-	CompleteSelf();		
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverNoMatching::TestName()
-	{
-	return KTestDeliverNoMatching();
-	}
-	
-/*
- * CTestDeliverNoStatusReports
- */
- 
- CTestDeliverNoStatusReports* CTestDeliverNoStatusReports::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverNoStatusReports* self = new (ELeave) CTestDeliverNoStatusReports(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverNoStatusReports::~CTestDeliverNoStatusReports()
-	{
-	}
-	
-CTestDeliverNoStatusReports::CTestDeliverNoStatusReports(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-				
-//	 methods from CTestDeliverBase
-
-void CTestDeliverNoStatusReports::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting single recipient\n"));
-	
-	CSmsNumber* rcpt = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt);
-	rcpt->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt);
-	CleanupStack::Pop(rcpt);
-	}
-
-void CTestDeliverNoStatusReports::ChangeServiceSettingsL()
-	{
-	// Restore the service settings.
-	iTestUtils.SetEntryL(iTestUtils.iSmsServiceId);
-	CSmsAccount* account = CSmsAccount::NewLC();
-	account->LoadSettingsL(*iTestUtils.iServiceSettings);
-	
-	// Set the service settings 
-	iTestUtils.iServiceSettings->SetValidityPeriod(TTimeIntervalMinutes(5));
-	iTestUtils.iServiceSettings->SetDeliveryReport(EFalse);
-	iTestUtils.iServiceSettings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisibleAndMatch);
-	
-	// Store the new service settings
-	account->SaveSettingsL(*iTestUtils.iServiceSettings);
-	CleanupStack::PopAndDestroy(account);
-	}
-	
-TMsvId CTestDeliverNoStatusReports::GetObserverEntry()
-	{
-	return KMsvNullIndexEntryId;
-	}
-
-void CTestDeliverNoStatusReports::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 1);
-	iTestUtils.Test()(header->Recipients().Count() == 1);
-	
-	CSmsNumber* rcpt = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Delivery status -> %d - should be %d (ENoAckRequested)\n"), rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-	iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (ENoAckSummary)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::ENoAckSummary);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::ENoAckSummary);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId == EFalse);
-		
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverNoStatusReports::CheckDeliveredMessageL()
-	{
-	User::Invariant();
-	}
-
-const TDesC& CTestDeliverNoStatusReports::TestName()
-	{
-	return KTestDeliverNoStatusReports();
-	}
-	
-/*
- * CTestDeliverNotSent
- */
- 
- CTestDeliverNotSent* CTestDeliverNotSent::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverNotSent* self = new (ELeave) CTestDeliverNotSent(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverNotSent::~CTestDeliverNotSent()
-	{
-	}
-	
-CTestDeliverNotSent::CTestDeliverNotSent(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-				
-//	 methods from CTestDeliverBase
-
-void CTestDeliverNotSent::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting single recipient\n"));
-	
-	CSmsNumber* rcpt = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt);
-	rcpt->SetAddressL(KRecipientBad);
-	aHeader.Recipients().AppendL(rcpt);
-	CleanupStack::Pop(rcpt);
-	}
-
-TMsvId CTestDeliverNotSent::GetObserverEntry()
-	{
-	return KMsvNullIndexEntryId;
-	}
-
-void CTestDeliverNotSent::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 1);
-	iTestUtils.Test()(header->Recipients().Count() == 1);
-	
-	CSmsNumber* rcpt = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Delivery status -> %d - should be %d (ENoAckRequested)\n"), rcpt->AckStatus(ESmsAckTypeDelivery), CSmsNumber::ENoAckRequested);
-	iTestUtils.Test()(rcpt->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::ENoAckRequested);
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (ENoAckSummary)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::ENoAckSummary);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::ENoAckSummary);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId == EFalse);
-		
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverNotSent::CheckDeliveredMessageL()
-	{
-	User::Invariant();
-	}
-
-const TDesC& CTestDeliverNotSent::TestName()
-	{
-	return KTestDeliverNotSent();
-	}
-
-/*
- * CTestDeliverMultiRecipientsFail_1
- */
- 
-CTestDeliverMultiRecipientsFail_1* CTestDeliverMultiRecipientsFail_1::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverMultiRecipientsFail_1* self = new (ELeave) CTestDeliverMultiRecipientsFail_1(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverMultiRecipientsFail_1::~CTestDeliverMultiRecipientsFail_1()
-	{
-	}
-	
-CTestDeliverMultiRecipientsFail_1::CTestDeliverMultiRecipientsFail_1(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-	
-//	methods from CTestDeliverBase
-
-void CTestDeliverMultiRecipientsFail_1::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting multiple (3) recipients\n"));
-	
-	CSmsNumber* rcpt0 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt0);
-	rcpt0->SetAddressL(KRecipientFail);
-	aHeader.Recipients().AppendL(rcpt0);
-	CleanupStack::Pop(rcpt0);
-	
-	CSmsNumber* rcpt1 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt1);
-	rcpt1->SetAddressL(KRecipientFail);
-	aHeader.Recipients().AppendL(rcpt1);
-	CleanupStack::Pop(rcpt1);
-	}
-	
-void CTestDeliverMultiRecipientsFail_1::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipients have delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	
-	iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);	
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId == EFalse);
-		
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverMultiRecipientsFail_1::CheckDeliveredMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status is correctly set
-	// 3. The index summary is correctly set
-
-	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set - round %d...\n"), iMessageId, ++iCheckCount);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	TMsvSmsEntry entry = MsvEntry().Entry();
-		
-	if( iCheckCount == 1 )
-		{
-		// At least one of the recipients has been delivered to ok - check the 
-		// status of recipient 0 and make decisions based on that.
-		CSmsNumber* pendingRcpt = NULL;
-		
-		if( rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck )
-			{
-			// Recipient 2 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt1->Status(), CMsvRecipient::EFailedToSend);
-			iTestUtils.Test()(rcpt1->Status()==CMsvRecipient::EFailedToSend);
-
-			iTestUtils.Printf(_L("--Recipient 1 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt1->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-			iTestUtils.Test()(rcpt1->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-			
-			pendingRcpt = rcpt0;
-			}
-		else
-			{
-			// Recipient 0 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-			
-			iTestUtils.Printf(_L("--Recipient 0 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt0->Status(), CMsvRecipient::EFailedToSend);
-			iTestUtils.Test()(rcpt0->Status()==CMsvRecipient::EFailedToSend);
-			
-			iTestUtils.Printf(_L("--Recipient 0 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt0->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-			iTestUtils.Test()(rcpt0->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);				
-		
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-			
-			pendingRcpt = rcpt1;
-			}
-		TLogId logId = 0;	
-		TBool validId = entry.MessageId(logId);
-		
-		iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-		iTestUtils.Test()(validId != EFalse);
-			
-		iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, pendingRcpt->LogId());
-		iTestUtils.Test()(logId == pendingRcpt->LogId());
-		}
-	else
-		{
-		// Both recipients has been delivered to ok - check the status of both
-		// recipients
-		iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-		iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-		
-		iTestUtils.Printf(_L("--Recipient 0 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt0->Status(), CMsvRecipient::EFailedToSend);
-		iTestUtils.Test()(rcpt0->Status()==CMsvRecipient::EFailedToSend);
-	
-		iTestUtils.Printf(_L("--Recipient 0 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt0->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-		iTestUtils.Test()(rcpt0->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-		
-		iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-		iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-		
-		iTestUtils.Printf(_L("--Recipient 1 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt1->Status(), CMsvRecipient::EFailedToSend);
-		iTestUtils.Test()(rcpt1->Status()==CMsvRecipient::EFailedToSend);
-				
-		iTestUtils.Printf(_L("--Recipient 1 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt1->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-		iTestUtils.Test()(rcpt1->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-		
-		iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EAllFailed)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EAllFailed);
-		iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EAllFailed);
-
-		// Test is no ended - complete self to stop.
-		CompleteSelf();		
-		}
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverMultiRecipientsFail_1::TestName()
-	{
-	return KTestDeliverMultiRecipientsFail_1();
-	}
-
-/*
- * CTestDeliverMultiRecipientsMixed_1
- */
- 
-CTestDeliverMultiRecipientsMixed_1* CTestDeliverMultiRecipientsMixed_1::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverMultiRecipientsMixed_1* self = new (ELeave) CTestDeliverMultiRecipientsMixed_1(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;	
-	}
-		
-CTestDeliverMultiRecipientsMixed_1::~CTestDeliverMultiRecipientsMixed_1()
-	{
-	}
-	
-CTestDeliverMultiRecipientsMixed_1::CTestDeliverMultiRecipientsMixed_1(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-	
-//	methods from CTestDeliverBase
-
-void CTestDeliverMultiRecipientsMixed_1::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting multiple (3) recipients\n"));
-	
-	CSmsNumber* rcpt0 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt0);
-	rcpt0->SetAddressL(KRecipientFail);
-	aHeader.Recipients().AppendL(rcpt0);
-	CleanupStack::Pop(rcpt0);
-	
-	CSmsNumber* rcpt1 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt1);
-	rcpt1->SetAddressL(KRecipientOk);
-	aHeader.Recipients().AppendL(rcpt1);
-	CleanupStack::Pop(rcpt1);
-	}
-	
-void CTestDeliverMultiRecipientsMixed_1::CheckSentMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipients have delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-	
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	
-	iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-	
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	
-	iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);	
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-	
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-	
-	TLogId logId = 0;	
-	TBool validId = entry.MessageId(logId);
-	
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId == EFalse);
-		
-	CleanupStack::PopAndDestroy(header);
-	}
-	
-void CTestDeliverMultiRecipientsMixed_1::CheckDeliveredMessageL()
-	{
-	// Need to check the following - 
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status is correctly set
-	// 3. The index summary is correctly set
-
-	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set - round %d...\n"), iMessageId, ++iCheckCount);
-		
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-	
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-	
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-	
-	TMsvSmsEntry entry = MsvEntry().Entry();
-		
-	if( iCheckCount == 1 )
-		{
-		// At least one of the recipients has been delivered to ok - check the 
-		// status of recipient 0 and make decisions based on that.
-		CSmsNumber* pendingRcpt = NULL;
-		
-		if( rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck )
-			{
-			// Recipient 2 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-			
-			pendingRcpt = rcpt0;
-			}
-		else
-			{
-			// Recipient 0 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-			
-			iTestUtils.Printf(_L("--Recipient 0 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt0->Status(), CMsvRecipient::EFailedToSend);
-			iTestUtils.Test()(rcpt0->Status()==CMsvRecipient::EFailedToSend);
-
-			iTestUtils.Printf(_L("--Recipient 0 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt0->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-			iTestUtils.Test()(rcpt0->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-			
-			pendingRcpt = rcpt1;
-			}
-		TLogId logId = 0;	
-		TBool validId = entry.MessageId(logId);
-		
-		iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-		iTestUtils.Test()(validId != EFalse);
-			
-		iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, pendingRcpt->LogId());
-		iTestUtils.Test()(logId == pendingRcpt->LogId());
-		}
-	else
-		{
-		// Status-reports for both recipients have been received - check the 
-		// status of both recipients.
-		iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-		iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-		
-		iTestUtils.Printf(_L("--Recipient 0 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt0->Status(), CMsvRecipient::EFailedToSend);
-		iTestUtils.Test()(rcpt0->Status()==CMsvRecipient::EFailedToSend);
-
-		iTestUtils.Printf(_L("--Recipient 0 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt0->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-		iTestUtils.Test()(rcpt0->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-		
-		iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckSuccessful)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckSuccessful);
-		iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckSuccessful);
-		
-		iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EMixed)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EMixed);
-		iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EMixed);
-
-		// Test is no ended - complete self to stop.
-		CompleteSelf();		
-		}
-	
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverMultiRecipientsMixed_1::TestName()
-	{
-	return KTestDeliverMultiRecipientsMixed_1();
-	}
-
-/*
- * CTestDeliverMultiRecipientsMixed_2
- */
-
-CTestDeliverMultiRecipientsMixed_2* CTestDeliverMultiRecipientsMixed_2::NewL(CSmsTestUtils& aTestUtils)
-	{
-	CTestDeliverMultiRecipientsMixed_2* self = new (ELeave) CTestDeliverMultiRecipientsMixed_2(aTestUtils);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CTestDeliverMultiRecipientsMixed_2::~CTestDeliverMultiRecipientsMixed_2()
-	{
-	}
-
-CTestDeliverMultiRecipientsMixed_2::CTestDeliverMultiRecipientsMixed_2(CSmsTestUtils& aTestUtils)
-: CTestDeliverBase(aTestUtils)
-	{
-	}
-
-//	methods from CTestDeliverBase
-
-void CTestDeliverMultiRecipientsMixed_2::SetRecipientsL(CSmsHeader& aHeader)
-	{
-	iTestUtils.Printf(_L("--Setting multiple (2) recipients\n"));
-
-	CSmsNumber* rcpt0 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt0);
-	rcpt0->SetAddressL(KRecipientFail);
-	aHeader.Recipients().AppendL(rcpt0);
-	CleanupStack::Pop(rcpt0);
-
-	CSmsNumber* rcpt1 = CSmsNumber::NewL();
-	CleanupStack::PushL(rcpt1);
-	rcpt1->SetAddressL(KRecipientFail);
-	aHeader.Recipients().AppendL(rcpt1);
-	CleanupStack::Pop(rcpt1);
-	}
-
-void CTestDeliverMultiRecipientsMixed_2::CheckSentMessageL()
-	{
-	// Need to check the following -
-	// 1. Correct number of recipients
-	// 2. The recipients have delivery status correctly set
-	// 3. The index summary is correctly set
-	// 4. The index message ID is valid.
-	// 5. The index message ID matches that of the recipient
-
-	iTestUtils.Printf(_L("Checking sent message %d has correct flags set...\n"), iMessageId);
-
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-
-	iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-
-	iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-	iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-
-	TMsvSmsEntry entry = MsvEntry().Entry();
-
-	iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EPendingAcks)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EPendingAcks);
-	iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EPendingAcks);
-
-	TLogId logId = 0;
-	TBool validId = entry.MessageId(logId);
-
-	iTestUtils.Printf(_L("--Index message Id validity -> %d - should be %d\n"), validId, EFalse);
-	iTestUtils.Test()(validId == EFalse);
-
-	CleanupStack::PopAndDestroy(header);
-	}
-
-void CTestDeliverMultiRecipientsMixed_2::CheckDeliveredMessageL()
-	{
-	// Need to check the following -
-	// 1. Correct number of recipients
-	// 2. The recipient has delivery status is correctly set
-	// 3. The index summary is correctly set
-
-	iTestUtils.Printf(_L("Checking delivered message %d has correct flags set - round %d...\n"), iMessageId, ++iCheckCount);
-
-	// Restore the recipient...
-	CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *iTestUtils.iRichText);
-	CleanupStack::PushL(header);
-
-	MsvEntry().SetEntryL(KMsvGlobalInBoxIndexEntryId);
-	MsvEntry().SetEntryL(iMessageId);
-	CMsvStore* store = iTestUtils.ReadStoreL();
-	CleanupStack::PushL(store);
-	header->RestoreL(*store);
-	CleanupStack::PopAndDestroy(store);
-
-	iTestUtils.Printf(_L("--Number of recipients -> %d - should be %d\n"), header->Recipients().Count(), 2);
-	iTestUtils.Test()(header->Recipients().Count() == 2);
-
-	CSmsNumber* rcpt0 = header->Recipients()[0];
-	CSmsNumber* rcpt1 = header->Recipients()[1];
-
-	TMsvSmsEntry entry = MsvEntry().Entry();
-
-	if( iCheckCount == 1 )
-		{
-		// At least one of the recipients has been delivered to ok - check the
-		// status of recipient 0 and make decisions based on that.
-		CSmsNumber* pendingRcpt = NULL;
-
-		if( rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck )
-			{
-			// Recipient 2 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-
-			iTestUtils.Printf(_L("--Recipient 1 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt1->Status(), CMsvRecipient::EFailedToSend);
-			iTestUtils.Test()(rcpt1->Status()==CMsvRecipient::EFailedToSend);
-
-			iTestUtils.Printf(_L("--Recipient 1 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt1->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-			iTestUtils.Test()(rcpt1->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-		
-
-			pendingRcpt = rcpt0;
-			}
-		else
-			{
-			// Recipient 0 delivered to first...
-			iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-			iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-
-			iTestUtils.Printf(_L("--Recipient 0 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt0->Status(), CMsvRecipient::EFailedToSend);
-			iTestUtils.Test()(rcpt0->Status()==CMsvRecipient::EFailedToSend);
-
-			iTestUtils.Printf(_L("--Recipient 0 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt0->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-			iTestUtils.Test()(rcpt0->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-			
-			iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EPendingAck)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EPendingAck);
-			iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EPendingAck);
-
-			pendingRcpt = rcpt1;
-			}
-		TLogId logId = 0;
-		TBool validId = entry.MessageId(logId);
-
-		iTestUtils.Printf(_L("--Index message Id validity -> %d - should NOT be %d\n"), validId, EFalse);
-		iTestUtils.Test()(validId != EFalse);
-
-		iTestUtils.Printf(_L("--Index message Id -> %d - should be %d\n"), logId, pendingRcpt->LogId());
-		iTestUtils.Test()(logId == pendingRcpt->LogId());
-		}
-	else
-		{
-		// Status-reports for both recipients have been received - check the
-		// status of both recipients.
-		iTestUtils.Printf(_L("--Recipient 0 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt0->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-		iTestUtils.Test()(rcpt0->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-
-		iTestUtils.Printf(_L("--Recipient 0 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt0->Status(), CMsvRecipient::EFailedToSend);
-		iTestUtils.Test()(rcpt0->Status()==CMsvRecipient::EFailedToSend);
-
-		iTestUtils.Printf(_L("--Recipient 0 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt0->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-		iTestUtils.Test()(rcpt0->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-		
-		iTestUtils.Printf(_L("--Recipient 1 - Delivery status -> %d - should be %d (EAckError)\n"), rcpt1->AckStatus(ESmsAckTypeDelivery), CSmsNumber::EAckError);
-		iTestUtils.Test()(rcpt1->AckStatus(ESmsAckTypeDelivery) == CSmsNumber::EAckError);
-		
-		iTestUtils.Printf(_L("--Recipient 1 - Recipient status -> %d - should be %d (EFailedToSend)\n"), rcpt1->Status(), CMsvRecipient::EFailedToSend);
-		iTestUtils.Test()(rcpt1->Status()==CMsvRecipient::EFailedToSend);
-
-		iTestUtils.Printf(_L("--Recipient 1 - Error status -> %d - should not be %d (ESmsShortMessageReceivedBySME)\n"), rcpt1->Error(), TSmsStatus::ESmsShortMessageReceivedBySME);
-		iTestUtils.Test()(rcpt1->Error()!= TSmsStatus::ESmsShortMessageReceivedBySME);
-		
-		iTestUtils.Printf(_L("--Index summary -> %d - should be %d (EAllFailed)\n"), entry.AckSummary(ESmsAckTypeDelivery), TMsvSmsEntry::EAllFailed);
-		iTestUtils.Test()(entry.AckSummary(ESmsAckTypeDelivery) == TMsvSmsEntry::EAllFailed);
-
-		// Test is no ended - complete self to stop.
-		CompleteSelf();
-		}
-
-	CleanupStack::PopAndDestroy(header);
-	}
-
-const TDesC& CTestDeliverMultiRecipientsMixed_2::TestName()
-	{
-	return KTestDeliverMultiRecipientsMixed_2();
-	}