messagingfw/msgtest/integration/sms/src/T_smcm.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/integration/sms/src/T_smcm.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,354 @@
+// 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 <csmsaccount.h>
+
+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 Reply"));
+	TestReplyL();
+	iSmsTest.TestFinish(iNextTest);
+
+	iSmsTest.TestStart(++iNextTest, _L("CSmsClientMtm Forward"));
+	TestForwardL();
+	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()
+	{
+	SetTestNameL(KSmsClientMtmTestName);
+	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);
+	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);
+
+
+	CSmsAccount* smsAccount = CSmsAccount::NewLC();
+	smsAccount->SaveSettingsL(*settings);
+	CleanupStack::PopAndDestroy(smsAccount);
+
+
+	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("^"),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 replying to received messages
+void CSmcmTest::TestReplyL()
+	{
+	iSmsTest.Test().Next(_L("CSmsClientMtm Reply"));
+	iSmsTest.Printf(_L("This test is INCOMPLETE\n"));
+
+// First we need a received message that we will reply soon
+	TMsvId id = iSmsTest.CreateDummyMessageToReceiveL();
+	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
+	
+	Client().SwitchCurrentEntryL(progress);
+	Client().LoadMessageL();
+	Client().Body().InsertL(0,_L("This is reply"));
+	Client().SaveMessageL();
+	}
+
+void CSmcmTest::TestForwardL()
+	{
+	iSmsTest.Test().Next(_L("CSmsClientMtm Forward"));
+	iSmsTest.Printf(_L("This test is INCOMPLETE\n"));
+
+	TMsvId id = iSmsTest.CreateDummyMessageToReceiveL();
+	Client().SwitchCurrentEntryL(id);
+	Client().LoadMessageL();
+	TMsvPartList part=0;
+	TRequestStatus status(0);
+	CMsvOperation* op = Client().ForwardL(KMsvDraftEntryId, part, status);
+	CleanupStack::PushL(op);
+
+	TMsvId temp;	
+	TPckgC<TMsvId> paramPack(temp);
+	const TDesC8& progBuf2 = op->ProgressL();	
+	paramPack.Set(progBuf2);
+	TMsvId progress=paramPack();
+	
+	CleanupStack::PopAndDestroy(); //op
+	op = NULL;
+
+	Client().SwitchCurrentEntryL(progress);
+
+	Client().LoadMessageL();
+	Client().Body().InsertL(0,_L("This is forward"));
+	Client().AddAddresseeL(_L("+358503367709"), _L("MicoForward"));
+
+	CSmsSettings* smssett = CSmsSettings::NewL();
+	CleanupStack::PushL(smssett);
+	smssett->CopyL(Client().ServiceSettings());
+	CleanupStack::PopAndDestroy(); //smssett
+	
+	Client().SaveMessageL();
+	}
+
+void CSmcmTest::TestSyncFunctionsL()
+	{
+	iSmsTest.Test().Next(_L("Test CSmsClientMtm Sync Functions"));
+	iSmsTest.Printf(_L("This test is INCOMPLETE\n"));
+	}