diff -r 675a964f4eb5 -r 35751d3474b7 cryptomgmtlibs/securitytestfw/test/testhandler2/t_testsetup.cpp --- a/cryptomgmtlibs/securitytestfw/test/testhandler2/t_testsetup.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptomgmtlibs/securitytestfw/test/testhandler2/t_testsetup.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,474 +1,474 @@ -/* -* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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: -* -*/ - - -#include "t_testsetup.h" -#include "t_testactionspec.h" -#include "t_input.h" -#include "t_certstoreactionmemfail.h" -#include "tcancel.h" -#include "t_message.h" -#include "tScriptSetup.h" -#include "Thardcodedsetup.h" -#include "t_testhandler.h" -#include "t_output.h" -#include "tTestSpec.h" -#include "ttesthandlersettings.h" -#include "testexecuteinterface.h" -#include "t_logger.h" -#include "t_testrunner.h" -#include "t_dummyconsole.h" - -EXPORT_C HBufC* CTestSetup::GetArgument(TInt nPos) - { - // Get command line - HBufC *argv = HBufC::NewLC(User::CommandLineLength()); - TPtr cmd(argv->Des()); - User::CommandLine(cmd); - - TLex arguments(cmd); - TPtrC token; - token.Set(KNullDesC); - - // finds nth parameter that doesnt have a - - while(nPos >= 0 && !arguments.Eos()) - { - token.Set(arguments.NextToken()); - if(token.Length() > 0 && token[0] != '-') - nPos--; - } - - HBufC* result = token.AllocL(); - - CleanupStack::PopAndDestroy(argv); - - return result; - } - -void CTestSetup::InitFileserverSessionLC(RFs& aFs) - { - User::LeaveIfError(aFs.Connect()); - CleanupClosePushL(aFs); - - // enable tests to pass file handles between processes - aFs.ShareProtected(); - - // Create the private directory, to fix failures in tests that write to - // relative paths that were broken when the default path was changed to the - // private path in build 03429 - TFileName privatePath; - User::LeaveIfError(aFs.PrivatePath(privatePath)); - TInt err = aFs.MkDir(privatePath); - if (err != KErrNone && err != KErrAlreadyExists) - { - User::Leave(err); - } - } - -EXPORT_C void CTestSetup::CreateAndRunTestsL(TScriptTests theTestTypes[], - const TDesC& aScript, const TDesC& aLogFile, TBool aUseCommandLine, - CConsoleBase* aConsole, TBool* aResult) -{ - LOG(_L("-- Test handler starting")); - - RFs fs; - - InitFileserverSessionLC(fs); - - CScriptSetup* testSetup = CScriptSetup::NewLC(aConsole); - CTestHandlerSettings* commandLineArgs = CTestHandlerSettings::NewLC(); - CTestSpec* testSpec = CTestSpec::NewL(); - CleanupStack::PushL(testSpec); - - TTestSummary summary; - if(testSetup->InitialiseL(fs, aScript, aLogFile, aUseCommandLine)) - { - - // Store the state of the heap and RFs resource count before the tests - - TInt initAllocCount = User::CountAllocCells(); - TInt initRFsCount = fs.ResourceCount(); - - // Store the initial count of process and thread handles - TInt initThreadHandleCount; - TInt initProcessHandleCount; - RThread().HandleCount(initProcessHandleCount, initThreadHandleCount); - - - testSetup->LogFile().write(_L("State of the system before the tests:\n")); - testSetup->LogFile().write(_L("\tRFs resource count: %d\n"), initRFsCount); - testSetup->LogFile().write(_L("\tProcess handle count: %d\n"), initProcessHandleCount); - testSetup->LogFile().write(_L("\tThread handle count: %d\n"), initThreadHandleCount); - - TRAPD(error, testSetup->SetupTestsL(fs, *testSpec, theTestTypes, *commandLineArgs)) - - if(error==KErrNone) - { - CTestHandler* handler = CTestHandler::NewLC(fs, *testSpec, *commandLineArgs, - &testSetup->Console(), - &testSetup->LogFile()); - handler->RunTestsL(); - summary = handler->Summary(); - testSpec->FreeAllTests(); - CleanupStack::PopAndDestroy(handler); - - // Do heap, RFs resource, process and thread handle balance checks - - TInt finalRFsCount = fs.ResourceCount(); - - testSetup->LogFile().write(_L("State of the system after the tests:\n")); - testSetup->LogFile().write(_L("\tRFs resource count: %d\n"), finalRFsCount); - - if (initRFsCount == finalRFsCount) - { - testSetup->LogFile().write(_L("\nRFs resource count ok: %d final\n\n"), - finalRFsCount); - } - else - { - testSetup->LogFile().write(_L("\nRFs resource count inbalance: %d final\n\n"), - finalRFsCount); - ++summary.iTestsFailed; - } - - - TInt finalAllocCount = User::CountAllocCells(); - if (initAllocCount == finalAllocCount) - { - testSetup->LogFile().write(_L("\nHeap alloc count ok: %d final vs %d initial\n\n"), - finalAllocCount, initAllocCount); - } - else - { - testSetup->LogFile().write(_L("\nHeap alloc count inbalance: %d final vs %d initial\n\n"), - finalAllocCount, initAllocCount); - ++summary.iTestsFailed; - } - - TInt finalThreadHandleCount; - TInt finalProcessHandleCount; - RThread().HandleCount(finalProcessHandleCount, finalThreadHandleCount); - - if (initProcessHandleCount == finalProcessHandleCount) - { - testSetup->LogFile().write(_L("\nProcess handle count ok: %d final vs %d initial\n\n"), - finalProcessHandleCount, initProcessHandleCount); - } - else - { - testSetup->LogFile().write(_L("\nProcess handle count imbalance: %d final vs %d initial\n\n"), - finalProcessHandleCount, initProcessHandleCount); - ++summary.iTestsFailed; - } - - if (initThreadHandleCount == finalThreadHandleCount) - { - testSetup->LogFile().write(_L("\nThread handle count ok: %d final vs %d initial\n\n"), - finalThreadHandleCount, initThreadHandleCount); - } - else - { - testSetup->LogFile().write(_L("\nThread handle count imbalance: %d final vs %d initial\n\n"), - finalThreadHandleCount, initThreadHandleCount); - ++summary.iTestsFailed; - } - ++summary.iTestsRun; - } - - // Set the result if required by caller - if (aResult) - { - *aResult = summary.AllTestsPassed(); - } - - summary.PrintL(testSetup->LogFile()); - - // pauses runtime if command line requests it i.e. -w - if(commandLineArgs->iWaitForKeyPressAtEnd) - { - testSetup->Console().Printf(_L("\nPress a key to quit")); - testSetup->Console().Getch(); - } - - } - - CleanupStack::PopAndDestroy(4, &fs); // fs, testsetup, commandLineArgs and testspec - // this MUST be the last thing to do incase objects being destructed on cleanup - // have debug info - //if (bTestSuccess) - // RDebug::RawPrint(_L("RTEST: SUCCESS : testhandler\n")); -} - -EXPORT_C void CTestSetup::CreateAndRunTestsL(THardcodedTests theTestTypes[], const TDesC& aDefaultLog) -{ - LOG(_L("-- Test handler starting")); - - RFs fs; - - InitFileserverSessionLC(fs); - - InitFileserverSessionLC(fs); - - CHardcodedSetup* testSetup = CHardcodedSetup::NewLC(); - CTestHandlerSettings* commandLineArgs = CTestHandlerSettings::NewLC(); - CTestSpec* testSpec = CTestSpec::NewL(); - CleanupStack::PushL(testSpec); - - TTestSummary summary; - if(testSetup->InitialiseL(fs, aDefaultLog)) - { - - // Store the state of the heap and RFs resource count before the tests - - TInt initAllocCount = User::CountAllocCells(); - TInt initRFsCount = fs.ResourceCount(); - - TRAPD(error, testSetup->SetupTestsL(fs, *testSpec, theTestTypes, *commandLineArgs)); - - if(error==KErrNone) - { - CTestHandler* handler = CTestHandler::NewLC(fs, *testSpec, *commandLineArgs, - &testSetup->Console(), - &testSetup->LogFile()); - handler->RunTestsL(); - summary = handler->Summary(); - testSpec->FreeAllTests(); - CleanupStack::PopAndDestroy(handler); - - // Do heap and RFs resource balance checks - - TInt finalRFsCount = fs.ResourceCount(); - - testSetup->LogFile().write(_L("State of the system after the tests:\n")); - testSetup->LogFile().write(_L("\tRFs resource count: %d\n"), finalRFsCount); - - if (initRFsCount == finalRFsCount) - { - testSetup->LogFile().write(_L("\nRFs resource count ok: %d final\n\n"), - finalRFsCount); - } - else - { - testSetup->LogFile().write(_L("\nRFs resource count inbalance: %d final\n\n"), - finalRFsCount); - ++summary.iTestsFailed; - } - - TInt finalAllocCount = User::CountAllocCells(); - if (initAllocCount == finalAllocCount) - { - testSetup->LogFile().write(_L("\nHeap alloc count ok: %d final vs %d initial\n\n"), - finalAllocCount, initAllocCount); - } - else - { - testSetup->LogFile().write(_L("\nHeap alloc count inbalance: %d final vs %d initial\n\n"), - finalAllocCount, initAllocCount); - ++summary.iTestsFailed; - } - ++summary.iTestsRun; - } - - summary.PrintL(testSetup->LogFile()); - - // pauses runtime if command line requests it i.e. -w - if(commandLineArgs->iWaitForKeyPressAtEnd) - { - testSetup->Console().Printf(_L("\nPress a key to quit")); - testSetup->Console().Getch(); - } - } - - CleanupStack::PopAndDestroy(4, &fs); // fs, testsetup, commandLineArgs and testspec - - //if (bTestSuccess) - // RDebug::RawPrint(_L("RTEST: SUCCESS : testhandler\n")); -} - -//Check all flags is provided for understanability - Each grouping function called calls the next function -// if it has succeeded -TBool CTestSetup::CheckAllFlags(const CTestHandlerSettings& aCommandLineSettings, TInt& aScriptGroupings) - { - return CheckExhaustiveandSmoke(aCommandLineSettings,aScriptGroupings); - } - -TBool CTestSetup::CheckExhaustiveandSmoke(const CTestHandlerSettings& aCommandLineSettings, TInt& aScriptGroupings) - { - - if (aCommandLineSettings.iExhaust || (aScriptGroupings & SMOKE)) - { - //Do other flags - return CheckSkipped(aCommandLineSettings, aScriptGroupings); - } - else - - return EFalse; - } - - -TBool CTestSetup::CheckSkipped(const CTestHandlerSettings& aCommandLineSettings, - TInt& aScriptGroupings) - { - if (aCommandLineSettings.iSkip || !(aScriptGroupings & SKIP)) - { - //Do other flags - return CheckInteractive(aCommandLineSettings, aScriptGroupings); - } - else - return EFalse; - } - -TBool CTestSetup::CheckInteractive(const CTestHandlerSettings& aCommandLineSettings, - TInt& aScriptGroupings) - { - if (aCommandLineSettings.iInt || !(aScriptGroupings & INTER)) - { - //Do other flags - return CheckOOMandCancel(aCommandLineSettings, aScriptGroupings); - } - else - return EFalse; - } - -TBool CTestSetup::CheckOOMandCancel(const CTestHandlerSettings& aCommandLineSettings, - TInt& aScriptGroupings) - { - - if ((aScriptGroupings & (EXOOM | INOOM)) == (EXOOM | INOOM)) - User::Panic(_L("Test is both Included and Excluded from OOM"), 1); - - if ((aScriptGroupings & (EXCANCEL | INCANCEL)) == (EXCANCEL | INCANCEL)) - User::Panic(_L("Test is both Included and Excluded from Cancel"), 1); - - if ((aScriptGroupings & (INOOM | INCANCEL)) == (INOOM | INCANCEL)) - User::Panic(_L("Test is in both OOM and Cancel groups"), 1); - - // Check to see whether -o set - if (aCommandLineSettings.iOOM) - { - //Is the test in OOM group? - if (aScriptGroupings & INOOM) - return ETrue; - else - //Is the test excluded from OOM? - if (aScriptGroupings & EXOOM) - return EFalse; - } - else - if (aScriptGroupings & INOOM) - return EFalse; - - // Check to see whether -c set - if (aCommandLineSettings.iCancel) - { - //Is the test in CANCEL group? - if (aScriptGroupings & INCANCEL) - return ETrue; - else - //Is the test excluded from CANCEL? - if (aScriptGroupings & EXCANCEL) - return EFalse; - } - else - if (aScriptGroupings & INCANCEL) - return EFalse; - - - return ETrue; - } - - -CTestSetup::~CTestSetup() - { - delete iLogFile; - delete iTestConsole; - if (iConsoleOwned) - { - // Note that the heap count when this is deleted must be the same as - // when the console was allocated, otherwise a panic will occur. This - // is due to the techview implementation of the console doing a heap - // mark in its destructor. - delete iConsole; - } - } - -CTestSetup::CTestSetup(CConsoleBase* aConsole) - : iConsole(aConsole), iConsoleOwned(aConsole == NULL) - { - } - -void CTestSetup::ConstructL() - { - if (iConsoleOwned) - { - iConsole = Console::NewL(_L("Test code"), TSize(KDefaultConsWidth, KDefaultConsHeight)); - } - - // Currently the console passed to the test actions discards all output - - // this is an attempt to make hardware tests run faster. All information - // should be written to the log file anyway, and I'd like to remove use of a - // console as well as the log file. -- jc - iTestConsole = new (ELeave) CDummyConsole(); - } - -void CTestSetup::OpenLogFileL(RFs &aFs, TInt nPos, const TDesC &aLogFile, TBool aUseCommandline) - { - HBufC* logFileName = NULL; - - if (aUseCommandline) - { - logFileName = GetArgument(nPos); - CleanupStack::PushL(logFileName); - - // check if logfile was specified on command line - if(logFileName->Length()==0) - { - // empty so remove it - CleanupStack::PopAndDestroy(logFileName); - logFileName = NULL; - } - } - - if(logFileName == NULL) - { - if(aLogFile.Length()==0) - { - PRINTANDLOG(_L("No log file specified on command line and no default given")); - User::Leave(KErrArgument); - } - else - { - // there is a default copy that - logFileName = aLogFile.AllocL(); - CleanupStack::PushL(logFileName); - } - } - - PRINTANDLOG1(_L("Log file: %S"), logFileName); - - RFile logFile; - - // attempts to create directories incase they dont exist - aFs.MkDirAll(*logFileName); // ignore errors - - // write over any existing log - User::LeaveIfError(logFile.Replace(aFs, *logFileName, EFileWrite)); - - // output goes only to the log file - iLogFile = new(ELeave) FileOutput(logFile); - CleanupStack::PopAndDestroy(logFileName); - }; +/* +* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* +*/ + + +#include "t_testsetup.h" +#include "t_testactionspec.h" +#include "t_input.h" +#include "t_certstoreactionmemfail.h" +#include "tcancel.h" +#include "t_message.h" +#include "tScriptSetup.h" +#include "Thardcodedsetup.h" +#include "t_testhandler.h" +#include "t_output.h" +#include "tTestSpec.h" +#include "ttesthandlersettings.h" +#include "testexecuteinterface.h" +#include "t_logger.h" +#include "t_testrunner.h" +#include "t_dummyconsole.h" + +EXPORT_C HBufC* CTestSetup::GetArgument(TInt nPos) + { + // Get command line + HBufC *argv = HBufC::NewLC(User::CommandLineLength()); + TPtr cmd(argv->Des()); + User::CommandLine(cmd); + + TLex arguments(cmd); + TPtrC token; + token.Set(KNullDesC); + + // finds nth parameter that doesnt have a - + while(nPos >= 0 && !arguments.Eos()) + { + token.Set(arguments.NextToken()); + if(token.Length() > 0 && token[0] != '-') + nPos--; + } + + HBufC* result = token.AllocL(); + + CleanupStack::PopAndDestroy(argv); + + return result; + } + +void CTestSetup::InitFileserverSessionLC(RFs& aFs) + { + User::LeaveIfError(aFs.Connect()); + CleanupClosePushL(aFs); + + // enable tests to pass file handles between processes + aFs.ShareProtected(); + + // Create the private directory, to fix failures in tests that write to + // relative paths that were broken when the default path was changed to the + // private path in build 03429 + TFileName privatePath; + User::LeaveIfError(aFs.PrivatePath(privatePath)); + TInt err = aFs.MkDir(privatePath); + if (err != KErrNone && err != KErrAlreadyExists) + { + User::Leave(err); + } + } + +EXPORT_C void CTestSetup::CreateAndRunTestsL(TScriptTests theTestTypes[], + const TDesC& aScript, const TDesC& aLogFile, TBool aUseCommandLine, + CConsoleBase* aConsole, TBool* aResult) +{ + LOG(_L("-- Test handler starting")); + + RFs fs; + + InitFileserverSessionLC(fs); + + CScriptSetup* testSetup = CScriptSetup::NewLC(aConsole); + CTestHandlerSettings* commandLineArgs = CTestHandlerSettings::NewLC(); + CTestSpec* testSpec = CTestSpec::NewL(); + CleanupStack::PushL(testSpec); + + TTestSummary summary; + if(testSetup->InitialiseL(fs, aScript, aLogFile, aUseCommandLine)) + { + + // Store the state of the heap and RFs resource count before the tests + + TInt initAllocCount = User::CountAllocCells(); + TInt initRFsCount = fs.ResourceCount(); + + // Store the initial count of process and thread handles + TInt initThreadHandleCount; + TInt initProcessHandleCount; + RThread().HandleCount(initProcessHandleCount, initThreadHandleCount); + + testSetup->LogFile().write(_L("
\r\n")); + testSetup->LogFile().write(_L("State of the system before the tests:\n")); + testSetup->LogFile().write(_L("\tRFs resource count: %d\n"), initRFsCount); + testSetup->LogFile().write(_L("\tProcess handle count: %d\n"), initProcessHandleCount); + testSetup->LogFile().write(_L("\tThread handle count: %d\n"), initThreadHandleCount); + + TRAPD(error, testSetup->SetupTestsL(fs, *testSpec, theTestTypes, *commandLineArgs)) + + if(error==KErrNone) + { + CTestHandler* handler = CTestHandler::NewLC(fs, *testSpec, *commandLineArgs, + &testSetup->Console(), + &testSetup->LogFile()); + handler->RunTestsL(); + summary = handler->Summary(); + testSpec->FreeAllTests(); + CleanupStack::PopAndDestroy(handler); + + // Do heap, RFs resource, process and thread handle balance checks + + TInt finalRFsCount = fs.ResourceCount(); + + testSetup->LogFile().write(_L("State of the system after the tests:\n")); + testSetup->LogFile().write(_L("\tRFs resource count: %d\n"), finalRFsCount); + + if (initRFsCount == finalRFsCount) + { + testSetup->LogFile().write(_L("\nRFs resource count ok: %d final\n\n"), + finalRFsCount); + } + else + { + testSetup->LogFile().write(_L("\nRFs resource count inbalance: %d final\n\n"), + finalRFsCount); + ++summary.iTestsFailed; + } + + + TInt finalAllocCount = User::CountAllocCells(); + if (initAllocCount == finalAllocCount) + { + testSetup->LogFile().write(_L("\nHeap alloc count ok: %d final vs %d initial\n\n"), + finalAllocCount, initAllocCount); + } + else + { + testSetup->LogFile().write(_L("\nHeap alloc count inbalance: %d final vs %d initial\n\n"), + finalAllocCount, initAllocCount); + ++summary.iTestsFailed; + } + + TInt finalThreadHandleCount; + TInt finalProcessHandleCount; + RThread().HandleCount(finalProcessHandleCount, finalThreadHandleCount); + + if (initProcessHandleCount == finalProcessHandleCount) + { + testSetup->LogFile().write(_L("\nProcess handle count ok: %d final vs %d initial\n\n"), + finalProcessHandleCount, initProcessHandleCount); + } + else + { + testSetup->LogFile().write(_L("\nProcess handle count imbalance: %d final vs %d initial\n\n"), + finalProcessHandleCount, initProcessHandleCount); + ++summary.iTestsFailed; + } + + if (initThreadHandleCount == finalThreadHandleCount) + { + testSetup->LogFile().write(_L("\nThread handle count ok: %d final vs %d initial\n\n"), + finalThreadHandleCount, initThreadHandleCount); + } + else + { + testSetup->LogFile().write(_L("\nThread handle count imbalance: %d final vs %d initial\n\n"), + finalThreadHandleCount, initThreadHandleCount); + ++summary.iTestsFailed; + } + ++summary.iTestsRun; + } + + // Set the result if required by caller + if (aResult) + { + *aResult = summary.AllTestsPassed(); + } + + summary.PrintL(testSetup->LogFile()); + + // pauses runtime if command line requests it i.e. -w + if(commandLineArgs->iWaitForKeyPressAtEnd) + { + testSetup->Console().Printf(_L("\nPress a key to quit")); + testSetup->Console().Getch(); + } + + } + + CleanupStack::PopAndDestroy(4, &fs); // fs, testsetup, commandLineArgs and testspec + // this MUST be the last thing to do incase objects being destructed on cleanup + // have debug info + //if (bTestSuccess) + // RDebug::RawPrint(_L("RTEST: SUCCESS : testhandler\n")); +} + +EXPORT_C void CTestSetup::CreateAndRunTestsL(THardcodedTests theTestTypes[], const TDesC& aDefaultLog) +{ + LOG(_L("-- Test handler starting")); + + RFs fs; + + InitFileserverSessionLC(fs); + + InitFileserverSessionLC(fs); + + CHardcodedSetup* testSetup = CHardcodedSetup::NewLC(); + CTestHandlerSettings* commandLineArgs = CTestHandlerSettings::NewLC(); + CTestSpec* testSpec = CTestSpec::NewL(); + CleanupStack::PushL(testSpec); + + TTestSummary summary; + if(testSetup->InitialiseL(fs, aDefaultLog)) + { + + // Store the state of the heap and RFs resource count before the tests + + TInt initAllocCount = User::CountAllocCells(); + TInt initRFsCount = fs.ResourceCount(); + + TRAPD(error, testSetup->SetupTestsL(fs, *testSpec, theTestTypes, *commandLineArgs)); + + if(error==KErrNone) + { + CTestHandler* handler = CTestHandler::NewLC(fs, *testSpec, *commandLineArgs, + &testSetup->Console(), + &testSetup->LogFile()); + handler->RunTestsL(); + summary = handler->Summary(); + testSpec->FreeAllTests(); + CleanupStack::PopAndDestroy(handler); + + // Do heap and RFs resource balance checks + + TInt finalRFsCount = fs.ResourceCount(); + + testSetup->LogFile().write(_L("State of the system after the tests:\n")); + testSetup->LogFile().write(_L("\tRFs resource count: %d\n"), finalRFsCount); + + if (initRFsCount == finalRFsCount) + { + testSetup->LogFile().write(_L("\nRFs resource count ok: %d final\n\n"), + finalRFsCount); + } + else + { + testSetup->LogFile().write(_L("\nRFs resource count inbalance: %d final\n\n"), + finalRFsCount); + ++summary.iTestsFailed; + } + + TInt finalAllocCount = User::CountAllocCells(); + if (initAllocCount == finalAllocCount) + { + testSetup->LogFile().write(_L("\nHeap alloc count ok: %d final vs %d initial\n\n"), + finalAllocCount, initAllocCount); + } + else + { + testSetup->LogFile().write(_L("\nHeap alloc count inbalance: %d final vs %d initial\n\n"), + finalAllocCount, initAllocCount); + ++summary.iTestsFailed; + } + ++summary.iTestsRun; + } + + summary.PrintL(testSetup->LogFile()); + + // pauses runtime if command line requests it i.e. -w + if(commandLineArgs->iWaitForKeyPressAtEnd) + { + testSetup->Console().Printf(_L("\nPress a key to quit")); + testSetup->Console().Getch(); + } + } + + CleanupStack::PopAndDestroy(4, &fs); // fs, testsetup, commandLineArgs and testspec + + //if (bTestSuccess) + // RDebug::RawPrint(_L("RTEST: SUCCESS : testhandler\n")); +} + +//Check all flags is provided for understanability - Each grouping function called calls the next function +// if it has succeeded +TBool CTestSetup::CheckAllFlags(const CTestHandlerSettings& aCommandLineSettings, TInt& aScriptGroupings) + { + return CheckExhaustiveandSmoke(aCommandLineSettings,aScriptGroupings); + } + +TBool CTestSetup::CheckExhaustiveandSmoke(const CTestHandlerSettings& aCommandLineSettings, TInt& aScriptGroupings) + { + + if (aCommandLineSettings.iExhaust || (aScriptGroupings & SMOKE)) + { + //Do other flags + return CheckSkipped(aCommandLineSettings, aScriptGroupings); + } + else + + return EFalse; + } + + +TBool CTestSetup::CheckSkipped(const CTestHandlerSettings& aCommandLineSettings, + TInt& aScriptGroupings) + { + if (aCommandLineSettings.iSkip || !(aScriptGroupings & SKIP)) + { + //Do other flags + return CheckInteractive(aCommandLineSettings, aScriptGroupings); + } + else + return EFalse; + } + +TBool CTestSetup::CheckInteractive(const CTestHandlerSettings& aCommandLineSettings, + TInt& aScriptGroupings) + { + if (aCommandLineSettings.iInt || !(aScriptGroupings & INTER)) + { + //Do other flags + return CheckOOMandCancel(aCommandLineSettings, aScriptGroupings); + } + else + return EFalse; + } + +TBool CTestSetup::CheckOOMandCancel(const CTestHandlerSettings& aCommandLineSettings, + TInt& aScriptGroupings) + { + + if ((aScriptGroupings & (EXOOM | INOOM)) == (EXOOM | INOOM)) + User::Panic(_L("Test is both Included and Excluded from OOM"), 1); + + if ((aScriptGroupings & (EXCANCEL | INCANCEL)) == (EXCANCEL | INCANCEL)) + User::Panic(_L("Test is both Included and Excluded from Cancel"), 1); + + if ((aScriptGroupings & (INOOM | INCANCEL)) == (INOOM | INCANCEL)) + User::Panic(_L("Test is in both OOM and Cancel groups"), 1); + + // Check to see whether -o set + if (aCommandLineSettings.iOOM) + { + //Is the test in OOM group? + if (aScriptGroupings & INOOM) + return ETrue; + else + //Is the test excluded from OOM? + if (aScriptGroupings & EXOOM) + return EFalse; + } + else + if (aScriptGroupings & INOOM) + return EFalse; + + // Check to see whether -c set + if (aCommandLineSettings.iCancel) + { + //Is the test in CANCEL group? + if (aScriptGroupings & INCANCEL) + return ETrue; + else + //Is the test excluded from CANCEL? + if (aScriptGroupings & EXCANCEL) + return EFalse; + } + else + if (aScriptGroupings & INCANCEL) + return EFalse; + + + return ETrue; + } + + +EXPORT_C CTestSetup::~CTestSetup() + { + delete iLogFile; + delete iTestConsole; + if (iConsoleOwned) + { + // Note that the heap count when this is deleted must be the same as + // when the console was allocated, otherwise a panic will occur. This + // is due to the techview implementation of the console doing a heap + // mark in its destructor. + delete iConsole; + } + } + +CTestSetup::CTestSetup(CConsoleBase* aConsole) + : iConsole(aConsole), iConsoleOwned(aConsole == NULL) + { + } + +void CTestSetup::ConstructL() + { + if (iConsoleOwned) + { + iConsole = Console::NewL(_L("Test code"), TSize(KDefaultConsWidth, KDefaultConsHeight)); + } + + // Currently the console passed to the test actions discards all output - + // this is an attempt to make hardware tests run faster. All information + // should be written to the log file anyway, and I'd like to remove use of a + // console as well as the log file. -- jc + iTestConsole = new (ELeave) CDummyConsole(); + } + +void CTestSetup::OpenLogFileL(RFs &aFs, TInt nPos, const TDesC &aLogFile, TBool aUseCommandline) + { + HBufC* logFileName = NULL; + + if (aUseCommandline) + { + logFileName = GetArgument(nPos); + CleanupStack::PushL(logFileName); + + // check if logfile was specified on command line + if(logFileName->Length()==0) + { + // empty so remove it + CleanupStack::PopAndDestroy(logFileName); + logFileName = NULL; + } + } + + if(logFileName == NULL) + { + if(aLogFile.Length()==0) + { + PRINTANDLOG(_L("No log file specified on command line and no default given")); + User::Leave(KErrArgument); + } + else + { + // there is a default copy that + logFileName = aLogFile.AllocL(); + CleanupStack::PushL(logFileName); + } + } + + PRINTANDLOG1(_L("Log file: %S"), logFileName); + + RFile logFile; + + // attempts to create directories incase they dont exist + aFs.MkDirAll(*logFileName); // ignore errors + + // write over any existing log + User::LeaveIfError(logFile.Replace(aFs, *logFileName, EFileWrite)); + + // output goes only to the log file + iLogFile = new(ELeave) FileOutput(logFile); + CleanupStack::PopAndDestroy(logFileName); + };