os/mm/mmtestenv/mmtestfw/Source/TestFrameworkClient/Log.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// Client / server logging for Test Framework
sl@0
    15
// NOTE : does NOT include secure API changes in EKA2
sl@0
    16
// 
sl@0
    17
//
sl@0
    18
sl@0
    19
sl@0
    20
// Test system includes
sl@0
    21
#include <testframework.h>
sl@0
    22
sl@0
    23
// do not export if Unit Testing
sl@0
    24
#if defined (__TSU_TESTFRAMEWORK__)
sl@0
    25
#undef EXPORT_C
sl@0
    26
#define EXPORT_C
sl@0
    27
#endif
sl@0
    28
sl@0
    29
/**
sl@0
    30
 *
sl@0
    31
 * HTML font formatting strings
sl@0
    32
 *
sl@0
    33
 * @xxxx
sl@0
    34
 *
sl@0
    35
 */
sl@0
    36
_LIT(KResultPass, "<font size=4 color=00AF00>");
sl@0
    37
_LIT(KResultFail, "<font size=4 color=FF0000>");
sl@0
    38
_LIT(KResultInconclusive, "<font size=4 color=0000FF>");
sl@0
    39
_LIT(KResultUndefined, "<font size=4 color=FF00FF>");
sl@0
    40
_LIT(KResultEnd, "</font>");
sl@0
    41
_LIT(KResultNonHtml, "");
sl@0
    42
sl@0
    43
_LIT(KResultKnownFailure, "<font size=4 color=008080>"); //A new TVerdict for a known failed test
sl@0
    44
sl@0
    45
// logging macro used only for verdicts - not for external use
sl@0
    46
#define VER_PRINTF(r1, r2, r3)		LogExtra(__FILE8__, __LINE__, ESevrVer, _L("%S%S%S\n"), (r1), (r2), (r3)) 
sl@0
    47
sl@0
    48
/**
sl@0
    49
 *
sl@0
    50
 * Static constructor for CLog.
sl@0
    51
 *
sl@0
    52
 *
sl@0
    53
 * @return	"CLog*"
sl@0
    54
 *			The constructed CLog
sl@0
    55
 *
sl@0
    56
 * @xxxx
sl@0
    57
 *
sl@0
    58
 */
sl@0
    59
EXPORT_C CLog* CLog::NewL()
sl@0
    60
	{
sl@0
    61
	CLog* self = new(ELeave) CLog;
sl@0
    62
	self->Construct();
sl@0
    63
	return self;
sl@0
    64
	}
sl@0
    65
sl@0
    66
/**
sl@0
    67
 *
sl@0
    68
 * Static NewLC constructor for CLog.
sl@0
    69
 *
sl@0
    70
 *
sl@0
    71
 * @return	"CLog*"
sl@0
    72
 *			The constructed CLog
sl@0
    73
 *
sl@0
    74
 * @xxxx
sl@0
    75
 *
sl@0
    76
 */
sl@0
    77
EXPORT_C CLog* CLog::NewLC()
sl@0
    78
	{
sl@0
    79
	CLog* self = new(ELeave) CLog;
sl@0
    80
	CleanupStack::PushL(self);
sl@0
    81
	self->Construct();
sl@0
    82
	return self;
sl@0
    83
	}
sl@0
    84
sl@0
    85
/**
sl@0
    86
 *
sl@0
    87
 * Second-phase constructor for CLog.
sl@0
    88
 *
sl@0
    89
 * @xxxx
sl@0
    90
 *
sl@0
    91
 */
sl@0
    92
EXPORT_C void CLog::Construct()
sl@0
    93
	{
sl@0
    94
	iLogStatus = 0;		// no outputs enabled yet
sl@0
    95
	iSeverity = ESevrAll;
sl@0
    96
	//Do we need to put information about source file & #line?
sl@0
    97
	//Default is yes.
sl@0
    98
	iLogFlags = ELogPutSrcInfo | ELogHtmlMode;
sl@0
    99
	}
sl@0
   100
sl@0
   101
/**
sl@0
   102
 *
sl@0
   103
 * Destructor for CLog.
sl@0
   104
 *
sl@0
   105
 * @xxxx
sl@0
   106
 *
sl@0
   107
 */
sl@0
   108
EXPORT_C CLog::~CLog()
sl@0
   109
	{
sl@0
   110
	// tell server to close logs here
sl@0
   111
	iClientSession.Close();
sl@0
   112
	}
sl@0
   113
sl@0
   114
/**
sl@0
   115
 *
sl@0
   116
 * Open a new test log.
sl@0
   117
 *
sl@0
   118
 * @param	"const TDesC& aLogName"
sl@0
   119
 *			Log file or console name
sl@0
   120
 *
sl@0
   121
 * @param	"TInt aLogMode"
sl@0
   122
 *			Log modes (a bitmask of TTestFrameworkLogMode).
sl@0
   123
 *
sl@0
   124
 * @xxxx
sl@0
   125
 *
sl@0
   126
 */
sl@0
   127
EXPORT_C void CLog::OpenLogFileL(const TDesC& aLogName, TInt aLogMode)
sl@0
   128
	{
sl@0
   129
	User::LeaveIfError(iClientSession.Connect());
sl@0
   130
sl@0
   131
	iClientSession.OpenLog(aLogName, aLogMode);
sl@0
   132
	// get and store the log status - this will determine whether we
sl@0
   133
	// e.g. do any formatting for file output
sl@0
   134
	iLogStatus = iClientSession.LogStatus();
sl@0
   135
	}
sl@0
   136
sl@0
   137
/**
sl@0
   138
 *
sl@0
   139
 * Open an existing test log.
sl@0
   140
 *
sl@0
   141
 * @xxxx
sl@0
   142
 *
sl@0
   143
 */
sl@0
   144
EXPORT_C void CLog::OpenLogFileL()
sl@0
   145
	{
sl@0
   146
	User::LeaveIfError(iClientSession.Connect());
sl@0
   147
	iLogStatus = iClientSession.LogStatus();
sl@0
   148
	}
sl@0
   149
sl@0
   150
/**
sl@0
   151
 *
sl@0
   152
 * Set put source info (i.e. traceable logging).
sl@0
   153
 *
sl@0
   154
 * @param	"TBool aPutSrcInfo"
sl@0
   155
 *			Put source info on or off.
sl@0
   156
 *
sl@0
   157
 * @xxxx
sl@0
   158
 *
sl@0
   159
 */
sl@0
   160
EXPORT_C void CLog::SetPutSrcInfo(TBool aPutSrcInfo)
sl@0
   161
	{
sl@0
   162
	if(aPutSrcInfo)
sl@0
   163
		iLogFlags |= ELogPutSrcInfo;
sl@0
   164
	else
sl@0
   165
		iLogFlags &= ~ELogPutSrcInfo;
sl@0
   166
	}
sl@0
   167
	
sl@0
   168
/**
sl@0
   169
 *
sl@0
   170
 * Set HTML logging mode.
sl@0
   171
 *
sl@0
   172
 * @param	"TBool aArg"
sl@0
   173
 *			HTML mode on or off.
sl@0
   174
 *
sl@0
   175
 * @xxxx
sl@0
   176
 *
sl@0
   177
 */
sl@0
   178
EXPORT_C void CLog::SetHtmlLogMode(TBool aArg)
sl@0
   179
	{
sl@0
   180
	if(aArg)
sl@0
   181
		iLogFlags |= ELogHtmlMode;
sl@0
   182
	else
sl@0
   183
		iLogFlags &= ~ELogHtmlMode;
sl@0
   184
	}
sl@0
   185
 
sl@0
   186
/**
sl@0
   187
 *
sl@0
   188
 * Get HTML logging mode.
sl@0
   189
 *
sl@0
   190
 * @return	"TBool"
sl@0
   191
 *			HTML mode on or off.
sl@0
   192
 *
sl@0
   193
 * @xxxx
sl@0
   194
 *
sl@0
   195
 */
sl@0
   196
EXPORT_C TBool CLog::HtmlLogMode() const
sl@0
   197
	{
sl@0
   198
	return ((iLogFlags & ELogHtmlMode) != 0);
sl@0
   199
	}
sl@0
   200
sl@0
   201
sl@0
   202
/**
sl@0
   203
 *
sl@0
   204
 * General logging function.
sl@0
   205
 *
sl@0
   206
 * @param	"TRefByValue<const TDesC16> aFmt"
sl@0
   207
 *			Printf-style format.
sl@0
   208
 *
sl@0
   209
 * @param	"..."
sl@0
   210
 *			Variable print parameters
sl@0
   211
 *
sl@0
   212
 * @xxxx
sl@0
   213
 *
sl@0
   214
 */
sl@0
   215
EXPORT_C void CLog::Log(TRefByValue<const TDesC16> aFmt, ...)
sl@0
   216
	{
sl@0
   217
    VA_LIST aList;
sl@0
   218
	VA_START(aList, aFmt);
sl@0
   219
sl@0
   220
	TIntegrationTestLog16Overflow overflow16;
sl@0
   221
sl@0
   222
	// decode formatted data for display on console
sl@0
   223
	TBuf<KMaxLogLineLength> lineBuf;
sl@0
   224
	lineBuf = KNullDesC;
sl@0
   225
	lineBuf.AppendFormatList(aFmt, aList, &overflow16);
sl@0
   226
sl@0
   227
	// write to the console
sl@0
   228
	if(iLogStatus & ELogConsoleFull)
sl@0
   229
		iClientSession.WriteLog(lineBuf, ELogToConsole);
sl@0
   230
sl@0
   231
	// write to log file
sl@0
   232
	WriteFormat(_L("%S\n"), &lineBuf);
sl@0
   233
sl@0
   234
	VA_END(aList); 
sl@0
   235
	}
sl@0
   236
sl@0
   237
/**
sl@0
   238
 *
sl@0
   239
 * General logging function with severity.
sl@0
   240
 *
sl@0
   241
 * @param	"TInt aSeverity"
sl@0
   242
 *			Severity level required to log
sl@0
   243
 *
sl@0
   244
 * @param	"TRefByValue<const TDesC16> aFmt"
sl@0
   245
 *			Printf-style format.
sl@0
   246
 *
sl@0
   247
 * @param	"..."
sl@0
   248
 *			Variable print parameters
sl@0
   249
 *
sl@0
   250
 * @xxxx
sl@0
   251
 *
sl@0
   252
 */
sl@0
   253
EXPORT_C void CLog::Log(TInt aSeverity, TRefByValue<const TDesC16> aFmt, ...)
sl@0
   254
	{
sl@0
   255
    VA_LIST aList;
sl@0
   256
	VA_START(aList, aFmt);
sl@0
   257
sl@0
   258
	if(LogSeverity::IsActive(aSeverity, Severity()))
sl@0
   259
		{
sl@0
   260
		Log(aFmt, aList);
sl@0
   261
		}
sl@0
   262
sl@0
   263
	VA_END(aList); 
sl@0
   264
	}
sl@0
   265
sl@0
   266
/**
sl@0
   267
 *
sl@0
   268
 * General logging function.
sl@0
   269
 *
sl@0
   270
 * @param	"TRefByValue<const TDesC16> aFmt"
sl@0
   271
 *			Printf-style format.
sl@0
   272
 *
sl@0
   273
 * @param	"VA_LIST aList"
sl@0
   274
 *			Variable print parameters
sl@0
   275
 *
sl@0
   276
 * @xxxx
sl@0
   277
 *
sl@0
   278
 */
sl@0
   279
EXPORT_C void CLog::Log(TRefByValue<const TDesC16> aFmt, VA_LIST aList)
sl@0
   280
	{
sl@0
   281
	// decode formatted data for display on console
sl@0
   282
	TBuf<KMaxLogLineLength> lineBuf;
sl@0
   283
	TIntegrationTestLog16Overflow overflow16;
sl@0
   284
sl@0
   285
	lineBuf = KNullDesC;
sl@0
   286
	lineBuf.AppendFormatList(aFmt, aList, &overflow16);
sl@0
   287
sl@0
   288
	// write to log file
sl@0
   289
	WriteFormat(_L("%S\n"),&lineBuf);
sl@0
   290
sl@0
   291
	// write to the console
sl@0
   292
	if(iLogStatus & ELogConsoleFull)
sl@0
   293
		iClientSession.WriteLog(lineBuf, ELogToConsole);
sl@0
   294
sl@0
   295
	}
sl@0
   296
sl@0
   297
/**
sl@0
   298
 *
sl@0
   299
 * Traceable logging function
sl@0
   300
 *
sl@0
   301
 * Should be used for macros only
sl@0
   302
 *
sl@0
   303
 * @param	"const TText8* aFile"
sl@0
   304
 *			Source code file name
sl@0
   305
 *
sl@0
   306
 * @param	"TInt aLine"
sl@0
   307
 *			Source code line
sl@0
   308
 *
sl@0
   309
 * @param	"TInt aSeverity"
sl@0
   310
 *			Severity level required to log
sl@0
   311
 *
sl@0
   312
 * @param	"TRefByValue<const TDesC16> aFmt"
sl@0
   313
 *			Printf-style format.
sl@0
   314
 *
sl@0
   315
 * @param	"VA_LIST aList"
sl@0
   316
 *			Variable print parameters
sl@0
   317
 *
sl@0
   318
 * @xxxx
sl@0
   319
 *
sl@0
   320
 */
sl@0
   321
#ifdef EXCLUDE_FOR_UNITTEST
sl@0
   322
EXPORT_C void CLog::LogExtra(const TText8* /*aFile*/, TInt /*aLine*/, TInt /*aSeverity*/,
sl@0
   323
							 TRefByValue<const TDesC16> /*aFmt*/, VA_LIST /*aList*/)
sl@0
   324
	{
sl@0
   325
	}
sl@0
   326
#else
sl@0
   327
EXPORT_C void CLog::LogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,
sl@0
   328
							 TRefByValue<const TDesC16> aFmt, VA_LIST aList)
sl@0
   329
	{
sl@0
   330
	if(LogSeverity::IsActive(aSeverity, Severity()))
sl@0
   331
		{
sl@0
   332
sl@0
   333
		TIntegrationTestLog16Overflow overflow16;
sl@0
   334
sl@0
   335
		// decode formatted data for display on console
sl@0
   336
		TBuf<KMaxLogLineLength> lineBuf;
sl@0
   337
sl@0
   338
		lineBuf = KNullDesC;
sl@0
   339
		lineBuf.AppendFormatList(aFmt, aList, &overflow16);
sl@0
   340
sl@0
   341
		// write to the console
sl@0
   342
		if(iLogStatus & ELogConsoleFull)
sl@0
   343
			WriteLogConsole(lineBuf);
sl@0
   344
sl@0
   345
		// log severity
sl@0
   346
		TBuf<1> charSevr;
sl@0
   347
		switch(aSeverity)
sl@0
   348
			{
sl@0
   349
			case ESevrVer:
sl@0
   350
				charSevr = _L("V");
sl@0
   351
				break;
sl@0
   352
			case ESevrErr:
sl@0
   353
				charSevr = _L("E");
sl@0
   354
				break;
sl@0
   355
			case ESevrWarn:
sl@0
   356
				charSevr = _L("W");
sl@0
   357
				break;
sl@0
   358
			case ESevrInfo:
sl@0
   359
			default:
sl@0
   360
				charSevr = _L("I");
sl@0
   361
				break;
sl@0
   362
			}
sl@0
   363
sl@0
   364
		// Do we need to put information about source file & #line?
sl@0
   365
		if(iLogFlags & ELogPutSrcInfo)
sl@0
   366
			{		// Braces used to scope lifetime of TBuf objects
sl@0
   367
			TPtrC8 fileName8(aFile);
sl@0
   368
			TBuf<256> fileName;
sl@0
   369
			TParse printFileName;
sl@0
   370
			fileName.Copy(fileName8);  // TText8->TBuf16
sl@0
   371
			// We don't need full file name.
sl@0
   372
			printFileName.Set(fileName, NULL, NULL) ;
sl@0
   373
			fileName.Copy(printFileName.NameAndExt()) ;
sl@0
   374
			// write to log file
sl@0
   375
			WriteFormat(_L("%S\t%S\t%d\t%S\n"), &charSevr, &fileName, aLine, &lineBuf);
sl@0
   376
			}
sl@0
   377
		else
sl@0
   378
			{
sl@0
   379
			// write to log file
sl@0
   380
			WriteFormat(_L("%S\t%S\n"), &charSevr, &lineBuf);
sl@0
   381
			}
sl@0
   382
		}
sl@0
   383
	}
sl@0
   384
#endif // EXCLUDE_FOR_UNITTEST
sl@0
   385
sl@0
   386
/**
sl@0
   387
 *
sl@0
   388
 * Traceable logging function with variable param list.
sl@0
   389
 *
sl@0
   390
 * Should be used for macros only
sl@0
   391
 *
sl@0
   392
 * @param	"const TText8* aFile"
sl@0
   393
 *			Source code file name
sl@0
   394
 *
sl@0
   395
 * @param	"TInt aLine"
sl@0
   396
 *			Source code line
sl@0
   397
 *
sl@0
   398
 * @param	"TInt aSeverity"
sl@0
   399
 *			Severity level required to log
sl@0
   400
 *
sl@0
   401
 * @param	"TRefByValue<const TDesC16> aFmt"
sl@0
   402
 *			Printf-style format.
sl@0
   403
 *
sl@0
   404
 * @param	"..."
sl@0
   405
 *			Variable print parameters
sl@0
   406
 *
sl@0
   407
 * @xxxx
sl@0
   408
 *
sl@0
   409
 */
sl@0
   410
EXPORT_C void CLog::LogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,
sl@0
   411
		TRefByValue<const TDesC16> aFmt,...)
sl@0
   412
	{
sl@0
   413
	VA_LIST aList;
sl@0
   414
	VA_START(aList, aFmt);
sl@0
   415
	LogExtra(aFile, aLine, aSeverity, aFmt, aList);
sl@0
   416
	VA_END(aList); 
sl@0
   417
	}
sl@0
   418
sl@0
   419
sl@0
   420
/**
sl@0
   421
 *
sl@0
   422
 * Write a test result highlighted to the log.
sl@0
   423
 *
sl@0
   424
 * @param	"TVerdict aVerdict"
sl@0
   425
 *			The test verdict.
sl@0
   426
 *
sl@0
   427
 * @param	"TRefByValue<const TDesC16> aFmt"
sl@0
   428
 *			Printf-style format.
sl@0
   429
 *
sl@0
   430
 * @param	"..."
sl@0
   431
 *			Variable print parameters
sl@0
   432
 *
sl@0
   433
 * @xxxx
sl@0
   434
 *
sl@0
   435
 */
sl@0
   436
EXPORT_C void CLog::LogResult(TVerdict aVerdict, TRefByValue<const TDesC16> aFmt, ...)
sl@0
   437
	{
sl@0
   438
    VA_LIST aList;
sl@0
   439
	VA_START(aList, aFmt);
sl@0
   440
sl@0
   441
	TIntegrationTestLog16Overflow iOverflow16;
sl@0
   442
sl@0
   443
	// decode formatted data for display on console
sl@0
   444
	TBuf <KMaxLogLineLength> lineBuf;
sl@0
   445
	lineBuf.AppendFormatList(aFmt, aList, &iOverflow16);
sl@0
   446
sl@0
   447
	// write to the console
sl@0
   448
	iClientSession.WriteLog(lineBuf, ELogToConsole);
sl@0
   449
sl@0
   450
	// write to log file
sl@0
   451
	if(iLogFlags & ELogHtmlMode)
sl@0
   452
		{ 
sl@0
   453
		switch(aVerdict)
sl@0
   454
			{
sl@0
   455
		case EPass:
sl@0
   456
			VER_PRINTF(&KResultPass(), &lineBuf, &KResultEnd());
sl@0
   457
			break;
sl@0
   458
		case EFail:
sl@0
   459
			VER_PRINTF(&KResultFail(), &lineBuf, &KResultEnd());
sl@0
   460
			break;
sl@0
   461
		case EInconclusive:
sl@0
   462
		case ETestSuiteError:
sl@0
   463
		case EAbort:
sl@0
   464
			VER_PRINTF(&KResultInconclusive(), &lineBuf, &KResultEnd());
sl@0
   465
			break;
sl@0
   466
		case EKnownFailure:	//A new TVerdict for a known failed test
sl@0
   467
			VER_PRINTF(&KResultKnownFailure(), &lineBuf, &KResultEnd());
sl@0
   468
			break;
sl@0
   469
sl@0
   470
		default: // undefined
sl@0
   471
			VER_PRINTF(&KResultUndefined(), &lineBuf, &KResultEnd());
sl@0
   472
			break;
sl@0
   473
			}
sl@0
   474
		}
sl@0
   475
	else
sl@0
   476
		{
sl@0
   477
			VER_PRINTF(&KResultNonHtml(), &lineBuf, &KResultNonHtml());
sl@0
   478
		}	
sl@0
   479
	VA_END(aList); 
sl@0
   480
	}
sl@0
   481
sl@0
   482
/**
sl@0
   483
 *
sl@0
   484
 * Make a readable string out of an EPOC error code.
sl@0
   485
 *
sl@0
   486
 * @param	"TInt aError"
sl@0
   487
 *			The error code
sl@0
   488
 *
sl@0
   489
 * @return	"TPtrC"
sl@0
   490
 *			The error code as a readable string
sl@0
   491
 *
sl@0
   492
 * @xxxx
sl@0
   493
 *
sl@0
   494
 */
sl@0
   495
EXPORT_C TPtrC CLog::EpocErrorToText(TInt aError)
sl@0
   496
	{
sl@0
   497
	switch (aError)
sl@0
   498
		{
sl@0
   499
	case KErrNone:
sl@0
   500
		return _L("KErrNone");
sl@0
   501
	case KErrNotFound:
sl@0
   502
		return _L("KErrNotFound");
sl@0
   503
	case KErrGeneral:
sl@0
   504
		return _L("KErrGeneral");
sl@0
   505
	case KErrCancel:
sl@0
   506
		return _L("KErrCancel");
sl@0
   507
	case KErrNoMemory:
sl@0
   508
		return _L("KErrNoMemory");
sl@0
   509
	case KErrNotSupported:
sl@0
   510
		return _L("KErrNotSupported");
sl@0
   511
	case KErrArgument:
sl@0
   512
		return _L("KErrArgument");
sl@0
   513
	case KErrTotalLossOfPrecision:
sl@0
   514
		return _L("KErrTotalLossOfPrecision");
sl@0
   515
	case KErrBadHandle:
sl@0
   516
		return _L("KErrBadHandle");
sl@0
   517
	case KErrOverflow:
sl@0
   518
		return _L("KErrOverflow");
sl@0
   519
	case KErrUnderflow:
sl@0
   520
		return _L("KErrUnderflow");
sl@0
   521
	case KErrAlreadyExists:
sl@0
   522
		return _L("KErrAlreadyExists");
sl@0
   523
	case KErrPathNotFound:
sl@0
   524
		return _L("KErrPathNotFound");
sl@0
   525
	case KErrDied:
sl@0
   526
		return _L("KErrDied");
sl@0
   527
	case KErrInUse:
sl@0
   528
		return _L("KErrInUse");
sl@0
   529
	case KErrServerTerminated:
sl@0
   530
		return _L("KErrServerTerminated");
sl@0
   531
	case KErrServerBusy:
sl@0
   532
		return _L("KErrServerBusy");
sl@0
   533
	case KErrCompletion:
sl@0
   534
		return _L("KErrCompletion");
sl@0
   535
	case KErrNotReady:
sl@0
   536
		return _L("KErrNotReady");
sl@0
   537
	case KErrUnknown:
sl@0
   538
		return _L("KErrUnknown");
sl@0
   539
	case KErrCorrupt:
sl@0
   540
		return _L("KErrCorrupt");
sl@0
   541
	case KErrAccessDenied:
sl@0
   542
		return _L("KErrAccessDenied");
sl@0
   543
	case KErrLocked:
sl@0
   544
		return _L("KErrLocked");
sl@0
   545
	case KErrWrite:
sl@0
   546
		return _L("KErrWrite");
sl@0
   547
	case KErrDisMounted:
sl@0
   548
		return _L("KErrDisMounted");
sl@0
   549
	case KErrEof:
sl@0
   550
		return _L("KErrEof");
sl@0
   551
	case KErrDiskFull:
sl@0
   552
		return _L("KErrDiskFull");
sl@0
   553
	case KErrBadDriver:
sl@0
   554
		return _L("KErrBadDriver");
sl@0
   555
	case KErrBadName:
sl@0
   556
		return _L("KErrBadName");
sl@0
   557
	case KErrCommsLineFail:
sl@0
   558
		return _L("KErrCommsLineFail");
sl@0
   559
	case KErrCommsFrame:
sl@0
   560
		return _L("KErrCommsFrame");
sl@0
   561
	case KErrCommsOverrun:
sl@0
   562
		return _L("KErrCommsOverrun");
sl@0
   563
	case KErrCommsParity:
sl@0
   564
		return _L("KErrCommsParity");
sl@0
   565
	case KErrTimedOut:
sl@0
   566
		return _L("KErrTimedOut");
sl@0
   567
	case KErrCouldNotConnect:
sl@0
   568
		return _L("KErrCouldNotConnect");
sl@0
   569
	case KErrCouldNotDisconnect:
sl@0
   570
		return _L("KErrCouldNotDisconnect");
sl@0
   571
	case KErrDisconnected:
sl@0
   572
		return _L("KErrDisconnected");
sl@0
   573
	case KErrBadLibraryEntryPoint:
sl@0
   574
		return _L("KErrBadLibraryEntryPoint");
sl@0
   575
	case KErrBadDescriptor:
sl@0
   576
		return _L("KErrBadDescriptor");
sl@0
   577
	case KErrAbort:
sl@0
   578
		return _L("KErrAbort");
sl@0
   579
	case KErrTooBig:
sl@0
   580
		return _L("KErrTooBig");
sl@0
   581
	default:
sl@0
   582
		return _L("Unknown");
sl@0
   583
		} // end switch
sl@0
   584
	}
sl@0
   585
sl@0
   586
sl@0
   587
/**
sl@0
   588
 *
sl@0
   589
 * Make a readable string out of a test verdict.
sl@0
   590
 *
sl@0
   591
 * @param	"TVerdict aTestVerdict"
sl@0
   592
 *			The test verdict
sl@0
   593
 *
sl@0
   594
 * @return	"TPtrC"
sl@0
   595
 *			The test verdict as a readable string
sl@0
   596
 *
sl@0
   597
 * @xxxx
sl@0
   598
 *
sl@0
   599
 */
sl@0
   600
EXPORT_C TPtrC CLog::TestResultText(TVerdict aTestVerdict)
sl@0
   601
	{
sl@0
   602
	switch (aTestVerdict)
sl@0
   603
		{
sl@0
   604
	case EPass:
sl@0
   605
		return _L("PASS");
sl@0
   606
	case EFail:
sl@0
   607
		return _L("FAIL");
sl@0
   608
	case EInconclusive:
sl@0
   609
		return _L("INCONCLUSIVE");
sl@0
   610
	case ETestSuiteError:
sl@0
   611
		return _L("TEST_SUITE_ERROR");
sl@0
   612
	case EAbort:
sl@0
   613
		return _L("ABORT");
sl@0
   614
	case EKnownFailure: //A new TVerdict for a known failed test
sl@0
   615
		return _L("KNOWN_Failure"); //using lower case in 'Failure' can remove the confusion on 'savres2html.bat' making test summary
sl@0
   616
	default:
sl@0
   617
		return _L("undefined");
sl@0
   618
sl@0
   619
		}
sl@0
   620
	}
sl@0
   621
sl@0
   622
/**
sl@0
   623
 *
sl@0
   624
 * Write blank lines to the log.
sl@0
   625
 *
sl@0
   626
 * @param	"TInt number"
sl@0
   627
 *			Number of lines to write
sl@0
   628
 *
sl@0
   629
 * @xxxx
sl@0
   630
 *
sl@0
   631
 */
sl@0
   632
EXPORT_C void CLog::LogBlankLine(TInt aNumber)
sl@0
   633
	{
sl@0
   634
	for (TInt i = 0; i < aNumber; i++)
sl@0
   635
		Log(_L(" "));
sl@0
   636
	}
sl@0
   637
sl@0
   638
/**
sl@0
   639
 *
sl@0
   640
 * Close the log.
sl@0
   641
 *
sl@0
   642
 * @xxxx
sl@0
   643
 *
sl@0
   644
 */
sl@0
   645
EXPORT_C void CLog::CloseLogFile()
sl@0
   646
	{
sl@0
   647
	// add the htm end
sl@0
   648
	WriteFormat(_L("</end>"));
sl@0
   649
	
sl@0
   650
	iClientSession.CloseLog();
sl@0
   651
	}
sl@0
   652
sl@0
   653
/**
sl@0
   654
 *
sl@0
   655
 * Set log severity.
sl@0
   656
 *
sl@0
   657
 * @param	"TInt aSeverity"
sl@0
   658
 *			The required severity
sl@0
   659
 *
sl@0
   660
 * @xxxx
sl@0
   661
 *
sl@0
   662
 */
sl@0
   663
EXPORT_C void CLog::SetSeverity(TInt aSeverity)
sl@0
   664
{
sl@0
   665
	iSeverity = aSeverity;
sl@0
   666
}
sl@0
   667
sl@0
   668
/**
sl@0
   669
 *
sl@0
   670
 * Get log severity.
sl@0
   671
 *
sl@0
   672
 * @return	"TInt"
sl@0
   673
 *			The current severity
sl@0
   674
 *
sl@0
   675
 * @xxxx
sl@0
   676
 *
sl@0
   677
 */
sl@0
   678
EXPORT_C TInt CLog::Severity() const
sl@0
   679
{
sl@0
   680
	return iSeverity;
sl@0
   681
}
sl@0
   682
sl@0
   683
/**
sl@0
   684
 *
sl@0
   685
 * Get log status from this logger's client session.
sl@0
   686
 *
sl@0
   687
 * @return	"TInt"
sl@0
   688
 *			The current log status (a bitmask of TTestFrameworkLogMode)
sl@0
   689
 *
sl@0
   690
 * @xxxx
sl@0
   691
 *
sl@0
   692
 */
sl@0
   693
EXPORT_C TInt CLog::LogStatus()
sl@0
   694
	{
sl@0
   695
	return iClientSession.LogStatus();
sl@0
   696
	}
sl@0
   697
sl@0
   698
sl@0
   699
/**
sl@0
   700
 *
sl@0
   701
 * Write formatted output to the log.
sl@0
   702
 *
sl@0
   703
 * @param	"TRefByValue<const TDesC16> aFmt"
sl@0
   704
 *			Printf-style format.
sl@0
   705
 *
sl@0
   706
 * @param	"..."
sl@0
   707
 *			Variable print parameters
sl@0
   708
 *
sl@0
   709
 * @xxxx
sl@0
   710
 *
sl@0
   711
 */
sl@0
   712
EXPORT_C void CLog::WriteFormat(TRefByValue<const TDesC16> aFmt, ...)
sl@0
   713
	{
sl@0
   714
sl@0
   715
	// file / port logging not enabled
sl@0
   716
	if (!(iLogStatus & ELogToFile))
sl@0
   717
		if (!(iLogStatus & ELogToPort))
sl@0
   718
			return;
sl@0
   719
sl@0
   720
    VA_LIST aList;
sl@0
   721
	VA_START(aList, aFmt);
sl@0
   722
sl@0
   723
	TIntegrationTestLog16Overflow overflow16;
sl@0
   724
sl@0
   725
	TUint16* dataBufPtr = (TUint16*)(iDataBuf.Ptr());
sl@0
   726
	TPtr16 lineBuf(dataBufPtr, 0, KMaxLogLineLength);
sl@0
   727
	lineBuf.Fill('\0', KMaxLogLineLength);
sl@0
   728
sl@0
   729
	// get the current time and date
sl@0
   730
	TTime now;
sl@0
   731
	now.HomeTime();
sl@0
   732
	TDateTime dateTime = now.DateTime() ;
sl@0
   733
sl@0
   734
	// add the current time and date 
sl@0
   735
	lineBuf.Format(_L("%02d/%02d/%04d\t%02d:%02d:%02d:%03d\t"),
sl@0
   736
		dateTime.Day()+1,
sl@0
   737
		dateTime.Month()+1,
sl@0
   738
		dateTime.Year(),
sl@0
   739
		dateTime.Hour(),
sl@0
   740
		dateTime.Minute(),
sl@0
   741
		dateTime.Second(),
sl@0
   742
		(dateTime.MicroSecond() / 1000)); 
sl@0
   743
sl@0
   744
	// followed by the formatted data
sl@0
   745
	lineBuf.AppendFormatList(aFmt, aList, &overflow16);
sl@0
   746
	VA_END(aList); 
sl@0
   747
sl@0
   748
	// send one message - the server will write to both if enabled
sl@0
   749
	TInt theStatus = 0;
sl@0
   750
	if (iLogStatus & ELogToFile)
sl@0
   751
		theStatus |= ELogToFile;
sl@0
   752
	if (iLogStatus & ELogToPort)
sl@0
   753
		theStatus |= ELogToPort;
sl@0
   754
sl@0
   755
	iClientSession.WriteLog(lineBuf, theStatus);
sl@0
   756
	}
sl@0
   757
sl@0
   758
/**
sl@0
   759
 *
sl@0
   760
 * Write output to the console with date/time stamp
sl@0
   761
 *
sl@0
   762
 * @param	"const TDesC& aBuf"
sl@0
   763
 *			The output.
sl@0
   764
 *
sl@0
   765
 * @xxxx
sl@0
   766
 *
sl@0
   767
 */
sl@0
   768
EXPORT_C void CLog::WriteLogConsole(const TDesC& aBuf)
sl@0
   769
	{
sl@0
   770
sl@0
   771
	// console logging not enabled
sl@0
   772
	if (!(iLogStatus & ELogConsoleFull))
sl@0
   773
		return;
sl@0
   774
sl@0
   775
	// decode formatted data for display on console
sl@0
   776
	TUint16* dataBufPtr = (TUint16*)(iDataBuf.Ptr());
sl@0
   777
	TPtr16 lineBuf(dataBufPtr, 0, KMaxLogLineLength);
sl@0
   778
	lineBuf.Fill('\0', KMaxLogLineLength);
sl@0
   779
sl@0
   780
	// get the current time and date
sl@0
   781
	TTime now;
sl@0
   782
	now.HomeTime();
sl@0
   783
	TDateTime dateTime = now.DateTime() ;
sl@0
   784
sl@0
   785
	// add the current time and date 
sl@0
   786
	lineBuf.Format(_L("%02d/%02d/%04d\t%02d:%02d:%02d:%03d\t%S"),
sl@0
   787
		dateTime.Day()+1,
sl@0
   788
		dateTime.Month()+1,
sl@0
   789
		dateTime.Year(),
sl@0
   790
		dateTime.Hour(),
sl@0
   791
		dateTime.Minute(),
sl@0
   792
		dateTime.Second(),
sl@0
   793
		(dateTime.MicroSecond() / 1000),
sl@0
   794
		&aBuf); 
sl@0
   795
sl@0
   796
	iClientSession.WriteLog(lineBuf, ELogToConsole);
sl@0
   797
	}
sl@0
   798
sl@0
   799
/**
sl@0
   800
 *
sl@0
   801
 * This function is used to avoid a panic if format text overflows 
sl@0
   802
 * the internal buffer.
sl@0
   803
 *
sl@0
   804
 * @param "TDes16&"
sl@0
   805
 *		  the overflowing string
sl@0
   806
 *
sl@0
   807
 * @xxxx
sl@0
   808
 *
sl@0
   809
 */
sl@0
   810
void TIntegrationTestLog16Overflow::Overflow(TDes16& aDes)
sl@0
   811
	{
sl@0
   812
	aDes = _L("*** ERROR : line too long, cannot log ***");
sl@0
   813
	}
sl@0
   814
sl@0
   815
/**
sl@0
   816
 *
sl@0
   817
 * Check a severity value is valid.
sl@0
   818
 *
sl@0
   819
 * @param "TInt aSev"
sl@0
   820
 *		  The value to check.
sl@0
   821
 *
sl@0
   822
 * @return "TBool"
sl@0
   823
 *			Valid (ETrue) or not (EFalse).
sl@0
   824
 *
sl@0
   825
 * @xxxx
sl@0
   826
 *
sl@0
   827
 */
sl@0
   828
EXPORT_C TBool LogSeverity::IsValid(TInt aSev)
sl@0
   829
	{ 
sl@0
   830
	return ((aSev & ~(ESevrAll)) == 0);
sl@0
   831
	}
sl@0
   832
sl@0
   833
/**
sl@0
   834
 *
sl@0
   835
 * Check a severity value is active
sl@0
   836
 *
sl@0
   837
 * @param "TInt aThisSev"
sl@0
   838
 *		  The value to check.
sl@0
   839
 *
sl@0
   840
 * @param "TInt aGlobalSev"
sl@0
   841
 *		  The value to check against (e.g. global severity value of a log).
sl@0
   842
 *
sl@0
   843
 * @return "TBool"
sl@0
   844
 *			Active (ETrue) or not (EFalse).
sl@0
   845
 *
sl@0
   846
 * @xxxx
sl@0
   847
 *
sl@0
   848
 */
sl@0
   849
EXPORT_C TBool LogSeverity::IsActive(TInt aThisSev, TInt aGlobalSev)
sl@0
   850
	{ 
sl@0
   851
	return ((aThisSev & aGlobalSev) != 0);
sl@0
   852
	}