diff -r 7fdc9a71d314 -r 8ad140f3dd41 stif/TestEngine/src/TestModuleInfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stif/TestEngine/src/TestModuleInfo.cpp Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,1001 @@ +/* +* 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 +* CTestModuleList class and CTestModuleInfo class member functions. +* +*/ + +// INCLUDE FILES +#include "TestModuleInfo.h" +#include +#include "Logging.h" + +// EXTERNAL DATA STRUCTURES +// None + +// EXTERNAL FUNCTION PROTOTYPES +// None + +// CONSTANTS +// None + +// MACROS +// None + +// LOCAL CONSTANTS AND MACROS +// None + +// MODULE DATA STRUCTURES +// None + +// LOCAL FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +// None + +// ==================== LOCAL FUNCTIONS ======================================= +// None + +#define LOGGER iLogger + +// ================= MEMBER FUNCTIONS ========================================= + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: CTestModuleInfo + + Description: Default constructor + + C++ default constructor can NOT contain any code, that + might leave. + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestModuleInfo::CTestModuleInfo() + { + iLogger = NULL; + iModuleName = NULL; + iIniFileName = NULL; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: ConstructL + + Description: Symbian OS second phase constructor + + Symbian OS default constructor can leave. + + Parameters: aModuleName: module name + aLogger: pointer to stif logger + + Return Values: None + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestModuleInfo::ConstructL(TDesC& aModuleName, CStifLogger* aLogger) + { + iLogger = aLogger; + + if(iModuleName) + { + delete iModuleName; + iModuleName = NULL; + } + iModuleName = aModuleName.AllocL(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: NewL + + Description: Two-phased constructor. + + Parameters: aModuleName: module name + aLogger: pointer to stif logger + + Return Values: CTestModuleInfo* : pointer to created object + + Errors/Exceptions: Leaves if memory allocation for object fails + Leaves if ConstructL leaves + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestModuleInfo* CTestModuleInfo::NewL(TDesC& aModuleName, CStifLogger* aLogger) + { + CTestModuleInfo* self = new (ELeave) CTestModuleInfo(); + CleanupStack::PushL(self); + self->ConstructL(aModuleName, aLogger); + CleanupStack::Pop(self); + return self; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: ~CTestModuleInfo + + Description: Destructor. + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestModuleInfo::~CTestModuleInfo() + { + delete iModuleName; + delete iIniFileName; + + iCfgFiles.ResetAndDestroy(); + iCfgFiles.Close(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: SetIniFile + + Description: Set ini file + + Parameters: aIniFileName: initialization file name + + Return Values: KErrNone if everything went ok + KErrAlreadyExists if ini file was already set + Symbian error code otherwise + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestModuleInfo::SetIniFile(TDesC& aIniFileName) + { + if(iIniFileName) + { + return KErrAlreadyExists; + } + + TRAPD(err, iIniFileName = aIniFileName.AllocL()); + if(err != KErrNone) + { + if(iLogger) + { + __TRACE(KError, (_L("Could not create descriptor (CTestModuleInfo::SetIniFile) for string '%S'. Error %d."), &aIniFileName, err)); + } + else + { + RDebug::Print(_L("Could not create descriptor (CTestModuleInfo::SetIniFile) for string '%S'. Error %d."), &aIniFileName, err); + } + return err; + } + + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: AddCfgFile + + Description: Add config file if it is not yet added to the array + + Parameters: aCfgFileName: file name + + Return Values: KErrNone if everything went ok + KErrAlreadyExists if config file is already present + Symbian error code otherwise + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestModuleInfo::AddCfgFile(TDesC& aCfgFileName) + { + //Check if given file name does not exist already + TInt cnt = iCfgFiles.Count(); + TInt i; + TFileName cfgFileName; + + //Check if given module is already on the list + for(i = 0; i < cnt; i++) + { + iCfgFiles[i]->GetCfgFileName(cfgFileName); + if(cfgFileName == aCfgFileName) + { + return KErrAlreadyExists; + } + } + + //Add to array + TInt err = KErrNone; + CTestCaseFileInfo* tmp = NULL; + TRAP(err, tmp = CTestCaseFileInfo::NewL(aCfgFileName, iLogger)); + if(err != KErrNone) + { + if(iLogger) + { + __TRACE(KError, (_L("Could not create CTestCaseFileInfo object (CTestModuleInfo::AddCfgFile). Error %d."), err)); + } + else + { + RDebug::Print(_L("Could not create CTestCaseFileInfo object (CTestModuleInfo::AddCfgFile). Error %d."), err); + } + return err; + } + if(!tmp) + { + if(iLogger) + { + __TRACE(KError, (_L("Could not create CTestCaseFileInfo object (CTestModuleInfo::AddCfgFile)"))); + } + else + { + RDebug::Print(_L("Could not create CTestCaseFileInfo object (CTestModuleInfo::AddCfgFile)")); + } + return KErrGeneral; + } + + err = iCfgFiles.Append(tmp); + if(err != KErrNone) + { + if(iLogger) + { + __TRACE(KError, (_L("Could not append CTestCaseFileInfo object to array (CTestModuleInfo::AddCfgFile). Error %d."), err)); + } + else + { + RDebug::Print(_L("Could not append CTestCaseFileInfo object to array (CTestModuleInfo::AddCfgFile). Error %d."), err); + } + delete tmp; + return err; + } + + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: CountCfgFiles + + Description: Return number of config files + + Parameters: None + + Return Values: number of config files + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestModuleInfo::CountCfgFiles(void) + { + return iCfgFiles.Count(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: GetModuleName + + Description: Get module name + + Parameters: None + + Return Values: + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestModuleInfo::GetModuleName(TDes& aModuleName) + { + aModuleName.Zero(); + if(iModuleName) + { + aModuleName.Copy(*iModuleName); + } + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: GetIniFileName + + Description: Get module ini file name + + Parameters: None + + Return Values: + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestModuleInfo::GetIniFileName(TDes& aIniFileName) + { + aIniFileName.Zero(); + if(iIniFileName) + { + aIniFileName.Copy(*iIniFileName); + } + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: GetCfgFileName + + Description: Get config file name + + Parameters: aIndex: index of config file + + Return Values: TDesC&: config file name + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestModuleInfo::GetCfgFileName(TInt aIndex, TDes& aCfgFileName) + { + aCfgFileName.Zero(); + TInt cnt = iCfgFiles.Count(); + + //Check index + if(aIndex >= cnt || aIndex < 0) + { + if(iLogger) + { + __TRACE(KError, (_L("Given index reaches out of array (CTestModuleInfo::GetCfgFileName). Given index: %d. Max allowed index: %d"), aIndex, cnt - 1)); + } + else + { + RDebug::Print(_L("Given index reaches out of array (CTestModuleInfo::GetCfgFileName). Given index: %d. Max allowed index: %d"), aIndex, cnt - 1); + } + return KErrArgument; + } + + TInt ret = iCfgFiles[aIndex]->GetCfgFileName(aCfgFileName); + return ret; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleInfo + + Method: GetUncheckedCfgFile + + Description: Get first unchecked test case file + + Parameters: None + + Return Values: Pointer to CTestCaseFileInfo object if found + Null otherwise + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCaseFileInfo* CTestModuleInfo::GetUncheckedCfgFile(void) + { + TInt cnt = iCfgFiles.Count(); + TInt i; + + for(i = 0; i < cnt; i++) + { + if(!iCfgFiles[i]->IsChecked()) + { + return iCfgFiles[i]; + } + } + + return NULL; + } + +// ================= MEMBER FUNCTIONS ========================================= + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: CTestModuleList + + Description: Default constructor + + C++ default constructor can NOT contain any code, that + might leave. + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestModuleList::CTestModuleList() + { + iLogger = NULL; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: ConstructL + + Description: Symbian OS second phase constructor + + Symbian OS default constructor can leave. + + Parameters: aLogger: pointer to stif logger + + Return Values: None + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestModuleList::ConstructL(CStifLogger* aLogger) + { + iLogger = aLogger; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: NewL + + Description: Two-phased constructor. + + Parameters: aLogger: pointer to stif logger + + Return Values: CTestModuleList* : pointer to created object + + Errors/Exceptions: Leaves if memory allocation for object fails + Leaves if ConstructL leaves + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C CTestModuleList* CTestModuleList::NewL(CStifLogger* aLogger) + { + CTestModuleList* self = new (ELeave) CTestModuleList(); + CleanupStack::PushL(self); + self->ConstructL(aLogger); + CleanupStack::Pop(self); + return self; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: ~CTestModuleList + + Description: Destructor. + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C CTestModuleList::~CTestModuleList() + { + iTestModules.ResetAndDestroy(); + iTestModules.Close(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: AddTestModule + + Description: Adds new test module to list if specified module is not already added. + + Parameters: aModuleName: module name + + Return Values: KErrNone if opereation succeeded + KErrAlreadyExists if module is already present on the list + Symbian error code otherwise + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestModuleList::AddTestModule(TDesC& aModuleName) + { + //Check if given module is already on the list + CTestModuleInfo* tmp = GetModule(aModuleName); + if(tmp) + { + return KErrAlreadyExists; + } + + //There is no module on the list, so create new info object + TInt err = KErrNone; + TRAP(err, tmp = CTestModuleInfo::NewL(aModuleName, iLogger)); + if(err != KErrNone) + { + if(iLogger) + { + __TRACE(KError, (_L("Could not create CTestModuleInfo object (CTestModuleList::AddTestModule). Error %d."), err)); + } + else + { + RDebug::Print(_L("Could not create CTestModuleInfo object (CTestModuleList::AddTestModule). Error %d."), err); + } + return err; + } + if(!tmp) + { + if(iLogger) + { + __TRACE(KError, (_L("Could not create CTestModuleInfo object (CTestModuleList::AddTestModule)"))); + } + else + { + RDebug::Print(_L("Could not create CTestModuleInfo object (CTestModuleList::AddTestModule)")); + } + return KErrGeneral; + } + + //Add to list + err = iTestModules.Append(tmp); + if(err != KErrNone) + { + if(iLogger) + { + __TRACE(KError, (_L("Could not append CTestModuleInfo object to array (CTestModuleList::AddTestModule). Error %d."), err)); + } + else + { + RDebug::Print(_L("Could not append CTestModuleInfo object to array (CTestModuleList::AddTestModule). Error %d."), err); + } + delete tmp; + return err; + } + + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: Count + + Description: Counts test modules + + Parameters: None + + Return Values: Number of test modules on list + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestModuleList::Count() + { + return iTestModules.Count(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: GetModule + + Description: Searches test module with given name + + Parameters: aModuleName: module name + + Return Values: Pointer to found object or NULL when not found + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C CTestModuleInfo* CTestModuleList::GetModule(TDesC& aModuleName) + { + TInt cnt = iTestModules.Count(); + TInt i; + CTestModuleInfo* tmp; + TName moduleName; + + //Check if given module is already on the list + for(i = 0; i < cnt; i++) + { + tmp = iTestModules[i]; + tmp->GetModuleName(moduleName); + if(moduleName == aModuleName) + { + return tmp; + } + } + return NULL; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: GetModule + + Description: Searches test module with given index + + Parameters: aIndex: module index + + Return Values: Pointer to found object or NULL when not found + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C CTestModuleInfo* CTestModuleList::GetModule(TInt aIndex) + { + TInt cnt = iTestModules.Count(); + + //Check index + if(aIndex >= cnt || aIndex < 0) + { + if(iLogger) + { + __TRACE(KError, (_L("Given index reaches out of array (CTestModuleList::GetModule). Given index: %d. Max allowed index: %d"), aIndex, cnt - 1)); + } + else + { + RDebug::Print(_L("Given index reaches out of array (CTestModuleList::GetModule). Given index: %d. Max allowed index: %d"), aIndex, cnt - 1); + } + return NULL; + } + + //return module + return iTestModules[aIndex]; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestModuleList + + Method: GetUncheckedCfgFile + + Description: Get first unchecked test case file (module: testscripter and testcombiner) + + Parameters: None + + Return Values: Pointer to CTestCaseFileInfo object if found + Null otherwise + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C CTestCaseFileInfo* CTestModuleList::GetUncheckedCfgFile(void) + { + CTestCaseFileInfo* ret = NULL; + + TBuf<12> modname(_L("testscripter")); + CTestModuleInfo* mod = GetModule(modname); + + if(mod) + { + ret = mod->GetUncheckedCfgFile(); + } + + if(!ret) + { + modname.Copy(_L("testcombiner")); + mod = GetModule(modname); + if(mod) + { + ret = mod->GetUncheckedCfgFile(); + } + } + + return ret; + } + +// ================= MEMBER FUNCTIONS ========================================= + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseFileInfo + + Method: CTestCaseFileInfo + + Description: Default constructor + + C++ default constructor can NOT contain any code, that + might leave. + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCaseFileInfo::CTestCaseFileInfo() + { + iLogger = NULL; + iCfgFileName = NULL; + iChecked = EFalse; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseFileInfo + + Method: ConstructL + + Description: Symbian OS second phase constructor + + Symbian OS default constructor can leave. + + Parameters: aCfgFileName: config file name + aLogger: pointer to Stif logger + + Return Values: None + + Errors/Exceptions: + + Status: Approved + +------------------------------------------------------------------------------- +*/ +void CTestCaseFileInfo::ConstructL(TDesC& aCfgFileName, CStifLogger* aLogger) + { + iLogger = aLogger; + + if(iCfgFileName) + { + delete iCfgFileName; + iCfgFileName = NULL; + } + iCfgFileName = aCfgFileName.AllocL(); + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseFileInfo + + Method: NewL + + Description: Two-phased constructor. + + Parameters: aCfgFileName: config file name + aLogger: pointer to stif logger + + Return Values: CTestCaseFileInfo* : pointer to created object + + Errors/Exceptions: Leaves if memory allocation for object fails + Leaves if ConstructL leaves + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCaseFileInfo* CTestCaseFileInfo::NewL(TDesC& aCfgFileName, CStifLogger* aLogger) + { + CTestCaseFileInfo* self = new (ELeave) CTestCaseFileInfo(); + CleanupStack::PushL(self); + self->ConstructL(aCfgFileName, aLogger); + CleanupStack::Pop(self); + return self; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseFileInfo + + Method: ~CTestCaseFileInfo + + Description: Destructor. + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +CTestCaseFileInfo::~CTestCaseFileInfo() + { + delete iCfgFileName; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseFileInfo + + Method: GetCfgFileName + + Description: Get config file name + + Parameters: None + + Return Values: TDesC& : config file name + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C TInt CTestCaseFileInfo::GetCfgFileName(TDes& aCfgFileName) + { + aCfgFileName.Zero(); + if(iCfgFileName) + { + aCfgFileName.Copy(*iCfgFileName); + } + return KErrNone; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseFileInfo + + Method: SetChecked + + Description: Set configuration file as already checked + + Parameters: None + + Return Values: None + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +EXPORT_C void CTestCaseFileInfo::SetChecked(void) + { + iChecked = ETrue; + } + +/* +------------------------------------------------------------------------------- + + Class: CTestCaseFileInfo + + Method: IsChecked + + Description: Return if config file has been checked + + Parameters: None + + Return Values: 0 if test case file has not been checked yet + other value otherwise + + Errors/Exceptions: None + + Status: Approved + +------------------------------------------------------------------------------- +*/ +TBool CTestCaseFileInfo::IsChecked(void) + { + return iChecked; + } + +// ================= OTHER EXPORTED FUNCTIONS ================================= +// None + +// End of File