stif/StifTFwIf/src/UIStoreContainer.cpp
branchRCL_3
changeset 59 8ad140f3dd41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/StifTFwIf/src/UIStoreContainer.cpp	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,906 @@
+/*
+* 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 
+* CStartedTestCase class member functions.
+*
+*/
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32svr.h>
+
+#include <stifinternal/UIEngine.h>
+#include <stifinternal/UIEngineContainer.h>
+#include <stifinternal/UIStoreContainer.h>
+#include <stifinternal/UIStore.h>
+
+#include "Logging.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+#ifdef LOGGER
+#undef LOGGER
+#endif
+_LIT( KStartedTestCase, "CStartedTestCase" );
+_LIT( KStartedTestSet, "CStartedTestSet" );
+
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ==================== LOCAL FUNCTIONS =======================================
+
+// None
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestCase
+
+    Method: NewL
+
+    Description: Create a testcase container.
+
+    Parameters: CTestInfo* aTestInfo: in: Test case info
+                CUIEngineContainer* aContainer: in: container
+
+    Return Values: CStartedTestCase* : pointer to created object
+
+    Errors/Exceptions: Leaves if memory allocation for object fails
+                       Leaves if ConstructL leaves
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CStartedTestCase* CStartedTestCase::NewL( const CTestInfo& aTestInfo, 
+                                          CUIEngineContainer& aContainer )
+    {
+
+    CStartedTestCase* self = new ( ELeave ) CStartedTestCase( aContainer );
+    CleanupStack::PushL( self );
+    self->ConstructL( aTestInfo );
+    CleanupStack::Pop( self );
+    return self;
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestCase
+
+    Method: ConstructL
+
+    Description: Second level constructor.
+
+    Parameters: CTestInfo* aTestInfo: Test case info
+    
+    Return Values: None
+
+    Errors/Exceptions: Leaves if CTestInfo copying fails
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CStartedTestCase::ConstructL( const CTestInfo& aTestInfo )
+    {
+
+    iTestInfo = CTestInfo::NewL();
+    iTestInfo->CopyL( aTestInfo );
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestCase
+
+    Method: CStartedTestCase
+
+    Description: Constructor
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CStartedTestCase::CStartedTestCase( CUIEngineContainer& aContainer ):
+    iContainer( &aContainer ),
+    iStatus( CUIStoreIf::EStatusRunning )
+    {
+
+    }
+    
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestCase
+
+    Method: CStartedTestCase
+
+    Description: Private Constructor for internal use
+
+    Parameters: CTestInfo* aTestInfo: in: new testinfo
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CStartedTestCase::CStartedTestCase( CTestInfo* aTestInfo, 
+                                    TFullTestResult aResult, 
+                                    TInt aStatus ):
+    iContainer( 0 ),
+    iTestInfo( aTestInfo ),
+    iResult( aResult ),
+    iStatus( aStatus )
+    {
+
+    }
+    
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestCase
+
+    Method: ~CStartedTestCase
+
+    Description: Destructor.
+
+    Cancels the asynchronous request, deallocate memory and closes the testcase.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CStartedTestCase::~CStartedTestCase()
+    {
+    
+    delete iTestInfo;
+    iPrints.ResetAndDestroy();
+    iPrints.Close();
+    
+    }
+ 
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestCase
+
+    Method: SetResult
+
+    Description: Set the result
+
+    Parameters: const TFullTestResult&     :in:      Result
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CStartedTestCase::SetResult(const TFullTestResult& aResult)
+    {
+
+    iResult = aResult;
+
+    iStatus = CUIStoreIf::EStatusExecuted;
+
+    switch( aResult.iCaseExecutionResultType )
+        {
+        case TFullTestResult::ECaseExecuted:
+            if( aResult.iTestResult.iResult == KErrNone )
+                {
+                iStatus |= CUIStoreIf::EStatusPassed;
+                }
+            else
+                {
+                iStatus |= CUIStoreIf::EStatusFailed;
+                }
+            break;
+        case TFullTestResult::ECaseCancelled:
+        case TFullTestResult::ECaseTimeout:
+        case TFullTestResult::ECaseSuicided:
+            iStatus |= CUIStoreIf::EStatusAborted;
+            break;
+        default:
+            iStatus |= CUIStoreIf::EStatusCrashed;
+            break;
+        }
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestCase
+
+    Method: UIEngineContainer
+
+    Description: Returns the UIEngineContainer
+
+    Parameters: None
+
+    Return Values: CUIEngineContainer& 
+
+    Errors/Exceptions: Panics if called for testcase that is not running
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+EXPORT_C CUIEngineContainer& CStartedTestCase::UIEngineContainer() const
+    { 
+    
+    if( !( iStatus & CUIStoreIf::EStatusRunning ) ) 
+        {
+        __RDEBUG( _L("CStartedTestCase::UIEngineContainer for test case that is not running"));
+        User::Panic( KStartedTestCase, KErrNotFound );
+        }
+    
+    return *iContainer;
+    
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    DESCRIPTION
+
+    This module contains implementation of CStartedTestSet class 
+    member functions.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: NewL
+
+    Description: Create a testcase container.
+
+    Parameters: const CTestSetInfo& aTestSetInfo: in: test set info
+                CUIStore::TSetType aType: in: set type
+
+    Return Values: CStartedTestSet* : pointer to created object
+
+    Errors/Exceptions: Leaves if memory allocation for object fails
+                       Leaves if ConstructL leaves
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CStartedTestSet* CStartedTestSet::NewL( CUIStore* aUIStore, 
+                                        const CTestSetInfo& aTestSetInfo,
+                                        TSetType aType )
+    {
+
+    CStartedTestSet* self = new ( ELeave ) CStartedTestSet( aUIStore, aType );
+    CleanupStack::PushL( self );
+    self->ConstructL( aTestSetInfo );
+    CleanupStack::Pop( self );
+    return self;
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: ConstructL
+
+    Description: Second level constructor.
+
+    Parameters: const CTestSetInfo& aTestSetInfo: in: Test set info
+    
+    Return Values: None
+
+    Errors/Exceptions: Leaves if CTestSetInfo copying fails
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CStartedTestSet::ConstructL( const CTestSetInfo& aTestSetInfo )
+    {
+
+    iTestSetInfo = CTestSetInfo::NewL( aTestSetInfo.Name() );
+    iTestSetInfo->CopyL( aTestSetInfo );
+
+    iOriginalTestSet = const_cast<CTestSetInfo*>(&aTestSetInfo);
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: CStartedTestSet
+
+    Description: Constructor
+
+    Parameters: CUIStore::TSetType aType: in: set type
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CStartedTestSet::CStartedTestSet( CUIStore* aUIStore, 
+                                  TSetType aType ):
+    iUIStore( aUIStore ),
+    iResultSet( EFalse ),
+    iType( aType ),
+    iStatus( CUIStoreIf::ESetRunning ),
+    iNext( 0 ),
+    iRunningCases( 0 ),
+    iOriginalTestSet ( NULL )
+    {
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: ~CStartedTestSet
+
+    Description: Destructor.
+
+    Cancels the asynchronous request, deallocate memory and closes the testcase.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CStartedTestSet::~CStartedTestSet()
+    {
+    
+    delete iTestSetInfo;
+    iTestSetInfo = 0;
+    iTestCases.Reset();
+    iTestCases.Close();
+    
+    }
+ 
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: StartNext
+
+    Description: Start next testcase. 
+    
+    Parameters: None
+
+    Return Values: KErrNone: test case started
+                   KErrNotFound: no test cases found.
+                   Other Symbian OS error code
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CStartedTestSet::StartNext()
+    {
+    TInt ret = KErrNone;
+    
+    TInt count = iTestSetInfo->TestCases().Count();
+    if( iNext >= count )
+        {
+        // All test cases running or completed, no more cases to start
+        return KErrNotFound;
+        }
+    
+    TInt index = 0;
+    if( iType == ESetSequential )
+        {
+        // Get test case index to be executed (when in NotExecutedCasesMode)
+        if(iNotStartedCasesMode)
+            {
+            iNext = iTestSetInfo->GetLastStartedCaseIndex();
+
+            if(iNext >= count)
+                {
+                // All test cases running or completed, no more cases to start
+                return KErrNotFound;
+                }
+
+            iTestSetInfo->SetLastStartedCaseIndex(iNext + 1);
+            if(iOriginalTestSet)
+                {
+                iOriginalTestSet->SetLastStartedCaseIndex(iNext + 1);
+                // Update only if original test set exists
+                iUIStore->UpdateTestSet(*iOriginalTestSet);
+                }
+            }
+
+        // Start next one and return
+        ret = iUIStore->StartTestCase( iTestSetInfo->TestCases()[iNext],
+                                       index );
+        if( ret != KErrNone )
+            {
+            return ret;
+            }
+        iNext++;
+        TRAPD( err,
+            CStartedTestCase& testCase = iUIStore->StartedTestCaseL( index );
+            ret = iTestCases.Append( testCase );
+            );
+        if( err != KErrNone )
+            {
+            User::Panic( KStartedTestSet, err );
+            }
+        }
+    else
+        {
+        // Start all cases
+        for( ; iNext<count; iNext++ )
+            {
+            ret = iUIStore->StartTestCase( iTestSetInfo->TestCases()[iNext],
+                                           index );
+            if( ret != KErrNone )
+                {
+                break;
+                }
+            TRAPD( err,
+                CStartedTestCase& testCase = iUIStore->StartedTestCaseL( index );
+                ret = iTestCases.Append( testCase );
+                iRunningCases++;
+                );
+            if( err != KErrNone )
+                {
+                User::Panic( KStartedTestSet, err );
+                }
+            if( ret != KErrNone )
+                {
+                break;
+                }
+            } 
+        }
+    
+    return ret;
+    
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: Abort
+
+    Description: Start next testcase. 
+    
+    Parameters: None
+
+    Return Values: KErrNone: test case started
+                   KErrNotFound: no test cases found.
+                   Other Symbian OS error code
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CStartedTestSet::Abort()
+    {
+    
+    TInt ret = KErrNotFound;
+    TInt count = iTestCases.Count();
+    for( TInt i=0; i<count; i++ )
+        {
+        if( iTestCases[i].Status() & 
+            CUIStoreIf::EStatusRunning )
+            {
+            ret = iTestCases[i].UIEngineContainer().CancelTest();
+            if( ret != KErrNone )
+                {
+                break;
+                }
+            }
+        }
+    
+    // Prevent execution of remaining cases
+    count = iTestSetInfo->TestCases().Count();
+    iNext = count;
+    
+    return ret;  
+     
+    }
+    
+    
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: IsRunning
+
+    Description: Check if test case running in this test set.
+    
+    Parameters: const CStartedTestCase* aTestCase: in: test case info
+
+    Return Values: ETrue: This test set is running specified test case
+                   EFalse: Not running
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TBool CStartedTestSet::IsRunning( const CStartedTestCase* aTestCase )
+    {
+    
+    TInt count = iTestCases.Count();
+    for( TInt i=0; i<count; i++ )
+        {
+        if( aTestCase == &iTestCases[i] )
+            {
+            return ETrue;
+            }
+        }
+        
+    return EFalse;
+    
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: TestCompleted
+
+    Description: Test from this set completed. Start next or 
+                set result for set.
+    
+    Parameters: const CStartedTestCase* aTestCase: in: test case info
+                TFullTestResult aResult: in: test result
+
+    Return Values:  Symbian OS error code
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CStartedTestSet::TestCompleted( const CStartedTestCase* aTestCase, 
+                                     TFullTestResult aResult )  
+    {
+    
+    TInt count = iTestCases.Count();
+    TInt index = 0;
+    for( ; index<count; index++ )
+        {
+        if( aTestCase == &iTestCases[index] )
+            {
+            break;
+            }
+        }
+    if( index == count )
+        {
+        return KErrNotFound;
+        }
+    
+    // Remove from running test cases
+    iRunningCases--;
+    
+    if( iResultSet == EFalse )
+        {
+        // Check test results
+        if( ( aResult.iCaseExecutionResultType != 
+              TFullTestResult::ECaseExecuted ) ||
+            ( aResult.iTestResult.iResult != KErrNone ) )
+            {
+            iResult = aResult; 
+            iResultSet = ETrue;
+            }
+        }
+        
+    // Start next test case
+    if( StartNext() == KErrNone )
+        {
+        // Test case was started
+        return KErrNone;
+        }
+    
+    if( iRunningCases > 0 )
+        {
+        // Test cases still running in test set
+        return KErrNone;
+        }
+    
+    iStatus = CUIStoreIf::ESetExecuted;
+    if( iResultSet == EFalse )
+        {  
+        // Use the result of last test case all 
+        // test cases where succesfull
+        iResult = aResult;
+        }
+        
+    // Set test case completed 
+    if( ( iResult.iCaseExecutionResultType != 
+          TFullTestResult::ECaseExecuted ) ||
+        ( iResult.iTestResult.iResult != KErrNone ) )
+        {
+        iStatus = CUIStoreIf::ESetFailed;               
+        }   
+    else
+        {
+        iStatus = CUIStoreIf::ESetPassed;
+        }
+        
+    return KErrNone;
+    
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: SetNotExecutedCasesMode
+
+    Description: Sets mode in which only not executed tests will be run.
+    
+    Parameters: TBool aNotExecutedCasesMode: desired mode
+
+    Return Values:  None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+void CStartedTestSet::SetNotStartedCasesMode(TBool aNotStartedCasesMode)
+    {
+    iNotStartedCasesMode = aNotStartedCasesMode;
+    }
+    
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: GetOriginalTestSet
+
+    Description: Returns pointer to original test set.
+    
+    Parameters: None
+
+    Return Values:  Pointer to original test set.
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+CTestSetInfo* CStartedTestSet::GetOriginalTestSet()
+    {
+    return iOriginalTestSet;
+    }
+    
+/*
+-------------------------------------------------------------------------------
+
+    Class: CStartedTestSet
+
+    Method: NullOriginalTestSet
+
+    Description: Sets pointer to original test set to NULL.
+    
+    Parameters: None
+
+    Return Values:  None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+void CStartedTestSet::NullOriginalTestSet()
+    {
+    iOriginalTestSet = NULL;
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    DESCRIPTION
+
+    This module contains implementation of CTestProgress class 
+    member functions.
+
+-------------------------------------------------------------------------------
+*/
+
+// ================= MEMBER FUNCTIONS =========================================
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestProgress
+
+    Method: NewL
+
+    Description: Create CTestProgress.
+
+    Parameters: TTestProgress& aProgress: in: info from test module
+
+    Return Values: CTestProgress* : pointer to created object
+
+    Errors/Exceptions: Leaves if memory allocation for object fails
+                       Leaves if ConstructL leaves
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CTestProgress* CTestProgress::NewL( const TTestProgress& aProgress )
+    {
+
+    CTestProgress* self = new ( ELeave ) CTestProgress();
+    CleanupStack::PushL( self );
+    self->ConstructL( aProgress );
+    CleanupStack::Pop( self );
+    return self;
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestProgress
+
+    Method: ConstructL
+
+    Description: Second level constructor.
+
+    Parameters: TTestProgress& aProgress: in: print info
+    
+    Return Values: None
+
+    Errors/Exceptions: Leaves if TTestProgress copying fails
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CTestProgress::ConstructL( const TTestProgress& aProgress  )
+    {
+    
+    iPosition = aProgress.iPosition;
+    iDescriptionBuf = aProgress.iDescription.AllocL();
+    iTextBuf = aProgress.iText.AllocL();
+    iDescription.Set( iDescriptionBuf->Des() );
+    iText.Set( iTextBuf->Des() );
+    
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestProgress
+
+    Method: ~CTestProgress
+
+    Description: Destructor.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+CTestProgress::~CTestProgress()
+    {
+    
+    delete iTextBuf;
+    delete iDescriptionBuf;
+    
+    }
+ 
+/*
+-------------------------------------------------------------------------------
+
+    Class: CTestProgress
+
+    Method: ReplaceTextL
+
+    Description: Replace text with ne one.
+
+    Parameters: const TTestProgress& aProgress: in: new info
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+void CTestProgress::ReplaceTextL( const TTestProgress& aProgress )
+    {
+    
+    HBufC* tmp = iTextBuf;
+    iTextBuf = 0;
+    CleanupStack::PushL( tmp );
+    iTextBuf = aProgress.iText.AllocL();
+    iText.Set( iTextBuf->Des() );
+    CleanupStack::PopAndDestroy( tmp );
+    
+    }
+
+// End of File