diff -r 000000000000 -r 9736f095102e buildverification/autosmoketest/messaging/Src/TestMessStoreProcessUtil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/buildverification/autosmoketest/messaging/Src/TestMessStoreProcessUtil.cpp Tue Jan 26 15:16:33 2010 +0200 @@ -0,0 +1,256 @@ +// 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: +// This contains CTestMessStoreProcessUtil. Base class process what is in the message store +// +// + +/** + @file TestMessStoreProcessUtil.cpp +*/ + +#include "TestMessStoreProcessUtil.h" + +// EPOC include +#include + +/** + * @name Constant Literals used. + */ +/*@{*/ +// Literal constants used for the character set +_LIT(KChineseGB2312, "ChineseGB2312"); +_LIT(KChineseHz, "ChineseHz"); +_LIT(KChineseBig5, "ChineseBig5"); +/*@}*/ + +CTestMessStoreProcessUtil::CTestMessStoreProcessUtil(CTestMessBase& aTestStep, TBool aReadOnly) +: CBase() +, iTestStep(aTestStep) +, iReadOnly(aReadOnly) + { + } + +/** + * Process the message entry + * @param TMsvId aMsvId - Id of message to edit + * @return TInt - return TErrNone if all worked + * +*/ +TInt CTestMessStoreProcessUtil::ProcessEntryL(TMsvId aMsvId) + { + TInt ret=KErrNone; + CMsvEntry* msvEntry=iTestStep.Session().GetEntryL(aMsvId); + CleanupStack::PushL(msvEntry); + + if ( msvEntry->HasStoreL() ) + { + CMsvStore* store=NULL; + if ( iReadOnly ) + { + store=msvEntry->ReadStoreL(); + } + else + { + store=msvEntry->EditStoreL(); + } + CleanupStack::PushL(store); + + RArray ids; + ids.Append(KUidMsgFileIMailHeader); + ids.Append(KUidMsgFileMimeHeader); + ids.Append(KUidMsgFileInternetAccessPreferences); + ids.Append(KUidMsvSMSHeaderStream); + ids.Append(KUidMsvDefaultServices); + ids.Append(KMsvEntryRichTextBody); + for ( TUint uidIndex=ids.Count(); uidIndex>0; ) + { + TUid uid=ids[--uidIndex]; + + if ( store->IsPresentL(uid) ) + { + if ( uid==KUidMsgFileIMailHeader ) + { + // Process the CImHeader info + ProcessImHeaderL(*store); + } + else if ( uid==KUidMsgFileMimeHeader ) + { + // Process the CImMimeHeader info + ProcessImMimeHeaderL(*store); + } + else if ( uid==KUidMsgFileInternetAccessPreferences ) + { + } + else if ( uid==KUidMsvSMSHeaderStream ) + { + // Process the CSmsHeader info + ProcessSmsHeaderStreamL(*store); + } + else if ( uid==KUidMsvDefaultServices ) + { + } + else if ( uid==KMsvEntryRichTextBody ) + { + // Process the CRichText info + ProcessRichTextBodyL(*store); + } + else + { + iTestStep.INFO_PRINTF2(_L("Cannot process %x"), uid.iUid); + } + } + } + + // Commit to the store + if ( !iReadOnly ) + { + store->CommitL(); + } + CleanupStack::PopAndDestroy(store); + } + + CleanupStack::PopAndDestroy(msvEntry); + + return ret; + } + +// Process the CImHeader information +void CTestMessStoreProcessUtil::ProcessImHeaderL(CMsvStore& aStore) + { + CImHeader* header=CImHeader::NewLC(); + TRAPD(err, header->RestoreL(aStore)); + + if ( err==KErrNone ) + { + ProcessImHeaderL(*header); + if ( !iReadOnly ) + { + header->StoreL(aStore); + } + } + + CleanupStack::PopAndDestroy(header); + } + +// Process the CImMimeHeader information +void CTestMessStoreProcessUtil::ProcessImMimeHeaderL(CMsvStore& aStore) + { + CImMimeHeader* header=CImMimeHeader::NewLC(); + TRAPD(err, header->RestoreL(aStore)); + + if ( err==KErrNone ) + { + ProcessImMimeHeaderL(*header); + if ( !iReadOnly ) + { + header->StoreL(aStore); + } + } + + CleanupStack::PopAndDestroy(header); + } + + +// Process the CSmsHeader information +void CTestMessStoreProcessUtil::ProcessSmsHeaderStreamL(CMsvStore& aStore) + { + CParaFormatLayer* paraFormatLayer=CParaFormatLayer::NewL(); + CleanupStack::PushL(paraFormatLayer); + + CCharFormatLayer* charFormatLayer=CCharFormatLayer::NewL(); + CleanupStack::PushL(charFormatLayer); + + CRichText* bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer); + CleanupStack::PushL(bodyText); + + CSmsHeader* header = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *bodyText); + CleanupStack::PushL(header); + + TRAPD(err, header->RestoreL(aStore)); + if ( err == KErrNone ) + { + ProcessSmsHeaderStreamL(*header); + if ( !iReadOnly ) + { + header->StoreL(aStore); + } + } + + CleanupStack::PopAndDestroy(4, paraFormatLayer); + } + + +// Process the CRichText information +void CTestMessStoreProcessUtil::ProcessRichTextBodyL(CMsvStore& aStore) + { + CParaFormatLayer* paraFormatLayer=CParaFormatLayer::NewL(); + CleanupStack::PushL(paraFormatLayer); + + CCharFormatLayer* charFormatLayer=CCharFormatLayer::NewL(); + CleanupStack::PushL(charFormatLayer); + + CRichText* bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer); + CleanupStack::PushL(bodyText); + + TRAPD(err, aStore.RestoreBodyTextL(*bodyText)); + if ( err == KErrNone ) + { + ProcessRichTextBodyL(*bodyText); + if ( !iReadOnly ) + { + aStore.StoreBodyTextL(*bodyText); + } + } + + CleanupStack::PopAndDestroy(3, paraFormatLayer); + } + +/** + * Saves the new character set to the message + * @param TPtrC aCharacterSetType - New Character set type to be stored for the received message + * @param TUint &aCharSetVal - character set value + * @return TBool + * @panic None + * @leave None + * +*/ +TBool CTestMessStoreProcessUtil::ValidCharacterSetInfo(const TPtrC& aCharacterSetType, TUint &aCharSetVal) + { + TBool hasSet = ETrue; + + if ( aCharacterSetType.Compare(KChineseGB2312) == 0 ) + { + iTestStep.INFO_PRINTF1(_L("Character set set to Chinese GB2312")); + aCharSetVal = KCharacterSetIdentifierGb2312; + } + else if (aCharacterSetType.Compare(KChineseHz) == 0) + { + iTestStep.INFO_PRINTF1(_L("Character set set to Chinese Hz")); + aCharSetVal = KCharacterSetIdentifierHz; + } + else if ( aCharacterSetType.Compare(KChineseBig5) == 0 ) + { + iTestStep.INFO_PRINTF1(_L("Character set set to Chinese Big5")); + aCharSetVal = KCharacterSetIdentifierBig5; + } + else + { + // To be updated later + hasSet= EFalse; + iTestStep.ERR_PRINTF2(_L("Character not supported in test code: %S"), &aCharacterSetType); + iTestStep.SetTestStepResult(EFail); + } + + return hasSet; + }