messagingfw/msgtestfw/TestActionUtils/src/TestFrameworkActionsUtils.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtestfw/TestActionUtils/src/TestFrameworkActionsUtils.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,238 @@
+// 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:
+//
+
+/**
+ @file
+*/
+
+#include "TestFrameworkActionsUtils.h"
+#include "watcherdef.h"
+
+#include <es_sock.h>
+#include <smsuaddr.h>
+#include <etelmm.h>
+#include <etel.h>
+#include <etelmm.h>
+
+const TInt KDefBufferSize = 1024;
+
+TBool TestFrameworkActionsUtils::CheckIfWatchersAlreadyRunningL()
+	{
+	TFindProcess find(_L("Watcher*"));
+	TFileName name;	// not used
+	return (find.Next(name) == KErrNone);
+	}
+	
+	
+TBool TestFrameworkActionsUtils::CheckIfSmsWatcherAlreadyRunningL()
+	{
+	RSocketServ socketServer;
+	RSocket socket;
+	
+	User::LeaveIfError(socketServer.Connect());
+	CleanupClosePushL(socketServer);
+
+	TProtocolDesc protoInfo;
+	TProtocolName protocolname;
+	protocolname.Copy(KSmsDatagram);
+	User::LeaveIfError(socketServer.FindProtocol(protocolname,protoInfo));
+	User::LeaveIfError(socket.Open(socketServer,
+										protoInfo.iAddrFamily,
+										protoInfo.iSockType, 
+										protoInfo.iProtocol));
+
+	CleanupClosePushL(socket);
+	
+	TSmsAddr addr;
+	addr.SetSmsAddrFamily(ESmsAddrRecvAny);
+	TInt err = socket.Bind(addr);
+	
+	socket.CancelAll();
+	CleanupStack::PopAndDestroy(2); //socketServer, socket
+		
+	return (err == KErrAlreadyExists);
+	}
+/**
+Compares two input files (ASCII & Unicode).
+@return the error code
+@param aFileOne	- First file
+@param aFileTwo	- Second file
+@param aIsUnicode - Whether unicode or ascii
+@param aIgnoreCharList - Ignore characters list
+@param aDiffFlag - Out parameter ETrue if the files are different
+@leave KErrNoMemory
+ */
+TInt TestFrameworkActionsUtils::CompareFilesL(TPtrC aFileOne, TPtrC aFileTwo, TBool aIsUnicode,
+									  CArrayFixFlat<TUint16>* aIgnoreCharList, TBool& aDiffFlag)
+	{
+	// Retern Code
+	TInt retCode = KErrNone;
+
+	// Streams for the file1 and file2 to compare
+	RFileReadStream fileReadStream1;
+	RFileReadStream fileReadStream2;
+
+	// Files difference flag
+	aDiffFlag = EFalse;
+
+	RFs iFs;
+	User::LeaveIfError(iFs.Connect());
+
+	// Open file one to compare
+	retCode = fileReadStream1.Open( iFs, aFileOne, EFileShareReadersOnly);//EFileRead);
+	if(retCode == KErrNone)
+		{
+		retCode = fileReadStream2.Open( iFs, aFileTwo, EFileShareReadersOnly);//EFileRead);
+		if(retCode == KErrNone)
+			{
+			// To hold the line content of file one 
+			HBufC* lineOneBuffer = HBufC::NewLC(KDefBufferSize);
+			TPtr ptrLineOne = lineOneBuffer->Des();
+			
+			// To hold the line content of file two
+			HBufC* lineTwoBuffer = HBufC::NewLC(KDefBufferSize);
+			TPtr ptrLineTwo = lineTwoBuffer->Des();
+
+			// Eof indicators
+			TBool	eofOne = EFalse;
+			TBool	eofTwo = EFalse; 
+			
+			// Read the file one and file two data
+			do   
+				{
+				// Read file one data
+				eofOne = ReadDataL(fileReadStream1, ptrLineOne, aIsUnicode, aIgnoreCharList);
+				// Read file two data
+				eofTwo = ReadDataL(fileReadStream2, ptrLineTwo, aIsUnicode, aIgnoreCharList);
+				// Check EOF state of the files.
+				// Either both the files will be in EOF state or 
+				// none of the files will be in EOF state			  
+				if((!eofOne && !eofTwo)||(eofOne && eofTwo))
+	            	{			
+					// Compare the read lines from file one and the file two
+					if(ptrLineOne.Compare(ptrLineTwo) != 0)
+						{
+						// Different data content
+						aDiffFlag = ETrue;
+						}
+					}
+				else
+					{
+					//Different EOF
+					aDiffFlag = ETrue;
+					}
+				} while(!eofOne && !eofTwo && !aDiffFlag);				
+			
+			// Delete line buffers
+			CleanupStack::PopAndDestroy(2, lineOneBuffer);				
+			}
+		}
+	
+	// Close the open streams
+	fileReadStream1.Close();
+	fileReadStream2.Close();	
+
+	iFs.Close();
+	// Return the difference flag
+	return retCode;
+	}
+
+/**
+Reads data chunk from the file stream.
+@return ETrue if the EOF found.
+@param aFileReadStream - reference to file stream 
+@param aPtrLineBuffer - reference to the buffer data read
+@param aIsUnicode - flag to check is it Unicode or ASCII file
+@param aIgnoreCharList - pointer to ingnore char list
+@leave KErrNotFound
+ */
+TBool TestFrameworkActionsUtils::ReadDataL(RFileReadStream& aFileReadStream,
+	  TPtr& aPtrLineBuffer, TBool aIsUnicode, CArrayFixFlat<TUint16>* aIgnoreCharList)
+ 	{
+	TUint16			element = 0;
+	TKeyArrayFix	key(0, ECmpTUint16);
+	TInt			charPosition = 0;
+	TBool			eof = EFalse;
+	TInt			errorCode = KErrNone;
+	TUint8			aCharASCII = 0;
+
+	aPtrLineBuffer.FillZ();
+	aPtrLineBuffer.SetLength(0);	
+	
+	// Validate the input ignore char list
+	if (!aIgnoreCharList)
+		{
+		// Invalid parameter passed to ReadDataL: No ignore char list passed
+		User::Leave(KErrNotFound);
+		}
+
+	// Read data from file and store it in lineBuffer 
+	do   
+		{
+		if(aIsUnicode)
+			{
+			TRAP(errorCode, (element = aFileReadStream.ReadUint16L()));
+			}
+		else
+			{
+			TRAP(errorCode, (aCharASCII = aFileReadStream.ReadUint8L()));
+			element = (TUint16) aCharASCII;
+			}
+			
+		if (errorCode!=KErrEof)
+			{		
+			// Check the availability of ignore char in the array							
+			if ( aIgnoreCharList->Find(element, key, charPosition) != KErrNone )
+				{
+				// Append the char to the buffer if the read char is not ignore char
+				aPtrLineBuffer.Append(element);
+				}
+			}								
+			else
+				{
+				eof = ETrue;
+				break;
+				}
+				
+			// Stop at the end of line or no more data 
+			} while(aPtrLineBuffer.Length()<KDefBufferSize);
+	
+	// Return end of file flag		
+	return eof;	
+	}
+
+
+
+/**
+Get Byte from Unicode Hex Text character
+@return 
+@param Hex character
+@leave None
+ */
+TUint8 TestFrameworkActionsUtils::GetByteFromUnicodeHexTextChar(const TUint16 *input)
+	{
+	TUint8 result = (TUint8)*input;
+
+	if(result >='0' && result <='9')
+		result = (TUint8)(result - '0');
+	else if(result >='a' && result <='f')
+		result = (TUint8)(result - 'a' + 10);
+	else if(result >='A' && result <='F')
+		result = (TUint8)(result - 'A' + 10);
+	else
+		result = 0;
+
+	return result;
+	}