cryptomgmtlibs/securitytestfw/test/rtestwrapper/rtestwrapper.cpp
changeset 8 35751d3474b7
child 15 da2ae96f639b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptomgmtlibs/securitytestfw/test/rtestwrapper/rtestwrapper.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* Wrapper for RTest which logs to a file, coun1ts failures (without panicing) and
+* generates a final result line the ONB will parse.
+*
+*/
+
+
+
+
+/**
+ @file
+*/
+#include <scs/rtestwrapper.h>
+#include <e32base.h>
+#include <f32file.h>
+
+class CTestConsole: public CConsoleBase
+	{
+public:
+	static CTestConsole* NewL(CConsoleBase* aCon, const TDesC &aFileName);
+	TInt Create(const TDesC16& aTitle,TSize aSize) {return iCon->Create(aTitle,aSize);};
+	void Read(TRequestStatus& aStatus) {iCon->Read(aStatus);};
+	void ReadCancel(void) {iCon->ReadCancel();};
+	void Write(const TDesC16& aString);
+	TPoint CursorPos(void) const {return iCon->CursorPos();};
+	void SetCursorPosAbs(const TPoint& aPos) {iCon->SetCursorPosAbs(aPos);};
+	void SetCursorPosRel(const TPoint& aPos) {iCon->SetCursorPosRel(aPos);};
+	void SetCursorHeight(TInt aHeight) {iCon->SetCursorHeight(aHeight);};
+	void SetTitle(const TDesC16& aTitle) {iCon->SetTitle(aTitle);};
+	void ClearScreen(void) {iCon->ClearScreen();};
+	void ClearToEndOfLine(void) {iCon->ClearToEndOfLine();};
+	TSize ScreenSize(void) const {return iCon->ScreenSize();};
+	TKeyCode KeyCode(void) const {return iCon->KeyCode();};
+	TUint KeyModifiers(void) const {return iCon->KeyModifiers();};
+	~CTestConsole(void);
+private:
+	void ConstructL(const TDesC &aFileName);
+	CTestConsole(void);
+	CConsoleBase* iCon;
+	RFs iFs;
+	RFile iFile;
+	};
+
+CTestConsole* CTestConsole::NewL(CConsoleBase* aCon, const TDesC &aFileName)
+	{
+	CTestConsole* self;
+	self=new (ELeave) CTestConsole;
+	CleanupStack::PushL(self);
+	self->iCon=aCon;
+	self->ConstructL(aFileName);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CTestConsole::ConstructL(const TDesC &aFileName)
+	{
+	User::LeaveIfError(iFs.Connect());
+	(void) iFs.Delete(aFileName);
+	User::LeaveIfError(iFile.Create(iFs, aFileName, EFileShareAny | EFileWrite));
+	}
+
+
+CTestConsole::CTestConsole(void):CConsoleBase()
+	{
+	}
+
+CTestConsole::~CTestConsole(void)
+
+	{
+	delete iCon;
+	iFile.Close();
+	iFs.Close();
+	}
+
+void CTestConsole::Write(const TDesC16& aString)
+
+	{
+	iCon->Write(aString);
+	TUint8 space[200];
+	TPtr8 ptr(space,200);
+	ptr.Copy(aString);
+	iFile.Write(ptr);
+	}
+
+EXPORT_C RTestWrapper::RTestWrapper(const TDesC &aTitle,TInt aThrowaway,const TText* anOtherThrowaway)
+	: RTest(aTitle, aThrowaway, anOtherThrowaway),
+	  iNestLevel(0),
+	  iTestCount(0),
+	  iThisTestFailed(EFalse),
+	  iFailedCount(0),
+	  iTitle(aTitle)
+	{
+	}
+
+EXPORT_C void RTestWrapper::operator()(TInt aResult,TInt aLineNum,const TText* aFileName)
+	{
+	if(!aResult)
+		{
+		RTest::Printf(_L("RTEST: Test FAILED %s:%d\n"), aFileName, aLineNum);
+		if(!iThisTestFailed)
+			{
+			++iFailedCount;
+			}
+		iThisTestFailed = ETrue;
+		}
+	}
+
+EXPORT_C void RTestWrapper::Title(const TDesC &aFileName)
+	{
+	//	CheckConsoleCreated(); // Can not use this because they forgot to export it!
+	RTest::Title(); // Make sure console is created before we try and wrap it
+	CConsoleBase *console(0);
+	TRAPD(err, console = CTestConsole::NewL(RTest::Console(), aFileName));
+	if(err == KErrNone)
+	{
+		RTest::SetConsole(console);
+	}
+
+	RTest::Title();
+	}
+
+
+EXPORT_C void RTestWrapper::Start(const TDesC16 &aHeading)
+	{
+	RTest::Start(aHeading);
+	++iNestLevel;
+	++iTestCount;
+	iThisTestFailed = EFalse;
+	}
+
+EXPORT_C void RTestWrapper::Next(const TDesC16 &aHeading)
+	{
+	RTest::Next(aHeading);
+	++iTestCount;
+	iThisTestFailed = EFalse;
+	}
+
+EXPORT_C void RTestWrapper::End()
+	{
+	RTest::End();
+	--iNestLevel;
+	if(iNestLevel == 0)
+		{
+		RTest::Printf(_L("\r\n%d tests failed out of %d\r\n"), iFailedCount, iTestCount);
+		}
+	}
+
+// End of file