networkingtestandutils/networkingintegrationtest/IntegrationTestUtils/Log.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/networkingintegrationtest/IntegrationTestUtils/Log.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,475 @@
+// 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 Log.cpp
+*/
+
+// EPOC includes
+#include <e32base.h>
+#include <e32cons.h>
+
+// Test system includes
+#include "../inc/Log.h"
+
+EXPORT_C CLog * CLog::NewL( CConsoleBase * console )
+/**
+Epoc style constuctor
+
+@param console A pointer to the current console object.
+@return A new CLog object.
+*/
+
+	{
+	CLog * self = new(ELeave) CLog;
+	CleanupStack::PushL(self);
+	self->Construct( console );
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C void CLog::Construct( CConsoleBase * console )
+/**
+Epoc style 2nd phase constructor. 
+Initialise the Utils.
+
+@param console A pointer to the current console object.
+@return A new CLog object.
+*/
+	{
+	// the log system needs the current console
+	// for the console log display
+	iConsole = console; 
+	iSeverity = ESevrAll;
+	//Do we need to put information about source file & #line?
+	//Default is yes.
+	iPutSrcInfo = ETrue;
+	iHtmlLogMode = ETrue ;
+	}
+
+EXPORT_C CLog::~CLog()
+/**
+destructor
+*/
+	{
+	}
+
+EXPORT_C void CLog::OpenLogFileL(const TFileName &aScriptFileName)
+/**
+Open the test log file.
+
+@param aScriptFileName The script file name which is used to generate the log file name.
+*/
+	{
+
+	// get the full pathname default drive name and extension
+	_LIT(Kdefault,"c:\\xx.htm"); 
+	TParse ScriptFileName;
+
+	// combine C:\\xx.htm and the whole parameter supplied
+	TInt returnCode = ScriptFileName.Set( aScriptFileName, &Kdefault, NULL );
+
+	// overright extension if supplied with .htm
+	returnCode = ScriptFileName.Set( ScriptFileName.Name(), &Kdefault, NULL );
+	if (returnCode != KErrNone )
+		return;
+
+	// connect to the server
+	TInt ret = iFileLogger.Connect();
+	if (ret == KErrNone )
+		{
+		// create the log file in fixed directory c:\logs\Testresults
+		iFileLogger.CreateLog(_L("C:\\Logs\\TestResults"), ScriptFileName.NameAndExt());
+		}
+	}
+
+EXPORT_C void CLog::Log( TRefByValue<const TDesC16> format, ... )
+/**
+Display the log data on the console. 
+If there is a log file open write to it.
+
+@param format "printf" format string
+*/
+	{
+    VA_LIST aList;
+	VA_START( aList, format );
+
+	TIntegrationTestLog16Overflow iOverflow16;
+
+	// decode formated data for display on console
+	TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
+	LineBuf.AppendFormatList( format, aList, &iOverflow16 );
+
+	// write to the console
+	iConsole->Printf(_L("%S\n"),&LineBuf );
+
+	// write to log file
+	iFileLogger.WriteFormat(_L("%S\n"),&LineBuf);
+
+	VA_END( aList ); 
+	}
+
+EXPORT_C void CLog::SetPutSrcInfo( TBool aPutSrcInfo )
+/**
+Enable or disable souve information in the log file.
+
+@param aPutSrcInfo The error code.
+*/
+	{
+	iPutSrcInfo=aPutSrcInfo;
+	}
+	
+EXPORT_C void CLog::Log( TInt aSeverity, TRefByValue<const TDesC16> format, ... )
+/**
+Display the log data on the console. 
+If there is a log file open write to it.
+
+@param aSeverity severity level
+@param format "printf" format string
+*/
+{
+    VA_LIST aList;
+	VA_START( aList, format );
+
+	if( aSeverity & Severity()) 
+		{
+		Log( format, aList);
+		}
+
+	VA_END( aList ); 
+}
+
+EXPORT_C void CLog::Log( TRefByValue<const TDesC16> format, VA_LIST aList )
+/**
+Display the log data on the console 
+If there is a log file open write to it.
+
+@param format "printf" format string.
+@param aList Variable length argument list.
+*/
+	{
+	// decode formated data for display on console
+	TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
+	TIntegrationTestLog16Overflow iOverflow16;
+
+	LineBuf.AppendFormatList( format, aList, &iOverflow16 );
+
+
+	// write to log file
+	iFileLogger.WriteFormat(_L("%S\n"),&LineBuf);
+
+	// write to the console
+	iConsole->Printf(_L("%S\n"),&LineBuf );
+	}
+
+
+
+EXPORT_C void CLog::LogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,
+		TRefByValue<const TDesC> aFmt, VA_LIST aList)
+/**
+Display the log data on the console 
+if there is a log file open write to it
+
+@param aFile source file name.
+@param aLine line number.
+@param aSeverity severity level.
+@param aFmt "printf" format string.
+@param aList List of printf params.
+@note should be used for macros only
+*/
+{
+	if( aSeverity & Severity()) 
+	{
+
+		TIntegrationTestLog16Overflow iOverflow16;
+
+		// decode formated data for display on console
+		TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
+
+		LineBuf.AppendFormatList( aFmt, aList, &iOverflow16 );
+		// write to the console
+		iConsole->Printf(_L("%S\n"),&LineBuf );
+		//Do we need to put information about source file & #line?
+		if(iPutSrcInfo)
+		{		// Braces used to scope lifetime of TBuf objects
+			TPtrC8 fileName8(aFile);
+			TBuf<128> fileName;
+			TParse printFileName ;
+			fileName.Copy(fileName8);  //TText8->TBuf16
+			//We don't need full file name.
+			printFileName.Set(fileName, NULL, NULL) ;
+			fileName.Copy(printFileName.NameAndExt()) ;
+			// write to log file
+			iFileLogger.WriteFormat(_L("%S\t%d\t%S\n"),&fileName, aLine, &LineBuf);
+		}
+		else
+		{
+	// write to log file
+	iFileLogger.WriteFormat(_L("%S\n"),&LineBuf);
+		}
+
+
+
+	}
+
+}
+
+EXPORT_C void CLog::LogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,
+		TRefByValue<const TDesC> aFmt,...)
+/**
+Display the log data on the console 
+if there is a log file open write to it.
+
+@param aFile source file name
+@param aLine line number
+@param aSeverity severity level
+@param aFmt "printf" format string
+@note should be used for macros only
+*/
+	{
+	VA_LIST aList;
+	VA_START( aList, aFmt );
+	LogExtra(aFile, aLine, aSeverity, aFmt, aList);
+	VA_END( aList ); 
+	}
+
+
+EXPORT_C void CLog::LogResult( TVerdict ver, TRefByValue<const TDesC16> format, ... )
+/**
+Display highlighted results on the console. 
+If there is a log file open write to it.
+
+@param ver The test result.
+@param format A printf style format string.
+*/
+	{
+    VA_LIST aList;
+	VA_START( aList, format );
+
+	TIntegrationTestLog16Overflow iOverflow16;
+
+	// decode formated data for display on console
+	TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
+	LineBuf.AppendFormatList( format, aList, &iOverflow16 );
+
+	// write to the console
+	iConsole->Printf(_L("%S\n"),&LineBuf );
+
+	// write to log file
+	if( iHtmlLogMode)
+		{ 
+	switch( ver)
+		{
+	case EPass:
+			ERR_PRINTF2(_L("<font size=4 color=00AF00>%S</font>\n"),&LineBuf );
+		break;
+	case EFail:
+			ERR_PRINTF2(_L("<font size=4 color=FF0000>%S</font>\n"),&LineBuf );
+		break;
+	case EInconclusive:
+			ERR_PRINTF2(_L("<font size=4 color=0000FF>%S</font>\n"),&LineBuf );
+		break;
+	case ETestSuiteError:
+			ERR_PRINTF2(_L("<font size=4 color=0000FF>%S</font>\n"),&LineBuf );
+		break;
+	case EAbort:
+			ERR_PRINTF2(_L("<font size=4 color=0000FF>%S</font>\n"),&LineBuf );
+		}
+	}
+	else
+	{
+			ERR_PRINTF2(_L("%S\n"),&LineBuf );
+		}	
+	VA_END( aList ); 
+	}
+
+EXPORT_C TPtrC CLog::EpocErrorToText(TInt aError)
+/**
+Convert a SymbianOS error code to text.
+
+@param aError The error code.
+@return Text describing the error code.
+*/
+	{
+	switch (aError)
+		{
+	case KErrNone:
+		return _L("KErrNone");
+	case KErrNotFound:
+		return _L("KErrNotFound");
+	case KErrGeneral:
+		return _L("KErrGeneral");
+	case KErrCancel:
+		return _L("KErrCancel");
+	case KErrNoMemory:
+		return _L("KErrNoMemory");
+	case KErrNotSupported:
+		return _L("KErrNotSupported");
+	case KErrArgument:
+		return _L("KErrArgument");
+	case KErrTotalLossOfPrecision:
+		return _L("KErrTotalLossOfPrecision");
+	case KErrBadHandle:
+		return _L("KErrBadHandle");
+	case KErrOverflow:
+		return _L("KErrOverflow");
+	case KErrUnderflow:
+		return _L("KErrUnderflow");
+	case KErrAlreadyExists:
+		return _L("KErrAlreadyExists");
+	case KErrPathNotFound:
+		return _L("KErrPathNotFound");
+	case KErrDied:
+		return _L("KErrDied");
+	case KErrInUse:
+		return _L("KErrInUse");
+	case KErrServerTerminated:
+		return _L("KErrServerTerminated");
+	case KErrServerBusy:
+		return _L("KErrServerBusy");
+	case KErrCompletion:
+		return _L("KErrCompletion");
+	case KErrNotReady:
+		return _L("KErrNotReady");
+	case KErrUnknown:
+		return _L("KErrUnknown");
+	case KErrCorrupt:
+		return _L("KErrCorrupt");
+	case KErrAccessDenied:
+		return _L("KErrAccessDenied");
+	case KErrLocked:
+		return _L("KErrLocked");
+	case KErrWrite:
+		return _L("KErrWrite");
+	case KErrDisMounted:
+		return _L("KErrDisMounted");
+	case KErrEof:
+		return _L("KErrEof");
+	case KErrDiskFull:
+		return _L("KErrDiskFull");
+	case KErrBadDriver:
+		return _L("KErrBadDriver");
+	case KErrBadName:
+		return _L("KErrBadName");
+	case KErrCommsLineFail:
+		return _L("KErrCommsLineFail");
+	case KErrCommsFrame:
+		return _L("KErrCommsFrame");
+	case KErrCommsOverrun:
+		return _L("KErrCommsOverrun");
+	case KErrCommsParity:
+		return _L("KErrCommsParity");
+	case KErrTimedOut:
+		return _L("KErrTimedOut");
+	case KErrCouldNotConnect:
+		return _L("KErrCouldNotConnect");
+	case KErrCouldNotDisconnect:
+		return _L("KErrCouldNotDisconnect");
+	case KErrDisconnected:
+		return _L("KErrDisconnected");
+	case KErrBadLibraryEntryPoint:
+		return _L("KErrBadLibraryEntryPoint");
+	case KErrBadDescriptor:
+		return _L("KErrBadDescriptor");
+	case KErrAbort:
+		return _L("KErrAbort");
+	case KErrTooBig:
+		return _L("KErrTooBig");
+	default:
+		return _L("Unknown");
+		}
+	}
+
+
+EXPORT_C const TText* CLog::TestResultText( enum TVerdict aTestVerdict )
+/**
+Turn a test verdict into text.
+
+@param aTestVerdict The test result.
+@return Text describing the current verdict.
+*/
+	{
+	switch ( aTestVerdict )
+		{
+	case EPass:
+		return _S("PASS");
+	case EFail:
+		return _S("FAIL");
+	case EInconclusive:
+		return _S("INCONCLUSIVE");
+	case ETestSuiteError:
+		return _S("TEST_SUITE_ERROR");
+	case EAbort:
+		return _S("ABORT");
+	default:
+		return _S("What");
+
+		}
+	}
+
+EXPORT_C void CLog::LogBlankLine( TInt number )
+/**
+Add a number of blank lines.
+
+@param number The number of blank lines to add to the Log.
+*/
+	{
+	for (TInt i =0; i< number; i++)
+		Log(_L(" "));
+	}
+
+EXPORT_C void CLog::CloseLogFile()
+/**
+Close the log file.
+*/
+	{
+	// add the htm end
+	iFileLogger.WriteFormat(_L("</end>"));
+	
+	// close flogger
+	iFileLogger.CloseLog();
+	}
+
+void TIntegrationTestLog16Overflow::Overflow(TDes16& /*aDes*/)
+/**
+This function is called if the format text overflows the internal buffer.
+*/
+	{
+
+	User::Panic(_L("Log output buffer overflow"),1);
+
+	}
+
+EXPORT_C void CLog::SetSeverity( TInt aSeverity )
+/**
+Set the current severity level.
+
+@param aSeverity The new severity level.
+*/
+{
+	iSeverity = aSeverity;
+}
+
+EXPORT_C TInt CLog::Severity()
+/**
+Get the current severity level.
+
+@return The current severity level.
+*/
+{
+	return iSeverity;
+}
+
+