# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1272381273 -10800 # Node ID 381827f664907580dd8dc0f6e9ac2fa1c41d3ad9 # Parent 7e287c5c61f0f29b6266b07e69941b21d00413cc Revision: 201015 Kit: 201017 diff -r 7e287c5c61f0 -r 381827f66490 stif/ATSInterface/src/ATSInterface.cpp --- a/stif/ATSInterface/src/ATSInterface.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/ATSInterface/src/ATSInterface.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -561,12 +561,12 @@ _LIT( KEngineIniFile, "-engineini" ); _LIT( KModuleIniFile, "-moduleini" ); - const TInt length = User().CommandLineLength(); + const TInt length = User::CommandLineLength(); HBufC* cmdLine = HBufC::NewLC( length ); TPtr ptr = cmdLine->Des(); - User().CommandLine( ptr ); + User::CommandLine( ptr ); TBool moduleFound( EFalse ); TLex lex( ptr ); diff -r 7e287c5c61f0 -r 381827f66490 stif/StifTFwIf/src/UIEngineContainer.cpp --- a/stif/StifTFwIf/src/UIEngineContainer.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/StifTFwIf/src/UIEngineContainer.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -480,7 +480,6 @@ { // Call TestExecuted of CUIEngine interface iUIEngine->TestExecuted(this, iRunner->FullResult() ); - iState = EFinished; } } diff -r 7e287c5c61f0 -r 381827f66490 stif/TestCombiner/inc/TestCombiner.h --- a/stif/TestCombiner/inc/TestCombiner.h Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestCombiner/inc/TestCombiner.h Tue Apr 27 18:14:33 2010 +0300 @@ -655,6 +655,10 @@ RTimer iPauseTimer; TName iPausedTestCase; TInt iPauseTime; + + // Pause combiner timer + RTimer iPauseCombTimer; + TInt iPauseCombRemainingTime; // Temporary line buffer HBufC* iLine; diff -r 7e287c5c61f0 -r 381827f66490 stif/TestCombiner/src/TestCombiner.cpp --- a/stif/TestCombiner/src/TestCombiner.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestCombiner/src/TestCombiner.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -2445,8 +2445,21 @@ */ void CTestRunner::ConstructL() { - - iPauseTimer.CreateLocal(); + TInt ret; + + ret = iPauseTimer.CreateLocal(); + if(ret != KErrNone) + { + __TRACE( KError, (_L("Unable to create RTimer: iPauseTimer [%d] "), ret)); + User::Leave(ret); + } + + ret = iPauseCombTimer.CreateLocal(); + if(ret != KErrNone) + { + __TRACE( KError, (_L("Unable to create RTimer: iPauseCombTimer [%d] "), ret)); + User::Leave(ret); + } iRemoteTimer = CRemoteTimer::NewL( iTestCombiner ); @@ -2515,6 +2528,8 @@ iLine = 0; iPauseTimer.Close(); + + iPauseCombTimer.Close(); } @@ -2550,8 +2565,34 @@ User::Leave( KErrGeneral ); } - TBool continueTask = EFalse; + TBool continueTask = EFalse; + + // Check if there is still some time for combiner pause and we need to + // continue pausing + if(iPauseCombRemainingTime > 0) + { + // Maximum time for one RTimer::After request + TInt maximumTime = KMaxTInt / 1000; + + __TRACE( KMessage, (_L("CTestRunner::RunL: Going to reissue PauseCombiner request ") ) ); + __TRACE( KMessage, (_L("CTestRunner::RunL: iRemainingTimeValue = %d"), iPauseCombRemainingTime ) ); + if( iPauseCombRemainingTime < maximumTime ) + { + iPauseCombTimer.After(iStatus, (iPauseCombRemainingTime * 1000)); + iPauseCombRemainingTime = 0; + } + else + { + iPauseCombRemainingTime -= maximumTime; + iPauseCombTimer.After(iStatus, (maximumTime * 1000)); + } + + SetActive(); + return; + } + + // Handling runner states switch( iState ) { case ERunnerWaitTimeout: @@ -2695,6 +2736,8 @@ __TRACE( KMessage, (_L("CTestRunner::DoCancel"))); iTestCombiner->TestModuleIf().Printf( KPrintPriLow, _L("Runner"), _L("DoCancel")); + iPauseCombTimer.Cancel(); + switch( iState ) { case ERunnerWaitTimeout: @@ -3397,7 +3440,7 @@ _LIT( KErrMsgPauseTimeoutNotDefined, "PauseCombiner : No timeout value given or value has invalid format" ); _LIT( KErrMsgPauseTimeoutNotPositive, "PauseCombiner : Timeout value can't be <0" ); - TBool continueTask = ETrue; + TBool continueTask = EFalse; TInt pauseTime; TInt ret = KErrNone; @@ -3416,12 +3459,31 @@ User::Leave( KErrArgument ); } - //Time given by End User should be given in miliseconds - pauseTime*=1000; - - __TRACE( KMessage, (_L("time=%d"), pauseTime ) ); - - User::After( pauseTime ); + + // Maximum time for one RTimer::After request + TInt maximumTime = KMaxTInt / 1000; + + // Check if pause value is suitable for RTimer::After + if(pauseTime < maximumTime) + { + iPauseCombTimer.After(iStatus, pauseTime * 1000); + iPauseCombRemainingTime = 0; + } + else + { + // Given pause value after multiplication with 1000 is + // larger than KMaxTInt, so we need to split it and + // re-request After with remaining value from RunL + + iPauseCombRemainingTime = pauseTime - maximumTime; + iPauseCombTimer.After(iStatus, maximumTime * 1000); + } + + SetActive(); + + __TRACE(KMessage, (_L("Executing pause, time=[%d]"), pauseTime)); + + iState = ERunnerRunning; return continueTask; } diff -r 7e287c5c61f0 -r 381827f66490 stif/TestEngine/inc/TestEngine.h --- a/stif/TestEngine/inc/TestEngine.h Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestEngine/inc/TestEngine.h Tue Apr 27 18:14:33 2010 +0300 @@ -59,20 +59,25 @@ }; // Struct to Test report settings -class TTestReportSettings +NONSHARABLE_CLASS(CTestReportSettings) + :public CBase { public: + + /** + * NewL is two-phased constructor. + */ + static CTestReportSettings* NewL(); - TTestReportSettings(){ iCreateTestReport = ETrue; - iPath = NULL; - iName = NULL; - iFormat = CStifLogger::ETxt; - iOutput = CStifLogger::EFile; - iOverwrite = ETrue; - iXML = EFalse; - } - ~TTestReportSettings(){ delete iPath; delete iName; } + ~CTestReportSettings(); + + private: + CTestReportSettings(); + /** + * By default Symbian OS constructor is private. + */ + void ConstructL(); public: @@ -231,7 +236,7 @@ public: // Data // Test report settings - TTestReportSettings iTestReportSettings; + CTestReportSettings* iTestReportSettings; // Logger overwrite settings TLoggerSettings iLoggerSettings; diff -r 7e287c5c61f0 -r 381827f66490 stif/TestEngine/inc/TestReport.h --- a/stif/TestEngine/inc/TestReport.h Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestEngine/inc/TestReport.h Tue Apr 27 18:14:33 2010 +0300 @@ -156,7 +156,7 @@ /** * Two-phased constructor. */ - static CTestReport* NewL( TTestReportSettings& aTestReportSettings, + static CTestReport* NewL( CTestReportSettings& aTestReportSettings, const TTestReportMode aReportMode ); /** @@ -199,7 +199,7 @@ /** * By default Symbian OS constructor is private. */ - void ConstructL( TTestReportSettings& aTestReportSettings ); + void ConstructL( CTestReportSettings& aTestReportSettings ); /** * Default C++ constructor. diff -r 7e287c5c61f0 -r 381827f66490 stif/TestEngine/src/TestCaseController.cpp --- a/stif/TestEngine/src/TestCaseController.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestEngine/src/TestCaseController.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -2567,18 +2567,7 @@ __TRACE( KInit, ( _L("Loaded reset module[%S]"), &dllName ) ); } - // Verify the UID - TUid KUidTestModule = TUid::Uid ( 0x101FB3E7 ); - TUidType requiredUID( KDynamicLibraryUid, KSharedLibraryUid, KUidTestModule ); - - TUidType moduleUID = resetModule.Type(); - if ( moduleUID != requiredUID ) - { - // New instance can't be created - RDebug::Print( ( _L("STIF TF: Reset module has invalid UID. Aborting loading!") ) ); - __TRACE ( KError, ( CStifLogger::EError, _L("Reset module has invalid UID. Aborting loading!" ) ) ); - return KErrNotSupported; - } + // Get pointer to first exported function CTestInterfaceFactory libEntry; diff -r 7e287c5c61f0 -r 381827f66490 stif/TestEngine/src/TestEngine.cpp --- a/stif/TestEngine/src/TestEngine.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestEngine/src/TestEngine.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -411,6 +411,8 @@ */ void CTestEngineServer::ConstructL() { + // Create report setting + iTestReportSettings = CTestReportSettings::NewL(); // Create container iContainerIndex = CObjectConIx::NewL(); @@ -505,6 +507,8 @@ __TRACE(KAlways, ( _L( "---------------- Log Ended ----------------" ) ) ); delete iLogger; + delete iTestReportSettings; + iTestReportSettings = NULL; } /* @@ -881,6 +885,7 @@ iTestCases = NULL; } + iTestCaseArray.Close(); delete iTestEngineSubSessions; iTestEngineSubSessions = NULL; @@ -1234,14 +1239,18 @@ void CTestEngine::InitTestReportAndLoggerVarL() { // Test report settings initialization - iTestEngineServer->iTestReportSettings.iCreateTestReport = ETrue; + iTestEngineServer->iTestReportSettings->iCreateTestReport = ETrue; _LIT( path, "C:\\LOGS\\TestFramework\\"); _LIT( name, "TestReport"); - iTestEngineServer->iTestReportSettings.iPath = path().AllocL(); - iTestEngineServer->iTestReportSettings.iName = name().AllocL(); - iTestEngineServer->iTestReportSettings.iFormat = CStifLogger::ETxt; - iTestEngineServer->iTestReportSettings.iOutput = CStifLogger::EFile; - iTestEngineServer->iTestReportSettings.iOverwrite = ETrue; + delete iTestEngineServer->iTestReportSettings->iPath; + iTestEngineServer->iTestReportSettings->iPath = NULL; + iTestEngineServer->iTestReportSettings->iPath = path().AllocL(); + delete iTestEngineServer->iTestReportSettings->iName; + iTestEngineServer->iTestReportSettings->iName = NULL; + iTestEngineServer->iTestReportSettings->iName = name().AllocL(); + iTestEngineServer->iTestReportSettings->iFormat = CStifLogger::ETxt; + iTestEngineServer->iTestReportSettings->iOutput = CStifLogger::EFile; + iTestEngineServer->iTestReportSettings->iOverwrite = ETrue; // Initializations to indicator is setting in use iTestEngineServer->iLoggerSettings.iIsDefined.iCreateLogDir = EFalse; @@ -1370,10 +1379,10 @@ Logger()->WriteDelimiter(); // Create Test Reporter if allowed - if ( iTestEngineServer->iTestReportSettings.iCreateTestReport ) + if ( iTestEngineServer->iTestReportSettings->iCreateTestReport ) { TRAPD(err, iTestReport = - CTestReport::NewL( iTestEngineServer->iTestReportSettings, + CTestReport::NewL( *(iTestEngineServer->iTestReportSettings), ( CTestReport::TTestReportMode ) iReportMode )); if(err!=KErrNone) { @@ -1476,7 +1485,7 @@ if ( get_ret == KErrNone ) { __TRACE( KInit,( _L( "Test report creation indicator: %d"), createTestReport ) ); - iTestEngineServer->iTestReportSettings.iCreateTestReport = createTestReport; + iTestEngineServer->iTestReportSettings->iCreateTestReport = createTestReport; } else { @@ -1484,7 +1493,7 @@ } // Get Test report path settings - if ( iTestEngineServer->iTestReportSettings.iCreateTestReport ) + if ( iTestEngineServer->iTestReportSettings->iCreateTestReport ) { __TRACE( KInit,( _L( "Parsing Test report path" ) ) ); TPtrC path; @@ -1494,9 +1503,9 @@ { __TRACE( KInit,( _L( "Test report path: %S"), &path ) ); // Delete old one before setting new one - delete iTestEngineServer->iTestReportSettings.iPath; - iTestEngineServer->iTestReportSettings.iPath = NULL; - iTestEngineServer->iTestReportSettings.iPath = path.AllocL(); + delete iTestEngineServer->iTestReportSettings->iPath; + iTestEngineServer->iTestReportSettings->iPath = NULL; + iTestEngineServer->iTestReportSettings->iPath = path.AllocL(); } else { @@ -1505,7 +1514,7 @@ } // Get Test report name settings - if ( iTestEngineServer->iTestReportSettings.iCreateTestReport ) + if ( iTestEngineServer->iTestReportSettings->iCreateTestReport ) { __TRACE( KInit,( _L( "Parsing Test report filename" ) ) ); TPtrC name; @@ -1515,9 +1524,9 @@ { __TRACE( KInit,( _L( "Test report filename: %S"), &name ) ); // Delete old one before setting new one - delete iTestEngineServer->iTestReportSettings.iName; - iTestEngineServer->iTestReportSettings.iName = NULL; - iTestEngineServer->iTestReportSettings.iName = name.AllocL(); + delete iTestEngineServer->iTestReportSettings->iName; + iTestEngineServer->iTestReportSettings->iName = NULL; + iTestEngineServer->iTestReportSettings->iName = name.AllocL(); } else { @@ -1526,7 +1535,7 @@ } // Get Test report format settings - if ( iTestEngineServer->iTestReportSettings.iCreateTestReport ) + if ( iTestEngineServer->iTestReportSettings->iCreateTestReport ) { __TRACE( KInit,( _L( "Parsing Test report format" ) ) ); CStifLogger::TLoggerType type; @@ -1536,8 +1545,8 @@ if ( get_ret == KErrNone ) { __TRACE( KInit,( _L( "Test report format: %d, xml: %d"), type, xml ) ); - iTestEngineServer->iTestReportSettings.iFormat = type; - iTestEngineServer->iTestReportSettings.iXML = xml; + iTestEngineServer->iTestReportSettings->iFormat = type; + iTestEngineServer->iTestReportSettings->iXML = xml; } else { @@ -1546,7 +1555,7 @@ } // Get Test report output settings - if ( iTestEngineServer->iTestReportSettings.iCreateTestReport ) + if ( iTestEngineServer->iTestReportSettings->iCreateTestReport ) { __TRACE( KInit,( _L( "Parsing Test report output" ) ) ); CStifLogger::TOutput output; @@ -1555,7 +1564,7 @@ if ( get_ret == KErrNone ) { __TRACE( KInit,( _L( "Test report output: %d"), output ) ); - iTestEngineServer->iTestReportSettings.iOutput = output; + iTestEngineServer->iTestReportSettings->iOutput = output; } else { @@ -1564,7 +1573,7 @@ } // Get Test report file creation mode (overwrite settings) - if ( iTestEngineServer->iTestReportSettings.iCreateTestReport ) + if ( iTestEngineServer->iTestReportSettings->iCreateTestReport ) { __TRACE( KInit,( _L( "Parsing Test report file writing mode" ) ) ); TBool overwrite; @@ -1573,7 +1582,7 @@ if ( get_ret == KErrNone ) { __TRACE( KInit,( _L( "Test report file creation mode: %d"), overwrite ) ); - iTestEngineServer->iTestReportSettings.iOverwrite = overwrite; + iTestEngineServer->iTestReportSettings->iOverwrite = overwrite; } else { @@ -5570,6 +5579,74 @@ DESCRIPTION + Default constructor + +------------------------------------------------------------------------------- +*/ +CTestReportSettings::CTestReportSettings() + { + iCreateTestReport = ETrue; + iPath = NULL; + iName = NULL; + iFormat = CStifLogger::ETxt; + iOutput = CStifLogger::EFile; + iOverwrite = ETrue; + iXML = EFalse; + } + +/* +------------------------------------------------------------------------------- + + DESCRIPTION + + Two-phased constructor. + +------------------------------------------------------------------------------- +*/ +CTestReportSettings* CTestReportSettings::NewL() + { + CTestReportSettings* self = new ( ELeave ) CTestReportSettings(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +/* +------------------------------------------------------------------------------- + + DESCRIPTION + + Symbian OS second phase constructor + +------------------------------------------------------------------------------- +*/ +void CTestReportSettings::ConstructL() + { + + } +/* +------------------------------------------------------------------------------- + + DESCRIPTION + + Destructor + +------------------------------------------------------------------------------- +*/ +CTestReportSettings::~CTestReportSettings() + { + delete iPath; + iPath = NULL; + delete iName; + iName = NULL; + } + +/* +------------------------------------------------------------------------------- + + DESCRIPTION + This module contains implementation of CRebootParams class member functions. ------------------------------------------------------------------------------- diff -r 7e287c5c61f0 -r 381827f66490 stif/TestEngine/src/TestModuleController.cpp --- a/stif/TestEngine/src/TestModuleController.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestEngine/src/TestModuleController.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -393,10 +393,11 @@ iTestCaseArray.Close(); // Release the config file array + iConfigFiles.ResetAndDestroy(); iConfigFiles.Close(); // Release the config file array - iFailedEnumerateConfig.Reset(); + iFailedEnumerateConfig.ResetAndDestroy(); iFailedEnumerateConfig.Close(); // Release the children array diff -r 7e287c5c61f0 -r 381827f66490 stif/TestEngine/src/TestReport.cpp --- a/stif/TestEngine/src/TestReport.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestEngine/src/TestReport.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -194,7 +194,7 @@ ------------------------------------------------------------------------------- */ -void CTestReport::ConstructL( TTestReportSettings& aTestReportSettings ) +void CTestReport::ConstructL( CTestReportSettings& aTestReportSettings ) { // Create summary for all test cases _LIT( KName, "All test cases" ); @@ -307,7 +307,7 @@ ------------------------------------------------------------------------------- */ -CTestReport* CTestReport::NewL( TTestReportSettings& aTestReportSettings, +CTestReport* CTestReport::NewL( CTestReportSettings& aTestReportSettings, const TTestReportMode aReportMode ) { CTestReport* self = new ( ELeave ) CTestReport( aReportMode ); @@ -339,6 +339,9 @@ */ CTestReport::~CTestReport() { + iTestModulesVersionsInfo.ResetAndDestroy(); + iTestModulesVersionsInfo.Close(); + // Reset and destroy arrays iTestSummaries.ResetAndDestroy(); delete iTotalSummary; diff -r 7e287c5c61f0 -r 381827f66490 stif/TestInterface/src/TestInterface.cpp --- a/stif/TestInterface/src/TestInterface.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestInterface/src/TestInterface.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -418,7 +418,7 @@ //__UHEAP_MARK; // Get module name from command line - const TInt length = User().CommandLineLength(); + const TInt length = User::CommandLineLength(); HBufC* cmdLine = HBufC::New( length ); if ( cmdLine == NULL ) @@ -428,7 +428,7 @@ } TPtr moduleName = cmdLine->Des(); - User().CommandLine( moduleName ); + User::CommandLine( moduleName ); RDebug::Print(_L("StartSession() Received data [%S]"), &moduleName); diff -r 7e287c5c61f0 -r 381827f66490 stif/TestServer/inc/TestServer.h --- a/stif/TestServer/inc/TestServer.h Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestServer/inc/TestServer.h Tue Apr 27 18:14:33 2010 +0300 @@ -703,7 +703,64 @@ }; +// DESCRIPTION +// CTestCasesList is a class, which contains list of test cases assosiated with +// specified config file. +NONSHARABLE_CLASS( CTestCasesList ): public CBase + { +public: + /** + * NewL is first phase of two-phased constructor. + */ + static CTestCasesList* NewL( const TDesC& aConfigFileName ); +public: + /** + * Destructor of CTestServer. + */ + ~CTestCasesList(); + /** + * Appends test case. + */ + void AppendTestCaseL( const TDesC& aTestCaseTitle ); + + /** + * Returns specified test case title. + */ + const TDesC& GetTestCaseTitleL( TInt aIndex ) const; + + /** + * Returns config file name. + */ + const TDesC& GetConfigFileName() const; + + /** + * Returns count of test cases. + */ + TInt Count() const; + + /** + * Resets list of test cases. + */ + void ResetAndDestroy(); +private: + /** + * C++ default constructor. + */ + CTestCasesList(); + + /** + * By default Symbian OS constructor is private. + */ + void ConstructL( const TDesC& aConfigFileName ); +private: + // Config file name + HBufC* iConfigFileName; + // List of test cases + RPointerArray iTestCases; + }; + + // DESCRIPTION // CTestModule is a session class. // Session for the CTestServer server, to a single client-side session @@ -844,7 +901,7 @@ /** * Get title of currently running test case */ - void GetTestCaseTitleL(TInt aTestCaseNumber, TDes& aTestCaseTitle); + void GetTestCaseTitleL(TInt aTestCaseNumber, const TDesC& aConfigFile, TDes& aTestCaseTitle); /** * Get pointer to test server @@ -901,7 +958,7 @@ TBool iErrorMessageAvailable; // Error message available? - RPointerArray iTestCaseTitles; //Test case titles + RPointerArray iTestCaseTitlesMap; //Test case titles public: // Friend classes // None diff -r 7e287c5c61f0 -r 381827f66490 stif/TestServer/src/TestExecutionThread.cpp --- a/stif/TestServer/src/TestExecutionThread.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestServer/src/TestExecutionThread.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -272,22 +272,7 @@ __TRACEI (KInit, ( _L("Loaded test module[%S]"), &moduleName ) ); } - // Verify the UID - TUid KUidTestModule = TUid::Uid ( 0x101FB3E7 ); - TUidType requiredUID( KDynamicLibraryUid, KSharedLibraryUid, KUidTestModule ); - - TUidType moduleUID = aModule.Type(); - if ( moduleUID != requiredUID ) - { - // New instance can't be created - RDebug::Print( ( _L("STIF TF: Test module has invalid UID. Aborting loading!") ) ); - __TRACEI (KError, ( CStifLogger::EError, _L("Test module has invalid UID. Aborting loading!"))); - tmpBuffer.Format(_L("Module [%S] has invalid UID"), &moduleName); - ErrorPrint( 1, tmpBuffer ); - ModuleContainer().OperationErrorResult() = KErrNotSupported; - return KErrNotSupported; - } - + // Get pointer to first exported function ModuleContainer().OperationText() = _L("1st EXPORTED function"); CTestInterfaceFactory libEntry; diff -r 7e287c5c61f0 -r 381827f66490 stif/TestServer/src/TestModuleContainer.cpp --- a/stif/TestServer/src/TestModuleContainer.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestServer/src/TestModuleContainer.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -1747,19 +1747,7 @@ __TRACE( KInit, ( _L("Loaded test module[%S]"), &dllName ) ); } - // Verify the UID - TUid KUidTestModule = TUid::Uid ( 0x101FB3E7 ); - TUidType requiredUID( KDynamicLibraryUid, KSharedLibraryUid, KUidTestModule ); - - TUidType moduleUID = testModule.Type(); - if ( moduleUID != requiredUID ) - { - // New instance can't be created - RDebug::Print( ( _L("STIF TF: Test module has invalid UID. Aborting loading!") ) ); - __TRACE ( KError, ( CStifLogger::EError, _L("Test module has invalid UID. Aborting loading!" ) ) ); - testModule.Close(); - return KErrNotSupported; - } + CTestInterfaceFactoryTestModule libEntry = NULL; @@ -1973,7 +1961,10 @@ */ void CTestModuleContainer::GetTestCaseTitleL(TDes& aTestCaseTitle) { - iCTestModule->GetTestCaseTitleL(iOperationIntBuffer, aTestCaseTitle); //currently run test case stored in the iOperationIntBuffer variable + //currently run test case stored in the iOperationIntBuffer variable + iCTestModule->GetTestCaseTitleL( iOperationIntBuffer, + iCTestExecution->GetConfigFileName(), + aTestCaseTitle); } diff -r 7e287c5c61f0 -r 381827f66490 stif/TestServer/src/Testserversession.cpp --- a/stif/TestServer/src/Testserversession.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestServer/src/Testserversession.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -55,6 +55,234 @@ // ================= MEMBER FUNCTIONS ========================================= +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: NewL + + Description: Create new test cases list + + Parameters: const TDesC& aConfigFileName :in: Config file name + + Return Values: CTestCasesList* Pointer to new test cases list + + Errors/Exceptions: Leaves if memory allocation fails or ConstructL leaves. + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCasesList* CTestCasesList::NewL( const TDesC& aConfigFileName ) + { + CTestCasesList* self = new(ELeave)CTestCasesList; + CleanupStack::PushL( self ); + self->ConstructL( aConfigFileName ); + CleanupStack::Pop( self ); + return self; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: ~CTestCasesList + + Description: Destructor + + Parameters: + + Return Values: + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCasesList::~CTestCasesList() + { + delete iConfigFileName; + iConfigFileName = NULL; + iTestCases.ResetAndDestroy(); + iTestCases.Close(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: AppendTestCaseL + + Description: Appends test case. + + Parameters: const TDesC& aTestCaseTitle in: Test case title + + Return Values: + + Errors/Exceptions: Leaves if memory allocation fails + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestCasesList::AppendTestCaseL( const TDesC& aTestCaseTitle ) + { + HBufC* testCaseTitle = aTestCaseTitle.AllocL(); + CleanupStack::PushL( testCaseTitle ); + iTestCases.AppendL( testCaseTitle ); + CleanupStack::Pop( testCaseTitle ); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: GetTestCaseTitleL + + Description: Returns specified test case title + + Parameters: TInt aIndex: in: Requested test case index. + + Return Values: Test case title. + + Errors/Exceptions: Leaves if test case index is invalid + + Status: Approved + +------------------------------------------------------------------------------- +*/ +const TDesC& CTestCasesList::GetTestCaseTitleL( TInt aIndex ) const + { + if ( ( aIndex < 0 ) || ( aIndex >= iTestCases.Count() ) ) + { + User::Leave( KErrNotFound ); + } + return *iTestCases[ aIndex ]; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: GetConfigFileName + + Description: Returns config file name + + Parameters: + + Return Values: Config file name. + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +const TDesC& CTestCasesList::GetConfigFileName() const + { + return *iConfigFileName; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: Count + + Description: Returns count of test cases. + + Parameters: + + Return Values: Test cases count. + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TInt CTestCasesList::Count() const + { + return iTestCases.Count(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: ResetAndDestroy + + Description: Resets list of test cases. + + Parameters: + + Return Values: + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestCasesList::ResetAndDestroy() + { + iTestCases.ResetAndDestroy(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: ~CTestCasesList + + Description: Destructor + + Parameters: + + Return Values: + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCasesList::CTestCasesList() + { + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCasesList + + Method: ~CTestCasesList + + Description: Destructor + + Parameters: + + Return Values: + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestCasesList::ConstructL( const TDesC& aConfigFileName ) + { + iConfigFileName = aConfigFileName.AllocL(); + } /* ------------------------------------------------------------------------------- @@ -188,8 +416,8 @@ iIniBuffer = NULL; // Delete array of test case titles - iTestCaseTitles.ResetAndDestroy(); - iTestCaseTitles.Close(); + iTestCaseTitlesMap.ResetAndDestroy(); + iTestCaseTitlesMap.Close(); } /* @@ -690,18 +918,34 @@ User::Leave( KErrGeneral ); } + CTestCasesList* testCasesList = NULL; + for ( TInt i = 0; i < iTestCaseTitlesMap.Count(); i++ ) + { + if ( iTestCaseTitlesMap[ i ]->GetConfigFileName() == config ) + { + testCasesList = iTestCaseTitlesMap[ i ]; + break; + } + } + if ( testCasesList == NULL ) + { + testCasesList = CTestCasesList::NewL( config ); + CleanupStack::PushL( testCasesList ); + iTestCaseTitlesMap.AppendL( testCasesList ); + CleanupStack::Pop( testCasesList ); + } + // Store titles (for further use, i.e. when asked for title from the interface via CTestModuleIf->CTestThreadContainer->CTestModuleContainer) - iTestCaseTitles.ResetAndDestroy(); + testCasesList->ResetAndDestroy(); TInt i; for(i = 0; i < testCases->Count(); i++) { //Handle situation when test cases are enumerated not as 0-based (testscripter, ...) if(i == 0 && (*testCases)[i]->iCaseNumber > 0) { - iTestCaseTitles.Append(NULL); + testCasesList->AppendTestCaseL( KNullDesC ); } - HBufC* title = (*testCases)[i]->iTitle.AllocL(); - iTestCaseTitles.Append(title); + testCasesList->AppendTestCaseL( (*testCases)[i]->iTitle ); } TPckgBuf countPckg( testCases->Count() ); @@ -1380,10 +1624,25 @@ ------------------------------------------------------------------------------- */ -void CTestModule::GetTestCaseTitleL(TInt aTestCaseNumber, TDes& aTestCaseTitle) +void CTestModule::GetTestCaseTitleL(TInt aTestCaseNumber, const TDesC& aConfigFile,TDes& aTestCaseTitle) { - RDebug::Print(_L("Trying to get test case title from module. Index=%d, count=%d"), aTestCaseNumber, iTestCaseTitles.Count()); - aTestCaseTitle.Copy(*(iTestCaseTitles[aTestCaseNumber])); + CTestCasesList* testCasesList = NULL; + for ( TInt i = 0; i < iTestCaseTitlesMap.Count(); i++ ) + { + if ( iTestCaseTitlesMap[ i ]->GetConfigFileName() == aConfigFile ) + { + testCasesList = iTestCaseTitlesMap[ i ]; + break; + } + } + if ( testCasesList == NULL ) + { + User::Leave( KErrNotFound ); + } + + RDebug::Print(_L("Trying to get test case title from module. Index=%d, count=%d"), aTestCaseNumber, testCasesList->Count() ); + + aTestCaseTitle.Copy( testCasesList->GetTestCaseTitleL( aTestCaseNumber ) ); } diff -r 7e287c5c61f0 -r 381827f66490 stif/TestServerStarter/src/TestServerStarter.cpp --- a/stif/TestServerStarter/src/TestServerStarter.cpp Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/TestServerStarter/src/TestServerStarter.cpp Tue Apr 27 18:14:33 2010 +0300 @@ -53,7 +53,7 @@ RDebug::Print(_L("STIF: New process starting")); // Get module name from command line - const TInt length = User().CommandLineLength(); + const TInt length = User::CommandLineLength(); HBufC* cmdLine = HBufC::New( length ); @@ -64,7 +64,7 @@ TPtr moduleName = cmdLine->Des(); - User().CommandLine( moduleName ); + User::CommandLine( moduleName ); RDebug::Print(_L("STIF: Received data [%S]"), &moduleName); diff -r 7e287c5c61f0 -r 381827f66490 stif/group/ReleaseNote.txt --- a/stif/group/ReleaseNote.txt Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/group/ReleaseNote.txt Tue Apr 27 18:14:33 2010 +0300 @@ -1,5 +1,5 @@ ======================================================================== -RELEASE NOTE FOR STIF - STIF_201012 (7.3.29) +RELEASE NOTE FOR STIF - STIF_201014 (7.3.30) SUPPORTING SERIES 60 3.0 -> ======================================================================== diff -r 7e287c5c61f0 -r 381827f66490 stif/inc/TestServerModuleIf.h --- a/stif/inc/TestServerModuleIf.h Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/inc/TestServerModuleIf.h Tue Apr 27 18:14:33 2010 +0300 @@ -470,6 +470,7 @@ */ TInt TestThreadMutexHandle() { return iTestThreadMutex.Handle(); }; + const TDesC& GetConfigFileName() const { return iConfig; } public: // Functions from base classes // None diff -r 7e287c5c61f0 -r 381827f66490 stif/inc/version.h --- a/stif/inc/version.h Wed Apr 14 17:35:04 2010 +0300 +++ b/stif/inc/version.h Tue Apr 27 18:14:33 2010 +0300 @@ -20,9 +20,9 @@ #define STIF_MAJOR_VERSION 7 #define STIF_MINOR_VERSION 3 -#define STIF_BUILD_VERSION 29 +#define STIF_BUILD_VERSION 30 -#define STIF_REL_DATE "23th Mar 2010" +#define STIF_REL_DATE "06th Apr 2010" #define TO_UNICODE(text) _L(text) diff -r 7e287c5c61f0 -r 381827f66490 stif/sis/Stif_31.sis Binary file stif/sis/Stif_31.sis has changed