diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/wappushfw/tpush/t_clientmtmfind.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/wappushfw/tpush/t_clientmtmfind.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -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 +#include +#include +#include +#include +#include +#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 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 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; + }