stif/StifTFwIf/src/UIEngineEvent.cpp
branchRCL_3
changeset 59 8ad140f3dd41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/StifTFwIf/src/UIEngineEvent.cpp	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,481 @@
+/*
+* 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: CUIEngineEvent: This object executes test cases 
+* from STIF Test Framework.
+*
+*/
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32svr.h>
+#include <stifinternal/UIEngineContainer.h>
+#include "UIEngineEvent.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: CUIEngineEvent
+
+    Method: CUIEngineEvent
+
+    Description: Default constructor
+
+    C++ default constructor can NOT contain any code, that
+    might leave.
+
+    Parameters: None
+    
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CUIEngineEvent::CUIEngineEvent( CUIEngine* aUIEngine) :
+    CActive( CActive::EPriorityStandard ),
+    iState( EEventIdle ),
+    iUIEngine( aUIEngine ),
+    iEventPckg( iEvent )
+    {
+    __TRACE( KPrint, ( _L( "CUIEngineEvent::CUIEngineEvent") ) );
+    __ASSERT_ALWAYS( aUIEngine, User::Panic( _L("Null pointer"), KErrGeneral ) );
+
+    CActiveScheduler::Add( this );
+    }
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CUIEngineEvent
+
+    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: Approved
+
+-------------------------------------------------------------------------------
+*/
+void CUIEngineEvent::ConstructL()
+    {
+
+    }
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CUIEngineEvent
+
+    Method: NewL
+
+    Description: Two-phased constructor.
+    
+    Parameters: CUIEngineContainer* CUIEngineContainer: in: Pointer to CUIEngineContainer Interface
+                TTestInfo& aTestInfo: in: Test info
+
+    Return Values: CUIEngineEvent* : Pointer to created runner object
+
+    Errors/Exceptions: Leaves if memory allocation for CUIEngineEvent fails
+                       Leaves if ConstructL leaves
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CUIEngineEvent* CUIEngineEvent::NewL( CUIEngine* aUIEngine )
+    {
+    CUIEngineEvent* self =  
+        new ( ELeave ) CUIEngineEvent( aUIEngine );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CUIEngineEvent
+
+    Method: ~CUIEngineEvent
+
+    Description: Destructor
+    
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CUIEngineEvent::~CUIEngineEvent()
+    {
+    
+    __TRACE( KPrint, ( _L( "CUIEngineEvent::~CUIEngineEvent()") ) );
+    Cancel();
+    
+    if( iState == EEventWaitCompleted )
+        {
+        // Release event
+        Release();
+        }
+    
+    }
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CUIEngineEvent
+
+    Method: Request
+
+    Description: Request event.
+
+    Parameters: RTestCase& aTestCase: in: Handle to test case
+                TFullTestResultPckg& aFullTestResultPckg: in: Handle to TFullTestResultPckg
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngineEvent::Request( TDesC& aEventName, 
+                               TUint32 aMaster, 
+                               TUint32 aSlave )
+    {
+    
+    __TRACE( KPrint, ( _L( "CUIEngineEvent::Request %S"), &aEventName ) );
+    
+    iState = EEventRequested;
+    
+    iMaster = aMaster;
+    iSlave = aSlave; 
+    iEvent.SetType( TEventIf::EReqEvent );
+    iEvent.SetName( aEventName );
+    
+    TRequestStatus status;
+    iUIEngine->iTestEngine.Event( iEventPckg, status ); 
+    User::WaitForRequest( status );
+    
+    if( status.Int() == KErrNone )
+        {
+        // Enable event waiting
+        iState = EEventWait;            
+        iEvent.SetType( TEventIf::EWaitEvent );
+        SetActive();
+        iUIEngine->iTestEngine.Event( iEventPckg, iStatus ); 
+        }
+    return status.Int();
+        
+    }
+    
+/*
+-------------------------------------------------------------------------------
+
+    Class: CUIEngineEvent
+
+    Method: Release
+
+    Description: Release event.
+
+    Parameters: RTestCase& aTestCase: in: Handle to test case
+                TFullTestResultPckg& aFullTestResultPckg: in: Handle to TFullTestResultPckg
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngineEvent::Release()
+    {
+    
+    __TRACE( KPrint, ( _L( "CUIEngineEvent::Release %S"), &iEvent.Name() ) );
+    Cancel();
+   
+    TRequestStatus status;
+    // Release event
+    iState = EEventReleased;
+    iEvent.SetType( TEventIf::ERelEvent );
+    iUIEngine->iTestEngine.Event( iEventPckg, status ); 
+    User::WaitForRequest( status ); 
+    
+    return status.Int();
+    
+    }
+    
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CUIEngineEvent
+
+    Method: RunL
+
+    Description: RunL handles completed requests.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: Leaves if iStatus is not KErrNone, error is handled in
+                       RunError called by CActiveObject
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CUIEngineEvent::RunL()
+    {
+    
+    __TRACE( KPrint, ( _L( "CUIEngineEvent::RunL") ) );
+
+    // Error handled in RunError
+    User::LeaveIfError ( iStatus.Int() );
+    
+    switch( iState )
+        {
+        case EEventWait:
+            {
+            // Create response 
+            CStifTFwIfProt* resp = CStifTFwIfProt::NewL();
+            CleanupStack::PushL( resp );    
+            
+            resp->CreateL();
+            resp->Append( CStifTFwIfProt::MsgType, CStifTFwIfProt::EMsgResponse );
+            resp->AppendId( iSlave );
+            resp->AppendId( iMaster );
+            resp->Append( CStifTFwIfProt::MsgType, CStifTFwIfProt::EMsgRemote );
+            resp->Append( CStifTFwIfProt::CmdType, CStifTFwIfProt::ECmdRequest );
+            resp->Append( CStifTFwIfProt::EventStatus, 
+                         CStifTFwIfProt::EEventSet );
+            resp->Append( iEvent.Name() );
+            if( iEvent.EventType() == TEventIf::EState )
+                {
+                resp->Append( CStifTFwIfProt::EventStatusParams, 
+                             CStifTFwIfProt::EEventType,
+                             CStifTFwIfProt::EventType, 
+                             TEventIf::EState );
+                } 
+            // Send response
+            iUIEngine->RemoteMsg( NULL, resp->Message() );
+            CleanupStack::PopAndDestroy( resp );    
+            
+            if( iEvent.EventType() == TEventIf::EIndication )
+                {            
+                // Enable indication event waiting again
+                iEvent.SetType( TEventIf::EWaitEvent );
+                SetActive();
+                iUIEngine->iTestEngine.Event( iEventPckg, iStatus ); 
+                }
+            else  // state event, set only once for one request
+                {                
+                iState = EEventWaitCompleted;
+                }
+            }
+            break;
+        case EEventWaitCompleted:
+        case EEventRequested:
+        case EEventReleased:
+        default:
+            __TRACE( KError, ( _L( "CUIEngineEvent::RunL: Illegal state %d"), iState ) );
+            User::Leave( KErrGeneral );
+        }
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CUIEngineEvent
+
+    Method: DoCancel
+
+    Description: Cancel active request.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CUIEngineEvent::DoCancel()
+    {
+    
+    __TRACE( KPrint, ( _L( "CUIEngineEvent::DoCancel") ) );
+    TRequestStatus status;
+
+    switch( iState )
+        {
+        case EEventWait:
+            // First cancel waiting
+            iEvent.SetType( TEventIf::ECancelWait );
+            iUIEngine->iTestEngine.Event( iEventPckg, status );
+            User::WaitForRequest( status ); 
+            iState = EEventWaitCompleted;
+            break;
+        default:
+            iUIEngine->iTestEngine.CancelAsyncRequest( ETestEngineEvent ); 
+            iState = EEventIdle;
+            break;
+        }
+    
+    }
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CUIEngineEvent
+
+    Method: RunError
+
+    Description: Handle errors from STIF TestFramework
+
+    Parameters: TInt aError: in: Symbian OS error: Error code
+    
+    Return Values: TInt KErrNone: Always returned KErrNone
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CUIEngineEvent::RunError( TInt aError )
+    {
+    __TRACE( KPrint, ( _L( "CUIEngineEvent::RunError") ) );
+
+    switch( iState )
+        {
+        case EEventRequested:
+        case EEventWait:
+        case EEventWaitCompleted:
+        case EEventReleased:
+            {
+            // Create response
+            CStifTFwIfProt* resp = NULL; 
+            TRAPD( err, resp = CStifTFwIfProt::NewL(); );
+            if( err != KErrNone )
+                {
+                return KErrNone;
+                }
+
+            resp->CreateL();
+            resp->Append( CStifTFwIfProt::MsgType, CStifTFwIfProt::EMsgResponse );
+            resp->AppendId( iSlave );
+            resp->AppendId( iMaster );
+            resp->Append( CStifTFwIfProt::MsgType, CStifTFwIfProt::EMsgRemote );
+            resp->Append( CStifTFwIfProt::CmdType, CStifTFwIfProt::ECmdRequest );
+            resp->Append( CStifTFwIfProt::EventStatus, 
+                         CStifTFwIfProt::EEventError );
+            resp->Append( iEvent.Name() );
+            resp->Append( CStifTFwIfProt::EventStatusParams, 
+                             CStifTFwIfProt::EEventResult,
+                             aError );
+            
+            // Send response
+            iUIEngine->RemoteMsg( NULL, resp->Message() ); 
+            delete resp;
+            }
+            break;
+        default:
+            __TRACE( KError, ( _L( "CUIEngineEvent::RunError: Illegal state %d"), iState ) );
+            return aError;
+        }
+    
+    return KErrNone;
+    }
+
+
+/*
+-------------------------------------------------------------------------------
+
+    DESCRIPTION
+
+    CActiveTimer: This object prints running seconds to console screen.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+
+
+
+// ================= OTHER EXPORTED FUNCTIONS ================================= 
+// None
+
+// End of File