--- /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 <StifTestInterface.h>
+#include <StifParser.h>
+#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: <object name> <method name> <parameters>
+// -----------------------------------------------------------------------------
+//
+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