diff -r 7259cf1302ad -r 169364e7e4b4 stif/StifTFwIf/src/UIEngineContainer.cpp --- a/stif/StifTFwIf/src/UIEngineContainer.cpp Tue Jul 06 16:05:13 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,612 +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: CUIEngine: This object executes test cases from STIF -* Test Framework. -* -*/ - -// INCLUDE FILES -#include -#include -#include -#include -#include "UIEnginePrinter.h" -#include "UIEngineRunner.h" -#include "UIEngineRemote.h" -#include "Logging.h" - - -// EXTERNAL DATA STRUCTURES -// None - -// EXTERNAL FUNCTION PROTOTYPES -// None - -// CONSTANTS -// None - -// MACROS -#ifdef LOGGER -#undef LOGGER -#endif -#define LOGGER iUIEngine->iLogger - -// LOCAL CONSTANTS AND MACROS -// None - -// MODULE DATA STRUCTURES -// None - -// LOCAL FUNCTION PROTOTYPES -// None - -// FORWARD DECLARATIONS -// None - -// ==================== LOCAL FUNCTIONS ======================================= -// None - -// ================= MEMBER FUNCTIONS ========================================= - - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: CUIEngineContainer - - Description: Default constructor - - C++ default constructor can NOT contain any code, that - might leave. - - Parameters: CUIEngine* aUIEngine: in: Pointer to CUIEngine interface - TTestInfo& aTestInfo: in: Test information - - Return Values: None - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -CUIEngineContainer::CUIEngineContainer( CUIEngine* aUIEngine, - const TTestInfo& aTestInfo, - RTestEngineServer& aTestEngineServ, - RTestEngine& aTestEngine ) : - iUIEngine( aUIEngine ), - iTestInfo( aTestInfo ), - iTestInfoPckg( iTestInfo ), - iState( ENotStarted ) - { - __TRACE( KPrint, ( _L( "CUIEngineContainer::CUIEngineContainer.") ) ); - - // Get handles to test engine - iTestEngineServ = aTestEngineServ; - iTestEngine = aTestEngine; - - __ASSERT_ALWAYS( aUIEngine, User::Panic( _L("Null pointer"), KErrGeneral ) ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: ConstructL - - Description: Symbian OS second phase constructor - - Symbian OS default constructor can leave - - Parameters: None - - Return Values: None - - Errors/Exceptions: Leaves if called Open method returns error - - Status: Draft - -------------------------------------------------------------------------------- -*/ -void CUIEngineContainer::ConstructL() - { - __TRACE( KPrint, ( _L( "CUIEngineContainer::ConstructL.") ) ); - - // Open test case - User::LeaveIfError( iTestCase.Open( iTestEngineServ, iTestInfoPckg ) ); - } - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: NewL - - Description: Two-phased constructor. - - Parameters: CUIEngine* aUIEngine: in: pointer to CUIEngine Interface - TTestInfo& aTestInfo: in: Test info - - Return Values: CUIEngineRunner* : pointer to created runner object - - Errors/Exceptions: Leaves if memory allocation for CUIEngineRunner fails - Leaves if ConstructL leaves - - Status: Draft - -------------------------------------------------------------------------------- -*/ -CUIEngineContainer* CUIEngineContainer::NewL( CUIEngine* aUIEngine, - const TTestInfo& aTestInfo, - RTestEngineServer& aTestEngineServ, - RTestEngine& aTestEngine ) - { - CUIEngineContainer* self = - new ( ELeave ) CUIEngineContainer( aUIEngine, - aTestInfo, - aTestEngineServ, - aTestEngine ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: ~CUIEngineContainer - - Description: Destructor - - Parameters: None - - Return Values: None - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -CUIEngineContainer::~CUIEngineContainer() - { - - __TRACE( KPrint, ( _L( "CUIEngineContainer::~CUIEngineContainer.") ) ); - - delete iPrinter; - delete iRunner; - delete iRemote; - - // Close test case - iTestCase.Close(); - - } - - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: StartContinerL - - Description: StartContinerL call CUIEngineRunner to starting test case execution - - Parameters: None - - Return Values: TInt KErrNone: Always returned KErrNone - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -TInt CUIEngineContainer::StartContainerL() - { - - __TRACE( KPrint, ( _L( "CUIEngineContainer::StartContainerL. Running test case: %S"), - &( iTestInfo.iTestCaseInfo.iTitle ) ) ); - - // Start printer - iPrinter = CUIEnginePrinter::NewL( this ); - iPrinter->StartL( iTestCase ); - - // Start remote - iRemote = CUIEngineRemote::NewL( this ); - iRemote->StartL( iTestCase ); - - // Start runner - iRunner = CUIEngineRunner::NewL( this ); - iRunner->StartL( iTestCase ); - - // Update state of test case - iState = ERunning; - - __TRACE( KPrint, ( _L( "CUIEngineContainer::StartContainerL: started") ) ); - - return KErrNone; - - } - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: CancelTest - - Description: CancelTest cancels test case execution - - Parameters: None - - Return Values: TInt KErrNone: Always returned KErrNone - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CUIEngineContainer::CancelTest() - { - - if ( iState == ERunning || iState == EPaused ) - { - __TRACE( KPrint, ( _L( "CUIEngineContainer::CancelTest") ) ); - - // Cancel test case execution - iTestCase.CancelAsyncRequest( ETestCaseRunTestCase ); - - } - - return KErrNone; - } - - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: PauseTest - - Description: PauseTest pauses test case execution - - Parameters: None - - Return Values: Symbian OS error: Error code - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CUIEngineContainer::PauseTest() - { - TInt ret(KErrNone); - - if ( iState == ERunning ) - { - ret = iTestCase.Pause(); - - __TRACE( KPrint, ( _L( "CUIEngineContainer::PauseTest. Ret = %d"), ret ) ); - - if ( ret == KErrNone) - { - iState = EPaused; - } - } - - return ret; - } - - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: ResumeTest - - Description: PauseTest resumes test case execution - - Parameters: None - - Return Values: Symbian OS error: Error code - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CUIEngineContainer::ResumeTest() - { - TInt ret(KErrNone); - - if ( iState == EPaused ) - { - ret = iTestCase.Resume(); - - __TRACE( KPrint, ( _L( "CUIEngineContainer::ResumeTest. Ret = %d"), ret ) ); - - if ( ret == KErrNone) - { - iState = ERunning; - } - } - - return ret; - } - - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: TestCaseExecuted - - Description: TestCaseExecuted informs that test case is executed - - Parameters: TFullTestResult& aFullTestResult: in: Full information of - test case execution. Includes also test case results - - Return Values: None - - Errors/Exceptions: TInt KErrNone: Always returned KErrNone - - Status: Draft - -------------------------------------------------------------------------------- -*/ -void CUIEngineContainer::TestCaseExecuted( TFullTestResult& aFullTestResult, - TInt aStatus ) - { - - iState = EExecuted; - - // Set execution result - if( ( KErrNone != aStatus ) && - ( aFullTestResult.iCaseExecutionResultCode == KErrNone ) && - ( aFullTestResult.iTestResult.iResult == KErrNone ) ) - { - aFullTestResult.iTestResult.iResultDes.Copy( - _L("Completed with error") ); - aFullTestResult.iCaseExecutionResultType = - TFullTestResult::ECaseErrorFromModule; - aFullTestResult.iCaseExecutionResultCode = aStatus; - } - - __TRACE( KPrint, ( _L( "CUIEngineContainer::TestCaseExecuted.") ) ); - - // Test execution is not completed before all prints are - // delivered to UI. - if( !iPrinter->IsRunning() || - ( aStatus != KErrNone ) || - ( aFullTestResult.iCaseExecutionResultCode != KErrNone ) ) - { - // Call TestExecuted of CUIEngine interface - iUIEngine->TestExecuted(this, aFullTestResult); - // 1. This method is called from CUIEngineRunner::RunL() and it is - // last operation => no other call to CUIEngineContainer class. - // 2. TestExecuted() method takes this pointer. Inside TestExecuted() - // will be deleted the this pointer => iUIEngine not valid anymore. - // 1 and 2 => Do not handle any CUIEngineContainer variable here - // because memory is not valid anymore. - //e.g. iState = EFinished; // illegal operation here->crash - - } - - } - - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: PrintProgress - - Description: PrintProgress prints information from test case - - Parameters: TTestProgress& aProgress: in: Progress info - - Return Values: None - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -void CUIEngineContainer::PrintProgress( TTestProgress& aProgress ) - { - if( iState == ERunning ) - { - // Only running cases may print - iUIEngine->PrintProg( this, aProgress ); - } - else - { - __TRACE( KPrint, - ( _L("%S: %S"), &aProgress.iDescription, &aProgress.iText ) ); - } - } - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: PrintsDone - - Description: Signals that printing is completed - - Parameters: None - - Return Values: None - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -void CUIEngineContainer::PrintsDone() - { - if( iState == EExecuted ) - { - // Call TestExecuted of CUIEngine interface - iUIEngine->TestExecuted(this, iRunner->FullResult() ); - } - } - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: RemoteSend - - Description: RemoteSend forwards remote protocol messages from master - - Parameters: - - Return Values: None - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -void CUIEngineContainer::RemoteSend( const TDesC& aRemoteMsg, - TInt /* aStatus */ ) - { - - __TRACE( KPrint, ( _L( "CUIEngineContainer::RemoteSend.") ) ); - - // Save master id if doesn't exists already - if( iMasterId == 0 ) - { - CStifTFwIfProt* msg = NULL; - TRAPD( err, - msg = CStifTFwIfProt::NewL(); - msg->SetL( aRemoteMsg ); - ); - if( err != KErrNone ) - { - delete msg; - // oom - return; - } - iMasterId = msg->SrcId(); - delete msg; - } - - // Call AtsSend of CUIEngine interface - iUIEngine->RemoteMsg( this, aRemoteMsg ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: GoingToReboot - - Description: Inform UI that phone is going to rebooted - - Parameters: - - Return Values: None - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -TInt CUIEngineContainer::GoingToReboot( TRequestStatus& aStatus ) - { - - __TRACE( KPrint, ( _L( "CUIEngineContainer::GoingToReboot.") ) ); - - // Forward - return iUIEngine->GoingToReboot( this, aStatus ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CUIEngineContainer - - Method: RemoteReceive - - Description: RemoteReceive forwards remote protocol messages to master - - Parameters: - - Return Values: None - - Errors/Exceptions: None - - Status: Draft - -------------------------------------------------------------------------------- -*/ -TInt CUIEngineContainer::RemoteReceive( const TDesC& aRemoteMsg ) - { - - __TRACE( KPrint, ( _L( "CUIEngineContainer::RemoteReceive.") ) ); - - // Check master test case status, FIX110 - if( iState != ERunning ) - { - __TRACE( KError, ( _L( "Master case not running") ) ); - - return KErrNotFound; - } - - HBufC8* buf = HBufC8::New( aRemoteMsg.Length() ); - if( buf == NULL ) - { - return KErrNoMemory; - } - - TPtr8 tmp = buf->Des(); - tmp.Copy( aRemoteMsg ); - TInt ret = iTestCase.NotifyRemoteMsg( tmp, EStifCmdReceive ); - delete buf; - - return ret; - - } - -// ================= OTHER EXPORTED FUNCTIONS ================================= - -// End of File