--- a/stif/TestCombiner/src/TestCaseNotify.cpp Tue Jul 06 16:05:13 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1617 +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
-* CTestProgressNotifier class member functions.
-*
-*/
-
-// INCLUDE FILES
-#include "TestCombiner.h"
-#include "TestCase.h"
-#include "TestCaseNotify.h"
-#include "Logging.h"
-
-// EXTERNAL DATA STRUCTURES
-// None
-
-// EXTERNAL FUNCTION PROTOTYPES
-// None
-
-// CONSTANTS
-// None
-
-// MACROS
-#ifdef LOGGER
-#undef LOGGER
-#endif
-#define LOGGER iTestCombiner->iLog
-
-// LOCAL CONSTANTS AND MACROS
-// None
-
-// MODULE DATA STRUCTURES
-// None
-
-// LOCAL FUNCTION PROTOTYPES
-// None
-
-// FORWARD DECLARATIONS
-// None
-
-// ==================== LOCAL FUNCTIONS =======================================
-// None
-
-// ================= 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( CTestCombiner* aTestCombiner,
- CTCTestCase* aTestCase ) :
- CActive( CActive::EPriorityStandard ),
- iTestCombiner( aTestCombiner ),
- iTestCase( aTestCase ),
- iState( ETestProgressIdle ),
- iProgressPckg( iProgress ),
- iIsPrintProcessFinished( EFalse )
- {
- 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: Leaves if StartL leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestProgressNotifier::ConstructL()
- {
- StartL();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestCombiner* aTestCombiner: in: Backpointer to TestCombiner
- CTCTestCase* aTestCase: in: Pointer to used CTCTestCase
-
- Return Values: CTestProgressNotifier* : pointer to created object
-
- Errors/Exceptions: Leaves if ConstructL leaves or memory allocation fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestProgressNotifier* CTestProgressNotifier::NewL( CTestCombiner* aTestCombiner,
- CTCTestCase* aTestCase )
- {
- CTestProgressNotifier* self =
- new ( ELeave ) CTestProgressNotifier( aTestCombiner, aTestCase );
- 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( KMessage, ( _L("~CTestProgressNotifier") ));
- Cancel();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: StartL
-
- Description: Start ProgressNotifier
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if allready pending
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestProgressNotifier::StartL()
- {
- // Check that this request is not pending!!
- if( iState == ETestProgressPending )
- {
- User::Leave( KErrGeneral );
- }
-
- iState = ETestProgressPending;
- iTestCase->TestExecution().NotifyProgress( iProgressPckg, iStatus );
- SetActive();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: RunL
-
- Description: RunL handles completed requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestProgressNotifier::RunL()
- {
-
- 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() )
- {
- TStifInfoName desc( iProgress.iDescription );
-
- // Append testid if possible
- if( ( iTestCase->TestId().Length() > 0 ) &&
- ( desc.MaxLength() >
- ( desc.Length() + iTestCase->TestId().Length() + 1 ) ) )
- {
- desc.Append( _L("_") );
- desc.Append( iTestCase->TestId() );
- }
- // Append module name if possible
- else if( desc.MaxLength() >
- ( desc.Length() + iTestCase->ModuleName().Length() + 1 ) )
- {
- desc.Append( _L("_") );
- desc.Append( iTestCase->ModuleName() );
- }
-
- // Forward printing to engine
- iTestCombiner->TestModuleIf().Printf( iProgress.iPosition,
- desc,
- iProgress.iText );
-
- // Set request pending again
- StartL();
- }
- else if ( KErrEof != iStatus.Int() )
- {
- // Leave, error will be handled in RunError
- User::Leave( iStatus.Int() );
- }
-
- if( KErrEof == iStatus.Int() )
- {
- // KErrEof indicates that all print process to UI is completed.
- iIsPrintProcessFinished = ETrue;
- if(iTestCase->State() == CTestCase::ETestCaseCompleted )
- {
- // Test case is completed so do final complete.
- iTestCase->Complete2();
- }
-
- }
-
- }
-
-
-/*
--------------------------------------------------------------------------------
-
- 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:
- iTestCase->TestExecution().CancelAsyncRequest( ETestExecutionNotifyProgress );
- break;
- case ETestProgressIdle:
- case ETestProgressCompleted:
- default:
- // DoCancel called in wrong state => Panic
- _LIT( KTestProgressNotifier, "CTestProgressNotifier" );
- User::Panic( KTestProgressNotifier, KErrGeneral );
- break;
- }
- iState = ETestProgressIdle;
-
- }
-
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: RunError
-
- Description: Handle errors. Should newer come here so we return error.
-
- Parameters: TInt aError: in: Symbian OS error: Error code
-
- Return Values: Symbian OS error value
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestProgressNotifier::RunError( TInt aError )
- {
- return aError;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestProgressNotifier
-
- Method: IsPrintProgressFinished
-
- Description: Indicates is print process to UI finished
-
- Parameters: None
-
- Return Values: TBool: ETrue indicates that print process is finished,
- EFalse indicates that print process is not finished
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TBool CTestProgressNotifier::IsPrintProgressFinished()
- {
- return iIsPrintProcessFinished;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CTestErrorNotifier class member
- functions.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestErrorNotifier
-
- Method: CTestErrorNotifier
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestErrorNotifier::CTestErrorNotifier( CTestCombiner* aTestCombiner,
- CTCTestModule* aTestModule ) :
- CActive( CActive::EPriorityStandard ),
- iTestCombiner( aTestCombiner ),
- iTestModule( aTestModule ),
- iState( ETestErrorIdle ),
- iErrorPckg( iError )
- {
- CActiveScheduler::Add( this );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestErrorNotifier
-
- Method: ConstructL
-
- Description: Symbian OS second phase constructor
-
- Symbian OS default constructor can leave.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if StartL leaves
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestErrorNotifier::ConstructL()
- {
- StartL();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestErrorNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestCombiner* aTestCombiner: in: Backpointer to TestCombiner
- CTCTestModule* aTestModule: in: Pointer to used CTCTestModule
-
- Return Values: CTestErrorNotifier* : pointer to created object
-
- Errors/Exceptions: Leaves if ConstructL leaves or memory allocation fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestErrorNotifier* CTestErrorNotifier::NewL( CTestCombiner* aTestCombiner,
- CTCTestModule* aTestModule )
- {
- CTestErrorNotifier* self =
- new ( ELeave ) CTestErrorNotifier( aTestCombiner, aTestModule );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestErrorNotifier
-
- Method: ~CTestErrorNotifier
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestErrorNotifier::~CTestErrorNotifier()
- {
- __TRACE( KMessage, ( _L("~CTestErrorNotifier") ));
- Cancel();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestErrorNotifier
-
- Method: StartL
-
- Description: Start ProgressNotifier
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves if allready pending
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestErrorNotifier::StartL()
- {
- // Check that this request is not pending!!
- if( iState == ETestErrorPending )
- {
- User::Leave( KErrGeneral );
- }
-
- iState = ETestErrorPending;
- iTestModule->TestModule().ErrorNotification( iErrorPckg, iStatus );
- SetActive();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestErrorNotifier
-
- Method: RunL
-
- Description: RunL handles completed requests.
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestErrorNotifier::RunL()
- {
-
- iState = ETestErrorCompleted;
-
- // 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() )
- {
-
- // Forward printing to engine
- iTestCombiner->TestModuleIf().Printf( iError.iPriority,
- iError.iModule,
- iError.iText );
-
- // Set request pending again
- StartL();
- }
- else if ( KErrEof != iStatus.Int() )
- {
- // Leave, error will be handled in RunError
- User::Leave( iStatus.Int() );
- }
-
- }
-
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestErrorNotifier
-
- Method: DoCancel
-
- Description: Cancel active request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestErrorNotifier::DoCancel()
- {
- switch ( iState )
- {
- case ETestErrorPending:
- iTestModule->TestModule().CancelAsyncRequest( ETestModuleErrorNotification );
- break;
- case ETestErrorIdle:
- case ETestErrorCompleted:
- default:
- // DoCancel called in wrong state => Panic
- _LIT( KTestErrorNotifier, "CTestErrorNotifier" );
- User::Panic( KTestErrorNotifier, KErrGeneral );
- break;
- }
- iState = ETestErrorIdle;
-
- }
-
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestErrorNotifier
-
- Method: RunError
-
- Description: Handle errors. Should newer come here so we return error.
-
- Parameters: TInt aError: in: Symbian OS error: Error code
-
- Return Values: Symbian OS error value
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-TInt CTestErrorNotifier::RunError( TInt /*aError*/ )
- {
-
- // Ignore error, stop error note forwarding
- return KErrNone;
-
- }
-
-
-/*
--------------------------------------------------------------------------------
-
- DESCRIPTION
-
- This module contains implementation of CTestEventNotify class member
- functions. Handles requested events from test modules below.
-
--------------------------------------------------------------------------------
-*/
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotify
-
- Method: CTestEventNotify
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: CTestCombiner* aTestCombiner: in: Backpointer to TestCombiner
- CTCTestCase* aTestCase: in: Pointer to used CTCTestCase
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotify::CTestEventNotify( CTestCombiner* aTestCombiner,
- CTCTestCase* aTestCase ) :
- CActive( CActive::EPriorityStandard ),
- iTestCombiner( aTestCombiner ),
- iTestCase( aTestCase ),
- iState( ETestEventNotifyIdle ),
- iEventPckg( iEvent )
- {
- CActiveScheduler::Add( this );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotify
-
- 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 CTestEventNotify::ConstructL( TEventIf& aEvent )
- {
- iEvent.Copy( aEvent );
-
- iEvent.SetType( TEventIf::EWaitEvent );
- iState = ETestEventNotifyPending;
- iTestCombiner->TestModuleIf().Event( iEvent, iStatus );
- SetActive();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotify
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestCombiner* aTestCombiner: in: Backpointer to TestCombiner
- CTCTestCase* aTestCase: in: Pointer to used CTCTestCase
-
- Return Values: CTestEventNotify* : pointer to created object
-
- Errors/Exceptions: Leaves if ConstructL leaves or memory allocation fails
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotify* CTestEventNotify::NewL( CTestCombiner* aTestCombiner,
- CTCTestCase* aTestCase,
- TEventIf& aEvent )
- {
- CTestEventNotify* self =
- new ( ELeave ) CTestEventNotify( aTestCombiner, aTestCase );
- CleanupStack::PushL( self );
- self->ConstructL( aEvent );
- CleanupStack::Pop( self );
- return self;
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotify
-
- Method: ~CTestEventNotify
-
- Description: Destructor
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotify::~CTestEventNotify()
- {
- __TRACE( KMessage, ( _L("~CTestEventNotify") ));
-
- Cancel();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotify
-
- Method: RunL
-
- Description: Handles completed event wait
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves on error.
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-void CTestEventNotify::RunL()
- {
- __TRACE( KMessage, ( _L("CTestEventNotify::RunL(%d): %d, %d"),
- this, iStatus.Int(), iState ) );
- User::LeaveIfError( iStatus.Int() );
-
- switch( iState )
- {
- case ETestEventNotifyPending:
- {
- // Forward event set/unset
- iEvent.SetType( TEventIf::ESetEvent );
- iState = ETestEventNotifyCompleted;
- User::LeaveIfError(
- iTestCase->TestExecution().NotifyEvent( iEventPckg, iStatus ) );
- SetActive();
- }
- break;
- case ETestEventNotifyCompleted:
- // Enable wait again
- iEvent.SetType( TEventIf::ESetWaitPending );
- iState = ETestEventNotifyPending;
- iTestCombiner->TestModuleIf().Event( iEvent, iStatus );
- SetActive();
- break;
- default:
- User::LeaveIfError( KErrGeneral );
- break;
- }
- __TRACE( KMessage, ( _L("CTestEventNotify::RunL(%d) done: %d"),
- this, iState ) );
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotify
-
- Method: DoCancel
-
- Description: Handle Cancel
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-void CTestEventNotify::DoCancel()
- {
- __TRACE( KMessage, ( _L("CTestEventNotify::DoCancel")));
-
- _LIT( KTestEventNotify, "CTestEventNotify" );
- switch ( iState )
- {
- case ETestEventNotifyPending:
- {
- TInt ret =
- iTestCombiner->TestModuleIf().CancelEvent( iEvent, &iStatus );
- if( ret != KErrNone )
- {
- __TRACE( KMessage, ( _L("CTestEventNotify::DoCancel(%d) not pending: %d"),
- this, ret ) );
- }
- }
- break;
- case ETestEventNotifyCompleted:
- iTestCase->TestExecution().
- CancelAsyncRequest( ETestExecutionNotifyEvent );
- break;
- case ETestEventNotifyIdle:
- default:
- // DoCancel called in wrong state => Panic
- User::Panic( KTestEventNotify, KErrGeneral );
- break;
- }
-
- iState = ETestEventNotifyIdle;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotify
-
- Method: RunError
-
- Description: Handle error. Should newer come here so we return error.
-
- Parameters: TInt aError: in: error from CActive
-
- Return Values: Symbian OS error value
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-TInt CTestEventNotify::RunError( TInt aError )
- {
- __TRACE( KMessage, ( _L("CTestEventNotify::RunError")));
-
- return aError;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- 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: CTestCombiner* aTestCombiner: in: Backpointer to TestCombiner
- CTCTestCase* aTestCase: in: Pointer to used CTCTestCase
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotifier::CTestEventNotifier( CTestCombiner* aTestCombiner,
- CTCTestCase* aTestCase ) :
- CActive( CActive::EPriorityStandard ),
- iTestCombiner( aTestCombiner ),
- iTestCase( aTestCase ),
- iState( ETestEventIdle ),
- iEventPckg( iEvent )
- {
- 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( )
- {
- StartL();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestCombiner* aTestCombiner: in: Backpointer to TestCombiner
- CTCTestCase* aTestCase: in: Pointer to used CTCTestCase
-
- Return Values: CTestEventNotifier* : pointer to created object
-
- Errors/Exceptions: Leaves if ConstructL leaves or memory allocation fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotifier* CTestEventNotifier::NewL( CTestCombiner* aTestCombiner,
- CTCTestCase* aTestCase )
- {
- CTestEventNotifier* self =
- new ( ELeave ) CTestEventNotifier( aTestCombiner, aTestCase );
- 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: Proposal
-
--------------------------------------------------------------------------------
-*/
-CTestEventNotifier::~CTestEventNotifier()
- {
- __TRACE( KMessage, ( _L("~CTestEventNotifier") ));
-
-
-
- Cancel();
-
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: StartL
-
- Description: Start active object
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leave if already pending
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CTestEventNotifier::StartL()
- {
- // Check that this request is not pending!!
- if( iState == ETestEventPending )
- {
- User::Leave( KErrGeneral );
- }
-
- iEvent.SetType( TEventIf::EEnable );
- iState = ETestEventPending;
- __TRACE( KMessage, ( _L("Set event pending %d"), this ) );
- iTestCase->TestExecution().NotifyEvent( iEventPckg, iStatus );
- SetActive();
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: RunL
-
- Description: Handles completed event request
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: Leaves on error.
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-void CTestEventNotifier::RunL()
- {
- __TRACE( KMessage, ( _L("CTestEventNotifier::RunL(%d): %d, %d"),
- this, iStatus.Int(), iState ) );
-
- User::LeaveIfError( iStatus.Int() );
-
- switch( iState )
- {
- case ETestEventPending:
- case ETestEventWaitUnset:
- {
- iState = ETestEventCompleted;
-
- switch( iEvent.Type() )
- {
- case TEventIf::ERelEvent:
- {
- // Remove from requested events list
- TInt count = iTestCase->EventArray().Count();
- TInt ind = 0;
- for( ; ind < count; ind++)
- {
- if( iTestCase->EventArray()[ind]->Event().Name() == iEvent.Name() )
- {
- __RDEBUG( ( _L("TC CTestEventNotifier(RelEvent) %S"),
- &iEvent.Name() ));
- CTestEventNotify* event = iTestCase->EventArray()[ind];
- iTestCase->EventArray().Remove( ind );
- delete event;
- break;
- }
- }
- if( ind == count )
- {
- User::Leave( KErrNotFound );
- }
- }
- break;
- case TEventIf::EUnsetEvent:
- {
- __RDEBUG( ( _L("TC CTestEventNotifier(UnsetEvent) %S"),
- &iEvent.Name() ));
- TInt count = iTestCase->StateEventArray().Count();
- for( TInt i=0; i<count; i++ )
- {
- if( iTestCase->StateEventArray()[i]->Name() == iEvent.Name() )
- {
- TEventIf* event = iTestCase->StateEventArray()[i];
- iTestCase->StateEventArray().Remove(i);
- delete event;
- break;
- }
- }
-
- if( iTestCombiner->UnsetEvent( iEvent, iStatus ) )
- {
- // Event request is pending from modules below test
- // combiner, stay waiting
- iState = ETestEventWaitUnset;
- // Wait for unset to complete
- SetActive();
- return;
- }
- }
- break;
- case TEventIf::EReqEvent:
- // Do nothing
- __RDEBUG( ( _L("TC CTestEventNotifier(ReqEvent) %S"),
- &iEvent.Name() ));
- break;
- case TEventIf::ESetEvent:
- // Do nothing
- __RDEBUG( ( _L("TC CTestEventNotifier(SetEvent) %S"),
- &iEvent.Name() ));
- break;
- default:
- User::Leave( KErrArgument );
- break;
- }
-
- // Forward event request
- iTestCombiner->TestModuleIf().Event( iEvent, iStatus );
- SetActive();
-
- }
- break;
- case ETestEventCompleted:
- __RDEBUG( ( _L("TC CTestEventNotifier(Complete)")));
- switch( iEvent.Type() )
- {
- case TEventIf::EReqEvent:
- {
- // Store requested events
- CTestEventNotify* event =
- CTestEventNotify::NewL( iTestCombiner, iTestCase, iEvent );
- CleanupStack::PushL( event );
- User::LeaveIfError( iTestCase->EventArray().Append( event ) );
- CleanupStack::Pop( event );
- }
- break;
- case TEventIf::ESetEvent:
- if( iEvent.EventType() == TEventIf::EState )
- {
- TEventIf* event = new( ELeave )TEventIf;
- CleanupStack::PushL( event );
- event->Copy( iEvent );
- User::LeaveIfError( iTestCase->StateEventArray().Append( event ) );
- CleanupStack::Pop( event );
- }
- break;
- case TEventIf::ERelEvent:
- case TEventIf::EUnsetEvent:
- // Do nothing
- break;
- default:
- User::Leave( KErrArgument );
- break;
- }
-
- // Enable request again
- StartL();
- break;
- default:
- User::LeaveIfError( KErrGeneral );
- break;
- }
- __TRACE( KMessage, ( _L("CTestEventNotifier::RunL(%d) done: %d"),
- this, iState ) );
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: DoCancel
-
- Description: Handle Cancel
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-
-void CTestEventNotifier::DoCancel()
- {
- __TRACE( KMessage, ( _L("CTestEventNotifier::DoCancel")));
- _LIT( KTestEventNotifier, "CTestEventNotifier" );
-
- switch ( iState )
- {
- case ETestEventPending:
- iTestCase->TestExecution().
- CancelAsyncRequest( ETestExecutionNotifyEvent );
- break;
- case ETestEventCompleted:
- {
- TInt ret = iTestCombiner->TestModuleIf().CancelEvent( iEvent, &iStatus );
- if( ret != KErrNone )
- {
- __TRACE( KMessage, ( _L("CTestEventNotifier::DoCancel(%d) not pending: %d"),
- this, ret ) );
- }
- }
- User::WaitForRequest( iStatus );
- break;
- case ETestEventIdle:
- default:
- // DoCancel called in wrong state => Panic
- User::Panic( KTestEventNotifier, KErrGeneral );
- break;
- }
-
- iState = ETestEventIdle;
-
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestEventNotifier
-
- Method: RunError
-
- Description: Handle error. Should newer come here so we return error.
-
- Parameters: TInt aError: in: error from CActive
-
- Return Values: Symbian OS error value
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-
-TInt CTestEventNotifier::RunError( TInt aError )
- {
- __TRACE( KMessage, ( _L("CTestEventNotifier::RunError")));
-
- switch( iState )
- {
- case ETestEventPending:
- case ETestEventWaitUnset:
- // Either the event request is cancelled or some
- // unknown error occurred. We go idle state.
- iState = ETestEventIdle;
- break;
-
- case ETestEventCompleted:
- // Error in event command, forward it to the test module
- iEvent.SetType( TEventIf::EEnable );
- iState = ETestEventPending;
- __TRACE( KMessage, ( _L("Cmd error %d"), this ) );
- iTestCase->TestExecution().NotifyEvent( iEventPckg, iStatus, aError );
- SetActive();
- break;
- default:
- __TRACE( KMessage, ( _L("Illegal state %d"), this ) );
- return aError;
- }
-
- return KErrNone;
-
- }
-
-// ================= MEMBER FUNCTIONS =========================================
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: CTestCommandNotifier
-
- Description: Default constructor
-
- C++ default constructor can NOT contain any code, that
- might leave.
-
- Parameters: CTestCombiner* aTestCombiner: in: Pointer to TestCombiner
- CTCTestCase* aTestCase: in: Pointer to test case
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestCommandNotifier::CTestCommandNotifier(CTestCombiner* aTestCombiner,
- CTCTestCase* aTestCase):
- CActive(CActive::EPriorityStandard),
- iTestCombiner(aTestCombiner),
- iTestCase(aTestCase),
- 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(KMessage, (_L("CTestCommandNotifier::ConstructL (combiner)")));
- Start();
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: NewL
-
- Description: Two-phased constructor.
-
- Parameters: CTestCombiner* aTestCombiner: in: Pointer to TestCombiner
- CTCTestCase* aTestCase: in: Pointer to test case
-
- Return Values: CTestCommandNotifier* : pointer to created object
-
- Errors/Exceptions: Leaves if construction of CTestCommandNotifier fails
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-CTestCommandNotifier* CTestCommandNotifier::NewL(CTestCombiner* aTestCombiner,
- CTCTestCase* aTestCase)
- {
- CTestCommandNotifier* self = new (ELeave) CTestCommandNotifier(aTestCombiner, aTestCase);
- 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(KMessage, (_L("CTestEventNotifier::~CTestEventNotifier (combiner)")));
- Cancel();
- }
-
-/*
--------------------------------------------------------------------------------
-
- Class: CTestCommandNotifier
-
- Method: StartL
-
- Description: Start active object
-
- Parameters: None
-
- Return Values: None
-
- Errors/Exceptions: None
-
- Status: Approved
-
--------------------------------------------------------------------------------
-*/
-void CTestCommandNotifier::Start()
- {
- __TRACE(KMessage, (_L("CTestEventNotifier::StartL (combiner)")));
-
- iTestCase->TestExecution().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(KMessage, (_L("CTestCommandNotifier::RunL (combiner): iStatus=[%d]"), iStatus.Int()));
-
- User::LeaveIfError(iStatus.Int());
-
- switch(iCommand)
- {
- case EStopExecution:
- {
- __TRACE(KMessage, (_L("CTestCommandNotifier::RunL (combiner): StopExecution command received")));
- TStopExecutionCommandParams par;
- TStopExecutionCommandParamsPckg parPack(par);
- parPack.Copy(iParamsPckg);
- __TRACE(KMessage, (_L("CTestCommandNotifier::RunL(combiner): propagating stop execution [%d][%d]"), par.iType, par.iCode));
- iTestCombiner->TestModuleIf().StopExecution(par.iType, par.iCode);
- }
- break;
-
- case ESendTestModuleVersion:
- {
- __TRACE(KMessage, (_L("CTestCommandNotifier::RunL (combiner): SendTestModuleVersion command received")));
- TSendTestModuleVesionCommandParams params;
- TSendTestModuleVesionCommandParamsPckg paramsPack(params);
- paramsPack.Copy(iParamsPckg);
-
- __TRACE(KMessage, (_L("CTestCommandNotifier::RunL(combiner): propagating module version [%d][%d][%d][%S]"), params.iMajor, params.iMinor, params.iBuild, ¶ms.iTestModuleName));
- TVersion moduleVersion(params.iMajor, params.iMinor, params.iBuild);
-
- TBool newVersionOfMethod = ETrue;
- iTestCombiner->TestModuleIf().SendTestModuleVersion(moduleVersion, params.iTestModuleName, newVersionOfMethod);
- }
- break;
-
- default:
- __TRACE(KError, (_L("CTestCommandNotifier::RunL (combiner): Unknown command [%d]."), iCommand));
- }
-
- // 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(KMessage, (_L( "CTestEventNotifier::DoCancel (combiner)")));
-
- iTestCase->TestExecution().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 (combiner)"), aError));
- return KErrNone;
- }
-
-// ================= OTHER EXPORTED FUNCTIONS =================================
-
-// None
-
-// End of File