--- a/stif/TestEngine/src/TestModuleController.cpp Tue Jul 06 16:05:13 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3107 +0,0 @@
-/*
-* 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 module contains implementation of
-* CTestModuleController class member functions.
-*
-*/
-
-// INCLUDE FILES
-#include <e32svr.h>
-#include <stifinternal/TestServerClient.h>
-#include <StifLogger.h>
-#include "TestEngine.h"
-#include "TestModuleController.h"
-#include "Logging.h"
-
-// EXTERNAL DATA STRUCTURES
-// None
-
-// EXTERNAL FUNCTION PROTOTYPES
-// None
-
-// CONSTANTS
-// None
-
-// MACROS
-// None
-
-// LOCAL CONSTANTS AND MACROS
-// None
-
-// MODULE DATA STRUCTURES
-// None
-
-// LOCAL FUNCTION PROTOTYPES
-// None
-
-// FORWARD DECLARATIONS
-// None
-
-// ==================== LOCAL FUNCTIONS =======================================
-// None
-
-#define LOGGER iEngine->Logger()
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: CTestModuleController
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestModuleController::CTestModuleController( CTestEngine* aEngine ) :
- CActive( CActive::EPriorityStandard ),
- iEngine( aEngine ),
- iState( ETestModuleIdle )
- {
- CActiveScheduler::Add( this );
- iTestScripterController = NULL;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: const TName& aName: in: Test module name
-
- Return Values: None
-
- Errors/Exceptions: Leaves if memory allocation for iConfigFiles fails
- Leaves if memory allocation for iTestCaseArray fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::ConstructL(
- const TName& aName,
- TBool aAfterReboot,
- CTestScripterController* aTestScripterController )
- {
- iTestScripterController = aTestScripterController;
- iTestScripterIndicator = 0;
-
- iAfterReboot = aAfterReboot;
-
- __TRACE ( KInit, ( _L( "Creating CTestModuleController [%S]" ), &aName ) );
-
- iTestCaseArray = RPointerArray<TTestCaseArray>();
-
- // Check aName length
- if( aName.Length() <= 0 )
- {
- iEngine->LeaveWithNotifyL( KErrArgument );
- }
-
- // Remove optional '.DLL' from file name
- TName name = aName;
- name.LowerCase();
- TParse parse;
- parse.Set( name, NULL, NULL );
-
- if ( parse.Ext() == _L(".dll") )
- {
- const TInt len = parse.Ext().Length();
- name.Delete ( name.Length()-len, len );
- }
-
- iName = name.AllocL();
-
- // HBufC to TPtrC
- TPtrC atsName;
-
- TFileName newNameBuffer;
- TInt check = GenerateModuleName( iName->Des(), newNameBuffer );
- if( check == KErrNone )
- {
- // Load the module(TestScripter)
- atsName.Set( newNameBuffer );
- }
- else
- {
- // Load the module(Others)
- atsName.Set( iName->Des() );
- }
-
- // Moved the implementation to a new function, ConstructASTLoggerL, due to
- // CW 3.0 compiler error with multiple TRAPDs
- TRAPD(err, ConstructASTLoggerL( atsName, aAfterReboot));
-
- if( err != KErrNone )
- {
- __TRACE ( KError, ( _L( "CTestModuleController[%S]::ConstructL: Creation of ATS logger failed" ), iName ) );
- iEngine->LeaveWithNotifyL( err, _L("Creation of ATS logger failed") );
- }
-
- }
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: ConstructASTLoggerL
-
- Description: Construct ATS logger
-
- Parameters: TDesC& atsName, TBool& aAfterReboot
-
- Return Values: TInt
-
- Errors/Exceptions: Leaves if error got from ATS logger NewL
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-TInt CTestModuleController::ConstructASTLoggerL( TDesC& atsName, TBool& aAfterReboot )
- {
- TRAPD( err, iAtsLogger = CAtsLogger::NewL( atsName, aAfterReboot ); );
- if( err == KErrNotFound && aAfterReboot )
- {
- // If file does not exist, create new
- aAfterReboot = EFalse;
- iAtsLogger = CAtsLogger::NewL( atsName, aAfterReboot );
- }
- User::LeaveIfError( err );
- iAtsLogger->SetFullReporting( ETrue );
- if( aAfterReboot )
- {
- iAtsLogger->ContinueAfterRebootL();
- }
- else
- {
- // Begin reporting
- iAtsLogger->BeginTestReportL();
-
- // Begin test set
- iAtsLogger->BeginTestSetL();
- }
- return KErrNone;
- }
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: InitL
-
- Description: Initialize test module.
-
- Parameters: TFileName& aIniFile: in: Initialization file of Test Module
- const TDesC& aConfigFile: in: Test case(config) file name(Used
- in TestScripter case).
-
- Return Values: None
-
- Errors/Exceptions: Leaves if error got from Test Server
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::InitL( TFileName& aIniFile,
- const TDesC& aConfigFile )
- {
- __TRACE( KInit, (_L( "Initialising test module [%S] with initialization file [%S]" ),
- iName, &aIniFile ) );
-
- // HBufC to TPtrC
- TPtrC name( iName->Des() );
-
- // Connect to server
- TInt r = iServer.Connect( name, aConfigFile );
-
- if ( r != KErrNone )
- {
- if ( r == KErrBadName )
- {
- __TRACE( KError, ( CStifLogger::ERed, _L( "Test Module name or Configuration File name is too long: [%S]" ), &name) );
- LeaveWithNotifyL( r, _L( "Test Module name or Configuration File name is too long." ) );
- }
- __TRACE( KError, ( CStifLogger::ERed, _L( "Can't connect to test module [%S], IniFile [%S]" ), &name, &aIniFile ) );
- LeaveWithNotifyL( r, _L( "Can't connect to test module" ) );
- }
-
- // Open session
- r = iModule.Open( iServer, aIniFile );
- if ( r != KErrNone )
- {
- __TRACE( KError, ( CStifLogger::ERed, _L( "Can't open session to test module [%S], IniFile=[%S]" ), &name, &aIniFile ) );
- LeaveWithNotifyL( r, _L( "Can't open session to test module" ) );
- }
-
- iErrorPrinter = CErrorPrinter::NewL( iEngine );
- iErrorPrinter->StartL( iModule );
-
- iServerStateHandler = CServerStateHandler::NewL( iEngine, this );
- iServerStateHandler->StartL( iServer );
- __TRACE( KInit, (_L( "Initialising test module [%S] with initialization file [%S] done" ),
- iName, &aIniFile ) );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: CTestEngine object.
- const TName& aName: in: module name.
- TBool aAfterReboot: in: reboot indicator.
- TBool aCreateTestScripterCont: in: Indications to
- TestModule or TestScripter creation
- CTestScripterController* aTestScripterController: in:
- CTestEngine object.
-
-
- Return Values: CTestModuleController* : pointer to created object
-
- Errors/Exceptions: Leaves if called ConstructL method leaves
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CTestModuleController* CTestModuleController::NewL(
- CTestEngine* aEngine,
- const TName& aName,
- TBool aAfterReboot,
- TBool aCreateTestScripterCont,
- CTestScripterController* aTestScripterController )
- {
- // Create CTestScripterController
- if( aCreateTestScripterCont )
- {
- CTestScripterController* testScripterController = NULL;
- testScripterController = CTestScripterController::NewL(
- aEngine, aName, aAfterReboot );
- return testScripterController;
- }
-
-
- CTestModuleController* self =
- new ( ELeave ) CTestModuleController( aEngine );
- CleanupStack::PushL( self );
- self->ConstructL( aName, aAfterReboot, aTestScripterController );
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: ~CTestModuleController
-
- Description: Destructor
-
- Deallocate all allocated resources
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CTestModuleController::~CTestModuleController()
- {
-
- // If CTestScripterController is created there is deleted base class(
- // CTestModuleController) also and this has no iName.
- if( iName )
- {
- __TRACE(KVerbose, (_L( "Deleting CTestModuleController [%S]" ), iName ) );
- }
-
- Cancel();
-
- // If CTestScripterController is created there is deleted base class(
- // CTestModuleController) also and this has no iAtsLogger.
- if( iAtsLogger )
- {
- // End test set
- TRAPD( err, iAtsLogger->EndTestSetL() );
- // End AtsLogger reporting, has to be trapped in destructor
- TRAPD( err2, iAtsLogger->EndTestReportL() );
- if( ( err != KErrNone ) || ( err2 != KErrNone ) )
- {
- // Print error if error got from trap
- __TRACE( KError, (
- _L( "Destructor of CTestModuleController [%S]: XML log closing failed" ),
- iName ) );
- }
- }
-
- // Delete Atslogger
- delete iAtsLogger;
-
- // Stop error printer
- delete iErrorPrinter;
- iErrorPrinter = NULL;
- // Delete server state handler
- delete iServerStateHandler;
- iServerStateHandler = NULL;
-
- // Close RTestModule session
- iModule.Close();
- // Close RTestServer session
- iServer.Close();
-
- // Release the test case array
- iTestCaseArray.Close();
-
- // Release the config file array
- iConfigFiles.ResetAndDestroy();
- iConfigFiles.Close();
-
- // Release the config file array
- iFailedEnumerateConfig.ResetAndDestroy();
- iFailedEnumerateConfig.Close();
-
- // Release the children array
- iChildrenControllers.ResetAndDestroy();
- iChildrenControllers.Close();
-
- delete iName;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: AddConfigFileL
-
- Description: Add config file
-
- Parameters: TFileName& aConfigFile: in: Config file for Test Module
-
- Return Values: None
-
- Errors/Exceptions: Leaves if AppendL leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::AddConfigFileL( TFileName& aConfigFile )
- {
- __TRACE( KInit,
- ( _L( "CTestModuleController::AddConfigFileL [%S] aConfigFile=[%S]" ),
- iName, &aConfigFile ) );
- // Check that this config file does not already exists
- for ( TInt i = 0; i < iConfigFiles.Count(); i++ )
- {
- // HBufC to TPtrC
- TPtrC name( iConfigFiles[i]->Des() );
- if ( KErrNone == aConfigFile.CompareF( name ) )
- {
- LeaveWithNotifyL( KErrAlreadyExists,
- _L( "Adding config file failed: Config file already exists" ) );
- }
- }
- HBufC* configFile = aConfigFile.AllocLC();
-
- User::LeaveIfError( iConfigFiles.Append( configFile ) );
- CleanupStack::Pop( configFile );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: RemoveConfigFileL
-
- Description: Remove config file
-
- Parameters: TFileName& aConfigFile: in: Config file name
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::RemoveConfigFileL( TFileName& aConfigFile )
- {
- __TRACE( KInit, (
- _L( "CTestModuleController::RemoveConfigFileL [%S] aConfigFile=[%S]" ),
- iName, &aConfigFile ) );
- // Find config file
- for ( TInt i = 0; i < iConfigFiles.Count(); i++ )
- {
- // HBufC to TPtrC
- TPtrC name( iConfigFiles[i]->Des() );
- if ( KErrNone == aConfigFile.CompareF( name ) )
- {
- HBufC* configFile = iConfigFiles[i];
- iConfigFiles.Remove(i);
- delete configFile;
- // Cancel enumerate and free test cases
- Cancel();
- FreeTestCases();
- return;
- }
- }
-
- LeaveWithNotifyL( KErrNotFound,
- _L( "Removing config file failed: Config file not found" ) );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: StartEnumerateL
-
- Description: Start test case enumeration
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::StartEnumerateL()
- {
- __TRACE( KVerbose, (
- _L( "CTestModuleController::StartEnumerateL [%S]" ), iName ) );
- iTestCaseCount = 0;
- iEnumerateCount = 0;
- iFailedEnumerateCount = 0;
- iFailedEnumerateConfig.Reset();
- iEnumerateComplete = EFalse;
-
- iState = ETestModuleEnumerateCases;
-
- if ( iConfigFiles.Count() > 0 )
- {
- // HBufC to TPtrC
- iEnumConfigFile.Set( iConfigFiles[0]->Des() );
- }
-
- __TRACE( KInit, (
- _L( "Getting testcases from module [%S], test case file [%S]" ),
- iName, &iEnumConfigFile ) );
-
- SetActive();
- iModule.EnumerateTestCases( iEnumConfigFile, iEnumResultPackage, iStatus );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: RunL
-
- Description: RunL handles completed requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if iStatus is not KErrNone
- Leaves if some of called leaving methods leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::RunL()
- {
-
- // If CTestScripterController is used then move execution to the
- // CTestScripterController size
- if( iTestScripterController )
- {
- iTestScripterController->RunLEmulator( this );
- return;
- }
-
- __TRACE( KVerbose, ( _L( "CTestModuleController::RunL [%S] [iStatus = %d]"),
- iName, iStatus.Int() ) );
-
- // Note:
- // If test case not found there may be existing cases from previous
- // enumerations, so those cases are valid. e.g. case: "add test case file",
- // "add test case file that not exist" and "get test cases".
-
- TInt ret( KErrNone );
- // Check that request was successful
- if( iStatus.Int() == KErrNone )
- {
- // Get enumerated test cases and append them to array
- CFixedFlatArray<TTestCaseInfo>* testCases =
- CFixedFlatArray<TTestCaseInfo>::NewL( iEnumResultPackage() );
- CleanupStack::PushL( testCases );
- ret = iModule.GetTestCases( *testCases );
- __TRACE( KInit, ( _L( "RunL()'s GetTestCases method returns: %d" ), ret ) );
-
- iTestCaseCount += testCases->Count();
-
- if ( testCases->Count() == 0 )
- {
-
- if (iConfigFiles.Count() > 0)
- {
- __TRACE( KInit, ( CStifLogger::EBold,
- _L( "Module [%S], test case file [%S] returned 0 cases" ),
- iName, iConfigFiles[iEnumerateCount] ) );
- }
- else
- {
- __TRACE( KInit, ( CStifLogger::EBold,
- _L( "Module [%S] without test case file, returned 0 cases" ),
- iName ) );
- }
- iEngine->ErrorPrint( 1, _L("Someone returned 0 test cases. Check testengine log"));
- iAtsLogger->CommentL( _L("Test module returned 0 test cases") );
- }
-
- // Store test cases for later use
- User::LeaveIfError( iTestCaseArray.Append( testCases ) );
- CleanupStack::Pop( testCases );
-
- }
- else
- {
- // Calculate failed enumeration count
- iFailedEnumerateCount++;
- // Add failed config(test case) file to array for later removing
- if( iConfigFiles.Count() != NULL )
- {
- __TRACE( KError, (
- CStifLogger::ERed,
- _L( "Test case[%S] enumeration fails with error: %d" ),
- iConfigFiles[iEnumerateCount], iStatus.Int() ) );
- // Append
- iFailedEnumerateConfig.Append( iConfigFiles[iEnumerateCount] );
- }
- }
-
- iEnumerateCount++;
-
- if ( iEnumerateCount < iConfigFiles.Count() )
- {
- // Continue enumeration
- __TRACE( KInit, (
- _L( "Getting testcases from module [%S], test case file [%S]" ),
- iName, iConfigFiles[iEnumerateCount] ) );
- SetActive();
- iModule.EnumerateTestCases( *iConfigFiles[iEnumerateCount],
- iEnumResultPackage, iStatus );
- }
- else if( iTestCaseCount == 0 )
- {
- // Total count of succesfully enumerations
- iEnumerateCount -= iFailedEnumerateCount;
- User::Leave( KErrNotFound );
- }
- else
- {
- // Total count of succesfully enumerations
- iEnumerateCount -= iFailedEnumerateCount;
- // Remove faulty config (test case) file(s)
- for( TInt a= 0; a < iFailedEnumerateConfig.Count(); a++ )
- {
- TInt index( 0 );
- // Find removed config(test case) file
- index = iConfigFiles.Find( iFailedEnumerateConfig[a] );
- if( index != KErrNotFound )
- {
- __TRACE( KInit, ( _L( "Removing test case file[%S]" ),
- iConfigFiles[index] ) );
- // Remove
- iConfigFiles.Remove( index );
- }
- }
-
- // All test cases enumerated
- iState = ETestModuleEnumerateCasesCompleted;
- iEnumerateComplete = ETrue;
-
- iEngine->EnumerationCompleted( iTestCaseCount );
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: TestCasesL
-
- Description: Return Test Cases
-
- Parameters: None
-
- Return Values: CFixedFlatArray<TTestInfo>* :Pointer to created array
-
- Errors/Exceptions: Leaves if NewL leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CFixedFlatArray<TTestInfo>* CTestModuleController::TestCasesL()
- {
- CFixedFlatArray<TTestInfo>* testCases =
- CFixedFlatArray<TTestInfo>::NewL( iTestCaseCount );
-
- CleanupStack::PushL( testCases );
-
- // Loop through all test cases from all config files
- TInt totalCount = 0;
- // HBufC to TPtrC
- TPtrC name( iName->Des() );
- for ( TInt i = 0; i < iEnumerateCount; i++ )
- {
- TTestInfo tmpInfo;
- tmpInfo.iModuleName = name;
- if ( iConfigFiles.Count() > 0 )
- {
- tmpInfo.iConfig = *iConfigFiles[i];
- }
-
- // Get test cases from iTestCaseArray at [i]
- //if( (iTestCaseArray)[i] )
- if ( iTestCaseArray.Count() > 0)
- {
- CFixedFlatArray<TTestCaseInfo>* tempTestCases = (iTestCaseArray)[i];
- for ( TInt j = 0; j < tempTestCases->Count(); j++ )
- {
- tmpInfo.iTestCaseInfo = (*tempTestCases)[j];
- // Set TestCaseInfo to testCases array
- testCases->Set( totalCount, tmpInfo );
- totalCount++;
- }
- }
- }
-
- CleanupStack::Pop( testCases );
-
- return testCases;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: FreeTestCases
-
- Description: Free memory used for test cases
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::FreeTestCases()
- {
- // Reset and destroy test cases
- iTestCaseArray.ResetAndDestroy();
- iTestCaseArray.Close();
-
- iTestCaseCount = 0;
- iEnumerateComplete = EFalse;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: DoCancel
-
- Description: Cancel active request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::DoCancel()
- {
-
- // If CTestScripterController is used then move execution to the
- // CTestScripterController size
- if( iTestScripterController )
- {
- iTestScripterController->DoCancelEmulator( this );
- return;
- }
-
- __TRACE( KVerbose, ( _L( "CTestModuleController::DoCancel [%S]" ), iName ) );
-
- switch ( iState )
- {
- case ETestModuleEnumerateCases:
- iModule.CancelAsyncRequest( ETestModuleEnumerateTestCases );
- iEnumerateComplete = ETrue;
- // Enumeration canceled, complete with KErrCancel
- iEngine->EnumerationCompleted( 0, KErrCancel );
-
- // Free allocated test cases because EnumerateTestCases was
- // canceled
- FreeTestCases();
- break;
- case ETestModuleIdle:
- case ETestModuleEnumerateCasesCompleted:
- default:
- // DoCancel called in wrong state => Panic
- _LIT( KTestModuleController, "CTestModuleController" );
- User::Panic( KTestModuleController, EDoCancelDisorder );
- break;
- }
-
- iAtsLogger->ErrorL( _L("Test case enumeration cancelled") );
-
- iState = ETestModuleIdle;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: RunError
-
- Description: Handle errors.
-
- Parameters: TInt aError: in: Symbian OS error: Error code
-
- Return Values: TInt KErrNone: Always returned KErrNone
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestModuleController::RunError( TInt aError )
- {
-
- // If CTestScripterController is used then move execution to the
- // CTestScripterController size
- if( iTestScripterController )
- {
- return iTestScripterController->RunErrorEmulator( aError, this );
- }
-
- __TRACE( KError, ( CStifLogger::ERed,
- _L( "CTestModuleController::RunError [%S] aError=[%d]" ),
- iName, aError ) );
- if( aError == KErrNoMemory )
- {
- __TRACE( KError, ( CStifLogger::ERed,
- _L( "No memory available. Test case file's size might be too big." ) ) );
- }
-
- iEnumerateComplete = ETrue;
-
- iAtsLogger->ErrorL( _L("Test module did not return any test cases") );
-
- _LIT( KErrorText, " did not return any test cases [error: ");
- if( KErrorText().Length() + iName->Length() + 1 < KMaxName )
- {
- // Enumeration failed, print warning and complete with KErrNone
- TName error( iName->Des() );
- error.Append( KErrorText );
- error.AppendNum( aError );
- error.Append( _L("]") );
- iEngine->ErrorPrint ( 0, error );
-
- iEngine->EnumerationCompleted( 0, KErrNone );
- }
- else
- {
- // Cannot only print warning, complete with error
- iEngine->EnumerationCompleted( 0, aError );
- }
-
- // Free allocated test cases because EnumerateTestCases failed
- FreeTestCases();
- iEnumerateComplete = ETrue;
-
- return KErrNone;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: Server
-
- Description: Return handle to Test Server
-
- Parameters: TTestInfo& aTestInfo: in: Test info for this test case
-
- Return Values: RTestServer& : Reference to RTestServer
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-RTestServer& CTestModuleController::Server( TTestInfo& /*aTestInfo*/ )
- {
- return iServer;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: GetFreeOrCreateModuleControllerL
-
- Description: Return pointer to module controller.
- Find module controller which does not run test case
- and if this is not possible then create new one.
- (Only for test scripter).
-
- Parameters: TTestInfo& aTestInfo: in: Test info for this test case
- TBool aUITestingSupport: in: Is UI testing mode enabled
-
- Return Values: CTestModuleController* : pointer to module controller
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestModuleController* CTestModuleController::GetFreeOrCreateModuleControllerL(TTestInfo& /*aTestInfo*/, TBool /*aUItestingSupport*/)
- {
- return NULL;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: ModuleName
-
- Description: Return the name of Test Module
-
- Parameters: const TDesC& aModuleName: in Modulename
-
- Return Values: const TDesC : Name of Test Module
-
- Errors/Exceptions: None
-
- Status: proposal
-
--------------------------------------------------------------------------------
-*/
-const TDesC& CTestModuleController::ModuleName( const TDesC& /*aModuleName*/ )
- {
- return *iName;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: EnumerationComplete
-
- Description: Is enumeration of test cases complete.
-
- Parameters: None
-
- Return Values: TBool ETrue: Enumeration of test cases is complete
- EFalse: Enumeration is not complete
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TBool CTestModuleController::EnumerationComplete()
- {
- return iEnumerateComplete;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: LeaveWithNotifyL
-
- Description: Print out info and leave.
-
- Parameters: TInt aCode: in: Error code
- const TDesC& aText: in: Test info
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::LeaveWithNotifyL( TInt aCode, const TDesC& aText )
- {
-
- __TRACE( KError, ( CStifLogger::ERed, aText ) );
- if( iAtsLogger )
- {
- iAtsLogger->ErrorL( aText );
- }
- iEngine->LeaveWithNotifyL( aCode );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: CaseCreated
-
- Description: Increases the value of iTestCaseCounter
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::CaseCreated()
- {
- // Number of ongoing testcases
- iTestCaseCounter++;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: CaseFinished
-
- Description: Decreases the value of iTestCaseCounter and deletes this pointer
- only in test module crash situations (KErrServerTerminated -15)
-
- Parameters: None:
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::CaseFinished()
- {
- // Number of ongoing testcases
- iTestCaseCounter--;
-
- // iTestModuleCrashDetected tells is TestModuleController cloned or not
- // TestModuleController is cloned only when testmodule is crashed with KErrServerTerminated -15
- if (iTestCaseCounter == 0 && iTestModuleCrashDetected)
- {
- // Delete this in case where it has been replaced with it clone
- // and no one have pointer to this. This happens only when test module
- // crashes
- delete this;
- // Mem::Fill(this, sizeof(CTestModuleController), 0xa1a1a1a1);
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: CloneL
-
- Description:
-
- Parameters:
-
- Return Values:
-
- Errors/Exceptions:
-
- Status:
-
--------------------------------------------------------------------------------
-*/
-CTestModuleController* CTestModuleController::CloneL(
- CTestModuleController* aTestModuleController,
- TBool aAfterReset,
- CTestScripterController* aTestScripterController )
- {
- __TRACE( KInit, ( _L( "Cloning CTestModuleController" ) ) );
-
-
- TName crashModuleName;
- crashModuleName = aTestModuleController->ModuleName( crashModuleName );
-
- CTestModuleController* clone = CTestModuleController::NewL( iEngine, crashModuleName, aAfterReset, EFalse, aTestScripterController );
-
- clone->InitL( aTestModuleController->iInifile, KNullDesC );
-
- // Give ATS logger to clone
- clone->iAtsLogger = iAtsLogger;
- iAtsLogger = NULL;
-
- for ( TInt i = 0; i < aTestModuleController->iConfigFiles.Count(); i++ )
- {
- TPtrC configFile = aTestModuleController->iConfigFiles[i]->Des();
- TFileName config = configFile;
- clone->AddConfigFileL( config );
- }
-
- iTestModuleCrashDetected = ETrue;
-
- __TRACE( KVerbose, ( _L( "Cloning of CTestModuleController finished " ) ) );
- return clone;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: DeleteModuleController
-
- Description: In that class this method does nothing. It is implemented
- in CTestScripterController.
-
- Parameters: CTestModuleController* aRealModuleController: not used
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status:
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::DeleteModuleController(CTestModuleController* /*aRealModuleController*/)
- {
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: RemoveModuleController
-
- Description: In that class this method does nothing. It is implemented
- in CTestScripterController.
-
- Parameters: CTestModuleController* aRealModuleController: not used
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status:
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::RemoveModuleController(CTestModuleController* /*aRealModuleController*/)
- {
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestModuleController
-
- Method: EnumerateSynchronously
-
- Description: Enumerates test module controller. Used only when new
- test module controller is created during test case
- execution.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status:
-
--------------------------------------------------------------------------------
-*/
-void CTestModuleController::EnumerateSynchronously(void)
- {
- TInt i;
- TInt cfgfiles = iConfigFiles.Count();
- __TRACE(KInit, (_L("Module controller will enumerate synchronously [%d] config files"), cfgfiles));
-
- for(i = 0; i < cfgfiles; i++)
- {
- TRequestStatus status;
- iModule.EnumerateTestCases(*iConfigFiles[i],
- iEnumResultPackage,
- status);
- User::WaitForRequest(status);
- }
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CTestScripterController class member
- functions.
-
--------------------------------------------------------------------------------
-*/
-#define LOGGER iEngine->Logger()
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: CTestScripterController
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestScripterController::CTestScripterController( CTestEngine* aEngine ) :
- CTestModuleController( aEngine )
- {
- // None
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: const TName& aName: in: Test module name
- TBool aAfterReboot: in: Reboot indication
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::ConstructL( const TName& aName,
- TBool aAfterReboot )
- {
- __TRACE( KInit, (
- _L( "NOTE: Test module is TestScripter and each test case(config) file(s) will have own server(s)" ) ) );
-
- // Remove optional '.DLL' from file name
- TName name = aName;
- name.LowerCase();
- TParse parse;
- parse.Set( name, NULL, NULL );
-
- if ( parse.Ext() == _L(".dll") )
- {
- const TInt len = parse.Ext().Length();
- name.Delete ( name.Length()-len, len );
- }
-
- iName = name.AllocL();
-
- iAfterReboot = aAfterReboot;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: InitL
-
- Description: Initialize test module.
-
- Parameters: TFileName& aIniFile: in: Initialization file of Test Module
- const TDesC& aConfigFile: in: Test case(config) file name(Used
- in TestScripter case).
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::InitL( TFileName& aIniFile,
- const TDesC& /*aConfigFile*/ )
- {
- // Take initialization file of Test Module
- iInifile = aIniFile;
-
- // Just empty, don't create TestServer operations. TestServer
- // creation will be do in AddTestCaseFile()-method.
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: CTestEngine object
- const TName& aName: in: Test module name
- TBool aAfterReboot: in: Reboot indication
-
- Return Values: CTestScripterController* : pointer to created object
-
- Errors/Exceptions: Leaves if called ConstructL method leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestScripterController* CTestScripterController::NewL( CTestEngine* aEngine,
- const TName& aName,
- TBool aAfterReboot )
- {
- CTestScripterController* self =
- new ( ELeave ) CTestScripterController( aEngine );
- CleanupStack::PushL( self );
- self->ConstructL( aName, aAfterReboot );
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: ~CTestScripterController
-
- Description: Destructor
-
- Deallocate all allocated resources. Delete CTestScripterController's
- CTestModuleController(s). After this is deleted base class also, see:
- CTestModuleController::~CTestModuleController().
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestScripterController::~CTestScripterController()
- {
- // Delete CTestScripterController(s).
- iTestScripter.ResetAndDestroy();
- iTestScripter.Close();
-
- // After this is deleted base class also, see:
- // CTestModuleController::~CTestModuleController().
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: AddConfigFileL
-
- Description: Add config file.
- - Creates CTestModuleController(Gives test case file name)
- - Initializes CTestModuleController( creates a server session)
- - Adds config file
-
- Parameters: TFileName& aConfigFile: in: Config file for TestScripter
-
- Return Values: None
-
- Errors/Exceptions: Leaves if AppendL leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::AddConfigFileL( TFileName& aConfigFile )
- {
- // Check that this config file does not already exists
- for( TInt a = 0; a < iTestScripter.Count(); a++ )
- {
- for ( TInt i = 0; i < iTestScripter[a]->iConfigFiles.Count(); i++ )
- {
- // HBufC to TPtrC
- TPtrC name( iTestScripter[a]->iConfigFiles[i]->Des() );
- if ( KErrNone == aConfigFile.CompareF( name ) )
- {
- LeaveWithNotifyL( KErrAlreadyExists,
- _L( "Adding config file failed: Config file already exists" ) );
- }
- }
- }
-
- __TRACE( KInit, (
- _L( "CTestScripterController::AddConfigFileL aConfigFile=[%S]" ) ,
- &aConfigFile ) );
-
- HBufC* testScripterAndTestCaseFile = NULL; // InitL() takes TFileName
- testScripterAndTestCaseFile = CreateTestScripterNameL(
- aConfigFile,
- testScripterAndTestCaseFile );
- // Add to cleanup stack here, because CreateTestScripterNameL needs to be
- // trapped in other methods.
- CleanupStack::PushL( testScripterAndTestCaseFile );
-
- //Create server and active object(This uses CTestModuleController::InitL())
- CTestModuleController* module = CTestModuleController::NewL(
- iEngine,
- testScripterAndTestCaseFile->Des(),
- iAfterReboot, EFalse, this );
- CleanupStack::PopAndDestroy( testScripterAndTestCaseFile );
- CleanupStack::PushL( module );
-
- User::LeaveIfError( iTestScripter.Append( module ) );
-
- // Now is used TestScripter so give test case file also(used
- // in caps modifier cases).
- TRAPD ( err, module->InitL( iInifile, aConfigFile ) );
- if( err != KErrNone )
- {
- __TRACE( KInit, ( _L( "InitL fails with error: %d" ), err ) );
- User::Leave( err );
- }
-
- module->AddConfigFileL( aConfigFile );
-
- CleanupStack::Pop( module );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: RemoveConfigFileL
-
- Description: Remove config file
-
- Parameters: TFileName& aConfigFile: in: Config file name
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::RemoveConfigFileL( TFileName& aConfigFile )
- {
- __TRACE( KInit, ( _L( "CTestScripterController::RemoveConfigFileL" ) ) );
-
- HBufC* testScripterAndTestCaseFile = NULL;
- testScripterAndTestCaseFile = CreateTestScripterNameL( aConfigFile,
- testScripterAndTestCaseFile );
- // Add to cleanup stack here, because CreateTestScripterNameL needs to be
- // trapped in other methods.
- CleanupStack::PushL( testScripterAndTestCaseFile );
-
- // Get correct iTestScripter
- TInt index( -1 );
- for( TInt a = 0; a < iTestScripter.Count(); a++ )
- {
- if( ( iTestScripter[a]->iName->CompareF(
- testScripterAndTestCaseFile->Des() ) == KErrNone ) )
- {
- index = a;
- break;
- }
- }
-
- CleanupStack::PopAndDestroy( testScripterAndTestCaseFile );
-
- if( index == -1 )
- {
- LeaveWithNotifyL( KErrNotFound,
- _L( "Removing config file failed: Config file not found" ) );
- }
-
- __TRACE( KInit, (
- _L( "CTestScripterController[%S]::RemoveConfigFileL aConfigFile=[%S]"),
- iTestScripter[index]->iName, &aConfigFile ) );
-
- // Find config file
- for ( TInt i = 0; i < iTestScripter[index]->iConfigFiles.Count(); i++ )
- {
- // HBufC to TPtrC
- TPtrC name( iTestScripter[index]->iConfigFiles[i]->Des() );
- if ( KErrNone == aConfigFile.CompareF( name ) )
- {
- HBufC* configFile = iTestScripter[index]->iConfigFiles[i];
- iTestScripter[index]->iConfigFiles.Remove(i);
- delete configFile;
- // Cancel enumerate and free test cases
- Cancel();
- FreeTestCases();
- // Testcasefile(config) is found, so we can return
- return;
- }
- }
-
- LeaveWithNotifyL( KErrNotFound,
- _L( "Removing config file failed: Config file not found" ) );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: StartEnumerateL
-
- Description: Start test case enumeration
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: LeaveWithNotifyL if no test case added.
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::StartEnumerateL()
- {
- if( iTestScripter.Count() <= 0 )
- {
- RDebug::Print(
- _L( "There is no test case file for TestScripter registered yet. Enumeraton aborted." ) );
- LeaveWithNotifyL( KErrNotFound,
- _L( "There is no test case file for TestScripter registered yet. Enumeraton aborted." ) );
- return;
- }
-
- for( TInt a = 0; a < iTestScripter.Count(); a++ )
- {
- __TRACE( KVerbose, (
- _L( "CTestScripterController[%S]::StartEnumerateL" ),
- iTestScripter[a]->iName ) );
- iTestScripter[a]->iTestCaseCount = 0;
- iTestScripter[a]->iEnumerateCount = 0;
- iTestScripter[a]->iFailedEnumerateCount = 0;
- iTestScripter[a]->iFailedEnumerateConfig.Reset();
- iTestScripter[a]->iEnumerateComplete = EFalse;
-
- iTestScripter[a]->iState = ETestModuleEnumerateCases;
-
- if ( iTestScripter[a]->iConfigFiles.Count() > 0 )
- {
- // HBufC to TPtrC
- iTestScripter[a]->iEnumConfigFile.Set(
- iTestScripter[a]->iConfigFiles[0]->Des() );
- }
-
- __TRACE( KInit, (
- _L( "Getting testcases from module [%S], test case file[%S]" ),
- iTestScripter[a]->iName, &iTestScripter[a]->iEnumConfigFile ) );
-
- iTestScripter[a]->SetActive();
- iTestScripter[a]->iModule.EnumerateTestCases(
- iTestScripter[a]->iEnumConfigFile,
- iTestScripter[a]->iEnumResultPackage,
- iTestScripter[a]->iStatus );
- } // End of for-loop
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: GetCurrentIndex
-
- Description: Get current CTestScripterController.
-
- Parameters: CTestModuleController* aTestModuleController: in:
- Pointer current to CTestModuleController
-
- Return Values: KErrNotFound returned if CTestModuleController not found
- else current index returned.
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestScripterController::GetCurrentIndex( CTestModuleController*
- aTestModuleController )
- {
- // Get correct iTestScripter
- return iTestScripter.Find( aTestModuleController );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: RunL
-
- Description: RunL handles completed requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::RunL()
- {
- // Should never come here because one TestScripter have one test case
- // file per server session.
- // CTestScripterController's base class is an active object but this class
- // not used as an active object. So there not used RunL => Panic.
-
- User::Panic( _L( "CTestScripterController::RunL()" ), KErrCorrupt );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: RunLEmulator
-
- Description: RunLEmulator handles completed requests(Emulates RunL()).
- This is called from CTestModuleController::RunL.
-
- Parameters: CTestModuleController* aTestModuleController: in: pointer to
- CTestModuleController.
-
- Return Values: None
-
- Errors/Exceptions: Leaves if some of called leaving methods leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::RunLEmulator( CTestModuleController*
- aTestModuleController )
- {
- iTestScripterIndicator++;
- TInt index = GetCurrentIndex( aTestModuleController );
- if( index < KErrNone )
- {
- User::Leave( KErrNotFound );
- }
-
- __TRACE( KVerbose, (
- _L( "CTestScripterController[%S]::RunLEmulator [iStatus = %d]"),
- iTestScripter[index]->iName, iTestScripter[index]->iStatus.Int() ) );
-
- // Note:
- // If test case not found there may be existing cases from previous
- // enumerations, so those cases are valid. e.g. case: "add test case file",
- // "add test case file that not exist" and "get test cases".
-
- TInt ret( KErrNone );
-
- // Check that request was successful
- if( iTestScripter[index]->iStatus.Int() == KErrNone )
- {
- // Get enumerated test cases and append them to array
- CFixedFlatArray<TTestCaseInfo>* testCases =
- CFixedFlatArray<TTestCaseInfo>::NewL(
- iTestScripter[index]->iEnumResultPackage() );
- CleanupStack::PushL( testCases );
- ret = iTestScripter[index]->iModule.GetTestCases( *testCases );
- __TRACE( KInit, (
- _L( "RunL()'s GetTestCases method returns: %d" ), ret ) );
-
- iTestScripter[index]->iTestCaseCount += testCases->Count();
-
- if ( testCases->Count() == 0 )
- {
-
- if (iTestScripter[index]->iConfigFiles.Count() > 0)
- {
- __TRACE( KInit, (
- CStifLogger::EBold,
- _L( "Module [%S], test case file[%S] returned 0 cases" ),
- iTestScripter[index]->iName,
- iTestScripter[index]->iConfigFiles[iTestScripter[index]->iEnumerateCount] ) );
- }
- else
- {
- __TRACE( KInit, ( CStifLogger::EBold,
- _L("Module [%S] without test case file, returned 0 cases"),
- iTestScripter[index]->iName ) );
- }
- iTestScripter[index]->iEngine->ErrorPrint( 1,
- _L("Someone returned 0 test cases. Check testengine log"));
- iTestScripter[index]->iAtsLogger->CommentL(
- _L("Test module returned 0 test cases") );
- }
-
- // Store test cases for later use
- User::LeaveIfError( iTestScripter[index]->iTestCaseArray.Append(
- testCases ) );
- CleanupStack::Pop( testCases );
-
- }
- else
- {
- // Calculate failed enumeration count
- iTestScripter[index]->iFailedEnumerateCount++;
- // Add failed config(test case) file to array for later removing
- if( iTestScripter[index]->iConfigFiles.Count() != NULL )
- {
- __TRACE( KError, (
- CStifLogger::ERed,
- _L( "Test case[%S] enumeration fails with error: %d" ),
- iTestScripter[index]->iConfigFiles[iTestScripter[index]->iEnumerateCount],
- iTestScripter[index]->iStatus.Int() ) );
- // Append
- iTestScripter[index]->iFailedEnumerateConfig.Append(
- iTestScripter[index]->iConfigFiles[iTestScripter[index]->iEnumerateCount] );
- }
- }
-
- TInt count = iTestScripter.Count();
-
- // All TestScripter enumerations is finished for cleaning if necessarily
- // and complete request up to engine.
- if( count == iTestScripterIndicator )
- {
- TInt testCaseCount( 0 );
- for( TInt a = 0; a < count; a++ )
- {
- // Remove faulty config (test case) file(s) and
- // iEnumerateCount not increased.
- if( iTestScripter[a]->iTestCaseCount == 0 )
- {
- // Check that test case file is not allready removed.
- if( iTestScripter[a]->iConfigFiles.Count() != 0 )
- {
- iTestScripter[a]->iConfigFiles.Remove( 0 );
- }
- }
- else
- {
- iTestScripter[a]->iEnumerateCount++;
- testCaseCount += iTestScripter[a]->iTestCaseCount;
- }
-
- // All test cases enumerated
- iTestScripter[a]->iState = ETestModuleEnumerateCasesCompleted;
- iTestScripter[a]->iEnumerateComplete = ETrue;
- }
-
- iTestScripterIndicator = 0; // Initialization back to 0, enumerations
- // are done at this run.
- iEngine->EnumerationCompleted( testCaseCount );
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: TestCasesL
-
- Description: Return Test Cases
-
- Parameters: None
-
- Return Values: CFixedFlatArray<TTestInfo>*: Pointer to created array
-
- Errors/Exceptions: Leaves if NewL leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CFixedFlatArray<TTestInfo>* CTestScripterController::TestCasesL()
- {
- TInt testCaseCount( 0 );
- for( TInt i = 0; i < iTestScripter.Count(); i++ )
- {
- testCaseCount += iTestScripter[i]->iTestCaseCount;
- }
-
- CFixedFlatArray<TTestInfo>* testCases =
- CFixedFlatArray<TTestInfo>::NewL( testCaseCount );
-
- CleanupStack::PushL( testCases );
-
- // Loop through all test cases from all config files
- TInt totalCount = 0;
- // HBufC to TPtrC
- for( TInt a = 0; a < iTestScripter.Count(); a++ )
- {
- TPtrC name( iTestScripter[a]->iName->Des() );
- for ( TInt i = 0; i < iTestScripter[a]->iEnumerateCount; i++ )
- {
- TTestInfo tmpInfo;
- tmpInfo.iModuleName = name;
- if ( iTestScripter[a]->iConfigFiles.Count() > 0 )
- {
- tmpInfo.iConfig = *iTestScripter[a]->iConfigFiles[i];
- }
-
- // Get test cases from iTestCaseArray at [i]
- if( (iTestScripter[a]->iTestCaseArray)[i] )
- {
- CFixedFlatArray<TTestCaseInfo>* tempTestCases =
- (iTestScripter[a]->iTestCaseArray)[i];
- for ( TInt j = 0; j < tempTestCases->Count(); j++ )
- {
- tmpInfo.iTestCaseInfo = (*tempTestCases)[j];
- // Set TestCaseInfo to testCases array
- testCases->Set( totalCount, tmpInfo );
- totalCount++;
- }
- }
- }
- }
-
- CleanupStack::Pop( testCases );
-
- return testCases;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: FreeTestCases
-
- Description: Free memory used for test cases
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::FreeTestCases()
- {
- for( TInt a = 0; a < iTestScripter.Count(); a++ )
- {
- // Reset and destroy test cases
- iTestScripter[a]->iTestCaseArray.ResetAndDestroy();
- iTestScripter[a]->iTestCaseArray.Close();
-
- iTestScripter[a]->iTestCaseCount = 0;
- iTestScripter[a]->iEnumerateComplete = EFalse;
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: DoCancel
-
- Description: Cancel active request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::DoCancel()
- {
- // Should never come here because one TestScripter have one test case
- // file per server session.
- // CTestScripterController's base class is an active object but this class
- // not used as an active object. So there not used DoCancel => Panic.
-
- User::Panic( _L( "CTestScripterController::DoCancel()" ), KErrCorrupt );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: DoCancelEmulator
-
- Description: Cancel active request(Emulates DoCancel)
- This is called from CTestModuleController::DoCancel.
-
- Parameters: CTestModuleController* aTestModuleController: in: pointer to
- CTestModuleController.
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::DoCancelEmulator(
- CTestModuleController* aTestModuleController )
- {
- TInt index = GetCurrentIndex( aTestModuleController );
- if( index < KErrNone )
- {
- User::Leave( KErrNotFound );
- }
-
- __TRACE( KVerbose, (
- _L( "CTestScripterController[%S]::RunDoCancelEmulator" ),
- iTestScripter[index]->iName ) );
-
- switch ( iTestScripter[index]->iState )
- {
- case ETestModuleEnumerateCases:
- iTestScripter[index]->iModule.CancelAsyncRequest(
- ETestModuleEnumerateTestCases );
- iTestScripter[index]->iEnumerateComplete = ETrue;
- // Enumeration canceled, complete with KErrCancel
- iTestScripter[index]->iEngine->EnumerationCompleted(
- 0, KErrCancel );
-
- // Free allocated test cases because EnumerateTestCases was
- // canceled
- FreeTestCases();
- break;
- case ETestModuleIdle:
- case ETestModuleEnumerateCasesCompleted:
- default:
- // DoCancel called in wrong state => Panic
- _LIT( KTestModuleController, "CTestModuleController" );
- User::Panic( KTestModuleController, EDoCancelDisorder );
- break;
- }
-
- iTestScripter[index]->iAtsLogger->ErrorL(
- _L("Test case enumeration cancelled") );
- iTestScripter[index]->iState = ETestModuleIdle;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: RunError
-
- Description: Handle errors.
-
- Parameters: TInt aError: in: Symbian OS error: Error code
-
- Return Values: TInt KErrNone: Always returned KErrNone
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestScripterController::RunError( TInt /*aError*/ )
- {
- // Should never come here because one TestScripter have one test case
- // file per server session.
- // CTestScripterController's base class is an active object but this class
- // not used as an active object. So there not used RunError => Panic.
-
- User::Panic( _L( "CTestScripterController::RunError()" ), KErrCorrupt );
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: RunErrorEmulator
-
- Description: Handle errors(Emulates RunError).
- This is called from CTestModuleController::RunError.
-
- Parameters: TInt aError: in: Symbian OS error: Error code.
- CTestModuleController* aTestModuleController: in: pointer to
- CTestModuleController.
-
- Return Values: TInt KErrNone: Always returned KErrNone
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestScripterController::RunErrorEmulator( TInt aError,
- CTestModuleController* aTestModuleController )
- {
- TInt index = GetCurrentIndex( aTestModuleController );
- if( index < KErrNone )
- {
- User::Leave( KErrNotFound );
- }
-
- __TRACE( KError, ( CStifLogger::ERed,
- _L( "CTestScripterController[%S]::RunErrorEmulator aError=[%d]" ),
- iTestScripter[index]->iName, aError ) );
- if( aError == KErrNoMemory )
- {
- __TRACE( KError, ( CStifLogger::ERed,
- _L( "No memory available. Test case file's size might be too big." ) ) );
- }
-
- iTestScripter[index]->iEnumerateComplete = ETrue;
-
- iTestScripter[index]->iAtsLogger->ErrorL(
- _L("Test module did not return any test cases") );
-
- _LIT( KErrorText, " did not return any test cases [error: ");
- if( KErrorText().Length() +
- iTestScripter[index]->iName->Length() +
- 1 < KMaxName )
- {
- // Enumeration failed, print warning and complete with KErrNone
- TName error( iTestScripter[index]->iName->Des() );
- error.Append( KErrorText );
- error.AppendNum( aError );
- error.Append( _L("]") );
- iEngine->ErrorPrint ( 0, error );
-
- iTestScripter[index]->iEngine->EnumerationCompleted( 0, KErrNone );
- }
- else
- {
- // Cannot only print warning, complete with error
- iTestScripter[index]->iEngine->EnumerationCompleted( 0, aError );
- }
-
- // Free allocated test cases because EnumerateTestCases failed
- FreeTestCases();
- iTestScripter[index]->iEnumerateComplete = ETrue;
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: EnumerationComplete
-
- Description: Is enumeration of test cases complete.
-
- Parameters: None
-
- Return Values: TBool ETrue: Enumeration of test cases is complete
- EFalse: Enumeration is not complete
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TBool CTestScripterController::EnumerationComplete()
- {
- for( TInt a = 0; a < iTestScripter.Count(); a++ )
- {
- if( !iTestScripter[a]->iEnumerateComplete )
- {
- return EFalse;
- }
- }
- return ETrue;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: Server
-
- Description: Return handle to Test Server
-
- Parameters: TTestInfo& aTestInfo: in: Test info for this test case
-
- Return Values: RTestServer& : Reference to RTestServer
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-RTestServer& CTestScripterController::Server( TTestInfo& aTestInfo )
- {
- HBufC* testScripterAndTestCaseFile = NULL;
- TRAPD( ret, testScripterAndTestCaseFile = CreateTestScripterNameL(
- aTestInfo.iConfig,
- testScripterAndTestCaseFile ) );
- // Add to cleanup stack here, because CreateTestScripterNameL needs to be
- // trapped in other methods.
- CleanupStack::PushL( testScripterAndTestCaseFile );
- if( ret != KErrNone )
- {
- User::Panic(
- _L( "CTestScripterController::Server(): CreateTestScripterNameL" ),
- ret );
- }
-
- // Get correct handle
- TInt index( KErrNotFound );
- for( TInt a = 0; a < iTestScripter.Count(); a++ )
- {
- if( testScripterAndTestCaseFile->Des() ==
- iTestScripter[a]->iName->Des() )
- {
- index = a;
- break;
- }
- }
-
- CleanupStack::PopAndDestroy( testScripterAndTestCaseFile );
-
- if( index == KErrNotFound )
- {
- User::Panic(
- _L( "CTestScripterController::Server(): Index not found" ),
- KErrNotFound );
- }
-
- // Return handle
- return iTestScripter[index]->iServer;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: GetFreeOrCreateModuleControllerL
-
- Description: Return pointer to test module controller.
- Find controller which does not run test case
- and if this is not possible then create new one.
-
- Parameters: TTestInfo& aTestInfo: in: Test info for this test case
- TBool aUITestingSupport: in: Is UI testing mode enabled
-
- Return Values: CTestModuleController* : pointer to controller
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestModuleController* CTestScripterController::GetFreeOrCreateModuleControllerL(TTestInfo& aTestInfo, TBool aUITestingSupport)
- {
- HBufC* testScripterAndTestCaseFile = NULL;
- TRAPD(ret, testScripterAndTestCaseFile = CreateTestScripterNameL(aTestInfo.iConfig, testScripterAndTestCaseFile));
-
- // Add to cleanup stack here, because CreateTestScripterNameL needs to be trapped in other methods.
- CleanupStack::PushL(testScripterAndTestCaseFile);
- if(ret != KErrNone)
- {
- User::Panic(_L("CTestScripterController::GetFreeOrCreateModuleControllerL(): CreateTestScripterNameL"), ret);
- }
-
- CTestModuleController* resultController = NULL;
- CTestModuleController* parentController = NULL;
- TInt j;
-
- __TRACE(KInit, (_L("Find free real module controller (or create new one)")));
-
- // Get handle to correct "parent" module controller
- __TRACE(KInit, (_L("Searching for parent module controller named [%S]"), testScripterAndTestCaseFile));
- for(TInt a = 0; a < iTestScripter.Count(); a++)
- {
- //Check if module name matches to given name
- if(iTestScripter[a]->iName->Des() == testScripterAndTestCaseFile->Des())
- {
- parentController = iTestScripter[a];
- __TRACE(KInit, (_L("Parent module controller [%S] has been found. Checking its %d children"), parentController->iName, parentController->iChildrenControllers.Count()));
- //Now check all its children and find free one
- //In UI testing mode always create new module controller
- if(!aUITestingSupport)
- {
- for(j = 0; j < parentController->iChildrenControllers.Count(); j++)
- {
- if(parentController->iChildrenControllers[j]->iTestCaseCounter == 0)
- {
- resultController = parentController->iChildrenControllers[j];
- __TRACE(KInit, (_L("Free real module controller found [%S]"), resultController->iName));
- break;
- }
- else
- {
- __TRACE(KInit, (_L("Module controller found [%S] but is not free (it runs %d test cases)"), parentController->iChildrenControllers[j]->iName, parentController->iChildrenControllers[j]->iTestCaseCounter));
- }
- }
- }
- else
- {
- __TRACE(KInit, (_L("In UITestingSupport mode new module controller will be always created")));
- }
- }
- }
-
- //Append underscore to name
- TPtr ptr = testScripterAndTestCaseFile->Des();
- ptr.Append(_L("@"));
-
- //Create new module controller if free one has not been found
- if(!resultController)
- {
- TBuf<10> ind;
- ind.Format(_L("%d"), iEngine->GetIndexForNewTestModuleController());
- TPtr ptr = testScripterAndTestCaseFile->Des();
- ptr.Append(ind);
- __TRACE(KInit, (_L("Free real module controller not found. Creating new one [%S]."), testScripterAndTestCaseFile));
-
- //Create server and active object (This uses CTestModuleController::InitL())
- CTestModuleController* module = CTestModuleController::NewL(
- iEngine,
- testScripterAndTestCaseFile->Des(),
- iAfterReboot, EFalse, this);
- CleanupStack::PushL(module);
- parentController->iChildrenControllers.AppendL(module);
- __TRACE(KInit, (_L("Child added to [%S] controller. Currently it has %d children:"), parentController->iName, parentController->iChildrenControllers.Count()));
- for(j = 0; j < parentController->iChildrenControllers.Count(); j++)
- {
- __TRACE(KInit, (_L(" %d. [%S]"), j + 1, parentController->iChildrenControllers[j]->iName));
- }
-
- // Now is used TestScripter so give test case file also(used
- // in caps modifier cases).
- TRAPD(err, module->InitL(iInifile, aTestInfo.iConfig));
- if(err != KErrNone)
- {
- __TRACE(KVerbose, (_L("InitL fails with error: %d" ), err));
- User::Leave(err);
- }
-
- module->AddConfigFileL(aTestInfo.iConfig);
-
- __TRACE(KInit, (_L("New module controller created [%S]."), testScripterAndTestCaseFile));
-
- //Enumerate test cases
- module->EnumerateSynchronously();
-
- CleanupStack::Pop(module);
- resultController = module;
- }
-
- CleanupStack::PopAndDestroy(testScripterAndTestCaseFile);
-
- // Return handle
- return resultController;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: ModuleName
-
- Description: Return the name of Test Scripter
-
- Parameters: const TDesC& aModuleName: in: Module name
-
- Return Values: const TDesC : Name of Test Scripter
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-const TDesC& CTestScripterController::ModuleName( const TDesC& aModuleName )
- {
- // If test case file not added yet.
- if( iTestScripter.Count() == 0 || aModuleName == KTestScripterName )
- {
- return *iName;
- }
-
- // Test case(s) is(are) added. Scan the name from corrent TestScripter
- // session
- for( TInt a = 0; a < iTestScripter.Count(); a++ )
- {
- if( aModuleName == iTestScripter[a]->iName->Des() )
- {
- return *iTestScripter[a]->iName;
- }
- }
-
- return KNullDesC;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: CreateTestScripterNameL
-
- Description: Create name according to TestScripter and Test case file.
-
- Parameters: TFileName& aTestCaseFile: in: Test case file with path and name
- TFileName& aCreatedName: inout: Created name
-
- Return Values: None
-
- Errors/Exceptions: Leaves is test case file is too long
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-HBufC* CTestScripterController::CreateTestScripterNameL(
- TFileName& aTestCaseFile,
- HBufC* aCreatedName )
- {
- TParse parse;
- parse.Set( aTestCaseFile, NULL, NULL );
-
- TInt length( 0 );
- length = parse.Name().Length();
- length += ( KTestScripterNameLength + 1 );
- length += 10; //this will be used to add unique identifier (when run test case in separate process is on)
-
- // aCreatedName to CleanupStack
- aCreatedName = HBufC::NewLC( length );
- TPtr ptr = aCreatedName->Des();
-
- // Maximum length of TestScripter's name(Max limitation from
- // CTestModuleController creation)
- TInt maximumLength = KMaxName - ( KTestScripterNameLength + 1 );
-
- // Start create name. Format is testscripter_testcasefile
- ptr.Copy( KTestScripterName );
- ptr.Append( _L( "_" ) );
- if( parse.Name().Length() < maximumLength )
- {
- ptr.Append( parse.Name() );
- ptr.LowerCase();
- }
- else
- {
- __TRACE( KInit, ( CStifLogger::ERed,
- _L( "TestScripter test case file(config)'s name is too long. Current length[%d], allowed max length[%d]. Cannot continue" ),
- parse.Name().Length(), maximumLength ) );
- User::Leave( KErrArgument );
- }
-
- // Pop here because this method can be trapped and trap panics with
- // E32USER-CBase if cleap up stack is not empty.
- CleanupStack::Pop( aCreatedName );
-
- return aCreatedName;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: DeleteModuleController
-
- Description: Finds specified module controller and deletes it.
-
- Parameters: CTestModuleController* aRealModuleController: module controller
- to be deleted.
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status:
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::DeleteModuleController(CTestModuleController* aRealModuleController)
- {
- __TRACE(KInit, (_L("Attempting to delete real module controller [%S]"), aRealModuleController->iName));
-
- TInt i, j, k;
- TInt children;
- TInt subcontrollers = iTestScripter.Count();
-
- for(k = 0; k < subcontrollers; k++)
- {
- children = iTestScripter[k]->iChildrenControllers.Count();
- __TRACE(KInit, (_L("...checking controller [%S] which has %d children"), iTestScripter[k]->iName, children));
-
- for(i = 0; i < children; i++)
- {
- if(iTestScripter[k]->iChildrenControllers[i] == aRealModuleController)
- {
- __TRACE(KInit, (_L("Real module controller found... deleting")));
- delete iTestScripter[k]->iChildrenControllers[i];
- iTestScripter[k]->iChildrenControllers.Remove(i);
-
- __TRACE(KInit, (_L("Child removed from [%S] controller. Currently it has %d children:"), iTestScripter[k]->iName, iTestScripter[k]->iChildrenControllers.Count()));
- for(j = 0; j < iTestScripter[k]->iChildrenControllers.Count(); j++)
- {
- __TRACE(KInit, (_L(" %d. [%S]"), j + 1, iTestScripter[k]->iChildrenControllers[j]->iName));
- }
-
- return;
- }
- }
- }
- __TRACE(KInit, (_L("Real module controller NOT found... NOT deleting")));
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestScripterController
-
- Method: RemoveModuleController
-
- Description: Finds specified module controller and removes it from children list.
-
- Parameters: CTestModuleController* aRealModuleController: module controller
- to be removed.
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status:
-
--------------------------------------------------------------------------------
-*/
-void CTestScripterController::RemoveModuleController(CTestModuleController* aRealModuleController)
- {
- __TRACE(KInit, (_L("Attempting to remove real module controller [%x]"), aRealModuleController));
-
- TInt i, j, k;
- TInt children;
- TInt subcontrollers = iTestScripter.Count();
-
- for(k = 0; k < subcontrollers; k++)
- {
- children = iTestScripter[k]->iChildrenControllers.Count();
- __TRACE(KInit, (_L("...checking controller [%S] which has %d children"), iTestScripter[k]->iName, children));
-
- for(i = 0; i < children; i++)
- {
- if(iTestScripter[k]->iChildrenControllers[i] == aRealModuleController)
- {
- __TRACE(KInit, (_L("Real module controller found... removing")));
- iTestScripter[k]->iChildrenControllers.Remove(i);
-
- __TRACE(KInit, (_L("Child removed from [%S] controller. Currently it has %d children:"), iTestScripter[k]->iName, iTestScripter[k]->iChildrenControllers.Count()));
- for(j = 0; j < iTestScripter[k]->iChildrenControllers.Count(); j++)
- {
- __TRACE(KInit, (_L(" %d. [%S]"), j + 1, iTestScripter[k]->iChildrenControllers[j]->iName));
- }
-
- return;
- }
- }
- }
- __TRACE(KInit, (_L("Real module controller NOT found... NOT removing")));
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CErrorPrinter class member
- functions.
-
--------------------------------------------------------------------------------
-*/
-
-/*
--------------------------------------------------------------------------------
-
- Class: CErrorPrinter
-
- Method: NewL
-
- Description: Create a testcase runner.
-
- Parameters: CTestEngine* aMain: in: Pointer to console main
-
- Return Values: CErrorPrinter* : pointer to created object
-
- Errors/Exceptions: Leaves if memory allocation for object fails
- Leaves if ConstructL leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CErrorPrinter* CErrorPrinter::NewL( CTestEngine* aTestEngine )
- {
- CErrorPrinter* self = new ( ELeave ) CErrorPrinter();
- CleanupStack::PushL( self );
- self->ConstructL( aTestEngine );
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CErrorPrinter
-
- Method: ConstructL
-
- Description: Second level constructor.
-
- Parameters: CTestEngine* aEngine: in: Pointer to Engine
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CErrorPrinter::ConstructL( CTestEngine* aEngine )
- {
- iEngine = aEngine;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CErrorPrinter
-
- Method: CErrorPrinter
-
- Description: Constructor.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CErrorPrinter::CErrorPrinter( ) : CActive( EPriorityStandard ),
- iErrorPckg( iError )
- {
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CErrorPrinter
-
- Method: ~CErrorPrinter
-
- Description: Destructor.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CErrorPrinter::~CErrorPrinter( )
- {
- Cancel();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CErrorPrinter
-
- Method: StartL
-
- Description: Starts a test case and sets the active object to active.
-
- Parameters: RTestModule& aServer: in: Reference to the server object
-
- Return Values: None
-
- Errors/Exceptions: TInt: Return KErrNone
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CErrorPrinter::StartL( RTestModule& aServer )
- {
- iServer = aServer;
-
- CActiveScheduler::Add ( this );
-
- SetActive();
- aServer.ErrorNotification ( iErrorPckg, iStatus );
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CErrorPrinter
-
- Method: RunL
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CErrorPrinter::RunL()
- {
-
- if ( iStatus.Int() != KErrNone )
- {
- __TRACE( KVerbose, ( _L( "In CErrorPrinter::RunL [iStatus = %d]" ), iStatus.Int() ) );
- }
- else
- {
- // Forward error print to UI and set request again active.
- iEngine->ErrorPrint( iErrorPckg );
- SetActive();
- iServer.ErrorNotification ( iErrorPckg, iStatus );
- }
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CErrorPrinter
-
- Method: DoCancel
-
- Description: Cancels the asynchronous request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CErrorPrinter::DoCancel()
- {
- iServer.CancelAsyncRequest ( ETestModuleErrorNotification );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CErrorPrinter
-
- Method: RunError
-
- Description: Handles errors. RunL can't leave so just forward error
- and let framework handle error.
-
- Parameters: TInt aError: in: Error code
-
- Return Values: TInt: Error code
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CErrorPrinter::RunError( TInt aError )
- {
- return aError;
-
- }
-/*
--------------------------------------------------------------------------------
-
- Class: CServerStateHandler
-
- Method: NewL
-
- Description: Constructs a new CServerStateHandler object.
-
- Parameters: CTestEngine* aMain
-
- Return Values: CServerStateHandler*: New undertaker
-
- Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CServerStateHandler* CServerStateHandler::NewL( CTestEngine* aTestEngine,
- CTestModuleController* aTestModuleController )
- {
-
- CServerStateHandler* self =
- new( ELeave ) CServerStateHandler( aTestEngine, aTestModuleController );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
-
- }
-/*
--------------------------------------------------------------------------------
-
- Class: CServerStateHandler
-
- Method: ConstructL
-
- Description: Second level constructor.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CServerStateHandler::ConstructL()
- {
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CServerStateHandler
-
- Method: CServerStateHandler
-
- Description: Constructor
-
- Parameters: CTestEngine* aMain
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CServerStateHandler::CServerStateHandler( CTestEngine* aTestEngine,
- CTestModuleController* aTestModuleController ) :
- CActive( CActive::EPriorityStandard ),
- iEngine( aTestEngine ),
- iTestModuleController( aTestModuleController )
- {
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CServerStateHandler
-
- Method: ~CServerStateHandler
-
- Description: Destructor.
- Cancels active request.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CServerStateHandler::~CServerStateHandler()
- {
-
- Cancel();
-
- iServerThread.Close();
-
- }
-/*
--------------------------------------------------------------------------------
-
- Class: CServerStateHandler
-
- Method: StartL
-
- Description: Starts to monitor server thread.
-
- Parameters: RTestServer& aServer
-
- Return Values: TInt:
-
- Errors/Exceptions:
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CServerStateHandler::StartL( RTestServer& aServer )
- {
-
- __TRACE( KVerbose, ( _L( "CServerStateHandler::StartL" ) ) );
-
- TThreadId serverThreadId;
-
- iStatus = KRequestPending;
-
- // Asks from server its thread ID value
- User::LeaveIfError( aServer.GetServerThreadId ( serverThreadId ) );
-
- // Opens handle to thread
- User::LeaveIfError( iServerThread.Open( serverThreadId ) );
-
- CActiveScheduler::Add( this );
-
- // Requests notification when this thread dies, normally or otherwise
- iServerThread.Logon( iStatus ); // Miten RThread hanska ko serveriin..
-
- SetActive();
-
- return KErrNone;
-
- }
-/*
--------------------------------------------------------------------------------
-
- Class: CServerStateHandler
-
- Method: RunL
-
- Description: Handles thread death.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CServerStateHandler::RunL()
- {
-
- // something went badly wrong!
- __TRACE( KInit, ( CStifLogger::ERed,
- _L( "Test case execution fails. Possible reason: KErrServerTerminated" ) ) );
-
- RDebug::Print( _L("Test case execution fails. Possible reason: KErrServerTerminated") );
-
- // Note:
- // More Info about STIF panic with KErrServerTerminated
- // will be informed to the user via testengine log and testreport
- // in CTestCaseController::RunL() method
-
- // TestModuleCrash is called for doing all needed recovering operations for enabling STIF
- // to continue test case execution
- iEngine->TestModuleCrash( iTestModuleController );
-
- }
-/*
--------------------------------------------------------------------------------
-
- Class: CServerStateHandler
-
- Method: DoCancel
-
- Description: Stops listening TestServer status.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CServerStateHandler::DoCancel()
- {
-
- __TRACE( KVerbose, ( _L( "CServerStateHandler::DoCancel" ) ) );
-
- // Cancels an outstanding request for notification of the death of this thread.
- iServerThread.LogonCancel( iStatus );
-
- }
-/*
--------------------------------------------------------------------------------
-
- Class: CServerStateHandler
-
- Method: RunError
-
- Description: Handle errors. RunL function does not leave, so one should
- never come here.
-
- Print trace and let framework handle error( i.e to do Panic )
-
- Parameters: TInt aError: in: Error code
-
- Return Values: TInt: Error code
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CServerStateHandler::RunError( TInt aError )
- {
- __TRACE( KError,( _L( "CServerStateHandler::RunError" ) ) );
- return aError;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: -
-
- Method: GenerateModuleName
-
- Description: Check is module TestScripter. Does parsing and returns new
- module name and error codes(Needed operations when creating
- server sessions to TestScripter).
-
- Parameters: const TFileName& aModuleName: in: Module name for checking.
- TFileName& aNewModuleName: inout: Parsed module name.
-
- Return Values: KErrNone if TestScripter releated module.
- KErrNotFound if not TestScripter releated module.
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-TInt GenerateModuleName(const TDesC& aModuleName,
- TDes& aNewModuleName)
- {
- // Check that length is greated than KTestScripterNameLength
- if( aModuleName.Length() < KTestScripterNameLength )
- {
- return KErrNotFound;
- }
- // Check is TestScripter
- TPtrC check( aModuleName.Mid( 0, KTestScripterNameLength ) );
- TInt ret = check.CompareF( KTestScripterName );
- if( ret == KErrNone )
- {
- aNewModuleName.Copy( aModuleName.Mid( 0, KTestScripterNameLength ) );
- aNewModuleName.LowerCase();
- }
- else
- {
- return KErrNotFound;
- }
-
- return KErrNone;
-
- }
-
-// ================= OTHER EXPORTED FUNCTIONS =================================
-
-// None
-
-// End of File