--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/httptransportfw/Test/T_HttpIntegration/CCmdBase.cpp Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,436 @@
+// 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$
+// The CTEngine is the class that manages the test infrastructure
+// It knows how to process scripts and where to find command knowledge
+// The plan is:
+// Process console command line or command line supplied script
+// read in each line (or command) and process that (if appropriate)
+// rev: mjdavey, symbian@mjdss.com, July 2002
+// for: Typhoon (7.0s) & JetStream (8.0)
+// Include Module Definitions
+//
+//
+
+#include "CCmdBase.h"
+
+//-----------------------------------------------------------------------------
+// format for output of data/time values
+
+//_LIT(KDateFormat,"%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3");
+_LIT(KDateFormat,"%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S");
+
+const TInt K_OUTOFBOUNDS_YEAR = 2499;
+
+//-----------------------------------------------------------------------------
+
+CCmdBase *CCmdBase::NewL(TInt aCommandId, const TDesC& aKeyphrase)
+{
+CCmdBase *self = NewLC(aCommandId, aKeyphrase);
+CleanupStack::Pop();
+return self;
+}
+
+//-----------------------------------------------------------------------------
+
+CCmdBase *CCmdBase::NewLC(TInt aCommandId, const TDesC& aKeyphrase)
+{
+CCmdBase *self = new (ELeave) CCmdBase();
+CleanupStack::PushL( self );
+self->ConstructL(aCommandId, aKeyphrase);
+return self;
+}
+
+//-----------------------------------------------------------------------------
+
+CCmdBase *CCmdBase::NewL(TInt aCommandId, const TDesC& aKeyphrase, const TDesC& aHelpPhrase)
+{
+CCmdBase *self = NewLC(aCommandId, aKeyphrase, aHelpPhrase);
+CleanupStack::Pop();
+return self;
+}
+
+//-----------------------------------------------------------------------------
+
+CCmdBase* CCmdBase::NewLC(TInt aCommandId, const TDesC& aKeyphrase, const TDesC& aHelpPhrase)
+{
+CCmdBase* self = new (ELeave) CCmdBase();
+CleanupStack::PushL(self);
+self->ConstructL(aCommandId, aKeyphrase, aHelpPhrase);
+return self;
+}
+
+//-----------------------------------------------------------------------------
+
+void CCmdBase::ConstructL( TInt aCommandId, const TDesC& aKeyphrase )
+{
+iFamily = NULL;
+iCommandId = aCommandId;
+iKeyphrase.Set(aKeyphrase);
+iHelpText.Set(NULL, 0);
+iFlags = 0x00000000;
+SetFlag( EDoLog , ETrue );
+iStepOver = EFalse;
+}
+
+//-----------------------------------------------------------------------------
+
+void CCmdBase::ConstructL( TInt aCommandId, const TDesC& aKeyphrase, const TDesC& aHelpPhrase )
+{
+iFamily = NULL;
+iCommandId = aCommandId;
+iKeyphrase.Set(aKeyphrase);
+iHelpText.Set(aHelpPhrase);
+iFlags = 0x00000000;
+SetFlag(EDoLog, ETrue);
+iStepOver = EFalse;
+}
+
+//-----------------------------------------------------------------------------
+
+CCmdBase::~CCmdBase()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+CCmdBase::CCmdBase()
+ :
+ CBase()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+TInt CCmdBase::CommandId()
+{
+return iCommandId;
+}
+
+//-----------------------------------------------------------------------------
+
+const TDesC &CCmdBase::Keyphrase()
+{
+return iKeyphrase;
+}
+
+//-----------------------------------------------------------------------------
+
+void CCmdBase::SetFamily(CCmdFamily* aCmdFamily)
+{
+iFamily = aCmdFamily;
+}
+
+//-----------------------------------------------------------------------------
+
+CCmdFamily* CCmdBase::Family( )
+{
+return iFamily;
+}
+
+//-----------------------------------------------------------------------------
+
+void CCmdBase::SetHelpText( const TDesC& aHelpText )
+{
+iHelpText.Set(aHelpText);
+}
+
+//-----------------------------------------------------------------------------
+
+const TDesC& CCmdBase::HelpText()
+{
+return iHelpText;
+}
+
+//-----------------------------------------------------------------------------
+
+void CCmdBase::SetFlag( TInt aFlag, TBool aBoolean )
+{
+if ( aFlag < 1 || aFlag > 32 )
+ return;
+
+TUint32 mask = ( 0x00000001<<(aFlag-1) );
+iFlags = (aBoolean) ? ( iFlags | mask ) : ( iFlags & (~mask) );
+}
+
+//-----------------------------------------------------------------------------
+
+TBool CCmdBase::Flag( TInt aFlag )
+{
+if ( aFlag < 1 || aFlag > 32 )
+ return EFalse;
+TUint32 mask = ( 0x00000001<<(aFlag-1) );
+return ( (iFlags & mask) != 0x00000000 );
+}
+
+//-----------------------------------------------------------------------------
+
+void CCmdBase::SetStepOver( TBool aBoolean )
+{
+iStepOver = aBoolean;
+}
+
+//-----------------------------------------------------------------------------
+
+TBool CCmdBase::StepOver( )
+{
+return iStepOver;
+}
+
+//-----------------------------------------------------------------------------
+//
+// CCmdBase::ParamsL
+//
+// Get command parameters = the remainder after the Keyword Phrase part in
+// command string. Leaves ((KErrArgument) if can not recogize the command.
+// This function accepts the Keywork Phrase if the non-space characters in
+// it match to those which are found from the beginning of command string.
+// Spaces (white space characters) are fully ignored in here i.e. you can
+// have spaces where you like and how may of then as you like; they simply
+// do not matter. The case does not matter either (folded comparison).
+//
+// The next character after the Keyword Phrase must not be alphabetic nor
+// a digit. The end-of-string will do fine.
+//
+// Return Values: TPtrC = params (or Leaves)
+//
+//-----------------------------------------------------------------------------
+
+TPtrC CCmdBase::ParamsL( const TDesC& aCommand )
+{
+// The actual beef is in the TLex version, see below.
+TLex command( aCommand );
+return ParamsL( command );
+}
+
+//-----------------------------------------------------------------------------
+
+TPtrC CCmdBase::ParamsL( TLex aCommand )
+{
+// TLex for Keyphrase
+TLex phrase( iKeyphrase );
+// Mark start point
+TLexMark mark;
+aCommand.Mark( mark );
+
+// First char in phrase
+phrase.SkipSpace();
+
+// Check whole phrase...
+while ( !phrase.Eos() )
+ {
+ // Check the next true non-space character in command. The
+ // end-of-command is not checked here. We rely on that the
+ // Get() returns 0 if that is the case (and the 0 does not
+ // match to the true character got from the phrase).
+ aCommand.SkipSpace();
+ if ( User::Fold(phrase.Get()) != User::Fold(aCommand.Get()) )
+ {
+ // No match: unget to the start point and "L E A V E".
+ aCommand.UnGetToMark( mark );
+ User::Leave( KErrArgument );
+ }
+
+ // Next true non-space character in phrase.
+ phrase.SkipSpace();
+ }
+
+// Apparently the keyword phrase was there: check that the next
+// character is not alphabetic nor a decimal digit.
+if ( !aCommand.Eos() && aCommand.Peek().IsAlphaDigit() )
+ {
+ // What a pitty. We were almost there but not quite. Unget
+ // to the start point and "L E A V E".
+ aCommand.UnGetToMark( mark );
+ User::Leave( KErrArgument );
+ }
+
+// Did it: return the remainder, which hopefully is just what
+// we aimed at.
+return aCommand.Remainder();
+}
+
+//-----------------------------------------------------------------------------
+//
+// CCmdBase::Recognize
+//
+// Recognize command string. Resets the StepOver flag from the command
+// family. If the family is not defined, then StepOver flag remains as
+// happens to be.
+//
+// Return Values: ETrue/EFalse
+//
+//-----------------------------------------------------------------------------
+
+TBool CCmdBase::Recognize(const TDesC& aCommand)
+{
+// Obey the command family's step over mode..
+if (iFamily != NULL)
+ SetStepOver(iFamily->StepOver());
+
+// The beef is in the ParamsL() function.
+TPtrC params;
+TRAPD(error, params.Set(ParamsL(aCommand)));
+return (error == KErrNone);
+}
+
+//-----------------------------------------------------------------------------
+
+TBool CCmdBase::Recognize(TLex aCommand)
+{
+// Reset the StepOver flag to what's in command family.
+if (iFamily != NULL)
+ SetStepOver(iFamily->StepOver());
+
+// The beef is in the ParamsL() function.
+TPtrC params;
+TRAPD(error, params.Set(ParamsL(aCommand)));
+return (error == KErrNone);
+}
+
+//-----------------------------------------------------------------------------
+
+TInt CCmdBase::ProcessL( const TDesC& aCommand )
+{
+// Complete the test machine - will then get the next cmd
+Machine()->CompleteRequest();
+
+TPtrC params;
+TRAPD( error, params.Set( ParamsL( aCommand )) );
+return error;
+}
+
+//-----------------------------------------------------------------------------
+// Complete process without doing anything
+
+TInt CCmdBase::ProcessStepOverL()
+{
+Machine()->CompleteRequest();
+return KErrNone;
+}
+
+//-----------------------------------------------------------------------------
+
+void CCmdBase::Printf( TRefByValue<const TDesC> aFmt, ... )
+{
+VA_LIST list;
+VA_START(list, aFmt);
+Machine()->MsgPrintfln( aFmt, list );
+}
+
+//-----------------------------------------------------------------------------
+
+void CCmdBase::Print(const TDesC& aText, const TBool &aNewLine)
+{
+if (aNewLine)
+ Machine()->MsgWriteln(aText);
+else
+ Machine()->MsgWrite(aText);
+}
+
+//-----------------------------------------------------------------------------
+
+TInt CCmdBase::Error( TInt aError, TRefByValue<const TDesC> aFmt, ... )
+{
+VA_LIST list;
+VA_START(list, aFmt);
+Machine()->MsgPrintfln(aFmt, list);
+return aError;
+}
+
+//-----------------------------------------------------------------------------
+
+CTEngine* CCmdBase::Machine()
+{
+return iFamily->Machine();
+}
+
+//-----------------------------------------------------------------------------
+
+CConsoleBase* CCmdBase::Console()
+{
+return iFamily->Machine()->Console();
+}
+
+//-----------------------------------------------------------------------------
+// provide general log facility (access standard Machine features)
+
+void CCmdBase::Log(TRefByValue<const TDesC> aFmt, ... )
+{
+VA_LIST list;
+VA_START(list, aFmt);
+
+Machine()->MsgPrintfln(aFmt, list);
+//Printf(aFmt, list);
+//if (Machine()->Log())
+// Machine()->LogPrintf(aFmt, list);
+}
+
+//-----------------------------------------------------------------------------
+// quick default to known 'invalid' date!
+
+void CCmdBase::WriteDateStamp()
+{
+TDateTime myTempDate(K_OUTOFBOUNDS_YEAR, EJanuary, 0,0,0,0,0);
+WriteDateStamp(myTempDate);
+}
+//TDateTime myTempDate;
+//myTempDate.SetMonth(0);
+//myTempDate.SetYear(K_OUTOFBOUNDS_YEAR);
+
+//-----------------------------------------------------------------------------
+// displays the given date or current date depending on parameter
+//buf.Format(_L8 ("%04d/%02d/%02d %02d.%02d:%02d:%06d "),dateTime.Year(),dateTime.Month()+1, dateTime.Day()+1,dateTime.Hour(),dateTime.Minute(),dateTime.Second(),dateTime.MicroSecond());
+//buf.AppendFormat(_L8("%S\015\012"),&aText);
+
+void CCmdBase::WriteDateStamp(const TDateTime &aDate)
+{
+TDateTime date;
+TTime now;
+TBool iEOL = (aDate.Year() == K_OUTOFBOUNDS_YEAR);
+
+if (iEOL)
+ {
+ now.HomeTime();
+ date = now.DateTime();
+ }
+else
+ date = aDate;
+
+TTime t(date);
+TBuf<128> dateTimeString;
+TRAPD(err, t.FormatL(dateTimeString, KDateFormat));
+if (err == KErrNone)
+ {
+ if (iEOL)
+ Machine()->MsgPrintf(_L("[%S] "), &dateTimeString);
+ else
+ Log(_L("[%S]\r\n"), &dateTimeString);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// update the completion code and set the $ResultCode$ define in Machine()
+
+void CCmdBase::SetCompletionCode(TInt aCode)
+{
+iCompletionCode = aCode;
+Machine()->SetResultDefine(aCode);
+}
+
+
+//-----------------------------------------------------------------------------
+// End of File
+//-----------------------------------------------------------------------------
+