--- a/stif/TestEngine/src/TestCaseController.cpp Thu Jul 15 20:25:38 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2880 +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
-* CTestCaseController class member functions.
-*
-*/
-
-
-// INCLUDE FILES
-#include <e32svr.h>
-#include <e32uid.h>
-#include <StifLogger.h>
-#include "StifTFwIfProt.h"
-#include "TestCaseController.h"
-#include "TestModuleController.h"
-#include "TestReport.h"
-#include "Logging.h"
-#include "StifHWReset.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: CTestCaseController
-
- Method: CTestCaseController
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- RTestExecution aTestExecution: in: Handle to RTestExecution
- CAtsLogger& aAtsLogger: in: Reference to CAtsLogger
- RTestExecution aTestExecution: in: Handle to RTestExecution
- const TTestInfo& aTestInfo: in: Test Info
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestCaseController::CTestCaseController( CTestEngine* aEngine,
- CTestReport* aTestReport,
- CAtsLogger& aAtsLogger,
- RTestExecution aTestExecution,
- const TTestInfo& aTestInfo ) :
- CActive( CActive::EPriorityStandard ),
- iEngine( aEngine ),
- iTestReport( aTestReport ),
- iTestExecution( aTestExecution ),
- iTestInfo( aTestInfo ),
- iState( ETestCaseIdle ),
- iResultPckg( iResult ),
- iAtsLogger( aAtsLogger )
- {
- CActiveScheduler::Add( this );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestCaseController::ConstructL()
- {
- __TRACE( KVerbose, ( _L( "CTestCaseController::ConstructL, [%S]" ), &iTestInfo.iTestCaseInfo.iTitle ) );
-
- // Logger settings
- TLoggerSettings loggerSettings;
- loggerSettings.iCreateLogDirectories = EFalse;
- loggerSettings.iOverwrite = ETrue;
- loggerSettings.iTimeStamp = EFalse;
- loggerSettings.iLineBreak = EFalse;
- loggerSettings.iEventRanking = EFalse;
- loggerSettings.iThreadId = EFalse;
- loggerSettings.iHardwareFormat = CStifLogger::ETxt;
- loggerSettings.iHardwareOutput = CStifLogger::ERDebug;
- loggerSettings.iEmulatorFormat = CStifLogger::ETxt;
- loggerSettings.iEmulatorOutput = CStifLogger::ERDebug;
- loggerSettings.iUnicode = EFalse;
- loggerSettings.iAddTestCaseTitle = EFalse;
-
- iRDebugLogger = CStifLogger::NewL( _L( "" ), _L( "" ), loggerSettings );
-
- // If timeout is specified, then create timeout handler.
- if ( iTestInfo.iTestCaseInfo.iTimeout > TTimeIntervalMicroSeconds(0) )
- {
- iTimeout = CTestCaseTimeout::NewL ( this,
- iTestInfo.iTestCaseInfo.iTimeout );
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- CTestReport* aTestReport: in: Pointer to CTestReport
- CAtsLogger& aAtsLogger: in: Reference to CAtsLogger
- RTestExecution aTestExecution: in: Handle to RTestExecution
- const TTestInfo& aTestInfo: in: Test Info
-
- Return Values: CTestCaseController* : pointer to created object
-
- Errors/Exceptions: Leaves if construction of CTestCaseController fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestCaseController* CTestCaseController::NewL( CTestEngine* aEngine,
- CTestReport* aTestReport,
- CAtsLogger& aAtsLogger,
- RTestExecution aTestExecution,
- const TTestInfo& aTestInfo )
- {
- CTestCaseController* self = new ( ELeave ) CTestCaseController( aEngine,
- aTestReport, aAtsLogger, aTestExecution, aTestInfo );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: ~CTestCaseController
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CTestCaseController::~CTestCaseController()
- {
- __TRACE( KVerbose, ( _L( "CTestCaseController::~CTestCaseController" ) ) );
- Cancel();
-
- delete iRDebugLogger;
- delete iTimeout;
- delete iTestCaseArguments;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: StartL
-
- Description: Start active object
-
- Parameters: const RMessage& aMessage: in: Server message
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestCaseController::StartL( const RMessage2& aMessage )
- {
- iRDebugLogger->Log( _L( "Starting testcase [%S]" ), &iTestInfo.iTestCaseInfo.iTitle );
- __TRACE( KInit, ( _L(" Starting testcase [%S]"), &iTestInfo.iTestCaseInfo.iTitle ) );
-
- // Check that this request is not pending!!
- __ASSERT_ALWAYS( iState != ETestCaseRunning,
- iEngine->PanicClient( EReqPending, aMessage ) );
- iMessage = aMessage;
-
- iState = ETestCaseRunning;
-
- delete iTestCaseArguments;
- iTestCaseArguments = NULL;
-
- TInt testCaseArgumentsLength = iMessage.GetDesLength( 1 );
- if ( ( testCaseArgumentsLength != KErrArgument ) && ( testCaseArgumentsLength != KErrBadDescriptor ) )
- {
- iTestCaseArguments = HBufC::NewL( testCaseArgumentsLength );
- TPtr testCaseArgumentsPtr( iTestCaseArguments->Des() );
- User::LeaveIfError( iMessage.Read( 1, testCaseArgumentsPtr ) );
- iTestExecution.RunTestCase( iResultPckg, *iTestCaseArguments, iStatus );
- }
- else
- {
- iTestExecution.RunTestCase( iResultPckg, iStatus );
- }
- SetActive();
-
- // If testcase has timeout (handler), then start it
- if ( iTimeout )
- {
- iTimeout->Start();
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: Timeout
-
- Description: Timeouts active request.
- - Cancel request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestCaseController::Timeout()
- {
- if ( iState == ETestCaseRunning )
- {
- iState = ETestCaseTimeout;
- Cancel();
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: RunL
-
- Description: RunL handles completed requests. Leaves are handled in
- RunError method
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if AddTestCaseResultL leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestCaseController::RunL()
- {
- iState = ETestCaseCompleted;
-
-
- // "iStatus.Int()" error code is received from system's framework not from
- // test case execution.
- if ( iStatus.Int() != KErrNone )
- {
- if ( iStatus.Int() == KErrServerTerminated )
- {
- // something went badly wrong!
- __TRACE( KInit, ( CStifLogger::ERed,
- _L( "TestCase [%S] cannot be executed, STIF panics with[%d]" ),
- &iTestInfo.iTestCaseInfo.iTitle,
- iStatus.Int() ) );
-
- __TRACE( KInit, ( CStifLogger::ERed,
- _L( "Possible reason: Test case has paniced seriously" ) ) );
-
- // We don't leave here but we write information to
- // forward(testreport etc.)
- _LIT( KLeaveInfo, "Test case execution fails" );
- // Sets test case to crash category
- iResult.iCaseExecutionResultCode = iStatus.Int();
- // Test case result
- iResult.iTestResult.iResult = iStatus.Int();
- iResult.iTestResult.iResultDes = KLeaveInfo;
-
- }
-
- else
- {
- // For example testmodule's NewL or testmodule's constructor has
- // leaved and STIF cannot connect to test module
- __TRACE( KInit, ( CStifLogger::ERed,
- _L( "TestCase [%S] cannot execute, TestModule loading operations fails with[%d]" ),
- &iTestInfo.iTestCaseInfo.iTitle,
- iStatus.Int() ) );
- __TRACE( KInit, ( CStifLogger::ERed,
- _L( "Possible reason: TestModule's NewL or Constructor has leaved and STIF cannot connect to test module" ) ) );
-
- // We don't leave here but we write information to
- // forward(testreport etc.)
- _LIT( KLeaveInfo, "TestModule loading fails, cannot connect to the TestModule" );
- // Sets test case to crash category
- iResult.iCaseExecutionResultCode = iStatus.Int();
- // Test case result
- iResult.iTestResult.iResult = iStatus.Int();
- iResult.iTestResult.iResultDes = KLeaveInfo;
- }
- }
-
- else
- {
-
- // Cancel event request, because the testcase is completed
- iTestExecution.CancelAsyncRequest( ETestExecutionNotifyEvent );
- }
-
- // Test case is executed
- if( iTestInfo.iTestCaseInfo.iTitle.Length() > 0 )
- {
- iRDebugLogger->Log( _L( "TestCase [%S] finished with verdict[%d]" ),
- &iTestInfo.iTestCaseInfo.iTitle,
- iResult.iTestResult.iResult );
-
- __TRACE( KInit, ( _L( " TestCase [%S] finished with verdict[%d]" ),
- &iTestInfo.iTestCaseInfo.iTitle,
- iResult.iTestResult.iResult ) );
- }
- else
- {
- iRDebugLogger->Log( _L( "TestCase [%d] finished with verdict[%d]" ),
- iTestInfo.iTestCaseInfo.iCaseNumber,
- iResult.iTestResult.iResult );
-
- __TRACE( KInit, ( _L( " TestCase [%d] finished with verdict[%d]" ),
- iTestInfo.iTestCaseInfo.iCaseNumber,
- iResult.iTestResult.iResult ) );
- }
- __TRACE( KVerbose, (
- _L( "CTestCaseController::RunL: iStatus=[%d]" ), iStatus.Int() ));
-
- GenerateXmlLogL();
-
- // Report test case result
- if( iTestReport )
- {
- iTestReport->AddTestCaseResultL( iTestInfo, iResult, iStatus.Int() );
- iTestReport->UpdateReportSummaryL();
- }
-
- TRAPD( ret, iMessage.WriteL( 0, iResultPckg ) );
-
- // Case done
- iMessage.Complete( ret );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: DoCancel
-
- Description: Cancel active request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestCaseController::DoCancel()
- {
-
- switch ( iState )
- {
- case ETestCaseRunning:
- iTestExecution.CancelAsyncRequest( ETestExecutionRunTestCase );
- if( iTestInfo.iTestCaseInfo.iTitle.Length() > 0 )
- {
- iRDebugLogger->Log( _L( "TestCase [%S] execution aborted" ),
- &iTestInfo.iTestCaseInfo.iTitle );
-
- __TRACE( KInit, ( _L( "TestCase [%S] execution aborted" ),
- &iTestInfo.iTestCaseInfo.iTitle ) );
- }
- else
- {
- iRDebugLogger->Log( _L( "TestCase [%S] execution aborted" ),
- iTestInfo.iTestCaseInfo.iCaseNumber );
-
- __TRACE( KInit, ( _L( "TestCase [%S] execution aborted" ),
- iTestInfo.iTestCaseInfo.iCaseNumber ) );
- }
- break;
- case ETestCaseTimeout:
- iTestExecution.CancelAsyncRequest( ETestExecutionRunTestCase );
- // Update result to timeout
- iResult.iCaseExecutionResultType = TFullTestResult::ECaseTimeout;
- iResult.iTestResult.iResultDes = _L("Test case was timeouted and cancelled");
-
- if( iTestReport )
- {
- iTestReport->AddTestCaseResultL( iTestInfo, iResult, KErrTimedOut );
- }
-
- if( iTestInfo.iTestCaseInfo.iTitle.Length() > 0 )
- {
- iRDebugLogger->Log( _L( "TestCase [%S] finished with verdict[%d]" ),
- &iTestInfo.iTestCaseInfo.iTitle,
- iResult.iTestResult.iResult );
-
- __TRACE( KInit, ( _L( " TestCase [%S] finished with verdict[%d]" ),
- &iTestInfo.iTestCaseInfo.iTitle,
- iResult.iTestResult.iResult ) );
- }
- else
- {
- iRDebugLogger->Log( _L( "TestCase [%d] finished with verdict[%d]" ),
- iTestInfo.iTestCaseInfo.iCaseNumber,
- iResult.iTestResult.iResult );
-
- __TRACE( KInit, ( _L( " TestCase [%d] finished with verdict[%d]" ),
- iTestInfo.iTestCaseInfo.iCaseNumber,
- iResult.iTestResult.iResult ) );
- }
-
- break;
- case ETestCaseSuicided:
- {
- //Store current results because cancel operation overwrites it
- TInt currentTestResult = iResult.iTestResult.iResult;
- TInt currentExecutionResult = iResult.iCaseExecutionResultCode;
- iTestExecution.CancelAsyncRequest(ETestExecutionRunTestCase);
- // Update result to suicide
- switch(iStopExecutionType)
- {
- case EOk:
- iResult.iCaseExecutionResultType = TFullTestResult::ECaseExecuted;
- iResult.iTestResult.iResultDes = _L("Test case passed (StopExecution())");
- break;
- case EFail:
- iResult.iCaseExecutionResultType = TFullTestResult::ECaseExecuted;
- iResult.iTestResult.iResultDes = _L("Test case failed (StopExecution())");
- break;
- default: //EAbort
- iResult.iCaseExecutionResultType = TFullTestResult::ECaseSuicided;
- iResult.iTestResult.iResultDes = _L("Test case killed (StopExecution())");
- }
- iResult.iTestResult.iResult = currentTestResult;
- iResult.iCaseExecutionResultCode = currentExecutionResult;
- }
- if(iTestReport)
- {
- iTestReport->AddTestCaseResultL(iTestInfo, iResult, KErrNone);
- }
-
- // Log some message
- if(iTestInfo.iTestCaseInfo.iTitle.Length() > 0)
- {
- _LIT(KTestCaseDesc, "TestCase [%S] finished with verdict [%d]");
- switch(iStopExecutionType)
- {
- case EOk:
- {
- _LIT(KTestCaseResult, "***Testcase PASSED***");
-
- iRDebugLogger->Log(KTestCaseResult);
- __TRACE(KInit, (KTestCaseResult));
- iRDebugLogger->Log(KTestCaseDesc, &iTestInfo.iTestCaseInfo.iTitle, iResult.iTestResult.iResult);
- __TRACE(KInit, (KTestCaseDesc, &iTestInfo.iTestCaseInfo.iTitle, iResult.iTestResult.iResult));
- break;
- }
- case EFail:
- {
- _LIT(KTestCaseResult, "***Testcase FAILED***");
-
- iRDebugLogger->Log(KTestCaseResult);
- __TRACE(KInit, (KTestCaseResult));
- iRDebugLogger->Log(KTestCaseDesc, &iTestInfo.iTestCaseInfo.iTitle, iResult.iTestResult.iResult);
- __TRACE(KInit, (KTestCaseDesc, &iTestInfo.iTestCaseInfo.iTitle, iResult.iTestResult.iResult));
- break;
- }
- default: //EAbort
- {
- _LIT(KTestCaseResult, "***Testcase KILLED***");
-
- iRDebugLogger->Log(KTestCaseResult);
- __TRACE(KInit, (KTestCaseResult));
- iRDebugLogger->Log(KTestCaseDesc, &iTestInfo.iTestCaseInfo.iTitle, iResult.iTestResult.iResult);
- __TRACE(KInit, (KTestCaseDesc, &iTestInfo.iTestCaseInfo.iTitle, iResult.iTestResult.iResult));
- }
- }
- }
- else
- {
- _LIT(KTestCaseDesc, "TestCase [%d] finished with verdict [%d]");
- switch(iStopExecutionType)
- {
- case EOk:
- {
- _LIT(KTestCaseResult, "***Testcase PASSED***");
-
- iRDebugLogger->Log(KTestCaseResult);
- __TRACE(KInit, (KTestCaseResult));
- iRDebugLogger->Log(KTestCaseDesc, iTestInfo.iTestCaseInfo.iCaseNumber, iResult.iTestResult.iResult);
- __TRACE(KInit, (KTestCaseDesc, iTestInfo.iTestCaseInfo.iCaseNumber, iResult.iTestResult.iResult));
- break;
- }
- case EFail:
- {
- _LIT(KTestCaseResult, "***Testcase FAILED***");
-
- iRDebugLogger->Log(KTestCaseResult);
- __TRACE(KInit, (KTestCaseResult));
- iRDebugLogger->Log(KTestCaseDesc, iTestInfo.iTestCaseInfo.iCaseNumber, iResult.iTestResult.iResult);
- __TRACE(KInit, (KTestCaseDesc, iTestInfo.iTestCaseInfo.iCaseNumber, iResult.iTestResult.iResult));
- break;
- }
- default: //EAbort
- {
- _LIT(KTestCaseResult, "***Testcase KILLED***");
-
- iRDebugLogger->Log(KTestCaseResult);
- __TRACE(KInit, (KTestCaseResult));
- iRDebugLogger->Log(KTestCaseDesc, iTestInfo.iTestCaseInfo.iCaseNumber, iResult.iTestResult.iResult);
- __TRACE(KInit, (KTestCaseDesc, iTestInfo.iTestCaseInfo.iCaseNumber, iResult.iTestResult.iResult));
- }
- }
- }
- break;
- case ETestCaseIdle:
- case ETestCaseCompleted:
- default:
- // DoCancel called in wrong state => Panic
- _LIT( KTestCaseController, "CTestCaseController" );
- User::Panic( KTestCaseController, EDoCancelDisorder );
- break;
- }
-
- // Write result and complete
- TRAPD( ret, iMessage.WriteL( 0, iResultPckg ) );
-
- iMessage.Complete( ret );
-
- iState = ETestCaseCompleted;
-
- // Generate xml result log
- GenerateXmlLogL();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- 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 CTestCaseController::RunError( TInt aError )
- {
- __TRACE( KError, ( CStifLogger::ERed,
- _L( "CTestCaseController::RunError: Test case execution has failed! aError=[%d]" ), aError ) );
- TInt completionError = aError;
-
- // Write result, because it could include descriptive result for
- // failed case
- TRAPD( err, iMessage.WriteL( 0, iResultPckg ); );
-
- if ( err != KErrNone )
- {
- completionError = err;
- }
-
- // Complete message with error
- iMessage.Complete( completionError );
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: GenerateXmlLogL
-
- Description: Generate XML log.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestCaseController::GenerateXmlLogL()
- {
-
- // Report result with AtsLogger
- iAtsLogger.BeginTestCaseReportL( iTestInfo.iTestCaseInfo.iTitle,
- KErrNone, // Expected result not supported
- iResult.iStartTime );
-
- if( iResult.iCaseExecutionResultCode != KErrNone )
- {
- iAtsLogger.SetTestCaseResultL( iResult.iCaseExecutionResultCode );
- iAtsLogger.TestCaseFailed();
- if( iResult.iTestResult.iResultDes.Length() > 0 )
- {
- iAtsLogger.ErrorL( iResult.iTestResult.iResultDes );
- }
- }
- else
- {
- iAtsLogger.SetTestCaseResultL( iResult.iTestResult.iResult );
- if( iResult.iTestResult.iResult == KErrNone )
- {
- iAtsLogger.TestCasePassed();
- }
- else
- {
- iAtsLogger.TestCaseFailed();
- if( iResult.iTestResult.iResultDes.Length() > 0 )
- {
- iAtsLogger.ErrorL( iResult.iTestResult.iResultDes );
- }
- }
- }
- // Set test case result to ATS Logger
- iAtsLogger.EndTestCaseL();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: GetTestCaseInfo
-
- Description: Get testcase info(test module, config file, test case, etc).
-
- Parameters: TTestInfo& aTestInfo: inout: Test information
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestCaseController::GetTestCaseInfo( TTestInfo& aTestInfo )
- {
- aTestInfo = iTestInfo;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCaseController
-
- Method: Suicide
-
- Description: Cancels active request.
-
- Parameters: aCode: the reason of suicide
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestCaseController::Suicide(TStopExecutionType aType, TInt aCode)
- {
- if(iState == ETestCaseRunning)
- {
- iStopExecutionType = aType;
- switch(iStopExecutionType)
- {
- case EOk:
- iResult.iTestResult.iResult = KErrNone;
- iResult.iCaseExecutionResultCode = KErrNone;
- break;
- case EFail:
- iResult.iTestResult.iResult = aCode;
- iResult.iCaseExecutionResultCode = KErrNone;
- break;
- default: //EAbort
- iResult.iTestResult.iResult = aCode;
- iResult.iCaseExecutionResultCode = aCode;
- }
- iState = ETestCaseSuicided;
- Cancel();
- }
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CTestProgressNotifier class member
- functions.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: CTestProgressNotifier
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestProgressNotifier::CTestProgressNotifier( CTestEngine* aEngine,
- RTestExecution aTestExecution ) :
- CActive( CActive::EPriorityStandard ),
- iEngine( aEngine ),
- iTestExecution( aTestExecution ),
- iState( ETestProgressIdle ),
- iProgressPckg( iProgress )
- {
- CActiveScheduler::Add( this );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestProgressNotifier::ConstructL()
- {
- __TRACE( KVerbose, ( _L( "CTestProgressNotifier::ConstructL" ) ) );
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- RTestExecution aTestExecution: in: Handle to RTestExecution
-
- Return Values: CTestProgressNotifier* : pointer to created object
-
- Errors/Exceptions: Leaves if construction of CTestProgressNotifier fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestProgressNotifier* CTestProgressNotifier::NewL( CTestEngine* aEngine,
- RTestExecution aTestExecution )
- {
- CTestProgressNotifier* self = new ( ELeave ) CTestProgressNotifier(
- aEngine, aTestExecution );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: ~CTestProgressNotifier
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestProgressNotifier::~CTestProgressNotifier()
- {
- __TRACE( KVerbose, ( _L( "CTestProgressNotifier::~CTestProgressNotifier" ) ) );
- Cancel();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: StartL
-
- Description: Start active object
-
- Parameters: const RMessage& aMessage: in: Server message
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestProgressNotifier::StartL( const RMessage2& aMessage )
- {
- __TRACE( KVerbose, ( _L( "CTestProgressNotifier::StartL" ) ) );
- // Check that this request is not pending!!
- __ASSERT_ALWAYS( iState != ETestProgressPending,
- iEngine->PanicClient( EReqPending, aMessage ) );
- iMessage = aMessage;
-
- iState = ETestProgressPending;
- SetActive();
-
- iTestExecution.NotifyProgress( iProgressPckg, iStatus );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: RunL
-
- Description: RunL handles completed requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if WriteL leaves
- Leaves if iStatus is not KErrNone or KErrEof
- Leaves are handled in RunError method
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestProgressNotifier::RunL()
- {
- __TRACE( KVerbose, (_L("CTestProgressNotifier::RunL: iStatus=[%d]" ), iStatus.Int() ));
-
- iState = ETestProgressCompleted;
-
- // Check that request was successful or completed with acceptable error
- // KErrEof is acceptable error and it means that the test case will not
- // send progresses anymore (because it is closed)
- if ( KErrNone == iStatus.Int() )
- {
- iMessage.WriteL( 0, iProgressPckg );
- }
- else if ( KErrEof != iStatus.Int() )
- {
- // Leave, error will be handled in RunError
- User::Leave( iStatus.Int() );
- }
-
- // Complete message
- iMessage.Complete( iStatus.Int() );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: DoCancel
-
- Description: Cancel active request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestProgressNotifier::DoCancel()
- {
- switch ( iState )
- {
- case ETestProgressPending:
- iTestExecution.CancelAsyncRequest( ETestExecutionNotifyProgress );
- iMessage.Complete( KErrCancel );
- break;
- case ETestProgressIdle:
- case ETestProgressCompleted:
- default:
- // DoCancel called in wrong state => Panic
- _LIT( KTestProgressNotifier, "CTestProgressNotifier" );
- User::Panic( KTestProgressNotifier, EDoCancelDisorder );
- break;
- }
- iState = ETestProgressIdle;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- 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 CTestProgressNotifier::RunError( TInt aError )
- {
- // Complete message with error
- iMessage.Complete( aError );
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CTestEventNotifier class member
- functions.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: CTestEventNotifier
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- RTestExecution aTestExecution: in: Handle to RTestExecution
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotifier::CTestEventNotifier( CTestEngine* aEngine,
- RTestExecution aTestExecution ) :
- CActive( CActive::EPriorityStandard ),
- iEngine( aEngine ),
- iTestExecution( aTestExecution ),
- iState( ETestEventIdle ),
- iEventPckg( iEvent ),
- iEventNotifyPckg( iEventNotify ),
- iController( NULL )
- {
- CActiveScheduler::Add( this );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestEventNotifier::ConstructL( )
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier::ConstructL" ) ) );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- RTestExecution aTestExecution: in: Handle to RTestExecution
-
- Return Values: CTestEventNotifier* : pointer to created object
-
- Errors/Exceptions: Leaves if construction of CTestEventNotifier fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotifier* CTestEventNotifier::NewL( CTestEngine* aEngine,
- RTestExecution aTestExecution )
- {
- CTestEventNotifier* self = new ( ELeave ) CTestEventNotifier(
- aEngine, aTestExecution );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: ~CTestEventNotifier
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotifier::~CTestEventNotifier()
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier::~CTestEventNotifier" ) ) );
- Cancel();
- iEventArray.ResetAndDestroy();
- iEventArray.Close();
- delete iController;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: StartL
-
- Description: Start active object
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestEventNotifier::Start()
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier::StartL" ) ) );
- // Check that this request is not pending!!
- __ASSERT_ALWAYS( iState != ETestEventPending,
- User::Leave( KErrAlreadyExists ) );
-
- iEvent.SetType( TEventIf::EEnable );
- iState = ETestEventPending;
- iTestExecution.NotifyEvent( iEventPckg, iStatus );
- SetActive();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: RunL
-
- Description: RunL handles completed requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if iStatus is not KErrNone
- Leaves if iState is not ETestEventPending
- Leaves if some leaving method called here leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestEventNotifier::RunL()
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier::RunL: iStatus=[%d]" ), iStatus.Int() ) );
-
- User::LeaveIfError( iStatus.Int() );
-
- switch( iState )
- {
- case ETestEventPending:
- {
- iState = ETestEventCompleted;
-
- switch( iEvent.Type() )
- {
- case TEventIf::EReqEvent:
- {
- __RDEBUG( ( _L("CTestEventNotifier(ReqEvent) %S"),
- &iEvent.Name() ));
- if( iEngine->IsStateEventAndSet( iEvent.Name() ) )
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier::RunL: Requested Global event already set" ) ) );
- TEventIf event( TEventIf::ESetEvent, iEvent.Name(),
- TEventIf::EState );
- TEventIfPckg eventPckg( event );
- TRequestStatus status;
- iTestExecution.NotifyEvent( eventPckg, status );
- User::WaitForRequest( status );
- }
- //add to iEventArray
- HBufC* name = iEvent.Name().AllocLC();
- if( iEventArray.Append( name ) != KErrNone )
- {
- User::Leave( KErrNoMemory );
- }
- CleanupStack::Pop( name );
- }
- break;
- case TEventIf::ERelEvent:
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier(RelEvent) %S" ), &iEvent.Name() ) );
- //remove from iEventArray
- TInt count = iEventArray.Count();
- const TDesC& eventName = iEvent.Name();
- TInt i;
- for( i = 0; i < count; i++ )
- {
- TPtrC name = iEventArray[i]->Des();
- if( name == eventName )
- {
- HBufC* tmp = iEventArray[i];
- iEventArray.Remove( i );
- delete tmp;
- break;
- }
- }
- // Check that event was found
- if( i == count )
- {
- User::Leave( KErrGeneral );
- }
- }
- break;
- case TEventIf::ESetEvent:
- {
- __RDEBUG( ( _L("CTestEventNotifier(SetEvent) %S"),
- &iEvent.Name() ));
- iController = iEngine->CtlEventL( iEvent, iStatus );
- SetActive();
- return;
- }
- case TEventIf::EUnsetEvent:
- {
- __RDEBUG( ( _L("CTestEventNotifier(UnsetEvent) %S"),
- &iEvent.Name() ));
- iController = iEngine->CtlEventL( iEvent, iStatus );
- SetActive();
- return;
- }
- default:
- {
- User::Leave( KErrGeneral );
- }
- }
- // Set request again
- Start();
- // Otherwise request is enabled again later
- }
- break;
- case ETestEventCompleted:
- __RDEBUG( ( _L("CTestEventNotifier(Complete)")));
- Start();
- break;
- default:
- User::Leave( KErrGeneral );
- break;
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: DoCancel
-
- Description: Cancel active request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestEventNotifier::DoCancel()
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier::DoCancel" ) ) );
-
- switch ( iState )
- {
- case ETestEventPending:
- iTestExecution.CancelAsyncRequest( ETestExecutionNotifyEvent );
- break;
- case ETestEventCompleted:
- delete iController;
- iController = NULL;
- break;
- default:
- // DoCancel called in wrong state => Panic
- _LIT( KTestEventNotifier, "CTestEventNotifier" );
- User::Panic( KTestEventNotifier, EDoCancelDisorder );
- break;
- }
-
- iState = ETestEventIdle;
- iEventArray.ResetAndDestroy();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- 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 CTestEventNotifier::RunError( TInt aError )
- {
- switch ( iState )
- {
- case ETestEventPending:
- if( aError != KErrCancel )
- {
- __TRACE( KError, ( CStifLogger::ERed, _L( "CTestEventNotifier::RunError %d"), aError) );
- }
- else
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier stopped")) );
- }
-
- // We stop event notifier if we get error here
- // Clear requested event list
- iEventArray.ResetAndDestroy();
- break;
- case ETestEventCompleted:
- // Do not close here
- __TRACE( KError, ( CStifLogger::ERed, _L( "CTestEventNotifier::RunError %d"), aError) );
- delete iController;
- iController = NULL;
- // forward error to testcase
- iEvent.SetType( TEventIf::EEnable );
- iState = ETestEventPending;
- iTestExecution.NotifyEvent( iEventPckg, iStatus, aError );
- SetActive();
- break;
- default:
- __TRACE( KError, ( CStifLogger::ERed, _L( "CTestEventNotifier::RunError %d"), aError) );
- // DoCancel called in wrong state => Panic
- _LIT( KTestEventNotifier, "CTestEventNotifier" );
- User::Panic( KTestEventNotifier, EDoCancelDisorder );
- break;
- }
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: CtlEventL
-
- Description: Controls events
-
- Parameters: const TEventIf& aEvent: in: Event
- TRequestStatus& aStatus: in: Request status
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestEventNotifier::CtlEvent( const TEventIf& aEvent,
- TRequestStatus& aStatus )
- {
- __TRACE( KVerbose, ( _L( "CTestEventNotifier::CtlEventL" ) ) );
- const TDesC& eventName = aEvent.Name();
- TInt count = iEventArray.Count();
- for( TInt i = 0; i < count; i++ )
- {
- TPtrC name = iEventArray[i]->Des();
- if( name == eventName )
- {
- iEventNotify.Copy( aEvent );
- iTestExecution.NotifyEvent( iEventNotifyPckg, aStatus );
- return;
- }
- }
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: CheckCtlEventL
-
- Description: Checks if CtlEvent should be called
-
- Parameters: const TEventIf& aEvent: in: Event
-
- Return Values: ETrue: If CtlEvent sould be called.
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TBool CTestEventNotifier::CheckCtlEvent( const TEventIf& aEvent )
- {
- const TDesC& eventName = aEvent.Name();
- TInt count = iEventArray.Count();
- for( TInt i = 0; i < count; i++ )
- {
- TPtrC name = iEventArray[i]->Des();
- if( name == eventName )
- {
- return ETrue;
- }
- }
-
- return EFalse;
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CTestEventController class member
- functions.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: CTestEventController
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- const TEventIf& aEvent: in: Event
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestEventController::CTestEventController( CTestEngine* aEngine,
- const TEventIf& aEvent ) :
- iEngine( aEngine ),
- iRequestStatus( NULL ),
- iEventPckg( iEvent ),
- iActiveEventCmds( 0 )
- {
- iEvent.Copy( aEvent );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: TRequestStatus* aStatus: in: Request status
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestEventController::ConstructL( TRequestStatus* aStatus )
- {
- iEngine->Logger()->Log( _L( "CTestEventController::ConstructL" ) );
-
- if( CheckEventsL() == 0 )
- {
- // No request was pending, complete immediately
- User::RequestComplete( aStatus, KErrNone );
- }
- else
- {
- iRequestStatus = aStatus;
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: RMessage& aMessage: inout: Message to be handled
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestEventController::ConstructL( RMessage2& aMessage )
- {
- iEngine->Logger()->Log( _L( "CTestEventController::ConstructL" ) );
-
- if( CheckEventsL() == 0 )
- {
- // No request was pending, complete immediately
- aMessage.Complete( KErrNone );
- }
- else
- {
- iMessage = aMessage;
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- const TEventIf& aEvent: in: Event
- TRequestStatus* aStatus: in: Request status
-
- Return Values: CTestEventController* : pointer to created object
-
- Errors/Exceptions: Leaves if construction of CTestEventController fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-
-CTestEventController* CTestEventController::NewL( CTestEngine* aEngine,
- const TEventIf& aEvent,
- TRequestStatus* aStatus )
- {
- CTestEventController* self =
- new ( ELeave )CTestEventController( aEngine, aEvent );
- CleanupStack::PushL( self );
- self->ConstructL( aStatus );
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- const TEventIf& aEvent: in: Event
- RMessage& aMessage: inout: Message to be handled
-
- Return Values: CTestEventController* : pointer to created object
-
- Errors/Exceptions: Leaves if construction of CTestEventController fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestEventController* CTestEventController::NewL( CTestEngine* aEngine,
- const TEventIf& aEvent,
- RMessage2& aMessage )
- {
- CTestEventController* self =
- new ( ELeave )CTestEventController( aEngine, aEvent );
- CleanupStack::PushL( self );
- self->ConstructL( aMessage );
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: ~CTestEventController
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-CTestEventController::~CTestEventController()
- {
- if( iEngine != NULL )
- {
- if( iEngine->Logger() != NULL )
- {
- iEngine->Logger()->Log( _L( "CTestEventController::~CTestEventController" ) );
- }
- }
-
- if( iRequestStatus )
- {
- // Must be completed if pending, otherwise
- // CTestEventNotifier::DoCancel blocks
- User::RequestComplete( iRequestStatus, KErrCancel );
- }
-
- iEventCallBacks.ResetAndDestroy();
- iEventCallBacks.Close();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: CheckEventsL
-
- Description: Check all events.
-
- Parameters: None
-
- Return Values: TInt: Active event commands
-
- Errors/Exceptions: Leaves if CtlEventL leaves
- Leaves if memory allocation fails
- Leaves if unset event not found from pending
- state event list
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestEventController::CheckEventsL()
- {
- iEngine->Logger()->Log( _L( "CTestEventController::CheckEventsL" ) );
-
- iActiveEventCmds += CheckClientEventsL();
- iActiveEventCmds += CheckTestcaseEventsL();
-
- return iActiveEventCmds;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: CheckClientEventsL
-
- Description: Check client events.
-
- Parameters: None
-
- Return Values: TInt: Request of pending
-
- Errors/Exceptions: Leaves if CtlEventL leaves
- Leaves if memory allocation fails
- Leaves if unset event not found from pending
- state event list
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestEventController::CheckClientEventsL()
- {
- iEngine->Logger()->Log( _L( "CTestEventController::CheckClientEventsL" ) );
- TInt reqPending = 0;
-
- // Check client event requests
- TInt count = iEngine->ClientEvents().Count();
- for( TInt index = 0; index < count; index++ )
- {
- if( iEngine->ClientEvents()[index]->Name() == iEvent.Name() )
- {
- TEventMsg* event = iEngine->ClientEvents()[index];
- if( iEvent.Type() == TEventIf::ESetEvent )
- {
- // Set found event
- event->Set( iEvent.EventType() );
- }
- else if( iEvent.Type() == TEventIf::EUnsetEvent )
- {
- // Unset found event
- // Create callback for change notifier
- TCallBack callBack( EventCallBack, this );
- CCallBack* eventCallBack = new (ELeave)CCallBack( callBack,
- CActive::EPriorityHigh );
- CleanupStack::PushL( eventCallBack );
-
- event->Unset( eventCallBack->Status() );
- reqPending++;
- eventCallBack->SetActive();
- User::LeaveIfError( iEventCallBacks.Append( eventCallBack ) );
- CleanupStack::Pop( eventCallBack );
- }
- break;
- }
- }
-
- return reqPending;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: CheckTestcaseEventsL
-
- Description: Check testcase events.
-
- Parameters: None
-
- Return Values: TInt: Request of pending
-
- Errors/Exceptions: Leaves if CtlEventL leaves
- Leaves if memory allocation fails
- Leaves if unset event not found from pending
- state event list
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestEventController::CheckTestcaseEventsL()
- {
- TInt reqPending = 0;
- TCallBack callBack( EventCallBack, this );
- CCallBack* eventCallBack = NULL;
-
- // Then check testcase event requests
- TInt count = iEngine->TestCaseArray().Count();
- eventCallBack = new (ELeave)CCallBack( callBack,
- CActive::EPriorityHigh );
- CleanupStack::PushL( eventCallBack );
- for ( TInt index = 0; index < count; index++ )
- {
-
- if( iEngine->TestCaseArray()[index]->CheckCtlEvent( iEvent ))
- {
- reqPending++;
- eventCallBack->SetActive();
- iEngine->TestCaseArray()[index]->CtlEvent( iEvent,
- eventCallBack->Status() );
- User::LeaveIfError( iEventCallBacks.Append( eventCallBack ) );
- CleanupStack::Pop( eventCallBack );
- eventCallBack = new (ELeave)CCallBack( callBack,
- CActive::EPriorityHigh );
- CleanupStack::PushL( eventCallBack );
- }
- }
- CleanupStack::PopAndDestroy( eventCallBack );
- return reqPending;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: EventComplete
-
- Description: EventComplete handles completed event requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions:
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestEventController::EventComplete()
- {
- iEngine->Logger()->Log( _L( "CTestEventController::EventComplete" ));
-
- iActiveEventCmds--;
-
- if( iActiveEventCmds == 0 )
- {
- TInt error = KErrNone;
- TInt count = iEventCallBacks.Count();
- for( TInt i=0; i<count; i++ )
- {
- if( iEventCallBacks[i]->iStatus.Int() != KErrNone )
- {
- error = iEventCallBacks[i]->iStatus.Int();
- break;
- }
- }
- iEventCallBacks.ResetAndDestroy();
-
- // All event commands are completed
- if( iRequestStatus )
- {
- User::RequestComplete( iRequestStatus, error );
- }
- else
- {
- // No request was pending, complete immediately
- iMessage.Complete( error );
- }
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventController
-
- Method: EventCallBack
-
- Description: static EventCallBack handles completed event requests.
-
- Parameters: TAny* aTestEventController: in: Test event controller
-
- Return Values: TInt: returns KErrNone
-
- Errors/Exceptions:None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestEventController::EventCallBack( TAny* aTestEventController )
- {
- CTestEventController* controller =
- (CTestEventController*) aTestEventController;
- controller->EventComplete();
- return KErrNone;
-
- }
-
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CTestRemoteCmdNotifier class member
- functions.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: CTestRemoteCmdNotifier
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-CTestRemoteCmdNotifier::CTestRemoteCmdNotifier( CTestEngine* aEngine,
- RTestExecution aTestExecution,
- CTestCaseController* aTestCaseController,
- CAtsLogger& aAtsLogger ) :
- CActive( CActive::EPriorityStandard ),
- iEngine( aEngine ),
- iTestExecution( aTestExecution ),
- iState( ETestProgressIdle ),
- iRemoteTypePckg( iRemoteType ),
- iMsgSizePckg( iMsgSize ),
- iTestCaseController( aTestCaseController ),
- iAtsLogger( aAtsLogger )
- {
- CActiveScheduler::Add( this );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestRemoteCmdNotifier::ConstructL( )
- {
- __TRACE( KVerbose, ( _L( "CTestRemoteCmdNotifier::ConstructL" ) ) );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- RTestExecution aTestExecution: in: Handle to RTestExecution
-
- Return Values: CTestRemoteCmdNotifier* : pointer to created object
-
- Errors/Exceptions: Leaves if construction of CTestRemoteCmdNotifier fails
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-CTestRemoteCmdNotifier* CTestRemoteCmdNotifier::NewL( CTestEngine* aEngine,
- RTestExecution aTestExecution,
- CTestCaseController* aTestCaseController,
- CAtsLogger& aAtsLogger )
- {
- CTestRemoteCmdNotifier* self = new ( ELeave ) CTestRemoteCmdNotifier(
- aEngine, aTestExecution, aTestCaseController, aAtsLogger );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: ~CTestRemoteCmdNotifier
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-CTestRemoteCmdNotifier::~CTestRemoteCmdNotifier()
- {
- __TRACE( KVerbose, ( _L( "CTestRemoteCmdNotifier::~CTestRemoteCmdNotifier" ) ) );
- Cancel();
-
- delete iReceivedMsg;
- iReceivedMsg = 0;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: EnableReceive
-
- Description: Prepare to start active object
-
- Parameters: const RMessage& aMessage: in: Server message
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestRemoteCmdNotifier::EnableReceive( const RMessage2& aMessage )
- {
- __TRACE( KVerbose, ( _L( "CTestRemoteCmdNotifier::EnableReceive" ) ) );
-
- iMessage = aMessage;
- iMessageAvail = ETrue;
-
- Start( aMessage );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: GetReceivedMsg
-
- Description: Read received message
-
- Parameters: const RMessage& aMessage: in: Server message
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestRemoteCmdNotifier::GetReceivedMsg( const RMessage2& aMessage )
- {
- __TRACE( KVerbose, ( _L( "CTestRemoteCmdNotifier::GetReceivedMsg" ) ) );
-
- TInt ret = KErrNone;
- if( iReceivedMsg )
- {
- TRAP( ret, aMessage.WriteL( 0, iReceivedMsg->Des() ) );
- delete iReceivedMsg;
- iReceivedMsg = 0;
- }
- else
- {
- ret = KErrNotFound;
- }
-
- // Complete message
- aMessage.Complete( ret );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: StartL
-
- Description: Start active object
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestRemoteCmdNotifier::Start( const RMessage2& aMessage )
- {
- // Check that this request is not pending!!
- __ASSERT_ALWAYS( iState != ETestProgressPending,
- iEngine->PanicClient( EReqPending, aMessage ) );
- iState = ETestProgressPending;
- SetActive();
- // Start first phase of the remote command's operations
- iTestExecution.NotifyRemoteCmd( iRemoteTypePckg,
- iMsgSizePckg,
- iStatus );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: CancelReq
-
- Description: Cancel the request.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestRemoteCmdNotifier::CancelReq()
- {
- if(iMessageAvail)
- {
- iMessageAvail = EFalse;
- iMessage.Complete( KErrCancel );
- }
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: RunL
-
- Description: RunL handles completed requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if WriteL leaves
- Leaves if iStatus is not KErrNone or KErrEof
- Leaves are handled in RunError method
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestRemoteCmdNotifier::RunL()
- {
- __TRACE( KVerbose, ( _L( "CTestRemoteCmdNotifier::StartL: iStatus=[%d]" ), iStatus.Int() ) );
-
- User::LeaveIfError( iStatus.Int() );
-
- iState = ETestProgressCompleted;
-
- TInt ret( 0 );
- switch( iRemoteType )
- {
- case EStifCmdSend: // "Sending"
- {
- if( ( iMessageAvail == EFalse ) ||
- ( iMsgSize <= 0 ) )
- {
- User::Leave( KErrGeneral );
- }
- // Delete previous if exists
- delete iReceivedMsg;
- iReceivedMsg = 0;
- // Create new buffer
- iReceivedMsg = HBufC8::NewL( iMsgSize );
-
- // Start second phase of the remote command's operations,
- // buffer is read with GetReceivedMsg
- TPtr8 tmp = iReceivedMsg->Des();
- ret = iTestExecution.ReadRemoteCmdInfo( tmp, iRemoteType );
-
- // Writing received info to UI
- iMessage.WriteL( 0, iRemoteTypePckg );
- iMessage.WriteL( 1, iMsgSizePckg );
-
- // Complete message
- iMessage.Complete( ret );
- iMessageAvail = EFalse;
-
- break;
- }
- case EStifCmdReboot: // "Sending"
- {
- TRebootParams remoteType;
- TRebootParamsPckg remoteTypePckg( remoteType );
- // Start second phase of the remote command's operations
- ret = iTestExecution.ReadRemoteCmdInfo( remoteTypePckg, iRemoteType );
- __TRACE( KInit, ( CStifLogger::ERed, _L("REBOOT PHONE (type %d)" ), remoteType.aType ) );
-
- if( remoteType.aType == CTestModuleIf::EKernelReset )
- {
- __TRACE( KInit, ( _L("Rebooting with kernel reset" ) ) );
- __TRACE( KInit, ( _L("Kernel reset implementation is ongoing, trying different reset..." ) ) );
- }
-
-#ifdef __WINS__
- __TRACE( KInit, ( _L("Rebooting with Process kill(WINS)" ) ) );
- RProcess thisProcess;
- //thisProcess.SetSystem( ETrue );
- thisProcess.Kill( KErrNone );
- thisProcess.Close();
-#else // Hardware specific
- TInt r( KErrNone );
- __TRACE( KInit, ( _L("Rebooting with reset module(HW)" ) ) );
- r = DynamicResetModule( remoteType.aType );
- if( r != KErrNone )
- {
- __TRACE( KInit, ( CStifLogger::EError, _L("This reseting type is failed, trying different reset...")) );
- }
-#endif // Hardware specific
-
- // if( !remoteType.aType == CTestModuleIf::EDefaultReset )
- // Note this change needs an error code tranceiver between reboot
- // module and engine. (If reboot fails return error code, if reboot
- // is default then kill process else error code returning)
-
- // Do process kill as a last option
- __TRACE( KInit, ( _L("Rebooting with Process kill" ) ) );
-
- RProcess thisProcess2;
- thisProcess2.Kill( KErrNone );
- thisProcess2.Close();
-
- // If this text is shown in UI something is wrong and this needs some investigation.
- iEngine->ErrorPrint( 0, _L( "Reboot phone...E.g. disconnect battery!!!" ) );
- break;
- }
- case EStifCmdStoreState: // "Sending"
- {
- if( iMessageAvail == EFalse )
- {
- User::Leave( KErrGeneral );
- }
- TRebootStateParams remoteState;
- TRebootStateParamsPckg remoteStatePckg( remoteState );
-
- // Start second phase of the remote command's operations
- ret = iTestExecution.ReadRemoteCmdInfo( remoteStatePckg,
- iRemoteType );
-
- // Get test case information(test module, test case file, etc.)
- TTestInfo testInfo;
- iTestCaseController->GetTestCaseInfo( testInfo );
-
- // Write state informations to the file
- iEngine->WriteRebootParams( testInfo, remoteState.aCode,
- remoteState.aName );
-
- // Write ATS loggers buffers to drive
- iEngine->FlushAtsLogger();
-
- // Pause test cases that there cannot make e.g. new store state
- // calls. iCaseNumber is index type value so increment by one to
- // get current test case.
- iEngine->PauseAllTestCases();
- // Resume current test case
- iTestCaseController->iTestExecution.Resume();
-
- // Writing received info to UI
- iMessage.WriteL( 0, iRemoteTypePckg );
-
- // Complete message
- iMessage.Complete( ret );
- iMessageAvail = EFalse;
- break;
- }
- case EStifCmdGetStoredState: // "Reading, this must be done with two phase"
- {
- // Get test case information(test module, test case file, etc.)
- TTestInfo testInfo;
- iTestCaseController->GetTestCaseInfo( testInfo );
-
- TGetRebootStoredParams remoteStoredState;
- // Read state informations from the file
- TInt errorCodeToClient =
- iEngine->ReadRebootParams( testInfo,
- remoteStoredState.aName,
- remoteStoredState.aCode );
-
- TGetRebootStoredParamsPckg remoteStoredPckg( remoteStoredState );
-
- // Start second phase of the remote command's operations
- ret = iTestExecution.ReadRemoteCmdInfo( remoteStoredPckg,
- iRemoteType,
- errorCodeToClient );
-
- Start( iMessage ); // Starts active object
-
- break;
- }
- case EStifCmdMeasurement: // "Reading, this must be done with two phase"
- {
- TGetMeasurementOptions remoteMeasurementOptions;
- remoteMeasurementOptions.iOptions = iEngine->StifMeasurement();
-
- TGetMeasurementOptionsPckg remoteMeasurementPckg( remoteMeasurementOptions );
-
- // Start second phase of the remote command's operations
- ret = iTestExecution.ReadRemoteCmdInfo( remoteMeasurementPckg,
- iRemoteType,
- KErrNone );
-
- Start( iMessage ); // Starts active object
-
- break;
- }
-
- case EStifCmdReceive: // "Reading"
- default:
- User::Leave( KErrNotFound );
- break;
- }
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: DoCancel
-
- Description: Cancel active request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Draft
-
--------------------------------------------------------------------------------
-*/
-void CTestRemoteCmdNotifier::DoCancel()
- {
- switch ( iState )
- {
- case ETestProgressPending:
- iTestExecution.CancelAsyncRequest( ETestExecutionNotifyRemoteCmd );
- //iMessage.Complete( KErrCancel );
- break;
- case ETestProgressIdle:
- case ETestProgressCompleted:
- default:
- // DoCancel called in wrong state => Panic
- _LIT( KTestRemoteCmdNotifier, "CTestRemoteCmdNotifier" );
- User::Panic( KTestRemoteCmdNotifier, EDoCancelDisorder );
- break;
- }
- iState = ETestProgressIdle;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- 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: Draft
-
--------------------------------------------------------------------------------
-*/
-TInt CTestRemoteCmdNotifier::RunError( TInt aError )
- {
- // Complete message with error
- if(iMessageAvail)
- {
- iMessageAvail = EFalse;
- iMessage.Complete( aError );
- }
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestRemoteCmdNotifier
-
- Method: ResetL
-
- Description: Reset HW/WINS. Loads dynamically reset module by name.
-
- Parameters: CTestModuleIf::TRebootType aResetType: in: Reset type
-
- Return Values: TInt: Symbian error code.
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CTestRemoteCmdNotifier::DynamicResetModule(
- CTestModuleIf::TRebootType aResetType )
- {
- __TRACE( KInit, ( _L( "DynamicResetModule()" ) ) );
- RLibrary resetModule;
- // Load the module
- TPtrC dllName;
- dllName.Set( iEngine->GetDeviceResetDllName() );
- // Loading should work with and without '.dll' extension.
- TInt r = resetModule.Load( dllName );
- if ( r != KErrNone )
- {
- __TRACE( KError, ( CStifLogger::EError, _L("Can't initialize reset module[%S], code = %d"), &dllName, r ) );
- return KErrNotFound;
- }
- else
- {
- // Print reset module name
- __TRACE( KInit, ( _L("Loaded reset module[%S]"), &dllName ) );
- }
-
-
-
- // Get pointer to first exported function
- CTestInterfaceFactory libEntry;
- libEntry = (CTestInterfaceFactory) resetModule.Lookup( 1 );
- if ( libEntry == NULL )
- {
- // New instance can't be created
- __TRACE ( KError, ( CStifLogger::EError, _L("Can't initialize reset module, NULL libEntry" ) ) );
- return KErrNoMemory;
- }
- else
- {
- __TRACE ( KInit, ( _L("Pointer to 1st exported received")));
- }
-
- CStifHWReset* reset;
- reset = NULL;
-
- // initialize test module
- __TRACE ( KVerbose, (_L("Calling 1st exported at 0x%x"), (TUint32) libEntry ));
- TRAPD ( err, reset = (*libEntry)() );
-
- // Handle leave from test module
- if ( err != KErrNone )
- {
- __TRACE (KError, ( CStifLogger::EError, _L("Leave when calling 1st exported function, code %d"), err));
- return err;
- }
- else if ( reset == NULL ) // Handle NULL from test module init
- {
- __TRACE (KError, ( CStifLogger::EError, _L("NULL pointer received when constructing test module")));
- delete reset;
-
- // Set error codes
- return KErrNoMemory;
- }
- else
- {
- __TRACE (KInit, (_L("Entrypoint successfully called, test module instance at 0x%x"), (TUint32)reset ) );
- }
-
- // Calls dynamically loaded reset module's method.
- TInt ret = reset->DoReset( aResetType );
- if( ret != KErrNone )
- {
- __TRACE (KInit, (_L("DynamicResetModule; DoReset fails with error: %d"), ret ) );
- return ret;
- }
-
- return KErrNone;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CTestCommandNotifier class member
- functions.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: CTestCommandNotifier
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- RTestExecution aTestExecution: in: Handle to RTestExecution
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestCommandNotifier::CTestCommandNotifier(CTestEngine* aEngine,
- RTestExecution aTestExecution):
- CActive(CActive::EPriorityStandard),
- iEngine(aEngine),
- iTestExecution(aTestExecution),
- iCommandPckg(iCommand)
- {
- CActiveScheduler::Add(this);
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestCommandNotifier::ConstructL( )
- {
- __TRACE(KVerbose, (_L("CTestCommandNotifier::ConstructL")));
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestEngine* aEngine: in: Pointer to CTestEngine
- RTestExecution aTestExecution: in: Handle to RTestExecution
-
- Return Values: CTestCommandNotifier* : pointer to created object
-
- Errors/Exceptions: Leaves if construction of CTestCommandNotifier fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestCommandNotifier* CTestCommandNotifier::NewL(CTestEngine* aEngine,
- RTestExecution aTestExecution)
- {
- CTestCommandNotifier* self = new (ELeave) CTestCommandNotifier(aEngine, aTestExecution);
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: ~CTestCommandNotifier
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestCommandNotifier::~CTestCommandNotifier()
- {
- __TRACE(KVerbose, (_L("CTestEventNotifier::~CTestEventNotifier")));
- Cancel();
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: StartL
-
- Description: Start active object
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestCommandNotifier::Start()
- {
- __TRACE(KVerbose, (_L("CTestEventNotifier::StartL")));
-
- iTestExecution.NotifyCommand2(iCommandPckg, iParamsPckg, iStatus, KErrNone);
- SetActive();
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: RunL
-
- Description: RunL handles completed requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if iStatus is not KErrNone
- Leaves if iState is not ETestEventPending
- Leaves if some leaving method called here leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestCommandNotifier::RunL()
- {
- __TRACE(KVerbose, (_L("CTestCommandNotifier::RunL: iStatus=[%d]"), iStatus.Int()));
-
- User::LeaveIfError(iStatus.Int());
-
- iEngine->ExecuteCommandL(iCommand, iParamsPckg);
-
- // Set request again
- Start();
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: DoCancel
-
- Description: Cancel active request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestCommandNotifier::DoCancel()
- {
- __TRACE(KVerbose, (_L( "CTestEventNotifier::DoCancel")));
-
- iTestExecution.CancelAsyncRequest(ETestExecutionNotifyCommand);
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- 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 CTestCommandNotifier::RunError(TInt aError)
- {
- __TRACE(KError, (CStifLogger::ERed, _L("CTestCommandNotifier::RunError %d"), aError));
- return KErrNone;
- }
-
-
-// ================= OTHER EXPORTED FUNCTIONS =================================
-
-// None
-
-// End of File