testexecmdw/tef/tef/tefunit/inc/tefunit.h
branchRCL_3
changeset 3 9397a16b6eb8
parent 1 6edeef394eb7
equal deleted inserted replaced
1:6edeef394eb7 3:9397a16b6eb8
     1 /*
       
     2 * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 /**
       
    21  @file TEFUnit.h
       
    22 */
       
    23 
       
    24 #ifndef __TEF_UNIT__
       
    25 #define __TEF_UNIT__
       
    26 
       
    27 #include <e32std.h>
       
    28 #include <test/testexecutestepbase.h>
       
    29 #include <test/cteflogger.h>
       
    30 
       
    31 /*********************************************************************************
       
    32  * Assert Macros
       
    33  *********************************************************************************/
       
    34 #define __ASSERT_SHARED(aFunction, aMessage) \
       
    35 	if(!aFunction) \
       
    36 		{ \
       
    37 		Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrAll, aMessage );\
       
    38 		User::Leave(KErrTEFUnitFail);\
       
    39 		}
       
    40 
       
    41 #define ASSERT_EQUALS(aExpected, aActual) \
       
    42 	__ASSERT_SHARED(AssertEquals(aExpected, aActual) , KAssertFailedEquals);
       
    43 
       
    44 #define ASSERT_NULL(aPtr) \
       
    45 	__ASSERT_SHARED(AssertNull(aPtr), KAssertFailedNull);
       
    46 
       
    47 #define ASSERT_NOT_NULL(aPtr) \
       
    48 	__ASSERT_SHARED(!AssertNull(aPtr), KAssertFailedNotNull);
       
    49 
       
    50 #define ASSERT_SAME(aExpectedPtr, aActualPtr) \
       
    51 	__ASSERT_SHARED(AssertSame(aExpectedPtr, aActualPtr), KAssertFailedSame);
       
    52 
       
    53 #define ASSERT_NOT_SAME(aExpectedPtr, aActualPtr) \
       
    54 	__ASSERT_SHARED(!AssertSame(aExpectedPtr, aActualPtr), KAssertFailedNotSame);
       
    55 
       
    56 #define ASSERT_TRUE(aCondition) \
       
    57 	__ASSERT_SHARED(AssertTrue(aCondition), KAssertFailedTrue);
       
    58 
       
    59 #define ASSERT_FALSE(aCondition) \
       
    60 	__ASSERT_SHARED(!AssertTrue(aCondition), KAssertFailedFalse);
       
    61 
       
    62 /*********************************************************************************
       
    63  * CTestConfig class
       
    64  *********************************************************************************/
       
    65 
       
    66 class CTestConfig
       
    67 /**
       
    68 @publishedPartner
       
    69 @test
       
    70 */
       
    71 	{
       
    72 public:
       
    73 	CTestConfig();
       
    74 	CTestConfig(const CTestConfig& aTestConfig );
       
    75 	CTestConfig( CTestStep* aTestStep );
       
    76 	~CTestConfig();
       
    77 
       
    78 	TBool GetBool(const TDesC& aSectionName, const TDesC& aKey, TBool& aResult) const;
       
    79 	TBool GetInt(const TDesC& aSectionName, const TDesC& aKey, TInt& aResult) const;
       
    80 	TBool GetHex(const TDesC& aSectionName, const TDesC& aKey, TInt& aResult) const;
       
    81 	TBool GetString(const TDesC& aSectionName, const TDesC& aKey, TPtrC& aResult) const;
       
    82 
       
    83 	// Use the section name passed in via the script
       
    84 	TBool GetBool(const TDesC& aKey, TBool& aResult) const;
       
    85 	TBool GetInt(const TDesC& aKey, TInt& aResult) const;
       
    86 	TBool GetHex(const TDesC& aKey, TInt& aResult) const;
       
    87 	TBool GetString(const TDesC& aKey, TPtrC& aResult) const;
       
    88 
       
    89 	TBool WriteBool(const TDesC& aSectionName, const TDesC& aKey, TBool& aValue) const;
       
    90 	TBool WriteInt(const TDesC& aSectionName, const TDesC& aKey, TInt& aValue) const;
       
    91 	TBool WriteHex(const TDesC& aSectionName, const TDesC& aKey, TInt& aValue) const;
       
    92 	TBool WriteString(const TDesC& aSectionName, const TDesC& aKey, TPtrC& aValue) const;
       
    93 
       
    94 	// Use the section name passed in via the script
       
    95 	TBool WriteBool(const TDesC& aKey, TBool& aValue) const;
       
    96 	TBool WriteInt(const TDesC& aKey, TInt& aValue) const;
       
    97 	TBool WriteHex(const TDesC& aKey, TInt& aValue) const;
       
    98 	TBool WriteString(const TDesC& aKey, TPtrC& aValue) const;
       
    99 	
       
   100 	TBool GetInt(const TDesC& aSectionName, const TDesC& aKey, TInt64& aResult) const;
       
   101 	TBool GetInt(const TDesC& aKey, TInt64& aResult) const;
       
   102 	TBool WriteInt(const TDesC& aSectionName, const TDesC& aKey, TInt64& aValue) const;
       
   103 	TBool WriteInt(const TDesC& aKey, TInt64& aValue) const;
       
   104 		
       
   105 private:
       
   106 	CTestStep*	iTestStep;
       
   107 	};
       
   108 
       
   109 
       
   110 /*********************************************************************************
       
   111  * CTestFixture class
       
   112  *********************************************************************************/
       
   113 	
       
   114 class CTestFixture : public CBase
       
   115 /**
       
   116 @publishedPartner
       
   117 @test
       
   118 */
       
   119 	{
       
   120 public:
       
   121 	virtual	~CTestFixture();
       
   122 
       
   123 	virtual void SetupL();
       
   124 	virtual void TearDownL();
       
   125 	
       
   126 	void SetConfigL(CTestConfig& aConfig);
       
   127 	void SetLoggerL( CTestExecuteLogger& aLogger );
       
   128 	inline CTestExecuteLogger& Logger() { return iLogger; }
       
   129 
       
   130 protected:
       
   131 	CTestConfig			iConfig;
       
   132 	CTestExecuteLogger	iLogger;
       
   133 	};
       
   134 
       
   135 /*********************************************************************************
       
   136  * CActiveTestFixture class
       
   137  *********************************************************************************/
       
   138  
       
   139 class CActiveTestFixture : public CTestFixture
       
   140 /**
       
   141 @publishedPartner
       
   142 @test
       
   143 */
       
   144 	{
       
   145 public:
       
   146 	virtual	~CActiveTestFixture();
       
   147 	virtual void SetupL();
       
   148 	virtual void TearDownL();
       
   149  	// Construct the active environment
       
   150  	virtual void ConstructEnvL();
       
   151  	// Destroy the active environment
       
   152  	virtual void DestroyEnvL();
       
   153  	// Start the active environnment
       
   154    	virtual void StartEnvL();
       
   155  	// Stop the active environnment
       
   156    	virtual void StopEnvL();
       
   157 	CActiveScheduler* iSched;
       
   158 	};
       
   159 
       
   160 class CTestCase;
       
   161 class CTestSuite;
       
   162 
       
   163 /*********************************************************************************
       
   164  * MVisitor class
       
   165  *********************************************************************************/
       
   166 class MVisitor
       
   167 	{
       
   168 public: 
       
   169 	virtual void VisitL(CTestCase* aTestCase) = 0;
       
   170 	virtual void VisitL(CTestSuite* aTestSuite) = 0;
       
   171 	};
       
   172 
       
   173 
       
   174 const TInt KMaxTestName = 256;
       
   175 typedef TBuf<KMaxTestName> TTestName;
       
   176 
       
   177 const TInt KMaxPathSize = KMaxTestName*10;
       
   178 typedef TBuf<KMaxPathSize> TTestPath;
       
   179 
       
   180 /*********************************************************************************
       
   181  * CTestBase class
       
   182  *********************************************************************************/
       
   183 class CTestBase : public CBase
       
   184 	{
       
   185 public:
       
   186 	CTestBase(const TTestName &aName); 
       
   187 	virtual ~CTestBase();
       
   188 		
       
   189 	const TTestName& Name() const; 
       
   190 	virtual void RunL(CTestConfig& aConfig, CTestExecuteLogger& aLogger) = 0;
       
   191 	virtual void AcceptL(MVisitor &aVisitor) = 0;
       
   192 	
       
   193 protected: 
       
   194 	TTestName iName; 
       
   195 	};
       
   196 
       
   197 
       
   198 /*********************************************************************************
       
   199  * CTestCase class
       
   200  *********************************************************************************/
       
   201 class CTestCase : public CTestBase
       
   202 	{
       
   203 public:
       
   204 	CTestCase(const TTestName& aName);
       
   205 	virtual ~CTestCase(); 
       
   206 
       
   207 	virtual void RunL(CTestConfig& aConfig, CTestExecuteLogger& aLogger) = 0;
       
   208 	virtual void AcceptL(MVisitor &aVisitor);
       
   209 	};
       
   210 
       
   211 /*********************************************************************************
       
   212  * Test Suite Macros
       
   213  *********************************************************************************/
       
   214 #define START_SUITE \
       
   215 	CTestSuite* lTestSuite = CTestSuite::NewL();
       
   216 
       
   217 #define SUB_SUITE \
       
   218 	CTestSuite* lTestSuite = CTestSuite::NewL(aName);
       
   219 
       
   220 #define END_SUITE \
       
   221 	return lTestSuite;
       
   222 //PDEF115446 start
       
   223 // By adding a condition marco to reconginize different compiler
       
   224 #ifndef __GCCXML__
       
   225 	// this means using gcc or armcc or mwccsym2 
       
   226 	#define ADD_TEST_STEP(name) \
       
   227 		_LIT( KTest ## name, #name); \
       
   228 		AddTestCase(lTestSuite, KTest ## name, &name);
       
   229 	
       
   230 	#define ADD_ASYNC_TEST_STEP(name) \
       
   231 		_LIT( KTest ## name, #name); \
       
   232 		AddAsyncTestCase(lTestSuite, KTest ## name, &name);
       
   233 #endif
       
   234 #ifdef __GCCXML__
       
   235 	// this means using gccxml
       
   236 	// GCCXML compiler NOT use ADD_TEST_STEP 
       
   237 	// Please use 2 parameter Macro ADD_(ASYNC)_TEST_STEP_CLASS	 
       
   238 #endif
       
   239 	
       
   240 //PDEF115446
       
   241 //new version marco
       
   242 //For both GCCXML and Non-GCCXML compiler
       
   243 #define ADD_TEST_STEP_CLASS(classname, callback) \
       
   244     _LIT( KTest ## callback, #callback);\
       
   245     AddTestCase(lTestSuite, KTest ## callback, & classname::callback);
       
   246 
       
   247 #define ADD_ASYNC_TEST_STEP_CLASS(classname, callback) \
       
   248     _LIT( KTest ## callback, #callback);\
       
   249     AddAsyncTestCase (lTestSuite, KTest ## callback, & classname::callback);
       
   250 //PDEF115446 end
       
   251 	
       
   252 #define ADD_TEST_SUITE(name) \
       
   253 	_LIT( KTest ## name, #name); \
       
   254 	lTestSuite->AddL( name::CreateSuiteL( KTest##name));
       
   255 
       
   256 
       
   257 /*********************************************************************************
       
   258  * CTestSuite class
       
   259  *********************************************************************************/
       
   260 
       
   261 class CTestSuite : public CTestBase
       
   262 /**
       
   263 @publishedPartner
       
   264 @test
       
   265 */
       
   266 	{
       
   267 public: 
       
   268 	CTestSuite(const TTestName& aName);
       
   269 	CTestSuite(CTestSuite &rhs);
       
   270 	void ConstructL();
       
   271 	static CTestSuite* NewL();
       
   272 	static CTestSuite* NewL(const TTestName& aName);
       
   273 	virtual ~CTestSuite();
       
   274 		
       
   275 	// Add a test to the suite
       
   276 	virtual void AddL(CTestBase* aTest);
       
   277 
       
   278 	// Run all the tests in the suite
       
   279 	virtual void RunL(CTestConfig& aConfig, CTestExecuteLogger& aLogger);
       
   280 
       
   281 	virtual void AcceptL(MVisitor &aVisitor);
       
   282 
       
   283 	TInt Count();
       
   284 	TTestName NameL( TInt anIndex );
       
   285 	CTestBase*	TestL( TInt anIndex );
       
   286 
       
   287 private:
       
   288 	RPointerArray<CTestBase>	iTests;
       
   289 	TInt iError;
       
   290 	};
       
   291 
       
   292 
       
   293 /*********************************************************************************
       
   294  * CTestCaseTemplate class
       
   295  *********************************************************************************/
       
   296 template <class Fixture>
       
   297 class CTestCaseTemplate : public CTestCase
       
   298 	{
       
   299 private:
       
   300 	typedef void (Fixture::*TestMethod)();
       
   301 	
       
   302 public:
       
   303 	CTestCaseTemplate(const TDesC &aName, TestMethod aTestMethod );
       
   304 	virtual ~CTestCaseTemplate();
       
   305 
       
   306 	virtual void RunL(CTestConfig& aConfig, CTestExecuteLogger& aLogger);
       
   307 
       
   308 protected:
       
   309 	TestMethod	iTest;
       
   310 	};
       
   311 
       
   312 /*********************************************************************************
       
   313  * CActiveTester class
       
   314  *********************************************************************************/
       
   315 const TInt KNumberOfDelays = 3;
       
   316 
       
   317 template <class Fixture>
       
   318 class CActiveTester : public CTimer
       
   319 	{
       
   320 private:
       
   321 	typedef void (Fixture::*TestMethod)();
       
   322 
       
   323 public:
       
   324 	CActiveTester(Fixture* aFixture, TestMethod aTestMethod, TTimeIntervalMicroSeconds32 /*aDelays[KNumberOfDelays]*/ );
       
   325 	virtual ~CActiveTester();
       
   326 
       
   327 	virtual void RunL();
       
   328 	virtual TInt RunError(TInt /*aError*/);
       
   329 	TInt Error();
       
   330 	virtual void ConstructEnvL();
       
   331 	void DestroyEnvL();
       
   332 	void StartEnvL();
       
   333 	void SetLoggerL(CTestExecuteLogger& aLogger);
       
   334 	void SetConfigL(CTestConfig& aConfig);
       
   335 
       
   336 protected:
       
   337 	enum TTestState
       
   338 		{
       
   339 		EConstruct = 0,
       
   340 		ERunTest,
       
   341 		EDestroy,
       
   342 		EExit
       
   343 		};
       
   344 
       
   345 	TTestState					iState;
       
   346 	Fixture*					iFixture;
       
   347 	TestMethod					iTest;
       
   348 	TTimeIntervalMicroSeconds32	iDelays[KNumberOfDelays];
       
   349 	TInt						iError;
       
   350 	};
       
   351 
       
   352 
       
   353 /*********************************************************************************
       
   354  * CAsyncTestCase class
       
   355  *********************************************************************************/
       
   356 template <class Fixture>
       
   357 class CAsyncTestCase : public CTestCase
       
   358 	{
       
   359 private:
       
   360 	typedef void (Fixture::*TestMethod)();
       
   361 
       
   362 public:
       
   363 	CAsyncTestCase(const TDesC &aName, TestMethod aTestMethod );
       
   364 	virtual ~CAsyncTestCase();
       
   365 
       
   366 	virtual void RunL(CTestConfig& aConfig, CTestExecuteLogger& aLogger);
       
   367 
       
   368 protected:
       
   369 	TestMethod iTest;
       
   370 	};
       
   371 
       
   372 #include <test/tefunit.inl>
       
   373 
       
   374 #endif // __TEF_UNIT__