diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgtest/testutils/sms/src/EmsMsgTestUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtest/testutils/sms/src/EmsMsgTestUtils.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,219 @@ +// Copyright (c) 1999-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 "EmsMsgTestUtils.h" +#include +#include +#include +#include +#include +#include +#include "emstestutils.h" + + +CEmsExtractor* CEmsExtractor::NewL(CScriptSection& aSection) + { + CEmsExtractor* retVal = NewLC(aSection); + CleanupStack::Pop(retVal); + + return retVal; + } +CEmsExtractor* CEmsExtractor::NewLC(CScriptSection& aSection) + { + CEmsExtractor* retVal = new (ELeave) CEmsExtractor; + CleanupStack::PushL(retVal); + retVal->ConstructL(aSection); + + return retVal; + } + +void CEmsExtractor::ConstructL(CScriptSection& aSection) + { + // create the vector of parsers + iParsers.Append(new (ELeave) EmsFormatParser); + iParsers.Append(new (ELeave) EmsUserSoundParser); + iParsers.Append(new (ELeave) EmsPredefSoundParser); + iParsers.Append(new (ELeave) EmsPicParser); + iParsers.Append(new (ELeave) EmsAnimParser); + iParsers.Append(new (ELeave) EmsPredefAnimParser); + iParsers.Append(new (ELeave) EmsUserPromptParser); + + // For each of the different types of parsers, attempt + // to extract the object information from the section + for (TInt i = 0; i < iParsers.Count(); ++i) + { + iParsers[i]->ParseL(aSection, iEmsArray); + } + } + +CEmsExtractor::~CEmsExtractor() + { + iEmsArray.ResetAndDestroy(); + iParsers.ResetAndDestroy(); + } + +void CEmsExtractor::AddToMessageL(CSmsMessage& msg) const + { + for (TInt i = 0; i < iEmsArray.Count(); ++i) + { + msg.AddEMSInformationElementL(*iEmsArray[i]); + } + } + +void EmsParser::ParseL(CScriptSection& aSection, + RPointerArray& aEmsArray) const + { + // Get the value for the specific tag + TPtrC tagPtr(aSection.ItemValue(iTagName, KNullDesC)); + + // Only proceed if our string is non-empty + if (tagPtr.Length() > 0) + { + // Firstly, wrap the characters in a TLex object + TLex input(tagPtr); + + // Now, extract the number of objects we are expecting + TInt num = ExtractIntegerL(input); + + // Loop around 'n' times getting the start position and then calling + // the specific processing function + for (TInt i = 0; i < num; ++i) + { + TInt startPos = ExtractIntegerL(input); + + // call the virtual function to append a new ems object into the + // array + aEmsArray.Append(GetElementL(input, startPos)); + } + } + } + +TInt EmsParser::ExtractIntegerL(TLex& aInput) + { + aInput.Mark(); + + // Now, get the value + TInt retVal; + User::LeaveIfError(aInput.Val(retVal)); + + // Skip any whitespaces + aInput.SkipSpace(); + + return retVal; + } + + +CEmsInformationElement* EmsFormatParser::GetElementL(TLex& aInput, TInt aStartPos) const + { + // Firstly, extract all the necessary parameters + TInt formatLength = ExtractIntegerL(aInput); + TInt formatValue = ExtractIntegerL(aInput); + + // now, create the formatting object + CEmsFormatIE* object = CEmsFormatIE::NewL(); + object->SetStartPosition(aStartPos); + object->SetFormatLength(formatLength); + object->SetAlignment(STATIC_CAST(CEmsFormatIE::TAlignment, formatValue & 0x03)); + object->SetFontSize(STATIC_CAST(CEmsFormatIE::TFontSize, (formatValue & 0x0C) >> 2)); + object->SetBold(formatValue & 0x10); + object->SetItalic(formatValue & 0x20); + object->SetUnderline(formatValue & 0x40); + object->SetStrikethrough(formatValue & 0x80); + + // Return this object + return object; + } + +CEmsInformationElement* EmsUserSoundParser::GetElementL(TLex& aInput, TInt aStartPos) const + { + TPtrC soundAlpha; + + // Extract the sound but leave there is none. + User::LeaveIfError(CScriptFile::GetNextWord(aInput, ' ', soundAlpha)); + + TInt length = soundAlpha.Length(); + + // Otherwise, create a new HBuf with the sound length + HBufC8* sound = HBufC8::NewLC(soundAlpha.Length()); + TPtr8 ptr(sound->Des()); + + // Go through the soundAlpha and extract the sound bytes + // (removing offset of 'a') + for (TInt i = 0; i < length; ++i) + { + ptr.Append(STATIC_CAST(TUint8, soundAlpha[i]) - 'a'); + } + + // Create the sound object + CEmsSoundIE* object = CEmsSoundIE::NewL(*sound); + object->SetStartPosition(aStartPos); + CleanupStack::PopAndDestroy(sound); + + return object; + } + +CEmsInformationElement* EmsPredefSoundParser::GetElementL(TLex& aInput, TInt aStartPos) const + { + TInt sndValue = ExtractIntegerL(aInput); + + CEmsPreDefSoundIE* object = CEmsPreDefSoundIE::NewL( + STATIC_CAST(CEmsPreDefSoundIE::TPredefinedSound, sndValue)); + object->SetStartPosition(aStartPos); + + return object; + } + +CEmsInformationElement* EmsPicParser::GetElementL(TLex& aInput, TInt aStartPos) const + { + TInt picValue = ExtractIntegerL(aInput); + + // construct a picture from the index which was input + CEmsPictureIE* object = EmsTestUtils::CreatePictureL(picValue); + object->SetStartPosition(aStartPos); + + return object; + } + +CEmsInformationElement* EmsAnimParser::GetElementL(TLex& aInput, TInt aStartPos) const + { + TInt animValue = ExtractIntegerL(aInput); + + // construct a picture from the index which was input + CEmsAnimationIE* object = EmsTestUtils::CreateAnimationL(animValue); + object->SetStartPosition(aStartPos); + + return object; + } + +CEmsInformationElement* EmsPredefAnimParser::GetElementL(TLex& aInput, TInt aStartPos) const + { + TInt animValue = ExtractIntegerL(aInput); + + CEmsPreDefAnimationIE* object = CEmsPreDefAnimationIE::NewL( + STATIC_CAST(CEmsPreDefAnimationIE::TAnimType, animValue)); + object->SetStartPosition(aStartPos); + + return object; + } + +CEmsInformationElement* EmsUserPromptParser::GetElementL(TLex& aInput, TInt aStartPos) const + { + TInt objCount = ExtractIntegerL(aInput); + + CEmsUserPrompt* object = CEmsUserPrompt::NewL(objCount); + object->SetStartPosition(aStartPos); + return object; + } +