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__ |
|