networkingtestandutils/networkingintegrationtest/scheduleTest/consolemain.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/networkingintegrationtest/scheduleTest/consolemain.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,378 @@
+// Copyright (c) 2001-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 consoleMain.cpp
+ @internalComponent
+*/
+
+// system includes
+#include <e32base.h>
+#include <e32cons.h>
+#include "f32file.h"
+
+// test system includes
+#include "../inc/Log.h"
+#include "../inc/TestSuite.h"
+#include "../inc/TestStep.h"
+#include "../inc/TestUtils.h"
+#include "script.h"
+#include "parseline.h"
+
+/** 
+Holds EPOC32EX string constant 
+*/
+_LIT(KTxtEPOC32EX,"EPOC32EX");
+
+/** 
+Holds Example Code string constant 
+*/
+_LIT(KTxtExampleCode,"Integration Test Harness v 1.012");
+
+/** 
+Failed format string constant 
+*/
+_LIT(KFormatFailed,"failed: leave code=%d");
+
+/** 
+Holds OK string constant 
+*/
+_LIT(KTxtOK,"script completed \n");
+
+/** 
+Holds Example Usage constant 
+*/
+_LIT(KTxtUseExample,"Usage:\nSCHEDULETEST [-a] [-Sn] <file.script>\nSCHEDULETEST [-a] [-Sn] -u <test_suite.DLL> [file.ini]");
+
+/** 
+Holds DLL fullpath 
+*/
+_LIT(KTxtDLLpath,"c:\\;c:\\system\\libs");
+
+/** 
+Constant that holds press any key string 
+*/
+_LIT(KTxtPressAnyKey,"[press any key to continue]\n");
+
+#ifdef _WIN32
+	#ifdef __CW32__
+	/** WINSCW target constant */
+	_LIT(KTxtTarget,"WINSCW");
+	#else
+	/** WINS target constant */
+	_LIT(KTxtTarget,"WINS");
+	#endif
+#else 
+	#ifdef __MARM_THUMB__ 
+	/** THUMB target constant */
+		#ifdef __EABI__
+		_LIT(KTxtTarget,"ARMV5");
+		#else
+		_LIT(KTxtTarget,"THUMB");
+		#endif
+	#else
+	/** ARM4 target constant */
+	_LIT(KTxtTarget,"ARM4");
+	#endif
+#endif
+
+#ifdef _DEBUG
+/** 
+debug build string constant 
+*/
+_LIT(KTxtBuild,"udeb");
+#else
+/** 
+release build string constant 
+*/
+_LIT(KTxtBuild,"urel");
+#endif
+
+/** 
+Platform String Constant for EKA2
+*/
+_LIT(KTxtPlatform,"EKA2");
+
+/** 
+maximum length of command line 
+*/
+#define MAX_LEN_CMD_LINE	0x100
+
+/** 
+Global data: Asynchronous timer service 
+*/
+GLDEF_D static RTimer TheTimer;
+
+// private
+
+/** 
+initialize with cleanup stack 
+*/
+LOCAL_C void callConsoleMainL(void);
+
+/** the main function */ 
+LOCAL_C void doConsoleMainL(void);	
+
+LOCAL_C void doUnitTestL(TInt aSeverity,const TFileName& aSuitDLL,const TFileName& aIniFile);
+LOCAL_C void Usage(void);
+
+/**
+The main function called by E32. 
+@returns 0
+*/
+GLDEF_C TInt E32Main()  
+    {
+    //__UHEAP_MARK;
+	// get clean-up stack
+	CTrapCleanup* cleanup=CTrapCleanup::New(); 
+	
+
+	// more initialization, then do console main
+	TRAPD(error,callConsoleMainL()); 
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	
+	// destroy clean-up stack
+	delete cleanup; 
+	//__UHEAP_MARKEND;
+
+	return 0; 
+    }
+
+/**
+The main entry point for console applications. 
+Initialize and call doConsoleMainL code under cleanup stack.
+*/
+LOCAL_C void callConsoleMainL() 
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doConsoleMainL()); // perform tests
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+
+/**
+The start of code. 
+*/
+LOCAL_C void doConsoleMainL()
+    {
+	// console is initialised
+	// now start the Log system
+	TInt severity = ESevrAll;
+	pLogSystem = CLog::NewL( console );
+	CleanupStack::PushL(pLogSystem);
+
+	// initialise the CTestUtils
+	pTestUtils = CTestUtils::NewL( pLogSystem );
+	CleanupStack::PushL(pTestUtils);
+
+	// read the command line into cmd
+	TBuf<MAX_LEN_CMD_LINE> cmd;
+	User::CommandLine(cmd);
+	cmd.UpperCase();
+
+	// use Tlex to decode the cmd line
+	TLex lex(cmd);
+	TPtrC token=lex.NextToken();
+
+	// if there is no input filename on the cmd line Panic!
+	if (token.Length()==0) 
+		Usage();
+	else
+		{
+		// Process any options
+		TBool unitTest = EFalse;
+		while(token.Length() > 1 && token[0] == '-')
+			{
+			switch(token[1])
+				{
+				case 'U':
+				case 'u':
+					unitTest = ETrue;
+					break;
+				case 'S':
+				case 's':
+					{
+					if( token.Length() == 3 )
+						{
+						TLex Severity(token);
+						Severity.Inc(2);
+						if((Severity.Peek()).IsDigit())
+							{
+							Severity.Val(severity);
+							// wrong severity level
+							if( (severity < 0) || (severity > 7 )) 
+								severity = 7;
+							}
+						}
+					break;
+					}
+				case 'A':
+				case 'a':
+					automatedMode = ETrue;
+					break;
+				default:
+					Usage();
+					return;
+				}
+
+			token.Set(lex.NextToken());
+			}
+
+		if(unitTest)
+			{
+			// get suite name
+			TFileName suitFileName;
+
+			if (token.Length()!=0) 
+				suitFileName = token;
+			else
+				{
+				Usage();
+				User::Leave(KErrArgument);
+				}
+
+			pLogSystem->OpenLogFileL(suitFileName);
+			
+			pLogSystem->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,
+				_L("%S %S %S %S starting...."), &KTxtExampleCode(), &KTxtTarget(), &KTxtPlatform(), &KTxtBuild() );
+
+			// get ini file
+			token.Set(lex.NextToken());
+
+			TFileName configFileName;
+			if (token.Length()!=0) 
+				{
+				if(token.Find(_L("-S")) == KErrNotFound )
+				configFileName = token;
+				}
+			
+			// do unit test
+			doUnitTestL(severity, suitFileName, configFileName);
+			
+			if(!automatedMode)
+				{
+				console->Printf(KTxtPressAnyKey);
+				console->Getch(); // get and ignore character
+				}
+			}
+		else
+			{			
+			// there is a script file so lets do it!
+			// save the input filename
+			TFileName scriptFileName=token;
+
+			// make the log file name from the script file name
+			TFileName LogFileName = token;
+
+			// open the log file
+			pLogSystem->OpenLogFileL( LogFileName);
+			
+			pLogSystem->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,
+					_L("%S %S %S %S starting...."), 
+					&KTxtExampleCode(), &KTxtTarget(), &KTxtPlatform(), &KTxtBuild() );
+
+			// create a ParseScript object
+			CScript* parseScript=CScript::NewL();
+			CleanupStack::PushL(parseScript);
+
+			// parse all scripts
+			do
+				{
+				// get the next file
+				scriptFileName=token;
+
+				// read in the script file
+				if ( parseScript->OpenScriptFile( scriptFileName ))
+					{
+					// process it
+					parseScript->ExecuteScriptL( );
+
+					// display results summary
+					parseScript->DisplayResults( );
+
+					}
+				// get the next
+				token.Set(lex.NextToken());
+				} while ( token.Length()!=0 );			
+
+			CleanupStack::PopAndDestroy(parseScript);
+
+			// close the logging system
+			pLogSystem->CloseLogFile();
+			}
+		}
+
+	// delete the test utils object
+	CleanupStack::PopAndDestroy(pTestUtils);
+//	delete pTestUtils;
+
+	// close the log file
+	CleanupStack::PopAndDestroy(pLogSystem);
+//	delete pLogSystem;
+
+}
+
+/**
+Performs unit test. 
+
+@param aSeverity The current logging severity level.
+@param aSuitDLL The test suite DLL which contains the unit test.
+@param aIniFile The ini file name.
+*/
+LOCAL_C void doUnitTestL(TInt aSeverity, const TFileName& aSuitDLL,const TFileName& aIniFile)
+{	
+	// check the dll can be found before trying to load
+    RLibrary lib;
+	TInt err = lib.Load(aSuitDLL, KTxtDLLpath);
+    if (err == KErrNone)
+        {
+        lib.Close();
+        }
+	    
+	if ( err==KErrNotFound ) 
+	{	
+		// this is not going to load !
+ 		//pLogSystem->Log(_L("Test suite %S could not be found"), &aSuitDLL );
+		//return;
+	}
+
+	// create a new suitedll object to store info on loaded DLL
+	CSuiteDll * newRef = CSuiteDll::NewL( aSuitDLL );
+
+	// set severity level and logging system
+	newRef->iTestSuite->SetSeverity(aSeverity);
+	newRef->iTestSuite->SetLogSystem(pLogSystem);
+
+	// do unit test
+	newRef->iTestSuite->DoTestUnit(const_cast<TFileName&>(aIniFile));
+
+	delete newRef;
+}
+
+/**
+Display command line format.
+*/
+LOCAL_C void Usage()
+{
+	console->Printf(_L("%S command line error...\n"), &KTxtExampleCode());
+	console->Printf(_L("%S"), &KTxtUseExample() );
+	console->Getch(); 
+}