applayerprotocols/httptransportfw/Test/T_HttpIntegration/TEngine.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httptransportfw/Test/T_HttpIntegration/TEngine.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,366 @@
+// Copyright (c) 2002-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:
+// $Header$
+// 
+//
+
+#include <e32base.h>
+#include <e32cons.h>
+#include <f32file.h>
+
+//-----------------------------------------------------------------------------
+
+#ifndef __TENGINE_H__
+#define __TENGINE_H__
+
+//-----------------------------------------------------------------------------
+
+#include "GT0149.h"
+#include "ECommandIDs.h"
+#include "CPile.h"	
+#include "CCmdFamily.h"		
+#include "CCmdFile.h"			
+#include "CLogFile.h"			
+#include "CIFControl.h"			
+#include "CConsoleReader.h"
+#include "CCatalogue.h"
+#include "CObjCatalogue.h"
+#include "CCmdBase.h"
+
+//-----------------------------------------------------------------------------
+//	Forward declare Templated Classes
+
+template<class T> class CPile;
+
+#if !defined(TEMPLATED_CATALOGUE)
+
+class CCatalogue;
+
+#else
+
+template<class T> class CCatalogue;
+
+#endif
+
+//-----------------------------------------------------------------------------
+
+class   TTestMachineOverflow : public TDes16Overflow
+{
+public:
+	virtual void Overflow( TDes16& aDes );
+};
+
+//-----------------------------------------------------------------------------
+
+class CTEngine : public CActive
+{
+public:     // Constructors and destructors
+
+	// Constructors with and without console.
+	static CTEngine* NewL ( CConsoleBase* aConsole = NULL );
+	static CTEngine* NewLC( CConsoleBase* aConsole = NULL );
+
+	//  Destructor.
+	~CTEngine();
+
+private:    // Constructors and destructors
+
+	// Private constructor.
+	void ConstructL();
+
+	// Default constructor is not there.
+	CTEngine(CConsoleBase *aConsole);
+
+public:     // New functions
+
+	// Set command family (the known commands).
+	void SetCmdFamily(CCmdFamily *);
+
+	// Console is enabled?
+	TBool ConsoleEnabled();
+
+	// Disable console i/o.
+	void DisableConsole();
+
+	// Enable console i/o.
+	void EnableConsole();
+
+	// Get console, NULL if is not available.
+	CConsoleBase *Console() const;
+
+	// Unformatted Write to console (if enabled).
+	void Write  (const TDesC &);
+	void Writeln(const TDesC &);
+	void Writeln(); // new-line
+
+	// Formatted Printf to console (if enabled).
+	void Printf  (TRefByValue<const TDesC> aFmt, ...);
+	void Printf  (TRefByValue<const TDesC> aFmt, VA_LIST& aList);
+	void Printfln(TRefByValue<const TDesC> aFmt, ...);
+	void Printfln(TRefByValue<const TDesC> aFmt, VA_LIST& aList);
+
+	// Wait for a key press
+	void Pause(const TDesC& aPrompt);
+
+	// Hold for an interval
+	void Hold(TTimeIntervalMicroSeconds32 aInterval);
+
+	// Set and Get the command file path. SetCmdPath returns
+	// KErrArgument for illegal aPath param.
+	TInt SetCmdPath(const TDesC &);
+	TPtrC CmdPath() const;
+
+	TPtrC FileName() const;
+
+	// Call command file and Get the present command file.
+	TInt CallCmdFile(const TDesC &);
+	TInt CallCmdFile(const TDesC &, const TDesC &);
+	CCmdFile *CmdFile();
+
+	// Close the present command file or close them all.
+	TInt CloseCmdFile();
+	void CloseCmdFiles();
+
+	// Set and Get the log file path. SetLogPath returns
+	// KErrArgument for illegal aPath param.
+	TInt SetLogPath(const TDesC &);
+	TPtrC LogPath() const;
+
+	// Open a log file and Get the present log file.
+	TInt OpenLogFile(const TDesC &);
+	CLogFile *LogFile();
+
+	// Close the present log file or close them all.
+	TInt CloseLogFile();
+	void CloseLogFiles();
+
+	// Unformatted Write to the log (if there's one).
+	void LogWrite  (const TDesC &);
+	void LogWriteln(const TDesC &);
+	void LogWriteln();
+
+	// Formatted Printf to the log (if there's one).
+	void LogPrintf  (TRefByValue<const TDesC> aFmt, ... );
+	void LogPrintf  (TRefByValue<const TDesC> aFmt, VA_LIST &);
+	void LogPrintfln(TRefByValue<const TDesC> aFmt, ... );
+	void LogPrintfln(TRefByValue<const TDesC> aFmt, VA_LIST &);
+
+	// Standard message output. A message you write goes to the log
+	// if there is one open. A message is printed to the display as
+	// well, except when running a command file with echo mode off.
+	void MsgWrite   (const TDesC& aText);
+	void MsgWriteln (const TDesC& aText);
+	void MsgWriteln ();
+	void MsgPrintf  (TRefByValue<const TDesC> aFmt, ...);
+	void MsgPrintf  (TRefByValue<const TDesC> aFmt, VA_LIST& aList);
+	void MsgPrintfln(TRefByValue<const TDesC> aFmt, ...);
+	void MsgPrintfln(TRefByValue<const TDesC> aFmt, VA_LIST& aList);
+
+	// Set and Get the command Prompt.
+	TInt SetPrompt(const TDesC &aPrompt);
+	TPtrC Prompt() const;
+
+	// Run commands from the console.
+	void Run();
+
+	//	Run with just the file name (no args)
+	TInt Run(const TDesC &);
+
+	//	Run with the file name and args
+	TInt Run(const TDesC &, const TDesC &);
+
+	// Stop the test engine.
+	void Terminate();  // Terminate command files and log files.
+	void StopEngine(); // Terminate and stop i.e. exit test run
+	TBool Stopped();    // Stop has been raised?
+
+	// Set and Get Echo mode On/Off switch.
+	void SetEchoMode(const TBool & = ETrue);
+	TBool EchoMode();
+
+	// Get the defines.
+	#if !defined(TEMPLATED_CATALOGUE)
+		CCatalogue *Defines();
+
+		CObjCatalogue *Domains() const {return iDomain;}
+		
+	#else
+		CPile<CLabeledText> *Defines();
+	#endif
+
+	// Complete the asynch request
+	void CompleteRequest();
+
+	TInt SetFileName(const TDesC &aName, RFile &aReqFile) ;
+
+	void GetUserInput(const TDesC &, TDes &);
+	void DumpData(const TDesC8 &, const TBool & = ETrue);
+
+	TBool Log(void) { return iLogActivity; }
+
+	void SetResultDefine(TInt aValue);
+	void SetResultDefine (const TDesC& aDefineTxt, TInt aValue);
+	void SetErrorDefine(TInt aValue);
+	void SetErrorDefine (const TDesC& aDefineTxt, TInt aValue);
+	void DeleteResultDefine (const TDesC& aDefineTxt);
+	void DeleteErrorDefine (const TDesC& aDefineTxt);
+
+	void SetShowCmdLine(const TBool &aValue) { iShowCmdLine = aValue; }
+	TBool GetShowCmdLine(void) { return iShowCmdLine; }
+
+	TPtrC GetDefine(const TDesC &) const;
+
+	//----------------------------------------------------------------
+	//	helper methods for IfMode
+
+	CIFControl::TIFMode GetIfMode();
+	void SetIfMode(const CIFControl::TIFMode &);
+	CIFControl::TIFProcessing GetIfState();
+	void SetIfState(const CIFControl::TIFProcessing &);
+	void IfL(const CIFControl::TIFMode &, const TBool &, const CIFControl::TIFProcessing &);
+	void EndIf(); 
+	void UpdateIFState(const CIFControl::TIFMode &);
+
+//-----------------------------------------------------------------------------
+
+private:
+
+	// Read command line (iCmdline).
+	TInt ReadCmdline(TBool aConsole = ETrue);
+	TInt ReadCmdFile(); // from command file
+	TInt ReadConsole(); // from console
+
+	// Make the command (iCommand) to obey. Copies the command
+	// line (iCmdline) to iCommand buffer and expands the tags
+	// to their defined values.
+	TInt MakeCommand();
+
+	// Obey the command (iCommand).
+	TInt ObeyCommandL();
+
+	// Do command tags: expands tags to values.
+	TBool DoTags();
+
+	//	IF Management support
+	TBool DetermineStepover(CCmdBase *);
+
+private:	// Methods from CActive
+
+	virtual void RunL();
+	virtual void DoCancel();
+
+private:	// Enums
+
+	enum TEngineFilePanics
+		{
+		EBufferPanic,
+		EBufferNotAllocated,
+		EInvalidFileSizeError
+		};
+
+	enum TEngineState
+		{
+		EIdle				= 0,
+		EStopping,
+		EGetNextCmd,
+		EParseCurrentCmd,
+		ERunCurrentCmd
+		};
+
+private:    // Data
+
+	// For filename parsing.
+	TParse iParse;
+
+	//	for Displaying the command line or CmdLine (non translated version)
+	TBool iShowCmdLine;
+
+	// Run control.
+	TBool iStopped;							// test run stopped
+	TBool iEchoMode;            // echo mode On/Off
+
+	//	need to have a stack of IF structs so that we can process
+	//	nested if cases.
+	CPile<CIFControl>	*iIFPile;     // cmd file pile
+	
+	// Overflow handler.
+	TTestMachineOverflow iOverflow;
+
+	// State machine state
+	TEngineState iState;
+
+	// Active object that gets line input
+	CConsoleReader* iConsoleReader;
+
+	// Timer object
+	RTimer iTimer;
+
+	//	Timestamp for commands (and logging)
+	TTime iTimeStamp;
+
+	// Command family.
+	CCmdFamily* iCmdFamily;     // the commands
+
+	// Command buffers:
+	TBuf<256> iCmdline;        // command line
+	TBuf<1024> iCommand;        // full command
+
+	// Command prompt.
+	TBuf<16> iPrompt;           // prompt
+
+	// Console information.
+	CConsoleBase	*iConsole;     // console
+	TBool iConsoleEnabled;      // enabled?
+	TBuf<1024> iPrintBuf;       // formatted...
+
+	// The command files.
+	CCmdFile *iCmdFile;     // cmd file now!
+	CPile<CCmdFile>	*iCmdPile;     // cmd file pile
+	TFileName     iCmdPath;     // cmd file path
+
+	// The log files.
+	TFileName     iLogPath;     // log file path
+	CLogFile			*iLogFile;     // log file now
+	CPile<CLogFile>	*iLogPile;     // log file pile
+
+	// Catalog of the tag and call argument defines.
+	// Get the defines.
+	#if !defined(TEMPLATED_CATALOGUE)
+		CCatalogue *iDefines;
+
+	#else
+		CPile<CLabeledText>	*iDefines;
+	#endif
+
+	//	need to have access to a generic cat or pile
+	//	of (TAny *) which can be cast into pointers
+	//	for our domain specific lists (e.g. RHTTPSession)
+	//	Object Collection for use as/when by domain tools
+	CObjCatalogue *iDomain;
+
+	//	File Management
+	//	In some cases access to local files is useful.
+	//	as a result, make the services globally accessible from the TestEngine
+	RFs iFileServer;
+	TFileName iFileName;
+
+	TBool iLogActivity;
+};
+
+
+#endif  // __TENGINE_H__
+        
+//-----------------------------------------------------------------------------
+// End of File
+//-----------------------------------------------------------------------------