First public contribution.
1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
15 // Test methods of the LManagedX and LCleanedupX classes.
30 class CTracker : public CBase
33 enum TConstructionMode { ENonleavingConstructor, EConstructorLeaves};
35 static CTracker* NewL()
37 CTracker* ptr = new(ELeave) CTracker;
41 CTracker():iData(NULL)
43 test.Printf(_L(" CTracker - %x\n"), this);
48 test.Printf(_L(" CTracker::ConstructL - %x\n"), this);
49 iData = new(ELeave) TInt(Value);
54 test.Printf(_L(" ~CTracker - %x\n"), this);
61 virtual void MemFunc()
63 test.Printf(_L(" CTracker::MemFunc - %x\n"), this);
66 static void StaticMemberRef(const CTracker& aTracker)
68 test.Printf(_L(" CTracker::StaticMemberRef - %x\n"), &aTracker);
71 static void StaticMemberPtr(CTracker* aTracker)
73 test.Printf(_L(" CTracker::StaticMemberPtr - %x\n"), aTracker);
89 test.Printf(_L(" RLoggerNew - %x\n"), this);
92 RLoggerNew(TInt* aData)
95 test.Printf(_L(" RLoggerNew - %x ptr %x -> val %d\n"), this, aData, *iData);
98 RLoggerNew(TInt aValue)
99 : iData(new(ELeave) TInt(aValue))
101 test.Printf(_L(" RLoggerNew - %x value %d\n"), this, *iData);
104 void OpenL(TInt aValue)
106 iData = new(ELeave) TInt(aValue);
107 test.Printf(_L(" RLoggerNew::OpenL(TInt aValue) - %x value %d\n"), this, *iData);
110 RLoggerNew(const RLoggerNew& aLogger)
111 : iData(aLogger.iData)
113 test.Printf(_L(" RLoggerNew::RLoggerNew(const RLoggerNew&) - %x (copy)\n"), this);
117 RLoggerNew& operator=(const RLoggerNew& aLogger)
119 iData = aLogger.iData;
121 test.Printf(_L(" RLoggerNew::operator=(const RLoggerNew&) - %x copy from %x val %d\n"), this, &aLogger, *aLogger.iData);
128 test.Printf(_L(" ~RLoggerNew - %x\n"), this);
134 test.Printf(_L(" RLoggerNew::Close - %x\n"), this);
136 // Open or non-NULL initializing constructor not called or
137 // cleanup function already called
139 __ASSERT_ALWAYS(iData != NULL, test.Panic(_L("NULL pointer")));
147 test.Printf(_L(" RLoggerNew::Release - %x\n"), this);
149 // Open or non-NULL initializing constructor not called or
150 // cleanup function already called
152 __ASSERT_ALWAYS(iData != NULL, test.Panic(_L("NULL pointer")));
160 test.Printf(_L(" RLoggerNew::Destroy - %x\n"), this);
162 // Open or non-NULL initializing constructor not called or
163 // cleanup function already called
165 __ASSERT_ALWAYS(iData != NULL, test.Panic(_L("NULL pointer")));
173 test.Printf(_L(" RLoggerNew::Free - %x\n"), this);
175 // Open or non-NULL initializing constructor not called or
176 // cleanup function already called
178 __ASSERT_ALWAYS(iData != NULL, test.Panic(_L("NULL pointer")));
185 test.Printf(_L(" RLoggerNew::MemFunc - %x %x\n"), this, iData);
188 static void StaticMemberRef(const RLoggerNew& aTracker)
190 test.Printf(_L(" RLoggerNew::StaticMemberRef - %x\n"), &aTracker);
193 static void StaticMemberPtr(RLoggerNew* aTracker)
195 test.Printf(_L(" RLoggerNew::StaticMemberPtr - %x\n"), aTracker);
198 static void Cleanup(TAny* aRLoggerNew)
200 static_cast<RLoggerNew*>(aRLoggerNew)->Close();
203 TInt* GetData() const
213 DEFINE_CLEANUP_FUNCTION(RLoggerNew, Release);
218 using Log::RLoggerNew;
220 //------------------------------------------
221 //LCleanedupPtr tests here
224 void TestLCleanedupPtrGenerateL()
229 LCleanedupPtr<CTracker<Value> > tracker(CTracker<Value>::NewL());
236 test.Printf(_L("__UHEAP_MARKEND - OK\n"));
240 void GenerateLCleanedupPtrTestL()
242 TestLCleanedupPtrGenerateL<Value>();
243 GenerateLCleanedupPtrTestL<Value - 1>();
247 void GenerateLCleanedupPtrTestL<0>()
249 TestLCleanedupPtrGenerateL<0>();
253 //-------------------------------------------
254 //LCleanedupArray tests here
257 void TestLCleanedupArrayGenerateL()
262 LCleanedupArray<CTracker<Value> > tracker(new(ELeave) CTracker<Value>[Value]);
266 test.Printf(_L("__UHEAP_MARKEND - OK\n"));
270 void GenerateLCleanedupArrayTestL()
272 TestLCleanedupArrayGenerateL<Value>();
273 GenerateLCleanedupArrayTestL<Value - 1>();
277 void GenerateLCleanedupArrayTestL<0>()
279 TestLCleanedupArrayGenerateL<0>();
282 //-----------------------------------
283 //LCleanedupGuard Tests Here
284 //---------------------------
286 void TestLCleanedupGuardTestGenerateL()
291 RLoggerNew logger(Value);
292 LCleanedupGuard cleanGuard(RLoggerNew::Cleanup, &logger);
296 test.Printf(_L("__UHEAP_MARKEND - OK\n"));
300 void GenerateLCleanedupGuardTestL()
302 TestLCleanedupGuardTestGenerateL<Value>();
303 GenerateLCleanedupGuardTestL<Value - 1>();
307 void GenerateLCleanedupGuardTestL<0>()
309 TestLCleanedupGuardTestGenerateL<0>();
312 //----------------------------------------
313 //LCleanedupHandle Tests Here
314 //-----------------------
317 void TestLCleanedupHandleGenerateL()
322 LCleanedupHandle<RLoggerNew> logger(Value);
326 test.Printf(_L("__UHEAP_MARKEND - OK\n"));
330 void GenerateLCleanedupHandleTestL()
332 TestLCleanedupHandleGenerateL<Value>();
333 GenerateLCleanedupHandleTestL<Value - 1>();
337 void GenerateLCleanedupHandleTestL<0>()
339 TestLCleanedupHandleGenerateL<0>();
341 //------------------------------------------
342 //LCleanedupRef Tests Here
343 //-------------------------
346 void TestLCleanedupRefGenerateL()
353 LCleanedupRef<RLoggerNew> rlog(logger);
354 rlog.ReleaseResource();
358 test.Printf(_L("__UHEAP_MARKEND - OK\n"));
362 void GenerateLCleanedupRefTestL()
364 TestLCleanedupRefGenerateL<Value>();
365 GenerateLCleanedupRefTestL<Value - 1>();
369 void GenerateLCleanedupRefTestL<0>()
371 TestLCleanedupRefGenerateL<0>();
375 @SYMTestCaseID BASESRVCS-EUSERHL-UT-4071
376 @SYMTestCaseDesc Tests multiple defined symbols of ManagedPopCleanupStackItem method
377 and also does stress testing of the template classes.
378 Tests All the different Templated Class such as
379 LCleanedupRef,LCleanedupGuard,LCleanedupHandle,LCleanedupArray and LCleanedupPtr
380 for performance as well by explicit instantiation of the templated class using recurrsion.
381 @SYMTestPriority High
382 @SYMTestActions Creates multiple instances of LCleanedupArray,LCleanedupPtr and LCleanedupRef etc
383 Verifies that the objects are automatically cleaned up when they go
385 @SYMTestExpectedResults All memory allocated for the LXXX objects
386 is automatically freed when they go out of scope and there are no
387 errors on multiple definition of ManagedPopCleanupStackItem is produced.
391 TInt TExtendedTestL()
394 TRAPD(status, GenerateLCleanedupPtrTestL<64>());
395 if (status != KErrNone)
397 test.Printf(_L("LCleanedupPtr; leave code: %d\n"), status);
400 TRAPD(status1,GenerateLCleanedupArrayTestL<64>());
401 if(status1 !=KErrNone)
403 test.Printf(_L("LCleanedupArray completed;leave code:%d\n"),status1);
406 TRAPD(status2,GenerateLCleanedupGuardTestL<64>());
407 if(status2 !=KErrNone)
409 test.Printf(_L("LCleanedupGuard completed;leave code:%d\n"),status2);
412 TRAPD(status3,GenerateLCleanedupHandleTestL<64>());
413 if(status3 !=KErrNone)
415 test.Printf(_L("LCleanedupHandle completed;leave code:%d\n"),status3);
418 TRAPD(status4,GenerateLCleanedupRefTestL<64>());
419 if(status4 !=KErrNone)
421 test.Printf(_L("LCleanedupRef completed;leave code:%d\n"),status4);