diff -r 238255e8b033 -r 84d9eb65b26f messagingappbase/smsmtm/test/src/T_SmsEnum.cpp --- 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 -#include -#include -#include -#include -#include -#include "T_SmsEnum.h" -#include -#include - -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 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 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); - }