--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/networkingintegrationtest/IntegrationTestUtils/TestSuite.cpp Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,382 @@
+// Copyright (c) 2003-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 contains CTestSuite which is the base class for all the TestSuite DLLs
+//
+//
+
+/**
+ @file TestSuite.cpp
+*/
+
+// EPOC includes
+#include <e32base.h>
+
+// Test system includes
+#include "../inc/Log.h"
+#include "../inc/TestStep.h"
+#include "../inc/TestSuite.h"
+
+EXPORT_C CTestSuite::~CTestSuite()
+/**
+Test suite destructor.
+This destroys all the test steps contained in this class and
+in classes drived from it.
+*/
+{
+ // free all test steps
+ if (iArrayTestSteps)
+ iArrayTestSteps->ResetAndDestroy();
+
+ // free the dynamic array used for test steps
+ delete iArrayTestSteps;
+
+}
+
+EXPORT_C void CTestSuite::ConstructL( )
+/**
+Construct a test suite object and initialise any drived test suites
+
+@note This class is used as a base class for all test suites.
+It contains all the functionality common to the test suites
+that is independent of any particular test.
+*/
+{
+ // create a new Array to store the test steps in
+ iArrayTestSteps = new(ELeave) CArrayPtrFlat<CTestStep>(1);
+
+ // default severity
+ SetSeverity(ESevrAll);
+ iLogger = NULL;
+
+ //-- initialize suite name buffer
+ new((TAny*)&iSuiteName) TBuf<MAX_LEN_TEST_SUITE_NAME>;
+ iSuiteName.Copy(_L("Uninitialized Suite name"));
+
+ // initialise the derived test suites
+ InitialiseL();
+}
+
+/**
+version string constant
+*/
+_LIT(KTxtVersion,"?.?");
+EXPORT_C TPtrC CTestSuite::GetVersion( void )
+/**
+Make a version string available for test system.
+
+@return A string representation of the current version.
+@note This method should be overridden in the test suites.
+This is not a pure virtual so as to be backward compatible with some early test suites which did not implement this method.
+*/
+ {
+ return KTxtVersion();
+ }
+
+EXPORT_C void CTestSuite::AddTestStepL( CTestStep * aTestStep )
+/**
+Add a test step into the suite.
+
+@param aTestStep A pointer to a CTestStep which is added into the test suite.
+*/
+{
+ __ASSERT_ALWAYS(aTestStep,User::Panic(_L("CTestSuite::AddTestStepL"),KErrArgument));
+ // test steps contain a pointer back to the suite which owns them
+ aTestStep->iSuite = this;
+ // add the step, order is not important, so at position 1
+ iArrayTestSteps->AppendL(aTestStep, 1);
+ }
+
+EXPORT_C enum TVerdict CTestSuite::DoTestStep( TDesC &step, TDesC &config )
+/**
+Run the test step specified.
+
+@param step The name of the test step to be run.
+@param config Configuration values file name (*.ini), as supplied in the test script.
+@return The test result.
+@note This function traps leaves in the test steps, so should not ever leave.
+*/
+{
+ // get the number of tests available in this suite
+ TInt NoOfTests = iArrayTestSteps->Count();
+
+ // search the available test steps for the required one
+ for ( TInt i=0; i < NoOfTests; i++ )
+ {
+ if ( iArrayTestSteps->At(i)->iTestStepName.MatchF( step )!= KErrNotFound )
+ {
+
+ // reset the log data
+ iLogData.Zero();
+
+ // found required test so initialise to PASS
+ iArrayTestSteps->At(i)->iTestStepResult = EPass;
+
+ // pass the config file info into the test step
+ iArrayTestSteps->At(i)->LoadConfig( config );
+
+ // assume it's going to work
+ enum TVerdict result = EPass;
+
+ // And assume that it is going to leave
+ TBool testLeft = ETrue;
+ // execute test step preamble (if any) inside a trap
+ TRAPD( rPreAmble, result = iArrayTestSteps->At(i)->doTestStepPreambleL( ) ; testLeft = EFalse)
+
+ if (testLeft)
+ {
+ ERR_PRINTF4(_L("Warning Test step:%S PreAmble in suite:%S left with %d!"), &step, &iSuiteName, testLeft );
+ result = EFail;
+ }
+ else if (rPreAmble!= KErrNone)
+ {
+ ERR_PRINTF4(_L("Warning Test step:%S PreAmble in suite:%S failed with %d!"), &step, &iSuiteName, rPreAmble );
+ result = EFail;
+ }
+
+ // only continue if the preamble passed
+ if (result == EPass)
+ {
+ testLeft = ETrue;
+ // now execute test step inside a trap
+ TRAPD( r, result = iArrayTestSteps->At(i)->doTestStepL( ); testLeft = EFalse)
+
+ if (testLeft)
+ {
+ ERR_PRINTF4(_L("Warning Test step:%S in suite:%S left with %d!"), &step, &iSuiteName, r );
+ result = EFail;
+ }
+
+ else if (r!= KErrNone)
+ {
+ ERR_PRINTF4(_L("Warning Test step:%S in suite:%S failed with %d!"), &step, &iSuiteName, result );
+ result = EFail;
+ }
+
+ testLeft = ETrue;
+ // execute test step postamble (if any) inside a trap
+ enum TVerdict PostAmbleResult = EPass;
+ TRAPD( rPostAmble, PostAmbleResult = iArrayTestSteps->At(i)->doTestStepPostambleL( ); testLeft = EFalse)
+
+ // The postamble result is only significant if the test has passed
+ if ( result == EPass ) result = PostAmbleResult;
+
+ if (testLeft)
+ {
+ ERR_PRINTF4(_L("Warning Test step:%S PostAmble in suite:%S left with %d!"), &step, &iSuiteName, testLeft );
+ result = EFail;
+ }
+ else if (rPostAmble!= KErrNone)
+ {
+ ERR_PRINTF4(_L("Warning Test step:%S PostAmble in suite:%S failed with %d!"), &step, &iSuiteName, rPostAmble );
+ result = EFail;
+ }
+ }
+
+ // clean up Config data object
+ iArrayTestSteps->At(i)->UnLoadConfig();
+
+ return result;
+
+ }
+ }
+
+ // suite has been searched but test step not found so
+ ERR_PRINTF3(_L("Failed to find test step:%S in suite:%S"), &step, &iSuiteName );
+
+ return ETestSuiteError;
+
+}
+
+EXPORT_C enum TVerdict CTestSuite::DoTestUnit( TDesC &config )
+/**
+Run the unit test
+
+@param config Configuration values file name (*.ini), as supplied in the test script.
+@return The test result.
+*/
+{
+ TPtrC step,verdict;
+ //TIntegrationTestLog16Overflow iOverflow16;
+ TVerdict result = EPass;
+ TInt iPass(1);
+ TInt iFail(0);
+ TInt iInconclusive(0);
+ TInt iTestSuiteError(0);
+ TInt iAbort(0);
+ TInt iTotal(1);
+
+ // get the number of tests available in this suite
+ TInt NoOfTests = iArrayTestSteps->Count();
+
+ // search all available test steps
+ for ( TInt i=0; i < NoOfTests; i++ )
+ {
+ step.Set(iArrayTestSteps->At(i)->iTestStepName);
+
+ result = DoTestStep(step, config);
+
+ verdict.Set(iLogger->TestResultText( result ));
+ if(verdict.Ptr() == _S("FAIL"))
+ {
+ iPass =0;
+ iFail=1;
+ }
+
+
+ iLogger->LogResult(result, _L("Test Result for %S is %s"), &step, verdict.Ptr());
+ iLogger->LogBlankLine();
+ iLogger->LogBlankLine();
+
+ iLogger->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,_L("Test Results Summary ") );
+ iLogger->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,_L("-------------------- ") );
+ iLogger->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,_L("Passed :%d"), iPass);
+ iLogger->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,_L("Failed :%d"), iFail);
+ iLogger->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,_L("Inconclusive :%d"), iInconclusive);
+ iLogger->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,_L("Test suite errors :%d"), iTestSuiteError);
+ iLogger->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,_L("Aborted :%d"), iAbort);
+ iLogger->LogExtra(((TText8*)(__FILE__)), (__LINE__), ESevrErr,_L("Total :%d"), iTotal);
+
+ }
+
+ return result;
+}
+
+EXPORT_C void CTestSuite::Log( TRefByValue<const TDesC16> format, ... )
+/**
+General purpose formated logging output.
+
+@param format Printf style formated output string.
+*/
+ {
+
+ VA_LIST aList;
+ VA_START( aList, format );
+
+ if(iLogger) iLogger->Log(format, aList);
+
+ VA_END( aList );
+ }
+
+EXPORT_C void CTestSuite::Log( TInt aSeverity, TRefByValue<const TDesC16> format, ... )
+/**
+General purpose formated logging output.
+
+@param aSeverity The current log severity level.
+@param format Printf style formated output string.
+*/
+{
+ VA_LIST aList;
+ VA_START( aList, format );
+
+ if( aSeverity & Severity())
+ {
+ if(iLogger) iLogger->Log(format, aList);
+ }
+
+ VA_END( aList );
+}
+
+EXPORT_C void CTestSuite::LogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,
+ TRefByValue<const TDesC> aFmt,...)
+/**
+General purpose formated logging output.
+
+@param aFile The current file name.
+@param aLine The current line number.
+@param aSeverity The current log severity level.
+@param aFmt Printf style formated output string.
+*/
+ {
+ VA_LIST aList;
+ VA_START( aList, aFmt );
+
+ if( aSeverity & Severity())
+ {
+ if(iLogger)
+ {
+ iLogger->LogExtra(aFile, aLine, aSeverity, aFmt, aList);
+ }
+ }
+
+ VA_END( aList );
+ }
+
+
+EXPORT_C void CTestSuite::testBooleanTrueL( TBool aCondition, char* aFile, TInt aLine )
+/**
+Check the boolean expression is true,
+if not record error and then leave.
+
+@param aCondition The condition to test.
+@param aFile The current file name.
+@param aLine The current line number.
+@note This fuunction can leave.
+*/
+ {
+
+ // check condition
+ if (aCondition)
+ return;
+
+ // convert filename for log
+ TBuf<MAX_LOG_FILENAME_LENGTH> fileName;
+ fileName.Copy(TPtrC8((TText8*)aFile));
+
+ // display a log message
+ ERR_PRINTF3(_L("Test Failed in file:%S line:%d"), &fileName, aLine);
+
+ // leave with error code
+ User::Leave(TEST_ERROR_CODE);
+
+ }
+
+EXPORT_C void CTestSuite::SetSeverity( TInt aSeverity)
+/**
+Set the current log severity level.
+
+@param aSeverity The new log level severity.
+*/
+{
+ iSeverity = aSeverity;
+}
+
+EXPORT_C TInt CTestSuite::Severity()
+/**
+Get the current log severity level.
+*/
+{
+ return iSeverity;
+}
+
+EXPORT_C void CTestSuite::SetLogSystem(CLog *aLogger)
+/**
+Set logging system.
+
+@param aLogger Loads the test suite with a pointer to the log system provided by the test framework.
+*/
+ {
+ iLogger = aLogger;
+ }
+
+/**
+ Set a new suite name.
+ Actually, there is no need for test suite derivatives to override existing suite name, because it is
+ set automatically during loading test suite dll.
+
+ @param aNewName new name for this test suite
+*/
+EXPORT_C void CTestSuite::OverrideSuiteName(const TDesC& aNewName)
+ {
+ iSuiteName.Copy(aNewName);
+ }