--- /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