diff -r 238255e8b033 -r 84d9eb65b26f messagingappbase/smsmtm/test/src/T_SmsSendAs.cpp --- a/messagingappbase/smsmtm/test/src/T_SmsSendAs.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,431 +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 "t_smssendas.h" -#include "smscmds.h" -#include "smuthdr.h" -#include -#include -#include "smsclnt.h" - -RTest test(_L("T_SmsSendAs Testrig")); -CTrapCleanup* theCleanup; - -_LIT(KSmsScript, "sms.script"); -_LIT(KWapScript, "wap.script"); -_LIT(KNbsScript, "nbs.script"); - -LOCAL_C void doMainL() - { - CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; - CleanupStack::PushL(scheduler); - CActiveScheduler::Install( scheduler ); - - CSmsTestUtils* smsTest = CSmsTestUtils::NewL(test); - CleanupStack::PushL(smsTest); - TInt nextTest = 0; - - smsTest->NotifySaPhoneOnL(); - - CSmsSendAsTest* asTest = CSmsSendAsTest::NewL(*smsTest, KNullDesC, nextTest); - CleanupStack::PushL(asTest); - - smsTest->WaitForInitializeL(); - - asTest->StartL(); - - //CleanupStack::PopAndDestroy(3); //SmsTest, scheduler - CleanupStack::PopAndDestroy(asTest); - CleanupStack::PopAndDestroy(smsTest); - CleanupStack::PopAndDestroy(scheduler); - } - -GLDEF_C TInt E32Main() - { - __UHEAP_MARK; - test.Start(_L("Setup")); - theCleanup = CTrapCleanup::New(); - TRAPD(ret,doMainL()); - test(ret==KErrNone); - delete theCleanup; - test.Console()->SetPos(0, 13); - test.End(); - test.Close(); - __UHEAP_MARKEND; - return(KErrNone); - } - - -CSmsSendAsTest::~CSmsSendAsTest() -/** - destructor - */ - { - iSocket.Close(); - iSocketServ.Close(); - } - -CSmsSendAsTest* CSmsSendAsTest::NewL(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest) - { - CSmsSendAsTest* self = new (ELeave) CSmsSendAsTest(aSmsTest, aScriptFile, aNextTest); - CleanupStack::PushL(self); - - self->ConstructL(); - - CleanupStack::Pop(); - return self; - } - - - -CSmsSendAsTest::CSmsSendAsTest(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest) -: CSmsTestBase(aSmsTest, aScriptFile, aNextTest), iState(EStateWaiting) - { - } - -void CSmsSendAsTest::RunAutoL() -/** - Runs tests in sequence, checks iStatus - */ - { - iSmsTest.TestStart(++iNextTest, _L("Test SendAs")); - TestSendAsL(); - User::LeaveIfError(iStatus.Int()); - iSmsTest.TestFinish(iNextTest, KErrNone); - - iSmsTest.TestStart(++iNextTest, _L("Send the messages")); - TestSendingL(); - User::LeaveIfError(iStatus.Int()); - iSmsTest.TestFinish(iNextTest, KErrNone); - } - -void CSmsSendAsTest::ConstructL() - { - iSmsTest.SetLogToFile(); - iSmsTest.DeleteServicesL(); - iSmsTest.CreateServicesL(); - - 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)); - - CActiveScheduler::Add(this); - } - -void CSmsSendAsTest::ShowMenuL() -/** - Shows menu - */ - { - iSmsTest.ResetMenu(); - iSmsTest.AppendToMenuL(_L("Test SendAs")); - iSmsTest.AppendToMenuL(_L("Send the messages")); - iSmsTest.AppendToMenuL(_L("Run auto")); - - TInt result = iSmsTest.DisplayMenu(_L("SMS Service Centre Test")); - - if (result <= 0) - return; - - switch (result) - { - case 1: - TestSendAsL(); - break; - case 2: - TestSendingL(); - break; - case 3: - iSmsTest.SetRunAuto(ETrue); - RunAutoL(); - break; - default: - User::Leave(KErrArgument); - break; - } - - ShowMenuL(); - } - -void CSmsSendAsTest::RunL() -/** - Handles completed async operations - */ - { - CActiveScheduler::Stop(); - - switch (iState) - { - case EStateSending: - { - DoRunSendingL(); - break; - } - default: - { - break; - } - } - } - -void CSmsSendAsTest::DoRunSendingL() -/** - Checks the status - */ - { - if (iOperation) - iSmsTest.SetProgressL(*iOperation); - - if (iStatus == KErrNone) - iStatus = iSmsTest.iProgress.iError; - - iSmsTest.Printf(_L("Printing completed with error %d\n"), iStatus.Int()); - - iSmsTest.DisplaySendingStatesL(*iSelection); - iState = EStateWaiting; - - delete iOperation; - iOperation = NULL; - } - -void CSmsSendAsTest::DoCancel() -/** - Cancels the async operation - */ - { - if (iOperation) - { - iOperation->Cancel(); - iSmsTest.Printf(_L("Operation Cancelled!\n")); - } - delete iOperation; - iOperation = NULL; - } - -void CSmsSendAsTest::TestSendAsL() -/** - Tests SendAs - */ - { - DeleteChildrenL(KMsvGlobalOutBoxIndexEntryId); - - TTime now; - now.HomeTime(); - - CMsvEntrySelection* sel = new (ELeave) CMsvEntrySelection; - CleanupStack::PushL(sel); - iSelection->Reset(); - - iSmsTest(iSmsTest.ReadScriptL(KSmsScript, KMsvGlobalOutBoxIndexEntryId, *sel, now)); - iSmsTest(iSmsTest.ReadScriptL(KWapScript, KMsvGlobalOutBoxIndexEntryId, *sel, now)); - iSmsTest(iSmsTest.ReadScriptL(KNbsScript, KMsvGlobalOutBoxIndexEntryId, *sel, now)); - const TInt count = sel->Count(); - - iSmsTest(count); - - CRichText* richOld = CRichText::NewL(iSmsTest.iParaFormat, iSmsTest.iCharFormat); - CleanupStack::PushL(richOld); - - CRichText* richNew = CRichText::NewL(iSmsTest.iParaFormat, iSmsTest.iCharFormat); - CleanupStack::PushL(richNew); - - CSmsHeader* headerOld = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *richOld); - CleanupStack::PushL(headerOld); - - CSmsHeader* headerNew = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *richNew); - CleanupStack::PushL(headerNew); - - for (TInt i = 0; i < count; i++) //order important - { - //Get the existing message - TMsvId id = sel->At(i); - iSmsTest.SetEntryL(id); - - TUid bioType; - bioType.iUid = iSmsTest.Entry().iBioType; - - iSmsTest.Printf(_L("%d/%d SendAs for BioType %d\n"), i + 1, count, bioType.iUid); - - CMsvStore* store = iSmsTest.ReadStoreL(); - CleanupStack::PushL(store); - headerOld->RestoreL(*store); - store->RestoreBodyTextL(*richOld); - CleanupStack::PopAndDestroy(store); - - CSendAs* sendAs = CSendAs::NewL(*this); - CleanupStack::PushL(sendAs); - - sendAs->SetMtmL(KUidMsgTypeSMS); - iSmsTest(sendAs->AvailableServices().Count()); - sendAs->SetService(0); - sendAs->CreateMessageL(KMsvGlobalOutBoxIndexEntryId); - - for (TInt j = 0; j < headerOld->Recipients().Count(); j++) - { - CSmsNumber* number = headerOld->Recipients()[j]; - TPtrC name(number->Name()); - TPtrC addr(number->Address()); - sendAs->AddRecipientL(addr, name); - } - - sendAs->SetBodyL(*richOld); - - if (bioType.iUid != 0) - sendAs->SetBioTypeL(bioType); - - sendAs->SaveMessageL(ETrue); - - //Get the new message - CSmsClientMtm* mtm = REINTERPRET_CAST(CSmsClientMtm*, &sendAs->ClientMtm()); - CMsvEntry& entry = mtm->Entry(); - store = entry.ReadStoreL(); - CleanupStack::PushL(store); - headerNew->RestoreL(*store); - store->RestoreBodyTextL(*richNew); - CleanupStack::PopAndDestroy(store); - - iSmsTest.Printf(_L("\tCreated %d\n"), entry.EntryId()); - test(id != entry.EntryId()); - CompareHeadersL(*headerOld, *headerNew); - - CSmsSettings* msgSettings = CSmsSettings::NewL(); - CleanupStack::PushL(msgSettings); - - //Check the settings are the same (except charset) - headerNew->GetSmsSettingsL(*msgSettings); - CompareSettingsL(mtm->ServiceSettings(), *msgSettings); - CleanupStack::PopAndDestroy(msgSettings); - - iSelection->AppendL(entry.EntryId()); - - CleanupStack::PopAndDestroy(sendAs); - } - - CleanupStack::PopAndDestroy(5); - } - -void CSmsSendAsTest::CompareSettingsL(const CSmsMessageSettings& aS1, const CSmsMessageSettings& aS2) -/** - Compares two sms message settings - - @param aS1 A sms message setting - @param aS2 A sms message setting - */ - { - RTest& t = iSmsTest.Test(); - t(aS1.ValidityPeriod() == aS2.ValidityPeriod()); - t(aS1.ValidityPeriodFormat() == aS2.ValidityPeriodFormat()); - t(aS1.RejectDuplicate() == aS2.RejectDuplicate()); - t(aS1.DeliveryReport() == aS2.DeliveryReport()); - t(aS1.ReplyPath() == aS2.ReplyPath()); - t(aS1.MessageConversion() == aS2.MessageConversion()); - } - -void CSmsSendAsTest::CompareHeadersL(const CSmsHeader& aH1, const CSmsHeader& aH2) const -/** - Compares two sms headers - - @param aH1 A sms message header - @param aH2 A sms message header - */ - { - RTest& t = iSmsTest.Test(); - t(aH1.Type() == aH2.Type()); - - t(aH1.Recipients().Count() == aH2.Recipients().Count()); - - for (TInt i = 0; i < aH1.Recipients().Count(); i++) - { - CSmsNumber* number1 = aH1.Recipients()[i]; - CSmsNumber* number2 = aH2.Recipients()[i]; - - t(number1->Address().Compare(number2->Address()) == 0); - t(number1->Name().Compare(number2->Name()) == 0); - } - - t(aH1.FromAddress().CompareF(aH2.FromAddress()) == 0); - - TInt length = aH1.Message().Buffer().Length(); - HBufC* hBuf1 = HBufC::NewLC(length); - TPtr buf1 = hBuf1->Des(); - aH1.Message().Buffer().Extract(buf1, 0, length); - - length = aH2.Message().Buffer().Length(); - HBufC* hBuf2 = HBufC::NewLC(length); - TPtr buf2 = hBuf2->Des(); - aH2.Message().Buffer().Extract(buf2, 0, length); - - t(buf1.Compare(buf2) == 0); - - CleanupStack::PopAndDestroy(2); //hBuf1, hBuf2 - } - -void CSmsSendAsTest::TestSendingL() -/** - Tests sending - */ - { - iSmsTest.Test().Next(_L("Test Sending")); - - if (!iSelection->Count()) - User::Leave(KErrNotFound); - - delete iOperation; - iOperation = NULL; - iState = EStateSending; - - MsvEntry().SetEntryL(KMsvGlobalOutBoxIndexEntryId); - iOperation = MsvEntry().CopyL(*iSelection, iSmsTest.iSmsServiceId, iStatus); - SetActive(); - CActiveScheduler::Start(); - } - - -void CSmsSendAsTest::DeleteChildrenL(TMsvId aParent) -/** - Deletes children - - @param aParent A Message Id - */ - { - iSmsTest.SetEntryL(aParent); - CMsvEntrySelection* sel = iSmsTest.ChildrenWithMtmLC(KUidMsgTypeSMS); - TInt count = sel->Count(); - - while (count--) - { - iSmsTest.DeleteEntryL(sel->At(count)); - } - - CleanupStack::PopAndDestroy(sel); - } - -TBool CSmsSendAsTest::CapabilityOK(TUid /*aCapability*/, TBool /*aResponse*/) -/** - This is required by MSendAsObserver - */ - { - return ETrue; - } -