diff -r 86a2e675b80a -r 813b186005b6 stif/ATSInterface/src/ATSInterface.cpp --- a/stif/ATSInterface/src/ATSInterface.cpp Mon Jun 28 15:36:07 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1109 +0,0 @@ -/* -* 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: CATSInterface: This object executes test cases from -* STIF Test Framework. -* -*/ - -// INCLUDE FILES -#include -#include -#include -#include "ATSInterface.h" -#include "ATSInterfaceRunner.h" - -#include "StifTestInterface.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 - -// ================= MEMBER FUNCTIONS ========================================= - - -// ================= MEMBER FUNCTIONS ========================================= - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: CATSInterface - - Description: Default constructor - - C++ default constructor can NOT contain any code, that - might leave. - - Parameters: None - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -CATSInterface::CATSInterface() - { - // Initialize buffers to zero - iEngineIniFile.Zero(); - iModuleIniFile.Zero(); - iConfigFile.Zero(); - iTestModule.Zero(); - - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: ConstructL - - Description: Symbian OS second phase constructor - - Symbian OS default constructor can leave. - - Parameters: None - - Return Values: None - - Errors/Exceptions: Leaves if some of called leaving functions leaves - Leaves each time the LogErrorAndLeaveL is called - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -void CATSInterface::ConstructL() - { - RDebug::Print(_L("Creating module list object")); - TRAPD(err, iModuleList = CTestModuleList::NewL(NULL)); - if(err != KErrNone) - { - LogErrorAndLeaveL(_L("CATSInterface::ConstructL"), _L("CTestModuleList::NewL"), err); - return; - } - if(!iModuleList) - { - LogErrorAndLeaveL(_L("CATSInterface::ConstructL"), _L("CTestModuleList::NewL - iModuleList is NULL"), KErrGeneral); - return; - } - - // Read command line - ParseCommandLineL(); - - // Add to module list info about module taken from command line - RDebug::Print(_L("Adding command line module to list")); - TName moduleName; - moduleName.Copy(iTestModule); - moduleName.LowerCase(); - err = iModuleList->AddTestModule(moduleName); - if(err != KErrNone && err != KErrAlreadyExists) - { - LogErrorAndLeaveL(_L("CATSInterface::ConstructL"), _L("CTestModuleList::AddTestModule - Could not add module to list of modules"), err); - return; - } - - //Get added module - CTestModuleInfo* moduleInfo = iModuleList->GetModule(moduleName); - if(!moduleInfo) - { - LogErrorAndLeaveL(_L("CATSInterface::ConstructL"), _L("CTestModuleList::GetModule - Could not add get module info from list"), KErrGeneral); - return; - } - - //Add ini file if given - if(iModuleIniFile.Length() > 0) - { - TFileName filename; - filename.Copy(iModuleIniFile); - filename.LowerCase(); - moduleInfo->SetIniFile(filename); - } - - //Add config file if given - if(iConfigFile.Length() > 0) - { - TFileName filename; - filename.Copy(iConfigFile); - filename.LowerCase(); - moduleInfo->AddCfgFile(filename); - } - - //Now check all config files if there are included modules - _LIT(KIncludeModuleStart, "[New_Include_Module]"); - _LIT(KIncludeModuleEnd, "[End_Include_Module]"); - - RDebug::Print(_L("Start parsing included modules")); - CTestCaseFileInfo* finfo = iModuleList->GetUncheckedCfgFile(); - while(finfo) - { - TFileName fname; - finfo->GetCfgFileName(fname); - - RDebug::Print(_L("Checking file: '%S'"), &fname); - finfo->SetChecked(); - - CStifParser* parser = NULL; - - TRAP(err, parser = CStifParser::NewL(_L(""), fname)); - if(err != KErrNone) - { - LogErrorAndLeaveL(_L("CATSInterface::ConstructL"), _L("CStifParser::NewL - Could not create parser"), err); - return; - } - CleanupStack::PushL(parser); - - ParseTestModulesL(parser, iModuleList, KIncludeModuleStart, KIncludeModuleEnd); - - CleanupStack::PopAndDestroy(parser); - finfo = iModuleList->GetUncheckedCfgFile(); - } - RDebug::Print(_L("End parsing included modules")); - - // Create Test Engine - RDebug::Print(_L("Creating test engine")); - TInt ret = iTestEngineServ.Connect(); - if ( ret != KErrNone ) - { - // Log error - LogErrorAndLeaveL( _L("CATSInterface::ConstructL"), _L("iTestEngineServ.Connect"), ret ); - return; - } - - ret = iTestEngine.Open( iTestEngineServ, iEngineIniFile ); - if ( ret != KErrNone ) - { - // Log error - LogErrorAndLeaveL( _L("CATSInterface::ConstructL"), _L("iTestEngine.Open"), ret ); - return; - } - -/* - // Add test module - ret = iTestEngine.AddTestModule( iTestModule, iModuleIniFile ); - if ( ret != KErrNone && ret != KErrAlreadyExists ) - { - // Log error - LogErrorAndLeaveL( _L("CATSInterface::ConstructL"), _L("iTestEngine.AddTestModule"), ret ); - return; - } -*/ - // Add all test modules and config files - RDebug::Print(_L("Start creating test modules")); - moduleInfo = NULL; - TInt i; - TInt modCnt = iModuleList->Count(); - - for(i = 0; i < modCnt; i++) - { - RDebug::Print(_L("Processing module")); - // Get module - moduleInfo = iModuleList->GetModule(i); - if(!moduleInfo) - { - RDebug::Print(_L("Could not get module info at index %d"), i); - continue; - } - - // Get module name - TName moduleName; - moduleInfo->GetModuleName(moduleName); - RDebug::Print(_L("module name: '%S'"), &moduleName); - - // Get ini file, if exists - TFileName ini; - moduleInfo->GetIniFileName(ini); - if(ini.Length() == 0) - { - RDebug::Print(_L("ini file not found")); - } - else - { - RDebug::Print(_L("ini file: '%S'"), &ini); - } - - // Create test module - RDebug::Print(_L("Adding module to test engine")); - ret = iTestEngine.AddTestModule(moduleName, ini); - if(ret != KErrNone && ret != KErrAlreadyExists) - { - LogErrorAndLeaveL(_L("CATSInterface::ConstructL"), _L("iTestEngine.AddTestModule"), ret); - return; - } - - //Add test case files - TInt cfgCnt = moduleInfo->CountCfgFiles(); - TInt j; - TFileName cfgFile; - for(j = 0; j < cfgCnt; j++) - { - moduleInfo->GetCfgFileName(j, cfgFile); - if(cfgFile.Length() > 0) - { - RDebug::Print(_L("config file: '%S'"), &cfgFile); - - ret = iTestEngine.AddConfigFile(moduleName, cfgFile); - if(ret != KErrNone && ret != KErrAlreadyExists) - { - // Log error - LogErrorAndLeaveL(_L("CATSInterface::ConstructL"), _L("RTestEngine::AddConfigFile"), ret); - return; - } - } - else - { - RDebug::Print(_L("Got empty cfg file")); - } - } - if(cfgCnt == 0) - { - RDebug::Print(_L("cfg file not found")); - } - - RDebug::Print(_L("Module '%S' processed correctly"), &moduleName); - } - - RDebug::Print(_L("End creating test modules")); - - // Create console screen - iConsole = Console::NewL( - iTestModule, TSize( KConsFullScreen, KConsFullScreen ) ); - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: NewL - - Description: Two-phased constructor. - - Parameters: None - - Return Values: CATSInterface* : pointer to created CATSInterface object - - Errors/Exceptions: Leaves if memory allocation for CATSInterface fails - Leaves if ConstructL leaves - - Status: Approved - -------------------------------------------------------------------------------- -*/ -CATSInterface* CATSInterface::NewL() - { - // Create CATSInterface and return it - CATSInterface* self = new ( ELeave ) CATSInterface(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: ~CATSInterface - - Description: Destructor - - Parameters: None - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -CATSInterface::~CATSInterface() - { - // Close Test Engine - iTestEngine.Close(); - iTestEngineServ.Close(); - - delete iModuleList; - delete iConsole; - - } - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: ParseTestModulesL - - Description: Parse and search for module info and fill list of modules. - - Parameters: CStifParser* aParser: in: CStifParser object - CTestModuleList* aModuleList: in: list of modules - TPtrC& aSectionStart: in: descriptor with start of section string - TPTrC& aSectionEnd: in: descriptor with end of section string - - Return Values: None - - Errors/Exceptions: Leaves if some of called leaving methods leaves - - Status: Approved - -------------------------------------------------------------------------------- -*/ -void CATSInterface::ParseTestModulesL(CStifParser* aParser, CTestModuleList* aModuleList, const TDesC& aSectionStart, const TDesC& aSectionEnd) - { - //First let's find all modules given in Stif's ini file and store that info in CTestModuleList object - CStifSectionParser* sectionParser = NULL; - CStifItemParser* item = NULL; - - sectionParser = aParser->SectionL(aSectionStart, aSectionEnd); - - while(sectionParser) - { - RDebug::Print(_L("Found '%S' and '%S' sections"), &aSectionStart, &aSectionEnd); - CleanupStack::PushL(sectionParser); - RDebug::Print(_L("Starting to read module information")); - - // Get name of module - _LIT(KModuleName, "ModuleName="); - item = sectionParser->GetItemLineL(KModuleName); - CleanupStack::PushL(item); - if(!item) - { - CleanupStack::PopAndDestroy(item); - LogErrorAndLeaveL(_L("CATSInterface::ParseTestModulesL"), _L("CStifItemParser::GetItemLineL - line not found from module section"), KErrNotFound); - return; - } - else - { - RDebug::Print(_L("'%S' found"), &KModuleName); - } - - TPtrC name; - TName moduleName; - TInt ret(KErrNone); - ret = item->GetString(KModuleName, name); - if(ret != KErrNone) - { - CleanupStack::PopAndDestroy(item); - LogErrorAndLeaveL(_L("CATSInterface::ParseTestModulesL"), _L("CStifItemParser::GetString - Module name parsing left with error"), ret); - return; - } - else - { - RDebug::Print(_L("Module '%S' found from ini-file"), &name); - moduleName.Copy(name); - moduleName.LowerCase(); - ret = aModuleList->AddTestModule(moduleName); - if(ret != KErrNone && ret != KErrAlreadyExists) - { - LogErrorAndLeaveL(_L("CATSInterface::ParseTestModulesL"), _L("CTestModuleList::AddTestModule - Could not add module to list of modules"), ret); - return; - } - } - CleanupStack::PopAndDestroy(item); - - //Get pointer to added module - CTestModuleInfo* moduleInfo = aModuleList->GetModule(moduleName); - if(!moduleInfo) - { - LogErrorAndLeaveL(_L("CATSInterface::ParseTestModulesL"), _L("CTestModuleList::GetModule - Could not add get module info from list"), KErrNotFound); - return; - } - - // Get ini file, if it exists - RDebug::Print(_L("Start parsing ini file")); - _LIT(KIniFile, "IniFile="); - item = sectionParser->GetItemLineL(KIniFile); - if(item) - { - RDebug::Print(_L("'%S' found"), &KIniFile); - CleanupStack::PushL(item); - TPtrC iniFile; - ret = item->GetString(KIniFile, iniFile); - if(ret == KErrNone) - { - RDebug::Print(_L("Initialization file '%S' found, file can be empty"), &iniFile); - TFileName filename; - filename.Copy(iniFile); - filename.LowerCase(); - TStifUtil::CorrectFilePathL( filename ); - moduleInfo->SetIniFile(filename); - } - else - { - RDebug::Print(_L("Initialization file not found")); - } - CleanupStack::PopAndDestroy(item); - } - else - { - RDebug::Print(_L("'%S' not found"), &KIniFile); - } - - // Get config (testcase) file - RDebug::Print(_L("Start parsing cfg files")); - TPtrC cfgTag; - for(TInt i = 0; i < 2; i++) - { - //Set tag for config files - if(i == 0) - { - cfgTag.Set(_L("ConfigFile=")); - } - else - { - cfgTag.Set(_L("TestCaseFile=")); - } - //Read data - item = sectionParser->GetItemLineL(cfgTag); - while(item) - { - CleanupStack::PushL(item); - RDebug::Print(_L("Item '%S' found"), &cfgTag); - TPtrC cfgFile; - ret = item->GetString(cfgTag, cfgFile); - if(ret == KErrNone) - { - TFileName ifile; - ifile.Copy(cfgFile); - ifile.LowerCase(); - TStifUtil::CorrectFilePathL( ifile ); - RDebug::Print(_L("Configuration file '%S' found"), &ifile); - moduleInfo->AddCfgFile(ifile); - } - else - { - RDebug::Print(_L("Configuration file not found")); - } - CleanupStack::PopAndDestroy(item); - item = sectionParser->GetNextItemLineL(cfgTag); - } - } - - RDebug::Print(_L("Module '%S' information read correctly"), &moduleName); - - // Get next section - CleanupStack::PopAndDestroy(sectionParser); - sectionParser = aParser->NextSectionL(aSectionStart, aSectionEnd); - } - } - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: ParseCommandLineL - - Description: Parse command line parameters - - Parameters: None - - Return Values: None - - Errors/Exceptions: Leaves if module name not found from command line - - Status: Approved - -------------------------------------------------------------------------------- -*/ -void CATSInterface::ParseCommandLineL() - { - // Command line params - _LIT( KTestModule, "-testmodule" ); - _LIT( KConfigFile, "-config" ); - _LIT( KEngineIniFile, "-engineini" ); - _LIT( KModuleIniFile, "-moduleini" ); - - const TInt length = User::CommandLineLength(); - - HBufC* cmdLine = HBufC::NewLC( length ); - TPtr ptr = cmdLine->Des(); - - User::CommandLine( ptr ); - - TBool moduleFound( EFalse ); - TLex lex( ptr ); - // Parse the command line - while ( !lex.Eos() ) - { - TPtrC tmpPtr = lex.NextToken(); - // Check the test module name - if ( tmpPtr == KTestModule ) - { - TPtrC module = lex.NextToken(); - if ( module.Ptr() ) - { - iTestModule.Copy( module ); - moduleFound = ETrue; - } - } - // Check the module's config file - else if ( tmpPtr == KConfigFile ) - { - TPtrC config = lex.NextToken(); - if ( config.Ptr() ) - { - iConfigFile.Copy( config ); - TStifUtil::CorrectFilePathL( iConfigFile ); - } - } - // Check the engine's ini file - else if ( tmpPtr == KEngineIniFile ) - { - TPtrC iniFile = lex.NextToken(); - if ( iniFile.Ptr() ) - { - iEngineIniFile.Copy( iniFile ); - TStifUtil::CorrectFilePathL( iEngineIniFile ); - } - } - // Check the module's ini file - else if ( tmpPtr == KModuleIniFile ) - { - TPtrC iniFile = lex.NextToken(); - if ( iniFile.Ptr() ) - { - iModuleIniFile.Copy( iniFile ); - TStifUtil::CorrectFilePathL( iModuleIniFile ); - } - } - else - { - // Skip unknown commands - } - } // while - - // Destroy command line buffer - CleanupStack::PopAndDestroy( cmdLine ); - - // Module name has to exists - if ( !moduleFound ) - { - User::Leave( KErrArgument ); - } - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: RunTestsL - - Description: Starts testing - - Parameters: None - - Return Values: None - - Errors/Exceptions: Leaves if RunAllTestCasesL leaves - Leaves if RemoveTestModule returns error - - Status: Approved - -------------------------------------------------------------------------------- -*/ -void CATSInterface::RunTestsL() - { - // Run all test cases - RunAllTestCasesL(); - - /* - // Remove test module - User::LeaveIfError( iTestEngine.RemoveTestModule( iTestModule ) ); - */ - RDebug::Print(_L("Start removing test modules")); - CTestModuleInfo* moduleInfo = NULL; - TInt i; - TInt modCnt = iModuleList->Count(); - - for(i = 0; i < modCnt; i++) - { - RDebug::Print(_L("Processing module")); - // Get module - moduleInfo = iModuleList->GetModule(i); - if(!moduleInfo) - { - RDebug::Print(_L("Could not get module info at index %d"), i); - continue; - } - - // Get module name - TName moduleName; - moduleInfo->GetModuleName(moduleName); - RDebug::Print(_L("module name: '%S'"), &moduleName); - - // Remove test module - User::LeaveIfError(iTestEngine.RemoveTestModule(moduleName)); - RDebug::Print(_L("Module '%S' removed"), &moduleName); - } - - RDebug::Print(_L("End removing test modules")); - } - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: RunAllTestCasesL - - Description: Run all test cases from test module. - - Parameters: None - - Return Values: None - - Errors/Exceptions: Leaves if some of called leaving methods leaves - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -void CATSInterface::RunAllTestCasesL() - { - TInt ret( KErrNone ); - - /* - // Add given config file to test module - if ( iConfigFile.Length() > 0 ) - { - ret = iTestEngine.AddConfigFile( iTestModule, iConfigFile ); - if ( ret != KErrNone && ret != KErrAlreadyExists ) - { - // Log error - LogErrorAndLeaveL( _L("CATSInterface::RunAllTestCasesL"), _L("iTestEngine.AddConfigFile"), ret ); - return; - } - } - */ - - // Enumerate test cases - TCaseCount caseCount; - TRequestStatus status; - iTestEngine.EnumerateTestCases( caseCount, status ); - User::WaitForRequest( status ); - - // Check that enumerate succeeded - if ( status != KErrNone ) - { - // Log error - LogErrorAndLeaveL( _L("CATSInterface::RunAllTestCasesL"), _L("iTestEngine.EnumerateTestCases"), status.Int() ); - return; - } - - // Get test cases to buffer - CFixedFlatArray* testCases = - CFixedFlatArray::NewL( caseCount() ); - CleanupStack::PushL( testCases ); - - ret = iTestEngine.GetTestCases( *testCases ); - if ( ret != KErrNone ) - { - // Log error - LogErrorAndLeaveL( _L("CATSInterface::RunAllTestCasesL"), _L("iTestEngine.GetTestCases"), status.Int() ); - return; - } - - //variables used to get version of STIF - TInt majorV; - TInt minorV; - TInt buildV; - TBuf<30> relDate; - TStifUtil::STIFVersion(majorV, minorV, buildV, relDate); - - TBuf<50> version; - version.Format(_L("STIF v%d.%d.%d - "), majorV, minorV, buildV); - version.Append(relDate); - version.Append(_L("\n")); - - iConsole->Printf(version); //printing STIF version information (version and release date) - iConsole->Printf( _L("Test case count: [%d]\n\n"), testCases->Count() ); - - // Loop through all test cases in buffer and run them - const TInt count = testCases->Count(); - for ( TInt i = 0; i < count; i++ ) - { -#ifdef _DEBUG - RDebug::Print( ( *testCases)[i].iTestCaseInfo.iTitle ); -#endif - iConsole->Printf( _L("Now running test case: [%d] [%S] "), i+1, - &( *testCases )[i].iTestCaseInfo.iTitle ); - - // Run test case - RunTestCaseL( ( *testCases )[i] ); - } - - // End test set - CleanupStack::PopAndDestroy( testCases ); - - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: RunTestCaseL - - Description: Run test case - - Parameters: TTestInfo& aTestInfo: in: TTestInfo: Test info - - Return Values: None - - Errors/Exceptions: Leaves if some of called leaving methods leaves - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -void CATSInterface::RunTestCaseL( TTestInfo& aTestInfo ) - { - TInt testResult( KErrNone ); - CATSInterfaceRunner* runner; - - // Trap to catch errors from test case executing - TRAPD( trapError, - runner = CATSInterfaceRunner::NewL( this, aTestInfo ); - CleanupStack::PushL( runner ); - - testResult = RunATestCaseL( runner ); - - CleanupStack::PopAndDestroy( runner ); - ); - - if ( trapError != KErrNone ) - { - testResult = trapError; - } - - if ( testResult != KErrNone ) // Test case is FAILED - { - // Test case failed, print out the error - iConsole->Printf( _L("\nTest case FAILED! err=[%d]\n"), testResult ); - } - - else // Test case is PASSED - { - iConsole->Printf( _L("\nTest case PASSED!\n") ); - testResult = KErrNone; - } - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: RunATestCaseL - - Description: Run a test case - - Parameters: CATSInterfaceRunner* aTestCase: in: Pointer to test case runner - - Return Values: TInt KErrNone: Test case passed - other error code: Test case failed or cannot be executed - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -TInt CATSInterface::RunATestCaseL( CATSInterfaceRunner* aTestCase ) - { - iTestCompletedError = KErrNone; - - // Create timer - CActiveTimer* timer = CActiveTimer::NewL( iConsole ); - CleanupStack::PushL( timer ); - - // Start test case and timer - aTestCase->StartTestL(); - timer->StartL(); - - // Wait for test case completed - CActiveScheduler::Start(); - - timer->Cancel(); - CleanupStack::PopAndDestroy( timer ); - - // test completion error is set in TestCompleted method - return iTestCompletedError; - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: TestEngineServer - - Description: Return handle to Test Engine Server. - - Parameters: None - - Return Values: RTestEngineServer&: Reference to RTestEngineServer handle - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -RTestEngineServer& CATSInterface::TestEngineServer() - { - return iTestEngineServ; - - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: TestEngine - - Description: Return handle to Test Engine. - - Parameters: None - - Return Values: RTestEngine&: reference to RTestEngine handle - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -RTestEngine& CATSInterface::TestEngine() - { - return iTestEngine; - - } - - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: TestCompleted - - Description: Test case completed - - This method is called when test case is completed or error occurred - during the test. - - Parameters: TInt aError: in: Symbian OS error: Test result - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -void CATSInterface::TestCompleted( TInt aError ) - { - // Store completion error - iTestCompletedError = aError; - - // Stop the scheduler - CActiveScheduler::Stop(); - - } - -/* -------------------------------------------------------------------------------- - - Class: CATSInterface - - Method: LogErrorAndLeaveL - - Description: Write error Logger and leave. - - This function is called if some function returns error and the error cannot - be logged another way Logger, e.g. RTestEngineServer and - RTestEngine methods. - - Parameters: const TDesC& aFunction: in: any string: Function where the error - occurred - const TDesC& aDescription: in: any string: Description for error - const TInt aError: in: Symbian OS error: Test result - - Return Values: None - - Errors/Exceptions: None - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -void CATSInterface::LogErrorAndLeaveL( const TDesC& aFunction, - const TDesC& aDescription, - const TInt aError ) - { - - RDebug::Print( _L("%S: %S [%d]"), &aFunction, &aDescription, aError ); - User::Leave( aError ); - - } - -// ================= OTHER EXPORTED FUNCTIONS ================================= - -/* -------------------------------------------------------------------------------- - - Function: E32Main - - Description: Main function called by E32. - - Parameters: None - - Return Values: TInt: KErrNone :No errors occurred - TInt: Other Symbian OS Error :Error catch by TRAP - - Errors/Exceptions: TRAP is used to catch errors from leaving methods. - - Status: Approved - -------------------------------------------------------------------------------- -*/ -GLDEF_C TInt E32Main() - { - - TInt processHandleCountBefore; - TInt threadHandleCountBefore; - RThread().HandleCount( processHandleCountBefore, threadHandleCountBefore ); - TInt reqsBefore = RThread().RequestCount(); - - TInt processHandleCountAfter; - TInt threadHandleCountAfter; - TInt reqsAfter; - - __UHEAP_MARK; - - CTrapCleanup* cleanup = CTrapCleanup::New(); - if ( cleanup == NULL ) - { - __UHEAP_MARKEND; - return KErrNoMemory; - } - - CActiveScheduler* activeScheduler = new CActiveScheduler; - if ( activeScheduler == NULL ) - { - delete cleanup; - __UHEAP_MARKEND; - return KErrNoMemory; - } - CActiveScheduler::Install( activeScheduler ); - - // Construct the test client - CATSInterface* test = NULL; - TRAPD( err, test = CATSInterface::NewL() ); - if ( err != KErrNone ) - { -#ifdef _DEBUG - RDebug::Print(_L("ATSInterface construction failed %d: "), err ); -#endif - delete cleanup; - delete activeScheduler; - __UHEAP_MARKEND; - return err; - } - - // Run tests - TRAP( err, test->RunTestsL() ); - if ( err != KErrNone ) - { -#ifdef _DEBUG - RDebug::Print(_L("RunTestsL left with %d: "), err ); -#endif - } - - - // Deallocate resources - delete test; - delete activeScheduler; - delete cleanup; - - reqsAfter = RThread().RequestCount(); - RThread().HandleCount( processHandleCountAfter, threadHandleCountAfter ); - - if ( reqsAfter != reqsBefore ) - { -#ifdef _DEBUG - RDebug::Print(_L("Request count not matching! %d vs. %d: "), - reqsBefore, reqsAfter ); -#endif - } - if ( threadHandleCountAfter != threadHandleCountBefore ) - { -#ifdef _DEBUG - RDebug::Print(_L("Handle count not matching! %d vs. %d: "), - threadHandleCountBefore, threadHandleCountAfter ); -#endif - } - - __UHEAP_MARKEND; - - return err; - } - -// End of File