diff -r 6edeef394eb7 -r 9397a16b6eb8 testexecmdw/tef/tef/utils/src/tefscriptutils.cpp --- a/testexecmdw/tef/tef/utils/src/tefscriptutils.cpp Fri Sep 03 07:55:01 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,211 +0,0 @@ -/* -* Copyright (c) 2005-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: -* Implementation for utitity class used for parsing script files -* Collect details on counts of test steps and test cases in a script file -* -*/ - - - -/** - @file TEFScriptUtils.cpp -*/ - -#include "tefscriptutils.h" - -/** - * CScriptPreProcess(const TDesC aScriptFilePath, TCommandForCounting* aCommandsAndCounts, TInt aStructSize) - Constructor - * Overloaded constructor used for collecting the script file path along with the structure array and size for storing count values - * @param aScriptFilePath - Path of the script file to be loaded for reading - * @param aCommandsAndCounts - Pointer to array of TCommandForCounting structures for collecting counts of commands - * @param aStructSize - Integer value representing the size of the structure array passed in - */ -CScriptPreProcess::CScriptPreProcess(const TDesC& aScriptFilePath, TPtrC aCommandList[KTEFCommandCountsStructSize]) -: iScriptFilePath(aScriptFilePath), iStructSize(KTEFCommandCountsStructSize), iScriptData(NULL) - { - for (TInt index=0; index < iStructSize; index++) - { - iCommandsAndCounts[index].iCommandName.Copy(aCommandList[index]); - iCommandsAndCounts[index].iCommandCount = KTEFZeroValue; - } - } - -/** - * ~CScriptPreProcess() - Destructor - * Deallocates heap allocation if done - */ -CScriptPreProcess::~CScriptPreProcess() - { - if (iScriptData != 0) - { - delete iScriptData; - } - } - -/** - * CountNoOfOccurences() - * Member function used for parsing each of the script line - * Updates the structure array for any command of interest found during parsing - * @return TInt - Return system-wide error codes - */ -TInt CScriptPreProcess::CountNoOfOccurences() - { - // Construct the buffer with contents of script file - TRAPD(err,CreateScriptDataFromScriptFileL()); - if (err != KErrNone) - { - // Return the error value, if the we fail to retieve the script file contents - return err; - } - - TBool statusOfWhile=ETrue; - while (statusOfWhile) - { - // Get the individual script line contents until EOF - statusOfWhile=GetNextScriptLine(); - - // If the script line is available, parse it and update the command counts in the structure array, if any - if (statusOfWhile) - { - UpdateCommandCounts(); - } - } - // Return KErrNone if the process is completed safely - return KErrNone; - } - -/** - * CreateScriptDataFromScriptFileL() - * Funtion used to copy the contents of the script file to a buffer for reading - */ -void CScriptPreProcess::CreateScriptDataFromScriptFileL() - { - // Create a file session and connect - RFs fS; - User::LeaveIfError(fS.Connect()); - CleanupClosePushL(fS); - - // Create a file object and try to open the script file for reading - RFile scriptFile; - User::LeaveIfError(scriptFile.Open(fS,iScriptFilePath,EFileRead | EFileShareAny)); - CleanupClosePushL(scriptFile); - - // Extract the size of the script file and create a heap buffer to the particular size - TInt fileSize; - User::LeaveIfError(scriptFile.Size(fileSize)); - - // Create a 16bit heap buffer - iScriptData = HBufC::NewL(fileSize); - - // Create a 8 bit heap buffer for temporily copying the contents of the script file from the file object - HBufC8* narrowData = HBufC8::NewL(fileSize); - CleanupStack::PushL(narrowData); - TPtr8 narrowPtr=narrowData->Des(); - // Read the file into an 8bit heap buffer - User::LeaveIfError(scriptFile.Read(narrowPtr)); - - TPtr widePtr(iScriptData->Des()); - // Copy it to the 16bit buffer - widePtr.Copy(narrowData->Des()); - - // Cleanup all heap allocations - CleanupStack::PopAndDestroy(narrowData); - CleanupStack::Pop(2); - - // Close the file object and file session - scriptFile.Close(); - fS.Close(); - - // Set up the instance token parser - iScriptLex = iScriptData->Des(); - } - -/** - * GetNextScriptLine() - * Funtion used to retrieve individual script line and store them to a member buffer for parsing - * @return TBool - Returns EFalse if the cursor position reaches end of file. ETrue otherwise - */ -TBool CScriptPreProcess::GetNextScriptLine() - { - // Place the lex marker for the next read - while(!iScriptLex.Eos()) - { - // Peek and place the cursor position to the end of line - TChar peek = iScriptLex.Peek(); - if(peek == '\n') - { - iScriptLex.Inc(); - break; - } - else - { - iScriptLex.Inc(); - } - } - - // Store the current line to a member variable - iCurrentScriptLine.Set(iScriptLex.MarkedToken()); - iScriptLex.Mark(); - // Replace the remainder of the script contents into the original buffer - // This is done to enable retrieving of next line during successive calls to the same function - iScriptLex.Assign(iScriptLex.RemainderFromMark()); - - // Check for end of file and return status accordingly - if(iCurrentScriptLine.Length() || !iScriptLex.Eos()) - { - return ETrue; - } - else - { - return EFalse; - } - } - -/** - * UpdateCommandCounts() - * Funtion used to parse the script line and update the the command struture with incrementing counts within the structure array - */ -void CScriptPreProcess::UpdateCommandCounts() - { - // Copy the current script line contents to a TLex for parsing - TLex scriptLine(iCurrentScriptLine); - - // Extract the first token from the current script line lex - TPtrC commandName(scriptLine.NextToken()); - - // Run through a loop and check if the first token of the current script line - // matches the command names provided in the structure array - // If it matches any of the commands in array, increment the counter correspondingly - for (TInt index=0;index