--- a/messagingappbase/smsmtm/test/src/T_smcm.cpp Fri Apr 16 14:56:15 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,869 +0,0 @@
-// Copyright (c) 2000-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_smcm.h"
-#include <e32math.h>
-#include <csmsemailfields.h>
-#include <emstestutils.h>
-#include <emsformatie.h>
-#include <emspictureie.h>
-#include <csmsaccount.h>
-
-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);
- }
-
-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;
-
- CSmcmTest* SmcmTest = CSmcmTest::NewLC(*smsTest, KNullDesC, nextTest);
-
- SmcmTest->StartL();
-
- CleanupStack::PopAndDestroy(3); //SmcmTest. scheduler
-
- }
-
-CSmcmTest::CSmcmTest(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest)
-: CSmsTestBase(aSmsTest, aScriptFile, aNextTest)
- {
- }
-
-void CSmcmTest::RunAutoL()
- {
- iSmsTest.TestStart(++iNextTest, _L("CSmsSettings"));
- TestSettingsL();
- iSmsTest.TestFinish(iNextTest);
-
- iSmsTest.TestStart(++iNextTest, _L("CSmsClientMtm Capabilities"));
- TestCapabilitiesL();
- iSmsTest.TestFinish(iNextTest);
-
- iSmsTest.TestStart(++iNextTest, _L("CSmsClientMtm Global Find"));
- TestFindL();
- iSmsTest.TestFinish(iNextTest);
-
- iSmsTest.TestStart(++iNextTest, _L("CSmsClientMtm Find Alias"));
- TestFindAliasL();
- iSmsTest.TestFinish(iNextTest);
-
- iSmsTest.TestStart(++iNextTest, _L("CSmsClientMtm Reply"));
- TestReplyL();
- TestReplyEmailL();
- iSmsTest.TestFinish(iNextTest);
-
- iSmsTest.TestStart(++iNextTest, _L("CSmsClientMtm Forward"));
- TestForwardL();
- TestForwardEmailL();
- iSmsTest.TestFinish(iNextTest);
-
- iSmsTest.TestStart(++iNextTest, _L("CSmsClientMtm Async Functions"));
-// There are no async function in sms client mtm
- iSmsTest.TestFinish(iNextTest);
-
- iSmsTest.TestStart(++iNextTest, _L("CSmsClientMtm Sync Functions"));
- TestSyncFunctionsL();
- iSmsTest.TestFinish(iNextTest);
- }
-
-CSmcmTest::~CSmcmTest()
- {
- delete iSmsHeader;
- delete iRichText;
- delete iParaLayer;
- delete iCharLayer;
- }
-
-void CSmcmTest::ConstructL()
- {
- iSmsTest.SetLogToFile(); // Lets log to a file
- iSmsTest.InstantiateClientMtmsL();
-
- iSelection = new (ELeave) CMsvEntrySelection();
- iTimer = CTestTimer::NewL();
-
- iParaLayer =CParaFormatLayer::NewL(); // Rich Text for the body part of the message
- iCharLayer = CCharFormatLayer::NewL();
- iRichText = CRichText::NewL(iParaLayer, iCharLayer, CEditableText::EFlatStorage,256);
-
- CActiveScheduler::Add(this);
- }
-
-CSmcmTest* CSmcmTest::NewLC(CSmsTestUtils& aSmsTest, const TDesC& aScriptFile, TInt& aNextTest)
- {
- CSmcmTest* self = new (ELeave) CSmcmTest(aSmsTest, aScriptFile, aNextTest);
- CleanupStack::PushL(self);
-
- self->ConstructL();
- return self;
- }
-
-void CSmcmTest::ShowMenuL()
- {
- iSmsTest.ResetMenu();
-
- iSmsTest.AppendToMenuL(_L("Start"));
-
- TInt result = iSmsTest.DisplayMenu(_L("SMS Client MTM Test"));
-
- if (result <= 0)
- return;
-
- switch (result)
- {
- case 1:
- RunAutoL();
- break;
- default:
- User::Leave(KErrArgument);
- break;
- }
-
- if (!iSmsTest.RunAuto())
- {
- iSmsTest.Printf(_L("Press any key to continue...\n"));
- iSmsTest.Test().Getch();
- }
-
- ShowMenuL();
- }
-
-void CSmcmTest::TestSettingsL()
- {
- iSmsTest.Printf(_L("Testing Create Settings...\n"));
- MsvEntry().SetEntryL(iSmsTest.iSmsServiceId);
-
-// Lets create sms settings (just in case it does not exist yet)
-
- CSmsSettings* settings = CSmsSettings::NewL();
- CleanupStack::PushL(settings);
- CSmsAccount* account = CSmsAccount::NewLC();
- account->InitialiseDefaultSettingsL(*settings);
- settings->AddServiceCenterL(_L("Radiolinja0"),_L("+358508771010"));
- settings->AddServiceCenterL(_L("Radiolinja1"),_L("+358508771010"));
- settings->AddServiceCenterL(_L("Nokia"),_L("+358454400050"));
- settings->SetDefaultServiceCenter(2);
- iSmsTest(settings->DefaultServiceCenter()==2);
- settings->SetValidityPeriod(ESmsVPWeek);
- settings->SetReplyQuoted(ETrue);
- settings->SetRejectDuplicate(ETrue);
- settings->SetDelivery(ESmsDeliveryImmediately);
- settings->SetDeliveryReport(ETrue);
- settings->SetReplyPath(EFalse);
- settings->SetMessageConversion(ESmsConvPIDNone);
- settings->SetCanConcatenate(ETrue);
- settings->SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabet8Bit);
- settings->SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFSemiOctet);
- settings->SetStatusReportHandling(CSmsSettings::EMoveReportToInboxVisible);
- settings->SetSpecialMessageHandling(CSmsSettings::EMoveReportToInboxVisible);
-
- account->SaveSettingsL(*settings);
- CleanupStack::PopAndDestroy(account);
-
- iSmsTest.iServiceSettings->CopyL(*settings);
- CleanupStack::PopAndDestroy(settings);
- }
-
-// Now we shall test the recipient handling, find and validate features
-
-void CSmcmTest::TestFindL()
- {
- iSmsTest.Test().Next(_L("Testing CSmsClientMtm Global Find"));
-
-// Before testing the find and validate we need a dummy message to play with
-
- TMsvPartList partList;
- TMsvId id = iSmsTest.CreateDummyMessageToSendL();
- Client().SwitchCurrentEntryL(id);
-
-// Lets load the message we just created
- Client().LoadMessageL();
-
-// And add some recipients
- Client().AddAddresseeL(_L("+358503367709"), _L("Mico3"));
- Client().AddAddresseeL(_L("+358503367709"), _L("Mico4"));
- Client().AddAddresseeL(_L("//\\"), _L("\n"));
- Client().AddAddresseeL(_L("\n0"), _L("^"));
- Client().AddAddresseeL(_L("1234"), _L("~¨"));
- Client().AddAddresseeL(_L("äöåÖÅÖÖ¤"), _L("fdsa4324521{[]}"));
- Client().AddAddresseeL(_L("äöåÖÅÖÖ¤"), _L(""));
- Client().AddAddresseeL(_L("äöåÖÅÖÖ¤"));
-
-// Remove Recipient
- Client().RemoveAddressee(2);
-
-// Validating Message
- partList=KMsvMessagePartRecipient;
- iSmsTest(Client().ValidateMessage(partList)); // All the addresses are not valid
-
- Client().RemoveAddressee(Client().AddresseeList().Count()-1);
- Client().RemoveAddressee(Client().AddresseeList().Count()-1);
- Client().RemoveAddressee(Client().AddresseeList().Count()-1);
- Client().RemoveAddressee(Client().AddresseeList().Count()-2);
- Client().RemoveAddressee(Client().AddresseeList().Count()-2);
-
- partList=KMsvMessagePartRecipient; // supported
- iSmsTest(!Client().ValidateMessage(partList));
- partList=KMsvMessagePartBody; // not supported, returns 0
- iSmsTest(!Client().ValidateMessage(partList));
- partList=KMsvMessagePartOriginator; // not supported, returns 0
- iSmsTest(!Client().ValidateMessage(partList));
- partList=KMsvMessagePartDescription; // not supported, returns 0
- iSmsTest(!Client().ValidateMessage(partList));
- partList=KMsvMessagePartDate; // not supported, returns 0
- iSmsTest(!Client().ValidateMessage(partList));
- partList=KMsvMessagePartAttachments; // not supported, returns 0
- iSmsTest(!Client().ValidateMessage(partList));
- partList=KMsvMessagePartBody|KMsvMessagePartRecipient;
- iSmsTest(!Client().ValidateMessage(partList));
- iSmsTest.Printf(_L("Test Validate Passed\n"));
-
-// Find in body and recipients
- Client().AddAddresseeL(_L("+358503367709"), _L("Mr. Tester"));
- partList=KMsvMessagePartRecipient;
- iSmsTest(Client().Find(_L("est"),partList)==KMsvMessagePartRecipient);
- partList=KMsvMessagePartBody;
- iSmsTest(Client().Find(_L("end"),partList)==KMsvMessagePartBody);
- partList=KMsvMessagePartOriginator;
- iSmsTest(!Client().Find(_L("end"),partList));
- partList=KMsvMessagePartDescription; // not supported, returns 0
- iSmsTest(Client().Find(_L("end"),partList));
- partList=KMsvMessagePartDate; // not supported, returns 0
- iSmsTest(!Client().Find(_L("end"),partList));
- partList=KMsvMessagePartAttachments; // not supported, returns 0
- iSmsTest(!Client().Find(_L("end"),partList));
- partList=KMsvMessagePartBody|KMsvMessagePartRecipient;
-// resultList=Client().Find(_L(""),partList); // crashes with empty string
- iSmsTest(!Client().Find(_L("\n"),partList));
- iSmsTest(!Client().Find(_L("äöå"),partList));
- iSmsTest(!Client().Find(_L("{[}]"),partList));
- iSmsTest(!Client().Find(_L("\\"),partList));
- iSmsTest(!Client().Find(_L("4352316542631753dfgfdgs4t6543w563vsd4"),partList));
- iSmsTest( Client().Find(_L("~"),partList));
- iSmsTest(!Client().Find(_L("^"),partList));
- iSmsTest(!Client().Find(_L(" \"dsasaf¤;¨"),partList));
- iSmsTest(!Client().Find(_L("\\"),partList));
- iSmsTest(!Client().Find(_L(" "),partList)); // alt+255
- iSmsTest(Client().Find(_L("¨"),partList));
- iSmsTest(!Client().Find(_L("/\\"),partList));
- iSmsTest(!Client().Find(_L("\\ "),partList));
- iSmsTest.Printf(_L("Test Find Passed\n"));
- }
-
-void CSmcmTest::TestCapabilitiesL()
- {
-// Query MTM's capabilities
- TInt response;
- iSmsTest(Client().QueryCapability(KUidMtmQueryMaxBodySize,response)==KErrNone);
-// iSmsTest(response==KSmscMaxTotalMsgSize);
- iSmsTest(Client().QueryCapability(KUidMtmQueryMaxTotalMsgSize,response)==KErrNone);
-// iSmsTest(response==KSmcmMaxMessageNumber*KSmcmMaxCharsInMessageConcatenated7Bit);
- iSmsTest(Client().QueryCapability(KUidMtmQuerySupportedBody,response)==KErrNone);
- iSmsTest(response==KMtm7BitBody + KMtm8BitBody + KMtm16BitBody);
- iSmsTest(Client().QueryCapability(KUidMtmQuerySupportAttachments,response)==KErrNotSupported);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMtmQuerySupportSubject,response)==KErrNotSupported);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMtmQuerySupportsFolder,response)==KErrNotSupported);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMtmQueryOffLineAllowed,response)==KErrNotSupported);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMtmQueryCanSendMsg,response)==KErrNone);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMtmQueryCanReceiveMsg,response)==KErrNone);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMtmQueryMaxRecipientCount,response)==KErrNone);
- iSmsTest(response==-1);
- iSmsTest(Client().QueryCapability(KUidMtmQuerySendAsRequiresRenderedImage,response)==KErrNotSupported);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMtmQuerySendAsRenderingUid,response)==KErrNotSupported);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMsvMtmQueryEditorUid,response)==KErrNone);
- iSmsTest(response==268441151); // 0x1000163f in hex form
- iSmsTest(Client().QueryCapability(KUidMsvQuerySupportsBioMsg,response)==KErrNone);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidMsvQuerySupportsScheduling,response)==KErrNone);
- iSmsTest(response);
- iSmsTest(Client().QueryCapability(KUidSmcmTestNonSense,response)==KErrNotSupported);
- iSmsTest(response);
- iSmsTest.Printf(_L("Test Query Capabilities Passed\n"));
- }
-
-// Now testing find alias
-void CSmcmTest::TestFindAliasL()
- {
- iSmsTest.Test().Next(_L("CSmsClientMtm Find Alias"));
- iSmsTest.Printf(_L("This test is INCOMPLETE\n"));
-
- TMsvEntry entry;
- entry.iType=KUidMsvMessageEntry;
- entry.SetSendingState(KMsvSendStateNotApplicable);
-
- // Begin extracted code
- iSmsTest.iRichText->Reset();
- iSmsTest.iRichText->InsertL(0,_L("Test message"));
- CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *iSmsTest.iRichText);
- CleanupStack::PushL(header);
-
- header->SetFromAddressL(KScriptItemRecipientsDef);
- header->Message().SetServiceCenterAddressL(KScriptItemSCDef);
-
- entry.iDetails.Set(_L("host")); //set alias
-
- TTime now;
- now.HomeTime();
- iSmsTest.CreateMessageL(KMsvGlobalInBoxIndexEntryId, entry, *header, *iSmsTest.iRichText, now);
- entry.SetReadOnly(ETrue);
- iSmsTest.ChangeEntryL(entry);
- TMsvId id = entry.Id();
- CleanupStack::PopAndDestroy(header); //header
-
- // End extracted code
-
- iSmsTest.SetEntryL(id);
-
- Client().SwitchCurrentEntryL(id); // Lets point at the received message
- Client().LoadMessageL();
-
- TMsvPartList partList;
- partList=KMsvMessagePartOriginator;
- //Find alias
- iSmsTest(Client().Find(_L("host"),partList)==KMsvMessagePartOriginator);
- iSmsTest.Printf(_L("Alias Found\n"));
- iSmsTest.Printf(_L("Find Alias test passed\n"));
- }
-
-// Now testing replying to received messages
-void CSmcmTest::TestReplyL()
- {
- iSmsTest.Test().Next(_L("CSmsClientMtm Reply"));
- iSmsTest.Printf(_L("This test is INCOMPLETE\n"));
-
- TMsvEntry entry;
- entry.iType=KUidMsvMessageEntry;
- entry.SetSendingState(KMsvSendStateNotApplicable);
-
- // Begin extracted code
- iSmsTest.iRichText->Reset();
- iSmsTest.iRichText->InsertL(0,_L("This is a test message with formatting and pictures"));
- CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *iSmsTest.iRichText);
- CleanupStack::PushL(header);
-
- // Add formatting and picture
- CEmsFormatIE* object = CEmsFormatIE::NewL();
- CleanupStack::PushL(object);
- object->SetStartPosition(10);
- object->SetFormatLength(10);
- object->SetBold(ETrue);
- header->Message().AddEMSInformationElementL(*object);
- CleanupStack::PopAndDestroy(object);
-
- CEmsPictureIE* pic = EmsTestUtils::CreatePictureL(0);
- CleanupStack::PushL(pic);
- pic->SetStartPosition(20);
- header->Message().AddEMSInformationElementL(*pic);
- CleanupStack::PopAndDestroy(pic);
-
- header->SetFromAddressL(KScriptItemRecipientsDef);
- header->Message().SetServiceCenterAddressL(KScriptItemSCDef);
-
- TTime now;
- now.HomeTime();
- iSmsTest.CreateMessageL(KMsvGlobalInBoxIndexEntryId, entry, *header, *iSmsTest.iRichText, now);
- entry.SetReadOnly(ETrue);
- iSmsTest.ChangeEntryL(entry);
- TMsvId id = entry.Id();
- CleanupStack::PopAndDestroy(1); //header
-
- // End extracted code
-
- iSmsTest.SetEntryL(id);
-
- Client().SwitchCurrentEntryL(id); // Lets point at the received message
- Client().LoadMessageL();
-
- TMsvPartList part=0;
- CMsvOperationWait* wait = CMsvOperationWait::NewLC();
- CMsvOperation* op=Client().ReplyL(KMsvDraftEntryId, part, wait->iStatus);
- CleanupStack::PushL(op);
- wait->Start();
- CActiveScheduler::Start();
-
- TPckgBuf<TMsvId> pkg;
- pkg.Copy(op->ProgressL());
- TMsvId progress = pkg();
-
- CleanupStack::PopAndDestroy(2); //op, wait
-
- // let's check to see if the inbox message and the reply are the same
- // (this call will compare ems objects as well
- if (!iSmsTest.AreMessagesSameTextL(id, progress, ETrue))
- {
- iSmsTest.Printf(_L("EMS objects do not compare!!\n"));
- }
- else
- {
- iSmsTest.Printf(_L("EMS objects compare OK.\n"));
- }
-
- Client().SwitchCurrentEntryL(progress);
- Client().LoadMessageL();
-
- Client().Body().InsertL(0,_L("This is reply"));
- Client().SaveMessageL();
- }
-
-TMsvId CSmcmTest::CreateEmailSmsMessageL(const TDesC& aEmailMessageData)
- {
- RFs fs;
- User::LeaveIfError(fs.Connect());
- CleanupClosePushL(fs);
-
- CSmsMessage* message = CSmsMessage::NewL(fs, CSmsPDU::ESmsDeliver, CSmsEditorBuffer::NewL(*iRichText), EFalse);
- CleanupStack::PushL(message);
-
- CSmsBufferBase& buffer = message->Buffer();
- buffer.Reset();
- buffer.InsertL(0, aEmailMessageData);
-
- // Set the PID for email.
- CSmsPDU& pdu = message->SmsPDU();
- if( pdu.ProtocolIdentifierPresent() )
- {
- pdu.SetPIDType(TSmsProtocolIdentifier::ESmsPIDTelematicInterworking);
- pdu.SetTelematicDeviceIndicator(TSmsProtocolIdentifier::ESmsTelematicDevice);
- pdu.SetTelematicDeviceType(TSmsProtocolIdentifier::ESmsInternetElectronicMail);
- }
-
- // Create a new SMS header
- CSmsHeader* header = CSmsHeader::NewL(message);
- CleanupStack::Pop(message);
- CleanupStack::PushL(header);
-
- header->SetFromAddressL(KScriptItemRecipientsDef);
- header->Message().SetServiceCenterAddressL(KScriptItemSCDef);
-
- // Set the entry data...
- TMsvEntry entry;
- entry.iType = KUidMsvMessageEntry;
- entry.SetSendingState(KMsvSendStateNotApplicable);
- TSmsUtilities::PopulateMsgEntry(entry, header->Message(), iSmsTest.iSmsServiceId);
- TTime now;
- now.HomeTime();
- entry.iDate = now;
-
- const CSmsEmailFields& fields = header->EmailFields();
- // Set the details fiels to the address field.
- iSmsTest(fields.HasAddress());
- entry.iDetails.Set(fields.Addresses().MdcaPoint(0).Left(KSmsDetailsLength));
-
- // Set the description to either the subject or the beginning part of the
- // body text.
- HBufC* desBuffer = HBufC::NewLC(Client().ServiceSettings().DescriptionLength());
- TPtr description(desBuffer->Des());
- if( fields.Subject().Length() > 0 )
- {
- // There is a subject - use this as the description
- description.Copy(fields.Subject().Left(description.MaxLength()));
- }
- else
- {
- // No subject - use the beginning part of the body text.
- CSmsBufferBase& body = header->Message().Buffer();
- TInt length = body.Length();
- HBufC* buf = HBufC::NewLC(length);
- TPtr ptr(buf->Des());
- body.Extract(ptr, 0, length);
-
- description.Copy(ptr.Left(description.MaxLength()));
- CleanupStack::PopAndDestroy(buf);
- }
- entry.iDescription.Set(description);
-
- // Create the entry in the inbox.
- iSmsTest.SetEntryL(KMsvGlobalInBoxIndexEntryId);
- iSmsTest.CreateEntryL(entry);
- Session().CleanupEntryPushL(entry.Id());
-
- // Store the header...
- iSmsTest.SetEntryL(entry.Id());
- CMsvStore* store = iSmsTest.EditStoreL();
- CleanupStack::PushL(store);
-
- header->StoreL(*store);
-
- // Store the body text - need to insert into rich text object.
- iSmsTest.iRichText->Reset();
- TInt length = header->Message().Buffer().Length();
- HBufC* buf = HBufC::NewLC(length);
-
- TPtr ptr(buf->Des());
- header->Message().Buffer().Extract(ptr, 0, length);
- iSmsTest.iRichText->InsertL(0, ptr);
-
- store->StoreBodyTextL(*iSmsTest.iRichText);
- store->CommitL();
-
- entry.iSize = store->SizeL();
- entry.SetReadOnly(ETrue);
- iSmsTest.ChangeEntryL(entry);
-
- CleanupStack::PopAndDestroy(2, store); // store, buf
- Session().CleanupEntryPop();
- CleanupStack::PopAndDestroy(3, &fs); // fs, header, desBuffer
-
- return entry.Id();
- }
-
-void CSmcmTest::DoTestReplyEmailL(const TDesC& aEmailMessageData, const TDesC& aAddress, const TDesC& aSubject)
- {
- // Create an email message and then a reply message to it.
- TMsvId id = CreateEmailSmsMessageL(aEmailMessageData);
- iSmsTest.SetEntryL(id);
- Client().SwitchCurrentEntryL(id);
- Client().LoadMessageL();
-
- TMsvPartList part=0;
- CMsvOperationWait* wait = CMsvOperationWait::NewLC();
- CMsvOperation* op=Client().ReplyL(KMsvDraftEntryId, part, wait->iStatus);
- CleanupStack::PushL(op);
- wait->Start();
- CActiveScheduler::Start();
-
- TPckgBuf<TMsvId> pkg;
- pkg.Copy(op->ProgressL());
- TMsvId reply = pkg();
-
- CleanupStack::PopAndDestroy(2, wait); // op, wait
-
- // Switch and load the reply message
- Client().SwitchCurrentEntryL(reply);
- Client().LoadMessageL();
-
- // Check the reply message...
- const CSmsHeader& replyHeader = Client().SmsHeader();
-
- // 1. Email fields...
- const CSmsEmailFields& fields = replyHeader.EmailFields();
- iSmsTest(fields.Addresses().MdcaCount() == 1);
- iSmsTest(fields.Addresses().MdcaPoint(0).Compare(aAddress) == 0);
- iSmsTest(fields.Subject().Compare(aSubject) == 0);
-
- // 2. PID...
- CSmsSettings* smsset = CSmsSettings::NewL();
- CleanupStack::PushL(smsset);
- replyHeader.GetSmsSettingsL(*smsset);
- iSmsTest(smsset->MessageConversion()==ESmsConvMail);
- CleanupStack::PopAndDestroy(smsset);
-
- // 3. Email <-> SMS gateway (i.e. the recipient)
- const CArrayPtrFlat<CSmsNumber>& rcpts = replyHeader.Recipients();
- iSmsTest(rcpts.Count() == 1);
- const CSmsNumber& rcpt = *rcpts.At(0);
- iSmsTest(rcpt.Address().Compare(KScriptItemRecipientsDef) == 0);
-
- // 4. Description - should be the same as the subject.
- TMsvEntry replyEntry = Client().Entry().Entry();
- TInt maxDesLength = Client().ServiceSettings().DescriptionLength();
- iSmsTest(replyEntry.iDescription.Compare(fields.Subject().Left(maxDesLength)) == 0);
-
- // 5. Details - should be the same as the address.
- iSmsTest(replyEntry.iDetails.Compare(fields.Addresses().MdcaPoint(0).Left(KSmsDetailsLength)) == 0);
- }
-
-void CSmcmTest::TestReplyEmailL()
- {
- iSmsTest.Test().Next(_L("CSmsClientMtm Reply (Email SMS"));
-
- _LIT(KTestEmailAddress1, "user@domain1.domain2");
- _LIT(KTestEmailSubject1, "Re: a subject");
- _LIT(KTestEmailMessage1, "user@domain1.domain2##a subject#some body text");
- DoTestReplyEmailL(KTestEmailMessage1, KTestEmailAddress1, KTestEmailSubject1);
-
- _LIT(KTestEmailAddress2, "user@domain1.domain2");
- _LIT(KTestEmailSubject2, "");
- _LIT(KTestEmailMessage2, "user@domain1.domain2 some body text");
- DoTestReplyEmailL(KTestEmailMessage2, KTestEmailAddress2, KTestEmailSubject2);
- }
-
-TBool CSmcmTest::TestForwardBodyL(const CRichText& aBody, const TDesC& aExpected) const
- {
- HBufC* body = HBufC::NewLC(aBody.DocumentLength());
- TPtr bodyPtr(body->Des());
-
- aBody.Extract(bodyPtr);
-
- const TBool check = (*body == aExpected);
-
- CleanupStack::PopAndDestroy(body);
-
- return check;
- }
-
-TBool CSmcmTest::TestForwardEntry(const TMsvEntry& aOriginalEntry, const TMsvEntry& aForwardEntry) const
- {
- TBool ret = (aOriginalEntry.SendingState() == aForwardEntry.SendingState());
- ret = ret && (aOriginalEntry.iBioType == aForwardEntry.iBioType);
- ret = ret && (aOriginalEntry.iDescription == aForwardEntry.iDescription);
- return ret;
- }
-
-HBufC* CSmcmTest::CreateRandomLC(TInt aLen) const
- {
- HBufC* originalMsg = HBufC::NewLC(aLen);
- TPtr originalPtr(originalMsg->Des());
- originalPtr.SetLength(aLen);
- TUint16* ptr = &originalPtr[0];
- while (aLen--)
- {
- *ptr++ = TUint16(Math::Random() % (128 - 65) + 65);
- }
-
- return originalMsg;
- }
-
-void CSmcmTest::TestForwardL(const TMsvEntry& aEntry, TInt aBodyLength)
- {
- //Create new message
- _LIT(KTestForwardAddress, "+445554444333");
- _LIT(KTestForwardName, "RonaldMcDonald");
-
- TTime now;
- now.HomeTime();
- TMsvEntry originalEntry(aEntry);
-
- //Set the body
- HBufC* originalBody = CreateRandomLC(aBodyLength);
- iSmsTest.iRichText->Reset();
- iSmsTest.iRichText->InsertL(0, *originalBody);
-
- CSmsHeader* originalHeader = CSmsHeader::NewL(CSmsMessage::NewL(iSmsTest.FileSession(), CSmsPDU::ESmsDeliver, CSmsEditorBuffer::NewL(*iSmsTest.iRichText)));
- CleanupStack::PushL(originalHeader);
-
- // Add formatting and picture
- CEmsFormatIE* object = CEmsFormatIE::NewL();
- CleanupStack::PushL(object);
- object->SetStartPosition(0);
- object->SetFormatLength(5);
- object->SetBold(ETrue);
- originalHeader->Message().AddEMSInformationElementL(*object);
- CleanupStack::PopAndDestroy(object);
-
- CEmsPictureIE* pic = EmsTestUtils::CreatePictureL(0);
- CleanupStack::PushL(pic);
- pic->SetStartPosition(0);
- originalHeader->Message().AddEMSInformationElementL(*pic);
- CleanupStack::PopAndDestroy(pic);
-
- //Add a recipient
- CSmsNumber* originalNumber = CSmsNumber::NewL();
- CleanupStack::PushL(originalNumber);
- originalNumber->SetAddressL(KTestForwardAddress);
- originalNumber->SetNameL(KTestForwardName);
- originalHeader->Recipients().AppendL(originalNumber);
- CleanupStack::Pop(originalNumber);
-
- //Create the new message
- iSmsTest.CreateMessageL(KMsvGlobalOutBoxIndexEntryId, originalEntry, *originalHeader, *iSmsTest.iRichText, now);
- Session().CleanupEntryPushL(originalEntry.Id());
-
- MsvEntry().SetEntryL(originalEntry.Id());
- originalEntry = MsvEntry().Entry();
- // Need to secure the memory for the iDescription since the entry will change later on
- HBufC* descBuf= originalEntry.iDescription.AllocLC();
- originalEntry.iDescription.Set(descBuf->Ptr(), descBuf->Length());
-
- //Switch current entry and set the message body
- Client().SwitchCurrentEntryL(originalEntry.Id());
- Client().LoadMessageL();
-
- //Check body
- iSmsTest(TestForwardBodyL(Client().Body(), *originalBody));
- //Forward the message
- TMsvPartList part=0;
- CMsvOperationWait* wait = CMsvOperationWait::NewLC();
- wait->Start();
-
- CMsvOperation* op = Client().ForwardL(KMsvDraftEntryId, part, wait->iStatus);
- CleanupStack::PushL(op);
-
- CActiveScheduler::Start();
-
- iSmsTest(wait->iStatus.Int() == KErrNone);
-
- //Get the new message ID
- TPckgBuf<TMsvId> pkg;
- pkg.Copy(op->ProgressL());
- const TMsvId progress = pkg();
-
- CleanupStack::PopAndDestroy(op);
- CleanupStack::PopAndDestroy(wait);
-
- op = NULL;
-
- Session().CleanupEntryPushL(progress);
-
- Client().SwitchCurrentEntryL(progress);
- Client().LoadMessageL();
-
- //Check the new message body
- iSmsTest(TestForwardBodyL(Client().Body(), *originalBody));
-
- //Check the entry
- iSmsTest(TestForwardEntry(originalEntry, Client().Entry().Entry()));
-
- // let's check to see if the inbox message and the forward are the same
- // (this call will compare ems objects as well
- if (!iSmsTest.AreMessagesSameTextL(originalEntry.Id(), progress, ETrue))
- {
- iSmsTest.Printf(_L("EMS objects do not compare!!\n"));
- }
- else
- {
- iSmsTest.Printf(_L("EMS objects compare OK.\n"));
- }
-
- CleanupStack::PopAndDestroy(); //message
- CleanupStack::PopAndDestroy(descBuf);
- CleanupStack::PopAndDestroy(); //message
- CleanupStack::PopAndDestroy(originalHeader);
- CleanupStack::PopAndDestroy(originalBody);
- }
-
-void CSmcmTest::TestForwardL()
- {
- iSmsTest.Test().Next(_L("CSmsClientMtm Forward"));
-
- TInt len=3000;
- while (len > 0)
- {
- TMsvEntry entry = TMsvEntry();
- entry.iBioType = Math().Random();
- iSmsTest.Printf(_L("TestForward Len %d BioType %d\n"), len, entry.iBioType);
- TestForwardL(entry, len);
- len -= 25;
- }
- }
-
-void CSmcmTest::DoTestForwardEmailL(const TDesC& aEmailMessageData, const TDesC& aSubject, const TDesC& aBody)
- {
- // Create an email message and then a forward message to it.
- TMsvId id = CreateEmailSmsMessageL(aEmailMessageData);
- iSmsTest.SetEntryL(id);
- Client().SwitchCurrentEntryL(id);
- Client().LoadMessageL();
-
- TMsvPartList part=0;
- CMsvOperationWait* wait = CMsvOperationWait::NewLC();
- CMsvOperation* op=Client().ForwardL(KMsvDraftEntryId, part, wait->iStatus);
- CleanupStack::PushL(op);
- wait->Start();
- CActiveScheduler::Start();
-
- TPckgBuf<TMsvId> pkg;
- pkg.Copy(op->ProgressL());
- TMsvId forward = pkg();
-
- CleanupStack::PopAndDestroy(2, wait); // op, wait
-
- // Switch and load the forward message
- Client().SwitchCurrentEntryL(forward);
- Client().LoadMessageL();
-
- // Check the forward message...
- const CSmsHeader& forwardHeader = Client().SmsHeader();
-
- // 1. Email fields...(address should be empty)
- const CSmsEmailFields& fields = forwardHeader.EmailFields();
- iSmsTest(!fields.HasAddress());
- iSmsTest(fields.Addresses().MdcaCount()==0);
- iSmsTest(fields.Subject().Compare(aSubject) == 0);
-
- // 2. PID...
- CSmsSettings* smsset = CSmsSettings::NewL();
- CleanupStack::PushL(smsset);
- forwardHeader.GetSmsSettingsL(*smsset);
- iSmsTest(smsset->MessageConversion()==ESmsConvMail);
- CleanupStack::PopAndDestroy(smsset);
-
- // 3. Email <-> SMS gateway (ie the recipient)
- const CArrayPtrFlat<CSmsNumber>& rcpts = forwardHeader.Recipients();
- iSmsTest(rcpts.Count() == 1);
- const CSmsNumber& rcpt = *rcpts.At(0);
- iSmsTest(rcpt.Address().Compare(KScriptItemRecipientsDef) == 0);
-
- // 4. Description - should be the same as the subject or body text.
- TMsvEntry forwardEntry = Client().Entry().Entry();
- TInt maxDesLength = Client().ServiceSettings().DescriptionLength();
- if( fields.Subject().Length() )
- {
- // Description should be same as subject.
- iSmsTest(forwardEntry.iDescription.Compare(fields.Subject().Left(maxDesLength)) == 0);
- }
- else
- {
- // Description should be the same as the body text.
- HBufC* body = HBufC::NewLC(Client().Body().DocumentLength());
- TPtr bodyPtr(body->Des());
- Client().Body().Extract(bodyPtr);
-
- iSmsTest(forwardEntry.iDescription.Compare(bodyPtr.Left(maxDesLength)) == 0);
- CleanupStack::PopAndDestroy(body);
- }
-
- // 5. Details - should be the same as the address (ie empty).
- iSmsTest(forwardEntry.iDetails.Compare(KNullDesC())==0);
-
- // 6. Body data.
- iSmsTest(TestForwardBodyL(Client().Body(), aBody));
- }
-
-void CSmcmTest::TestForwardEmailL()
- {
- iSmsTest.Test().Next(_L("CSmsClientMtm Forward (Email SMS)"));
-
- _LIT(KTestEmailSubject1, "Fw: a subject");
- _LIT(KTestEmailBody1, "some body text");
- _LIT(KTestEmailMessage1, "user@domain1.domain2##a subject#some body text");
- DoTestForwardEmailL(KTestEmailMessage1, KTestEmailSubject1, KTestEmailBody1);
-
- _LIT(KTestEmailSubject2, "");
- _LIT(KTestEmailBody2, "some body text");
- _LIT(KTestEmailMessage2, "user@domain1.domain2 some body text");
- DoTestForwardEmailL(KTestEmailMessage2, KTestEmailSubject2, KTestEmailBody2);
- }
-
-void CSmcmTest::TestSyncFunctionsL()
- {
- iSmsTest.Test().Next(_L("Test CSmsClientMtm Sync Functions"));
- iSmsTest.Printf(_L("This test is INCOMPLETE\n"));
- }