/*
* 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