messagingfw/wappushfw/tpush/t_clientmtmfind.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/tpush/t_clientmtmfind.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,300 @@
+// Copyright (c) 2003-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 <mtclreg.h>
+#include <msvids.h>
+#include <msvuids.h>
+#include <txtrich.h>
+#include <mtmdef.h>
+#include <pushentry.h>
+#include "pushtests.h"
+#include "pushclientmtm.h"
+
+/*------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+Test Procedure:
+ Proper behaviour is that a search for a string returns the parts of the message
+ in which it resides. Current parts to search are Body, Originator and 
+ Description.
+
+//------------------------------------------------------------------------------
+//----------------------------------------------------------------------------*/
+
+const TInt KPushTestBuffer = 128;
+
+_LIT(KTest0, "Test0");
+_LIT(KTest1, "Test1");
+_LIT(KTest2, "Test2");
+_LIT(KTest3, "Test3");
+_LIT(KTest4, "Test4");
+_LIT(KTest5, "Test5");
+_LIT(KTest6, "Test6");
+_LIT(KTest7, "Test7");
+_LIT(KTest8, "Test8");
+_LIT(KLogSucceeded, "OK");
+_LIT(KLogFailed, "FAILED");
+_LIT(KLogOutput,"WapPushClientMtm %S %S");
+_LIT(KSpace, " ");
+
+_LIT(KMTMDataFullName,"z:\\system\\data\\wappushmtm.rsc");
+
+//------------------------------------------------------------------------------
+void CWapClientMtmFindTest::RunL()
+	{
+	iDummyObserver = new(ELeave) CDummyObserver;
+	iSession = CMsvSession::OpenSyncL(*iDummyObserver);
+	// Install the mtm group if necessary
+	TInt returnVal = iSession->InstallMtmGroup(KMTMDataFullName);
+	if (returnVal != KErrNone && returnVal != KErrAlreadyExists)
+		User::Leave(returnVal);
+
+	CBaseMtm* wapPushClientMtm = NULL;
+	CClientMtmRegistry* mtmRegistry = CClientMtmRegistry::NewL(*iSession);
+	CleanupStack::PushL(mtmRegistry);
+
+	wapPushClientMtm = mtmRegistry->NewMtmL(KUidMtmWapPush);
+	CleanupStack::PushL(wapPushClientMtm);
+
+	CMsvEntry* entry = CMsvEntry::NewL(*iSession, KMsvRootIndexEntryId, TMsvSelectionOrdering());
+	CleanupStack::PushL(entry);
+	SetupFindDataL(entry);
+
+	entry->SetEntryL(iMessageId);
+	CleanupStack::Pop(entry);
+	wapPushClientMtm->SetCurrentEntryL(entry);
+
+	// restore the message
+	entry->SetEntryL(iMessageId);
+	CMsvStore* msvStore1 = entry->ReadStoreL();
+	CleanupStack::PushL(msvStore1);
+	msvStore1->RestoreBodyTextL(wapPushClientMtm->Body());
+	CleanupStack::PopAndDestroy(msvStore1);
+
+	PerformTests(wapPushClientMtm);
+	
+	// Delete the entry
+	entry->SetEntryL(iMessageId);
+	CMsvStore* msvStore2 = entry->EditStoreL();
+	CleanupStack::PushL(msvStore2);
+	msvStore2->DeleteBodyTextL();
+	msvStore2->CommitL();
+	CleanupStack::PopAndDestroy(msvStore2);
+
+	// Install the mtm group if necessary
+	returnVal = iSession->DeInstallMtmGroup(KMTMDataFullName);
+
+	CleanupStack::PopAndDestroy(2, mtmRegistry); // wapPushClientMtm, mtmRegistry
+	entry = NULL; // Removed by mtm being destroyed
+	}
+
+//------------------------------------------------------------------------------
+void CWapClientMtmFindTest::SetupFindDataL(CMsvEntry* aEntry)
+	{
+	/*
+	* Test method. Currently 3 areas are searched for when doing a find:
+	* Body, details (originator) and descriptor. Find returns a value of OR'd
+	* flags representing the areas in which the given text was found. To test
+	* this properly we want to test all combinations. 2^3 = 8 tests. A '1'
+	* represents the existence of the searched-for text in the repective
+	* location.
+	* 
+	* Test  Body Dtls Desc
+	*
+	* Test0    0    0    0
+	* Test1    0    0    1
+	* Test2    0    1    0
+	* Test3    0    1    1
+	* Test4    1    0    0
+	* Test5    1    0    1
+	* Test6    1    1    0
+	* Test7    1    1    1
+	*
+	* Test 8 repeats test 7 with a leave
+	*/
+
+	TMsvEntry tmsvEntry;
+
+	HBufC* descriptorContents = HBufC::NewLC(KPushTestBuffer);
+	HBufC* originatorContents = HBufC::NewLC(KPushTestBuffer);
+	HBufC* bodyContents = HBufC::NewLC(KPushTestBuffer);
+	TPtr contentPtr(descriptorContents->Des());
+
+	tmsvEntry.SetComplete(EFalse);
+	tmsvEntry.SetReadOnly(EFalse);
+	tmsvEntry.iMtm       = KUidMtmWapPush;
+	tmsvEntry.iType      = KUidMsvMessageEntry;
+	tmsvEntry.iServiceId = KMsvLocalServiceIndexEntryId;
+
+	// Set the descriptor for description contents.
+	contentPtr.Append(KTest1);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest3);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest5);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest7);
+	tmsvEntry.iDescription.Set(contentPtr);
+
+	// Set the details contents for details contents.
+	contentPtr.Set(originatorContents->Des());
+	contentPtr.Append(KTest2);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest3);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest6);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest7);
+	tmsvEntry.iDetails.Set(contentPtr);
+
+	// Set the descriptor contents for body contents.
+	contentPtr.Set(bodyContents->Des());
+	contentPtr.Append(KTest4);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest5);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest6);
+	contentPtr.Append(KSpace);
+	contentPtr.Append(KTest7);
+
+	// Put an entry in a known location - the outbox
+	aEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId);
+	aEntry->CreateL(tmsvEntry);
+	iSession->CleanupEntryPushL(tmsvEntry.Id());
+	iMessageId = tmsvEntry.Id();
+	aEntry->SetEntryL(iMessageId);
+
+	CParaFormatLayer* paraFormatLayer=CParaFormatLayer::NewL();
+	CleanupStack::PushL(paraFormatLayer);
+
+	CCharFormatLayer* charFormatLayer=CCharFormatLayer::NewL(); 
+	CleanupStack::PushL(charFormatLayer);
+
+	CRichText* bodyText = CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(bodyText);
+	bodyText->InsertL(0, contentPtr);
+
+	CMsvStore* msvStore = aEntry->EditStoreL();
+	CleanupStack::PushL(msvStore);
+	msvStore->StoreBodyTextL(*bodyText);
+	msvStore->CommitL();
+	
+	tmsvEntry.SetReadOnly(EFalse);
+	tmsvEntry.SetVisible(ETrue);
+	tmsvEntry.SetInPreparation(EFalse);
+	aEntry->ChangeL(tmsvEntry);
+	
+	CleanupStack::PopAndDestroy(4, paraFormatLayer); // msvStore, bodyText, charFormatLayer, paraFormatLayer
+	iSession->CleanupEntryPop();
+	CleanupStack::PopAndDestroy(3, descriptorContents); // bodyContents, originiatorContents, descriptorContents
+	}
+
+//------------------------------------------------------------------------------
+void CWapClientMtmFindTest::PerformTests(CBaseMtm* aWapPushClientMtm)
+	{
+	TMsvPartList noWhere = 0;
+	TMsvPartList allParts = KMsvMessagePartBody | 
+		KMsvMessagePartOriginator | 
+		KMsvMessagePartDescription;
+	TMsvPartList originatorAndDescription = 
+		KMsvMessagePartOriginator | KMsvMessagePartDescription;
+	TMsvPartList bodyAndDescription = 
+		KMsvMessagePartBody | KMsvMessagePartDescription;
+	TMsvPartList bodyAndOriginator =
+		KMsvMessagePartBody | KMsvMessagePartOriginator;
+
+	TestAndPrint(aWapPushClientMtm, KTest0, noWhere);
+	TestAndPrint(aWapPushClientMtm, KTest1, KMsvMessagePartDescription);
+	TestAndPrint(aWapPushClientMtm, KTest2, KMsvMessagePartOriginator);
+	TestAndPrint(aWapPushClientMtm, KTest3, originatorAndDescription);
+	TestAndPrint(aWapPushClientMtm, KTest4, KMsvMessagePartBody);
+	TestAndPrint(aWapPushClientMtm, KTest5, bodyAndDescription);
+	TestAndPrint(aWapPushClientMtm, KTest6, bodyAndOriginator);
+	TestAndPrint(aWapPushClientMtm, KTest7, allParts);
+
+	// Test8 : perform Test7 again, but with a memory allocation failure.
+#if defined(_DEBUG)
+	TInt fail=0;
+#endif
+	TInt err = KErrNone;
+
+	__UHEAP_FAILNEXT(fail);
+	__UHEAP_MARK;
+	TRAP(err, aWapPushClientMtm->Find(KTest7, allParts));
+	__UHEAP_RESET;
+	__UHEAP_MARKEND;
+
+	TBuf<KPushLogBuffer> buffer;
+	if (err == KErrNone)
+		{
+		buffer.Format(KLogOutput, &KTest8, &KLogSucceeded);
+		}
+	else
+		{
+		buffer.Format(KLogOutput, &KTest8, &KLogFailed);
+		}
+	WPLPrintf(buffer);
+
+	iEngine->TestCompleted(iStatus.Int());
+	}
+
+//------------------------------------------------------------------------------
+void CWapClientMtmFindTest::TestAndPrint(CBaseMtm* aWapPushClientMtm, const TDesC& aTestText, TMsvPartList aResultList)
+	{
+	TBuf<KPushLogBuffer> buffer;
+	TMsvPartList allParts = KMsvMessagePartBody | 
+		KMsvMessagePartOriginator | 
+		KMsvMessagePartDescription;
+
+	if (aWapPushClientMtm->Find(aTestText, allParts) == aResultList)
+		{
+		buffer.Format(KLogOutput, &aTestText, &KLogSucceeded);
+		}
+	else
+		{
+		buffer.Format(KLogOutput, &aTestText, &KLogFailed);
+		}
+	WPLPrintf(buffer);
+	}
+
+//------------------------------------------------------------------------------
+void CWapClientMtmFindTest::DoCancel()
+	{
+	iEngine->TestCompleted(KErrCancel);
+	}
+
+//------------------------------------------------------------------------------
+TInt CWapClientMtmFindTest::RunError(TInt aError)
+	{
+	TBuf<80> buf;
+	_LIT(KRunError, "CWapClientMtmFindTest::RunError");
+	buf.Format(KRunError, aError);
+	iEngine->Printf(KRunError,TestName());
+	iEngine->TestCompleted(aError);
+	return KErrNone;
+	}
+
+//------------------------------------------------------------------------------
+const TDesC& CWapClientMtmFindTest::TestName()
+	{
+	_LIT(KTextWapClientMtmFindTest, "WapPushClientMtm Find Test");
+	return KTextWapClientMtmFindTest;
+	}
+
+//------------------------------------------------------------------------------
+CWapClientMtmFindTest::~CWapClientMtmFindTest()
+	{
+	delete iDummyObserver; 
+	delete iSession;
+	}