sl@0: /** sl@0: sl@0: */ sl@0: sl@0: sl@0: //#include sl@0: #include sl@0: #include sl@0: sl@1: #define TEST_SUSTAIN sl@1: sl@1: TTime startTime; sl@1: sl@1: sl@0: sl@0: TInt IdleCallBack(TAny* aParam) sl@0: { sl@0: static TInt count=0; sl@0: sl@0: count++; sl@0: sl@1: //Only do this on first run sl@0: if (count==1) sl@0: { sl@1: startTime.HomeTime(); sl@0: //Quick file system test sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: sl@0: _LIT(KFileName,"c:\\tsymc\\tsymc.txt"); sl@0: _LIT(KFileNameToCreate,"c:\\tsymc\\created.txt"); sl@0: _LIT8(KWriteThat,"Write is working too!\n"); sl@0: sl@0: RFile file; sl@0: TInt err=file.Open(fs,KFileName,EFileRead|EFileWrite); sl@0: if (!err) sl@0: { sl@0: TInt size=0; sl@0: TInt sizeErr=file.Size(size); sl@0: if (!sizeErr) sl@0: { sl@0: HBufC8* content=HBufC8::NewLC(size); sl@0: TPtr8 ptr=content->Des(); sl@0: TInt readErr=file.Read(ptr,size); sl@0: CleanupStack::PopAndDestroy(1,content); sl@0: //file.Close(); sl@0: } sl@0: sl@1: //Test write sl@0: TInt writeErr=file.Write(KWriteThat); sl@0: file.Close(); sl@0: } sl@1: sl@0: //Test file creation sl@0: TInt createErr=file.Create(fs,KFileNameToCreate,EFileWrite); sl@0: if (!createErr) sl@0: { sl@0: TInt writeErr=file.Write(KWriteThat); sl@0: file.Close(); sl@0: } sl@0: sl@0: sl@0: sl@0: CleanupStack::PopAndDestroy(1,&fs); sl@0: } sl@0: sl@1: //Check our exit condition sl@1: TTime time; sl@1: time.HomeTime(); sl@1: TTimeIntervalSeconds seconds; sl@1: User::LeaveIfError(time.SecondsFrom(startTime,seconds)); sl@1: sl@1: //Just run for a few seconds sl@1: if (seconds.Int()>5) sl@1: { sl@1: //Stop it there sl@1: CActiveScheduler::Stop(); sl@1: return EFalse; sl@1: } sl@1: sl@0: sl@0: //Keep playing sl@1: return ETrue; sl@0: } sl@0: sl@0: sl@0: sl@0: class CBaseTest: public CBase sl@0: { sl@0: sl@0: }; sl@0: sl@0: sl@0: GLDEF_C void MainL() sl@0: { sl@0: sl@0: //Testing CBase object sl@0: CBase* other=new(ELeave) CBase(); sl@0: CleanupStack::PushL(other); sl@0: CBase* base=new(ELeave) CBase(); sl@0: CleanupStack::PushL(base); sl@0: CleanupStack::PopAndDestroy(2,other); sl@0: //delete base; sl@1: sl@0: //Testing cleanup stack sl@0: TRAPD(err, sl@0: base=new(ELeave) CBase(); sl@0: CleanupStack::PushL(base); sl@0: User::Leave(KErrCancel); sl@0: ); sl@0: sl@0: ASSERT(err==KErrCancel); sl@0: sl@0: //Testing alloc failure sl@0: //See TProcess sl@0: TRAP(err, sl@0: TUint8* shouldFail=new(ELeave) TUint8[1024*1024*10]; sl@0: delete[] shouldFail; sl@0: ); sl@0: sl@0: // sl@0: ASSERT(err==KErrNoMemory); sl@0: sl@0: //Testing alloc failure without leave sl@0: TUint8* tooLarge=new TUint8[1024*1024*10]; sl@0: ASSERT(tooLarge==NULL); sl@0: delete[] tooLarge; sl@0: sl@0: //Testing simple alloc of T class sl@0: TUint8* tinyAlloc=new TUint8; sl@0: ASSERT(tinyAlloc!=NULL); sl@0: delete tinyAlloc; sl@0: sl@0: //TODO: sl@0: //RHashSet hash; sl@1: sl@0: //Testing AOs sl@0: //Install an active scheduler sl@0: CActiveScheduler* activeScheduler = new(ELeave) CActiveScheduler; sl@0: CActiveScheduler::Install(activeScheduler); sl@0: CleanupStack::PushL(activeScheduler); sl@0: sl@1: CIdle* idle = CIdle::NewL(CActive::EPriorityIdle); sl@0: CleanupStack::PushL(idle); sl@0: sl@0: idle->Start(TCallBack(IdleCallBack,NULL)); sl@0: sl@0: CActiveScheduler::Start(); sl@0: sl@0: CleanupStack::PopAndDestroy(idle); sl@0: CActiveScheduler::Install(NULL); sl@0: CleanupStack::PopAndDestroy(activeScheduler); sl@0: sl@0: sl@0: //Testing unbalanced cleanup stack sl@0: //base=new(ELeave) CBase(); sl@0: //CleanupStack::PushL(base); sl@0: } sl@0: sl@0: sl@0: GLDEF_C TInt E32Main() sl@0: { sl@0: //What do we do then sl@0: //SetReturnedHandle sl@1: sl@0: __UHEAP_MARK; sl@0: sl@0: //CBase* base=new(ELeave) CBase(); sl@0: CBase* base=new CBase(); sl@0: delete base; sl@0: sl@0: CBaseTest* baseTest=new CBaseTest(); sl@0: delete baseTest; sl@0: sl@0: HBufC* buf=HBufC::New(10); sl@0: delete buf; sl@0: sl@0: CArrayFix* active=new CArrayFixFlat(10); sl@0: delete active; sl@0: sl@0: TUint8* test=new TUint8[1024*9]; sl@0: delete[] test; sl@0: sl@0: CTrapCleanup* cleanupStack = CTrapCleanup::New(); sl@0: if (!cleanupStack) sl@0: { sl@0: return KErrNoMemory; sl@0: } sl@0: sl@0: TInt err=KErrNone; sl@0: TRAP(err,MainL()); sl@1: sl@0: delete cleanupStack; sl@0: sl@0: __UHEAP_MARKEND; sl@0: sl@0: return err; sl@1: }