diff -r 7fdc9a71d314 -r 8ad140f3dd41 stif/TestScripter/src/TestScripterInternal.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stif/TestScripter/src/TestScripterInternal.cpp Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,390 @@ +/* +* Copyright (c) 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: This file contains TestScripterImp implementation. +* +*/ + +// INCLUDE FILES +#include +#include +#include "TestScripterInternal.h" +#include "TestScripter.h" +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// None + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CScriptBase::CScriptBase +// Constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CScriptBase::CScriptBase( CTestModuleIf& aTestModuleIf ): + iTestModuleIf( aTestModuleIf ) + { + // Handles multible 'waittestclass' given in test configure file. + iSignalErrors.Reset(); + + } + + +// ----------------------------------------------------------------------------- +// CScriptBase::TestModuleIf +// Get reference to TestModuleIf API. +// ----------------------------------------------------------------------------- +// +EXPORT_C CTestModuleIf& CScriptBase::TestModuleIf() + { + + return iTestModuleIf; + + } + +// ----------------------------------------------------------------------------- +// CScriptBase::Signal +// Signal TestScripter to continue from waittestclass. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CScriptBase::Signal( TInt aError ) + { + + if( iStatus ) + { + User::RequestComplete( iStatus, aError ); + } + else + { + // Handles multible 'waittestclass' given in test configure file. + // There is active object in CTestRunner also and it has higher + // priority than CTestContinue(It must be higher that e.g. + // 'allownextresult' is gotten right from configure file). That why we + // have to use this array and take signal "count" to the array for + // later handling. + iSignalErrors.Append( aError ); + } + + } + +// ----------------------------------------------------------------------------- +// CScriptBase::CallTestClass +// Called from test class. TestScripter forwards +// operations to other test class object. +// aLine: in: +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::CallTestClass( const TDesC& aLine ) + { + + if( iFunc ) + { + return iFunc( iTestScripter, EStifTSCallClass, aLine ); + } + + return KErrNotSupported; + + }; + +// ----------------------------------------------------------------------------- +// CScriptBase::GetTestObject +// Get test class object address. +// ----------------------------------------------------------------------------- +// +EXPORT_C CScriptBase* CScriptBase::GetTestObject( const TDesC& aObjectName ) + { + + if( iFunc ) + { + TInt ret = iFunc( iTestScripter, EStifTSGetObject, aObjectName ); + if( ret > 0 ) + { + return( CScriptBase* )ret; + } + } + + return NULL; + }; + +// ----------------------------------------------------------------------------- +// CScriptBase::EnableSignal +// Enable Signal(). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CScriptBase::EnableSignal( TRequestStatus& aStatus ) + { + + aStatus = KRequestPending; + iStatus = &aStatus; + + // Handles multible 'waittestclass' given in test configure file. + if( iSignalErrors.Count() > 0 ) + { + // Complete signal and remove it from array. + TInt error = iSignalErrors[0]; + iSignalErrors.Remove( 0 ); + User::RequestComplete( iStatus, error ); + } + + } + +// ----------------------------------------------------------------------------- +// CScriptBase::CancelSignal +// Cancel Signal(). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CScriptBase::CancelSignal() + { + if(iStatus!=NULL) + { + User::RequestComplete( iStatus, KErrCancel ); + } + } + +// ----------------------------------------------------------------------------- +// CScriptBase::SetScripter +// Set scripter callback. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CScriptBase::SetScripter( CallBackFunc aFunc, CTestScripter* aTestScripter ) + { + + iTestScripter = aTestScripter; + iFunc = aFunc; + + } + +// ----------------------------------------------------------------------------- +// CScriptBase::RunInternalL +// Run specified method from test class. +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::RunInternalL ( + TStifFunctionInfo const aFunctions[], + TInt aCount, + CStifItemParser& aItem ) + { + + TInt ret = KErrNotFound; + + TPtrC command; + User::LeaveIfError ( aItem.GetNextString( command ) ); + TInt i = 0; + TName funcName; + + // Search function from table and call it + for ( i = 0; i < aCount; i++ ) + { + funcName = aFunctions[i].iFunctionName; + if ( command == funcName ) + { + if( iLog ) + { + iLog->Log(_L("Calling [%S]"), &command ); + } + ret = ( this->*(aFunctions[i].iMethod) )( aItem ); + + break; + } + + } + + if( i == aCount ) + { + iLog->Log( _L("[%S] not found"), &command ); + } + + return ret; + + } + +// ----------------------------------------------------------------------------- +// CScriptBase::GetConstantValue +// Internal fuction to get const value defined in +// [Define]...[Enddefine] section of script file +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::GetConstantValue( const TDesC& aName, TDes& aValue ) + { + return iTestScripter->GetConstantValue( aName, aValue ); + } + + +// ----------------------------------------------------------------------------- +// CScriptBase::GetConstantValue +// Internal fuction to get const value defined in +// [Define]...[Enddefine] section of script file +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::GetConstantValue( const TDesC& aName, TInt& aValue ) + { + TInt ret = KErrNone; + TBuf<32> valStr; + ret = iTestScripter->GetConstantValue( aName, valStr ); + if ( ret != KErrNone ) + { + return ret; + } + + TLex converter( valStr ); + ret = converter.Val( aValue ); + + return ret; + } + +// ----------------------------------------------------------------------------- +// CScriptBase::GetConstantValue +// Internal fuction to get const value defined in +// [Define]...[Enddefine] section of script file +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::GetConstantValue( const TDesC& aName, TReal& aValue ) + { + TInt ret = KErrNone; + TBuf<32> valStr; + ret = iTestScripter->GetConstantValue( aName, valStr ); + if ( ret != KErrNone ) + { + return ret; + } + + TLex converter( valStr ); + ret = converter.Val( aValue ); + + return ret; + } + +// ----------------------------------------------------------------------------- +// CScriptBase::SetResultDescription +// Result description can be set from within the test class method +// ----------------------------------------------------------------------------- +// +EXPORT_C void CScriptBase::SetResultDescription(const TDesC& aDescription) + { + iTestScripter->SetResultDescription(aDescription); + } + +// ----------------------------------------------------------------------------- +// CScriptBase::SetLocalValue +// Internal fuction to set local value +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::SetLocalValue(const TDesC& aName, const TDesC& aValue) + { + return iTestScripter->SetLocalValue(aName, aValue); + } + +// ----------------------------------------------------------------------------- +// CScriptBase::SetLocalValue +// Internal fuction to set local value +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::SetLocalValue(const TDesC& aName, const TInt aValue) + { + TBuf<20> buf; + buf.Format(_L("%d"), aValue); + return iTestScripter->SetLocalValue(aName, buf); + } + +// ----------------------------------------------------------------------------- +// CScriptBase::SetLocalValue +// Internal fuction to set local value +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::SetLocalValue(const TDesC& aName, const TReal aValue ) + { + TBuf<50> buf; + buf.Format(_L("%g"), aValue); + return iTestScripter->SetLocalValue(aName, buf); + } + +// ----------------------------------------------------------------------------- +// CScriptBase::GetLocalValue +// Internal fuction to get local value +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::GetLocalValue(const TDesC& aName, TDes& aValue) + { + return iTestScripter->GetLocalValue(aName, aValue); + } + +// ----------------------------------------------------------------------------- +// CScriptBase::GetLocalValue +// Internal fuction to get local value +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::GetLocalValue(const TDesC& aName, TInt& aValue) + { + TInt ret = KErrNone; + TBuf<50> valStr; + ret = iTestScripter->GetLocalValue(aName, valStr); + if(ret != KErrNone) + { + return ret; + } + + TLex converter(valStr); + ret = converter.Val(aValue); + + return ret; + } + +// ----------------------------------------------------------------------------- +// CScriptBase::GetLocalValue +// Internal fuction to get local value +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CScriptBase::GetLocalValue(const TDesC& aName, TReal& aValue ) + { + TInt ret = KErrNone; + TBuf<50> valStr; + ret = iTestScripter->GetLocalValue(aName, valStr); + if(ret != KErrNone) + { + return ret; + } + + TLex converter(valStr); + ret = converter.Val(aValue); + + return ret; + } + +// End of File