--- 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);
- }