--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/StifTFwIf/src/UIEngine.cpp Tue Feb 02 01:57:15 2010 +0200
@@ -0,0 +1,1310 @@
+/*
+* 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: CUIEngine: This object executes test cases from
+* STIF Test Framework.
+*
+*/
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32svr.h>
+#include <collate.h>
+#include "UIEngineEvent.h"
+#include <stifinternal/UIEngineContainer.h>
+#include "UIEngineError.h"
+#include <stifinternal/UIEngine.h>
+#include "Logging.h"
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None
+
+// CONSTANTS
+_LIT( KUIEngine, "CUIEngine" );
+
+// MACROS
+#ifdef LOGGER
+#undef LOGGER
+#endif
+#define LOGGER iLogger
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// None
+
+// ==================== LOCAL FUNCTIONS =======================================
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: CUIEngine
+
+ Description: Default constructor
+
+ C++ default constructor can NOT contain any code, that
+ might leave.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CUIEngine::CUIEngine( CUIIf* aUi ):
+ iUi( aUi )
+ {
+
+ __RDEBUG( _L( "CUIEngine::CUIEngine()" ) );
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: ConstructL
+
+ Description: Symbian OS second phase constructor
+
+ Symbian OS default constructor can leave.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: Leaves if called Open method returns error
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CUIEngine::ConstructL()
+ {
+ // Logger's setting definitions
+ TLoggerSettings loggerSettings;
+ loggerSettings.iCreateLogDirectories = EFalse;
+ loggerSettings.iOverwrite = ETrue;
+ loggerSettings.iTimeStamp = ETrue;
+ loggerSettings.iLineBreak = ETrue;
+ loggerSettings.iEventRanking = EFalse;
+ loggerSettings.iThreadId = EFalse;
+ loggerSettings.iHardwareFormat = CStifLogger::ETxt;
+ loggerSettings.iHardwareOutput = CStifLogger::EFile;
+ loggerSettings.iEmulatorFormat = CStifLogger::ETxt;
+ loggerSettings.iEmulatorOutput = CStifLogger::EFile;
+ loggerSettings.iUnicode = EFalse;
+ loggerSettings.iAddTestCaseTitle = EFalse;
+
+ // Create Logger, Note: Use protected NewL because initialization file not
+ // readed yet.
+ iLogger = CStifLogger::NewL( KUiLogDir, KUiLogFile, loggerSettings );
+
+ // Initialize logger
+ iUi->InitializeLogger( iLogger );
+
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: NewL
+
+ Description: Two-phased constructor.
+
+ Parameters: None
+
+ Return Values: CUIEngine* : Pointer to created UI engine object
+
+ Errors/Exceptions: Leaves if memory allocation for CUIEngine fails
+ Leaves if ConstructL leaves
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CUIEngine* CUIEngine::NewL( CUIIf* aUi )
+ {
+
+ CUIEngine* self =
+ new ( ELeave ) CUIEngine( aUi );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+
+ }
+
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: ~CUIEngine
+
+ Description: Destructor
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CUIEngine::~CUIEngine()
+ {
+
+ __RDEBUG( _L( "CUIEngine::~CUIEngine()" ) );
+
+ // Delete all containers, cannot use ResetAndDestroy,
+ // because destructor is private
+ TInt count = iContainerArray.Count();
+ for( TInt i=0; i< count; i++ )
+ {
+ delete iContainerArray[i];
+ }
+ iContainerArray.Reset();
+ iContainerArray.Close();
+
+ delete iLogger;
+ iLogger = NULL;
+
+ delete iError;
+ iError = 0;
+
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: VUIEngine
+
+ Method: Open
+
+ Description: Open test engine.
+
+ Parameters: TDesC& aTestFrameworkIni: in: Initialization file to Test Framework
+
+ Return Values: Symbian OS error: Error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::Open( const TDesC& aTestFrameworkIni )
+ {
+
+ if( ( iTestEngine.SubSessionHandle() != 0 ) ||
+ ( iTestEngineServ.Handle() != 0 ) )
+ {
+ __TRACE( KError, ( CStifLogger::EError, _L( "CUIEngine::Open() Already open" ) ) );
+ return KErrInUse;
+ }
+
+ // Check aTestFrameworkIni max length
+ if( aTestFrameworkIni.Length() > KMaxFileName )
+ {
+ __TRACE( KPrint, ( CStifLogger::EError, _L( "CUIEngine::Open() method's parameter length is incorrect" ) ) );
+ return KErrArgument;
+ }
+
+ // Create Test Engine
+ TInt ret = iTestEngineServ.Connect();
+
+ if ( ret != KErrNone )
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::Open. Engine server open failed: ret = %d"), ret ) );
+
+ return ret;
+ }
+
+ ret = iTestEngine.Open( iTestEngineServ, aTestFrameworkIni );
+
+ if ( ret != KErrNone )
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::Open. Engine. Open failed: ret = %d"), ret ) );
+
+ return ret;
+ }
+
+ TErrorNotification error;
+ if( ErrorPrint( error ) != KErrNotSupported )
+ {
+ // Start printer
+ iError = CUIEngineErrorPrinter::NewL( this );
+ iError->StartL( iTestEngine );
+ }
+
+ return ret;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: Close
+
+ Description: Close test engine.
+
+ Parameters: None
+
+ Return Values: TInt KErrNone: Always returned KErrNone
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::Close()
+ {
+
+ delete iError;
+ iError = 0;
+
+ // Delete all containers, cannot use ResetAndDestroy,
+ // because destructor is private
+ TInt count = iContainerArray.Count();
+ for( TInt i=0; i< count; i++ )
+ {
+ delete iContainerArray[i];
+ iContainerArray[i] = NULL;
+ }
+ iContainerArray.Reset();
+
+ iTestEngine.Close();
+ iTestEngineServ.Close();
+
+ __TRACE( KPrint, ( _L( "CUIEngine::Close." ) ) );
+
+ return KErrNone;
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: AddTestModule
+
+ Description: Add test module to module list of test engine
+
+ Parameters: TDesC& aModuleName: in: Testmodule, which is added to module list
+ TDesC& aIniFile: in: Initialization file to the test module
+
+ Return Values: Symbian OS error: Error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::AddTestModule( const TDesC& aModuleName,
+ const TDesC& aIniFile )
+ {
+ // Check aModuleName max length
+ if( aModuleName.Length() > KMaxName )
+ {
+ __TRACE( KPrint, ( CStifLogger::EError, _L( "CUIEngine::AddTestModule() method's first parameter length is incorrect" ) ) );
+ return KErrArgument;
+ }
+ // Check aIniFile max length
+ if( aIniFile.Length() > KMaxFileName )
+ {
+ __TRACE( KPrint, ( CStifLogger::EError, _L( "CUIEngine::AddTestModule() method's second parameter length is incorrect" ) ) );
+ return KErrArgument;
+ }
+
+
+ TInt ret = iTestEngine.AddTestModule( aModuleName, aIniFile );
+
+ if ( ret != KErrNone && ret != KErrAlreadyExists )
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::AddTestModule. Add module failed: ret = %d" ), ret ) );
+
+ return ret;
+ }
+
+ return KErrNone;
+
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: RemoveTestModule
+
+ Description: Remove test module from test engine
+
+ Parameters: TDesC& aModuleName: in: Testmodule, which is removed of module list
+
+ Return Values: Symbian OS error: Error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::RemoveTestModule( const TDesC& aModuleName )
+ {
+ // Remove test module of module list of test engine
+ TInt ret = iTestEngine.RemoveTestModule( aModuleName );
+
+ if ( ret != KErrNone )
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::RemoveTestModule. Remove module failed: ret = %d"), ret ) );
+
+ return ret;
+ }
+
+ return ret;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: AddTestCaseFile
+
+ Description: Add test case file to test case file list of test engine
+
+ Parameters: TDesC& aModuleName: in: Testmodule, which own test cases of test case list.
+ TDesC& aCaseFile: in: Test case list, which is added to test case list
+
+ Return Values: Symbian OS error: Error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::AddTestCaseFile( const TDesC& aModuleName,
+ const TDesC& aCaseFile )
+ {
+ // Check aModuleName max length
+ if( aModuleName.Length() > KMaxName )
+ {
+ __TRACE( KPrint, ( CStifLogger::EError, _L( "CUIEngine::AddTestCaseFile() method's first parameter length is incorrect" ) ) );
+ return KErrArgument;
+ }
+ // Check aCaseFile max length
+ if( aCaseFile.Length() > KMaxFileName )
+ {
+ __TRACE( KPrint, ( CStifLogger::EError, _L( "CUIEngine::AddTestCaseFile() method's second parameter length is incorrect" ) ) );
+ return KErrArgument;
+ }
+
+ TInt ret( KErrNone );
+
+ // Add given test case file to test module
+ if ( aCaseFile.Length() == 0 )
+ {
+ ret = KErrArgument;
+ __TRACE( KPrint, ( _L( "CUIEngine::AddTestCaseFile. Test case file not defined: ret = %d"), ret ) );
+ }
+ else
+ {
+ // Add test case file to test case file list of test engine
+ ret = iTestEngine.AddConfigFile( aModuleName, aCaseFile );
+
+ if ( ret != KErrNone && ret != KErrAlreadyExists )
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::AddTestCaseFile. Add test case file failed: ret = %d"), ret ) );
+ }
+ }
+
+ return ret;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: RemoveTestCaseFile
+
+ Description: Remove test case file of test case file list of test engine
+
+ Parameters: TDesC& aModuleName: in: Testmodule, which own test cases of test case list
+ TDesC& aCaseFile: in: Test case list, which is removed of test case list
+
+ Return Values: Symbian OS error: Error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::RemoveTestCaseFile( const TDesC& aModuleName,
+ const TDesC& aCaseFile )
+ {
+
+ TInt ret( KErrNone );
+
+ // Remove given test case file from test module
+ if ( aCaseFile.Length() == 0 )
+ {
+ ret = KErrArgument;
+ __TRACE( KPrint, ( _L( "CUIEngine::RemoveTestCaseFile. Test case file not defined: ret = %d"), ret ) );
+ }
+ else
+ {
+ // Remove test case file
+ ret = iTestEngine.RemoveConfigFile( aModuleName, aCaseFile );
+
+ if ( ret != KErrNone )
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::RemoveTestCaseFile. Remove test case file failed: ret = %d"), ret ) );
+ }
+ }
+
+ return ret;
+
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: GetTestCases
+
+ Description: Get test cases of enumerated list of test engine. Method is copied
+ list of test cases to aTestCaseInfo. Copied tests are test cases
+ of test module (aTestModule) and defined
+ in test case file (aTestCaseFile), which are given as argument
+
+ Method copied all enumerated test cases if aTestModule
+ and aTestCaseFile are not defined
+
+ Parameters: RPointerArray<CTestInfo>& aTestCaseInfo: inout: List of test cases
+ TDesC& aModuleName: in: Testmodule, which own test cases of test case list
+ TDesC& aTestCaseFile: in: Test case list, which is got of test case list
+
+ Return Values: Symbian OS error: Error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::GetTestCasesL( RPointerArray<CTestInfo>& aTestCaseInfo,
+ const TDesC& aTestModule,
+ const TDesC& aTestCaseFile )
+ {
+ __TRACE( KPrint, ( _L( "GetTestCasesL()") ) );
+
+ TInt ret(KErrNone);
+ TInt count(0);
+
+ // Enumerate test cases
+ TCaseCount caseCount;
+
+ TRequestStatus status;
+ iTestEngine.EnumerateTestCases( caseCount, status );
+ User::WaitForRequest( status );
+ ret = status.Int();
+
+ // Check that enumerate succeeded
+ if ( ret != KErrNone )
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::GetTestCases. Test case enumerate failed: ret = %d"), ret ) );
+ TErrorNotification error;
+ error.iText = _L("Can't get test cases");
+ iUi->ErrorPrint ( error );
+ return ret;
+ }
+
+ CFixedFlatArray<TTestInfo>* testCases = NULL;
+
+ // Create test cases to buffer
+ TRAPD( err, testCases = CFixedFlatArray<TTestInfo>::NewL( caseCount() ) );
+ if( err != KErrNone )
+ {
+ if( err == KErrNoMemory )
+ {
+ _LIT( KNotEnoughHeapMemory,
+ "Not enough heap memory available. Either reduce the test case count or increase UI's heap size in mmp file using EPOCHEAPSIZE.");
+ RDebug::Print( KNotEnoughHeapMemory );
+ __TRACE( KError, ( KNotEnoughHeapMemory ) );
+ }
+ else
+ {
+ _LIT( KGeneralError,
+ "CUIEngine::GetTestCasesL: CFixedFlatArray<TTestInfo>::NewL fails with value: %d");
+ RDebug::Print( KGeneralError, err );
+ __TRACE( KError, ( KGeneralError, err ) );
+ }
+ User::Leave( err );
+ }
+
+ CleanupStack::PushL( testCases );
+
+ // Get test cases from Engine.
+ ret = iTestEngine.GetTestCases( *testCases );
+
+ if ( ret != KErrNone )
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::GetTestCases. Get test cases failed: ret = %d"), ret ) );
+
+ CleanupStack::PopAndDestroy( testCases );
+ return ret;
+ }
+
+ // count of test cases.
+ count = caseCount();
+
+ __TRACE( KPrint, ( _L( "Test case count: %d"), count ) );
+
+ HBufC* moduleNameBuf = aTestModule.AllocLC();
+ TPtr moduleName( moduleNameBuf->Des() );
+ TCollationMethod method =
+ *Mem::CollationMethodByIndex(0); // get the standard method
+ method.iFlags |= TCollationMethod::EFoldCase; // ignore case
+
+ moduleName.LowerCase();
+
+ // Remove optional '.DLL' from test module file name
+ TParse parse;
+ parse.Set( moduleName, NULL, NULL );
+
+ if( !parse.Ext().CompareC( _L(".dll"), 3, &method ) )
+ {
+ const TInt len = parse.Ext().Length();
+ moduleName.Delete ( moduleName.Length()-len, len );
+ }
+
+ TBool found = EFalse;
+ // Update iTestCaseTable.
+ for (TInt j=0;j<count;j++, found = EFalse)
+ {
+ // Check, if module defined.
+ if ( aTestModule.Length() > 0 )
+ {
+ // Check, if test case defined.
+ if ( aTestCaseFile.Length() > 0)
+ {
+ if( moduleName == KTestScripterName )
+ {
+ if( !( *testCases )[j].iConfig.CompareC( aTestCaseFile, 3, &method ) )
+ {
+ found = ETrue;
+ }
+ }
+ if( !( *testCases )[j].iModuleName.CompareC( moduleName, 3, &method )
+ && !( *testCases )[j].iConfig.CompareC( aTestCaseFile, 3, &method ) )
+ {
+ found = ETrue;
+ }
+ }
+ else
+ {
+ if( moduleName == KTestScripterName )
+ {
+ // Test Module is TestScripter
+ if( ( *testCases )[j].iModuleName.Find( KTestScripterName ) != KErrNotFound )
+ {
+ // iModuleName name is in 'testscripter_testcasefile'
+ // format => Find()
+ found = ETrue;
+ }
+ }
+ if( !( *testCases )[j].iModuleName.CompareC(
+ moduleName, 3, &method ) )
+ {
+ found = ETrue;
+ }
+ }
+ }
+ else
+ {
+ found = ETrue;
+ }
+
+ if( found )
+ {
+ // Create tmpTestInfo.
+ CTestInfo *tmpTestInfo = CTestInfo::NewL();
+
+ CleanupStack::PushL( tmpTestInfo );
+
+ // Copy TTestInfo to CTestInfo.
+ tmpTestInfo->SetModuleName( ( *testCases )[j].iModuleName );
+ tmpTestInfo->SetTestCaseTitle( ( *testCases )[j].iTestCaseInfo.iTitle );
+ tmpTestInfo->SetTestCaseNumber( ( *testCases )[j].iTestCaseInfo.iCaseNumber );
+ tmpTestInfo->SetPriority( ( *testCases )[j].iTestCaseInfo.iPriority );
+ tmpTestInfo->SetTimeout( ( *testCases )[j].iTestCaseInfo.iTimeout );
+ tmpTestInfo->SetTestCaseFile( ( *testCases )[j].iConfig );
+ ret = aTestCaseInfo.Append(tmpTestInfo);
+ if( ret != KErrNone )
+ {
+ CleanupStack::PopAndDestroy( tmpTestInfo );
+ }
+ else
+ {
+ CleanupStack::Pop( tmpTestInfo );
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy( moduleNameBuf );
+
+ CleanupStack::PopAndDestroy( testCases );
+
+ return ret;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: StartTestCase
+
+ Description: Start test case execution.
+
+ Parameters: TInt& aTestId: in: ID for test case. Test ID given of address of
+ current UIEngineContainer.
+
+ const CTestInfo& aTestInfo: in: Test case information
+
+ Return Values: Symbian OS error: Error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::StartTestCase( CUIEngineContainer*& aContainer,
+ const CTestInfo& aTestInfo )
+ {
+ TInt ret( KErrNone );
+
+ // Copy CTestInfo to TTestInfo.
+ TTestInfo testCase;
+ testCase.iModuleName = aTestInfo.ModuleName();
+ testCase.iTestCaseInfo.iTitle = aTestInfo.TestCaseTitle();
+ testCase.iTestCaseInfo.iCaseNumber = aTestInfo.TestCaseNum();
+ testCase.iTestCaseInfo.iPriority = aTestInfo.Priority();
+ testCase.iTestCaseInfo.iTimeout = aTestInfo.Timeout();
+ testCase.iConfig = aTestInfo.TestCaseFile();
+
+ CUIEngineContainer* container = NULL;
+ TRAP( ret,
+ // Create container.
+ container =
+ CUIEngineContainer::NewL( this, testCase, iTestEngineServ, iTestEngine );
+ );
+ if( ret != KErrNone )
+ {
+ return ret;
+ }
+
+ ret = iContainerArray.Append( container );
+ if( ret != KErrNone )
+ {
+ __TRACE( KError, ( CStifLogger::EError,
+ _L( "CUIEngine::StartTestCase() Append failed, cannot start test case" ) ) );
+ delete container;
+ return ret;
+ }
+
+ // Call Container to starting test case execution.
+ TRAPD( trapError,
+ // Call Container to starting test case execution.
+ ret = container->StartContainerL();
+ );
+
+ if(trapError != KErrNone)
+ {
+ __TRACE( KPrint, ( _L( "CUIEngine::StartTestCase. Test case starting failed: trapError = %d"), ret ) );
+ delete container;
+ return trapError;
+ }
+
+ aContainer = container;
+
+ return ret;
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: AbortStartedTestCase
+
+ Description: Abort started test case execution.
+
+ Parameters: CUIEngineContainer* aContainer: in: Container running testcase
+
+ Return Values: Symbian OS error: Error code
+
+ Errors/Exceptions: Panics if test case is not found or is already executed
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CUIEngine::AbortStartedTestCase( CUIEngineContainer* aContainer )
+ {
+
+ // Locate container from array
+ TInt index = iContainerArray.Find( aContainer );
+
+ if( ( index < 0) ||
+ ( aContainer->State() == CUIEngineContainer::EExecuted ) )
+ {
+ __TRACE( KError, ( CStifLogger::EError,
+ _L( "CUIEngine::AbortStartedTestCase() Testcase executed" ) ) );
+ User::Panic( KUIEngine, KErrAccessDenied );
+ }
+
+ // Remove and delete container
+ iContainerArray.Remove( index );
+ delete aContainer;
+
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: TestExecuted
+
+ Description:
+
+ Parameters: CUIEngineContainer* aUIEngineContainer: Address of current
+ CUIEngineContainer is test case ID.
+
+ TFullTestResult& aFullTestResult: in: Test result of executed test case
+
+ Return Values: TInt KErrNone: Always returned KErrNone
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CUIEngine::TestExecuted( CUIEngineContainer* aContainer,
+ TFullTestResult& aFullTestResult )
+ {
+ // Locate container from array
+ TInt index = iContainerArray.Find( aContainer );
+
+ if( index < 0 )
+ {
+ __TRACE( KError, ( CStifLogger::EError,
+ _L( "CUIEngine::TestExecuted() Testcase not found" ) ) );
+ User::Panic( KUIEngine, KErrNotFound );
+ }
+
+ iUi->TestExecuted( aContainer, aFullTestResult );
+
+ // Remove and delete container.
+ // It is safe to do here,
+ // because container and runner does not have any code after
+ // this function returns.
+ iContainerArray.Remove( index );
+ delete aContainer;
+
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: PrintProg
+
+ Description:
+
+ Parameters: CUIEngineContainer* aContainer: in: Address of current
+ CUIEngineContainer is test case ID
+
+ TTestProgress& aProgress: in: Progress information from test case
+
+ Return Values: SymbianOS error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::PrintProg( CUIEngineContainer* aContainer,
+ TTestProgress& aProgress )
+ {
+
+ return iUi->PrintProg( aContainer, aProgress );
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: ErrorPrint
+
+ Description:
+
+ Parameters: TErrorNotification& aError: in: Error information from framework
+
+ Return Values: SymbianOS error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::ErrorPrint( TErrorNotification& aError )
+ {
+
+ return iUi->ErrorPrint( aError );
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: RemoteMsg
+
+ Description: Forward Ats send.
+
+ Parameters: const TDesC& aMessage: in: message
+
+ Return Values: SymbianOS error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::RemoteMsg( CUIEngineContainer* aContainer,
+ const TDesC& aMessage )
+ {
+
+ return iUi->RemoteMsg( aContainer, aMessage );
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CUIEngine
+
+ Method: GoingToReboot
+
+ Description: Forward reboot indication.
+
+ Parameters: None
+
+ Return Values: SymbianOS error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngine::GoingToReboot( CUIEngineContainer* aContainer,
+ TRequestStatus& aStatus )
+ {
+
+ return iUi->GoingToReboot( aContainer, aStatus );
+
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ DESCRIPTION
+
+ CTestInfo: This object contains test case information.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: NewL
+
+ Description:
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C CTestInfo* CTestInfo::NewL()
+ {
+
+ //RDebug::Print(_L("CTestInfo::NewL()"));
+ CTestInfo* self =
+ new ( ELeave ) CTestInfo();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: CTestInfo
+
+ Description: Default constructor
+
+ C++ default constructor can NOT contain any code, that
+ might leave.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CTestInfo::CTestInfo()
+ {
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: ConstructL
+
+ Description: Symbian OS second phase constructor
+
+ Symbian OS default constructor can leave.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: Leaves if called Open method returns error
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CTestInfo::ConstructL()
+ {
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: ~CTestInfo
+
+ Description: Destructor
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CTestInfo::~CTestInfo()
+ {
+
+ delete iModuleNameBuf;
+ delete iTitleBuf;
+ delete iTestCaseFileBuf;
+ iModuleNameBuf = 0;
+ iTitleBuf = 0;
+ iTestCaseFileBuf = 0;
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: SetModuleName
+
+ Description: Set module name.
+
+ Parameters: None
+
+ Return Values: Symbian OS error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CTestInfo::SetModuleName ( const TDesC& aModuleName )
+ {
+
+ iModuleName.Set(0,0);
+ delete iModuleNameBuf;
+
+ if( aModuleName.Length() < KTestScripterNameLength )
+ {
+ iModuleNameBuf = aModuleName.Alloc();
+ }
+ else
+ {
+ // Check is TestScripter
+ TPtrC check( aModuleName.Mid( 0, KTestScripterNameLength ) );
+ TInt ret = check.Compare( KTestScripterName );
+ if( ret == KErrNone )
+ {
+ iModuleNameBuf = ( aModuleName.Mid( 0, KTestScripterNameLength ) ).Alloc();
+ }
+ else
+ {
+ iModuleNameBuf = aModuleName.Alloc();
+ }
+ }
+
+ if( iModuleNameBuf == NULL )
+ {
+ return KErrNoMemory;
+ }
+
+ iModuleName.Set( iModuleNameBuf->Des() );
+
+ return KErrNone;
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: SetTestCaseTitle
+
+ Description: Set module name.
+
+ Parameters: None
+
+ Return Values: Symbian OS error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CTestInfo::SetTestCaseTitle ( const TDesC& aTitle )
+ {
+
+ iTitle.Set(0,0);
+ delete iTitleBuf;
+ iTitleBuf = aTitle.Alloc();
+ if( iTitleBuf == NULL )
+ {
+ return KErrNoMemory;
+ }
+
+ iTitle.Set( iTitleBuf->Des() );
+
+ return KErrNone;
+
+ };
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: SetTestCaseFile
+
+ Description: Set test case file name.
+
+ Parameters: None
+
+ Return Values: Symbian OS error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CTestInfo::SetTestCaseFile ( const TDesC& aTestCaseFile )
+ {
+ iTestCaseFile.Set(0,0);
+ delete iTestCaseFileBuf;
+ iTestCaseFileBuf = aTestCaseFile.Alloc();
+ if( iTestCaseFileBuf == NULL )
+ {
+ return KErrNoMemory;
+ }
+
+ iTestCaseFile.Set( iTestCaseFileBuf->Des() );
+
+ return KErrNone;
+
+ };
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: CopyL
+
+ Description: Copy existing CTestInfo.
+
+ Parameters: None
+
+ Return Values: None
+
+ Errors/Exceptions: Leaves on error
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CTestInfo::CopyL( const CTestInfo& aTestInfo )
+ {
+
+ User::LeaveIfError( SetModuleName( aTestInfo.ModuleName() ));
+ User::LeaveIfError( SetTestCaseTitle( aTestInfo.TestCaseTitle() ));
+ User::LeaveIfError( SetTestCaseFile( aTestInfo.TestCaseFile() ));
+
+ iCaseNumber = aTestInfo.TestCaseNum();
+ iPriority = aTestInfo.Priority();
+ iTimeout = aTestInfo.Timeout();
+ iExpectedResult = aTestInfo.ExpectedResult();
+
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CTestInfo
+
+ Method: SetTestCaseFile
+
+ Description: Set test case file name.
+
+ Parameters: None
+
+ Return Values: Symbian OS error code
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TBool CTestInfo::operator== ( const CTestInfo& aTestInfo ) const
+ {
+
+ if( ( aTestInfo.ModuleName() == ModuleName() ) &&
+ ( aTestInfo.Priority() == Priority() ) &&
+ ( aTestInfo.TestCaseFile() == TestCaseFile() ) &&
+ ( aTestInfo.TestCaseNum() == TestCaseNum() ) &&
+ ( aTestInfo.Timeout() == Timeout() ) )
+ {
+ return ETrue;
+ }
+
+
+ return EFalse;
+
+ }
+
+// ================= OTHER EXPORTED FUNCTIONS =================================
+
+// End of File