xml/legacyminidomparser/xmlparser/test/GmxmlTestUtils.cpp
changeset 34 c7e9f1c97567
parent 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/legacyminidomparser/xmlparser/test/GmxmlTestUtils.cpp	Mon Sep 13 13:16:40 2010 +0530
@@ -0,0 +1,324 @@
+// Copyright (c) 2000-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 "GmxmlTestUtils.h"
+
+
+_LIT(KMsvTestFileOutputBase,"MsgLogs");
+
+// this is used if we can't find MsgLogs anywhere
+_LIT(KMsvTestFileDefaultOutputBase,"\\MsgLogs\\");
+_LIT(KMsvPathSep,"\\");
+#define KMaxLogLineLength 256
+
+
+
+//
+//
+// CTestTimer
+//
+//
+
+ CTestTimer::CTestTimer()
+: CTimer(EPriorityLow)
+	{}
+
+ void CTestTimer::RunL()
+	{
+	if (!iReport)
+		{
+		CActiveScheduler::Stop();
+		}
+	else
+		{
+		User::RequestComplete(iReport, iStatus.Int());
+		iReport = NULL;
+		}
+	}
+
+ CTestTimer* CTestTimer::NewL()
+	{
+	CTestTimer* self = new(ELeave) CTestTimer();
+	CleanupStack::PushL(self);
+	self->ConstructL(); // CTimer
+	CActiveScheduler::Add(self);
+	CleanupStack::Pop();
+	return self;
+	}
+
+ void CTestTimer::AfterReq(TTimeIntervalMicroSeconds32 aSec, TRequestStatus& aStatus)
+	{
+	iReport = &aStatus;
+	aStatus = KRequestPending;
+	After(aSec);
+	}
+
+
+//
+//
+// CTestUtils
+//
+//
+
+ CTestUtils::CTestUtils(RTest& aRTest)
+: iRTest(aRTest), iLogToConsole(ETrue), iLogToFile(ETrue)
+	{
+	TBuf<256> command;
+		User::CommandLine(command);
+
+	command.Trim();
+	SetRunAuto(command.FindF(KTestShowMenu) == KErrNotFound);
+
+	if (!RunAuto())
+		iRTest.Printf(_L("Not Run Auto. Command line: %S\n"), &command);
+	}
+
+ CTestUtils::~CTestUtils()
+	{
+	CloseMainLog();
+	iFs.Close();
+	}
+
+ void CTestUtils::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	OpenMainLogL();
+	WriteToLog(KTestHeader);
+	}
+
+ void CTestUtils::Printf(TRefByValue<const TDesC> aFmt,...)
+	{
+	// Print to the log file.
+	TTestOverflow overflow(*this);
+	VA_LIST list;
+	VA_START(list, aFmt);
+	TBuf<0x100> aBuf;
+	aBuf.AppendFormatList(aFmt, list, &overflow);
+
+	if (iLogToConsole)
+		{
+		iRTest.Printf(aBuf);
+		}
+
+	if (iLogToFile)
+		{
+		WriteComment(aBuf);
+		}
+	}
+
+
+ void CTestUtils::CreateAllTestDirectories()
+	{
+	TChar driveChar=RFs::GetSystemDriveChar();
+ 	TBuf<2> systemDrive;
+ 	systemDrive.Append(driveChar);
+ 	systemDrive.Append(KDriveDelimiter);
+	
+	iFs.SetSessionPath(systemDrive);
+
+	if (!iFs.MkDir(KLogsDir))
+		{
+		Printf(_L("Created c:\\logs\\ directory\n"));
+		}
+	}
+
+ TInt CTestUtils::ResolveLogFile(const TDesC& aFileName, TParse& aParseOut)
+	{
+	TFileName* savedPath = new TFileName;
+	TFileName* fileName = new TFileName;
+	if ((savedPath == NULL) || (fileName == NULL))
+		return KErrNoMemory;
+
+	fileName->Append(KMsvPathSep);
+	fileName->Append(KMsvTestFileOutputBase);
+	fileName->Append(KMsvPathSep);
+	
+	// file finder will look in the session drive first, then Y->A,Z
+	// so set session drive to Y (save old and restore it afterwards)
+	iFs.SessionPath(*savedPath);
+	_LIT(KTopDrive,"Y:\\");
+	iFs.SetSessionPath(KTopDrive);
+    TFindFile file_finder(iFs);
+    TInt err = file_finder.FindByDir(*fileName,KNullDesC);
+
+	if(err==KErrNone)
+		{
+		fileName->Copy(file_finder.File());
+		AppendTestName(*fileName);
+		fileName->Append(KMsvPathSep);
+		fileName->Append(aFileName);
+		iFs.MkDirAll(*fileName);
+		aParseOut.Set(*fileName,NULL,NULL);
+		}
+	iFs.SetSessionPath(*savedPath);
+	delete savedPath;
+	delete fileName;
+	return(err);
+	}
+
+ TBool CTestUtils::RunAuto() const
+	{
+	return iRunAuto;
+}
+	
+ void CTestUtils::SetRunAuto(TBool aRunAuto)
+	{
+	iRunAuto = aRunAuto;
+	}
+
+
+// appends .<PLATFORM>.<VARIANT>.log to aFileName;
+void CTestUtils::AppendVariantName(TDes& aFileName)
+	{
+#if (defined(__THUMB__) || defined(__MARM_THUMB__))
+	aFileName.Append(_L(".THUMB."));
+#endif
+#if (defined(__ARMI__) || defined(__MARM_ARMI__))
+	aFileName.Append(_L(".ARMI."));
+#endif
+#if (defined(__ARM4__) || defined(__MISA__) || defined(__MARM_ARM4__))
+	aFileName.Append(_L(".ARM4."));
+#endif
+#if defined(__WINSCW__)
+	aFileName.Append(_L(".WINSCW."));
+#else 
+#if defined(__WINS__)
+	aFileName.Append(_L(".WINS."));
+#endif
+#endif
+
+#if defined(_DEBUG)
+	aFileName.Append(_L("DEB."));
+#else
+	aFileName.Append(_L("REL."));
+#endif
+	aFileName.Append(_L("LOG"));
+	}
+
+// appends the test harness name to aFileName
+void CTestUtils::AppendTestName(TDes &aFileName)
+	{
+	TInt start = RProcess().FileName().LocateReverse('\\');
+	TInt end = RProcess().FileName().LocateReverse('.');
+
+	if (end == KErrNotFound)
+		end = RProcess().FileName().Length();
+
+	aFileName.Append(RProcess().FileName().Mid(start + 1, end - start - 1));
+	}	
+
+
+
+TInt CTestUtils::OpenMainLogL()
+	{
+	_LIT(KDisplayLogFile,"Log File %S\n");
+	TParse loglocation;
+	TFileName logfile;
+	TInt err=ResolveLogFile(KNullDesC, loglocation);
+	if(err!=KErrNone) 
+		{
+		TChar driveChar=RFs::GetSystemDriveChar();
+ 		TBuf<2> systemDrive;
+ 		systemDrive.Append(driveChar);
+ 		systemDrive.Append(KDriveDelimiter);
+ 		TPath pathName(systemDrive) ;
+		pathName.Append(KMsvTestFileDefaultOutputBase);		
+		iFs.MkDirAll(pathName);
+		err=ResolveLogFile(KNullDesC, loglocation);
+		}
+	User::LeaveIfError(err);
+	logfile.Copy(loglocation.FullName());
+	logfile.Delete(logfile.Length()-1,1);
+	AppendVariantName(logfile);
+	iRTest.Printf(KDisplayLogFile, &logfile);
+	iFs.MkDirAll(logfile);
+
+	iLogBuf=HBufC::NewL(KMaxLogLineLength);
+	iLogBuf8=HBufC8::NewL(KMaxLogLineLength);
+	return(iFile.Replace(iFs,logfile,EFileWrite|EFileShareAny));
+	}
+
+void CTestUtils::CloseMainLog()
+	{
+	delete iLogBuf;
+	iLogBuf=0;
+	delete iLogBuf8;
+	iLogBuf8=0;
+
+	iFile.Close();
+	}
+
+
+ void CTestUtils::TestStart(TInt aTest, const TDesC& aTestDescription)
+	{
+	WriteToLog(KTestStartingWithDesc, aTest, &aTestDescription);
+	}
+
+
+ void CTestUtils::TestFinish(TInt aTest, TInt aError)
+	{
+	aError ?
+		WriteToLog(KTestFailed, aTest, aError)
+		: WriteToLog(KTestPassed, aTest);
+	}
+
+
+ void CTestUtils::TestHarnessCompleted()
+	{
+	WriteToLog(KTestHarnessCompleted);
+	}
+
+ void CTestUtils::TestHarnessFailed(TInt aError)
+	{	
+	WriteToLog(KTestHarnessFailed, aError);
+	}
+
+ void CTestUtils::WriteComment(const TDesC& aComment)
+	{
+	/* Prepends KTestCommentPrepend to aComment, then writes it to aFlogger */
+
+	TBuf<0x100> buf;
+	buf.Copy(aComment);
+	buf.Trim();
+	buf.Insert(0,KTestCommentPrepend);
+	WriteToLog(buf);
+	}
+
+void CTestUtils::WriteToLog(TRefByValue<const TDesC> aFmt,...)
+	{
+
+	_LIT(KDateFormatString, "%D%M%*Y%1%/1%2%/2%3 %H%:1%T%:2%S ");
+	_LIT(Kcr,"\r\n");
+	iLogBuf->Des().Zero();
+	TTime date;
+	date.HomeTime();
+	TBuf<18> dateString;
+	
+	TRAPD(error,date.FormatL(dateString,(KDateFormatString)));
+	if(error)
+	{
+		dateString.Copy(_L("Invalid Date"));
+	}
+	iLogBuf->Des().Copy(dateString);
+	
+	VA_LIST list;
+	VA_START(list,aFmt);
+
+	iLogBuf->Des().AppendFormatList(aFmt,list);
+	iLogBuf->Des().Append(Kcr);
+	iLogBuf8->Des().Copy(*iLogBuf);
+	iFile.Write(*iLogBuf8);
+	}