--- /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 <msgtestscripts.h>
+#include <emsformatie.h>
+#include <emsanimationie.h>
+#include <emssoundie.h>
+#include <emsuserpromptie.h>
+#include <gsmumsg.h>
+#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<CEmsInformationElement>& 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;
+ }
+