diff -r 000000000000 -r e35f40988205 xml/legacyminidomparser/XMLParser/test/GmxmlTestUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/legacyminidomparser/XMLParser/test/GmxmlTestUtils.cpp Thu Dec 17 09:29:21 2009 +0200 @@ -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 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 ...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 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); + }