os/kernelhwsrv/kerneltest/e32test/symc/tsymc.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
parent 0 bde4ae8d615e
permissions -rw-r--r--
Update contrib.
     1 /**
     2 
     3 */
     4 
     5 
     6 //#include <e32std.h>
     7 #include <e32base.h>
     8 #include <f32file.h>
     9 
    10 #define TEST_SUSTAIN
    11 
    12 TTime startTime;
    13 
    14 
    15 
    16 TInt IdleCallBack(TAny* aParam)
    17 	{
    18 	static TInt count=0;
    19 
    20 	count++;
    21 
    22     //Only do this on first run
    23 	if (count==1)
    24 		{
    25         startTime.HomeTime();
    26 		//Quick file system test
    27 		RFs fs;
    28 		User::LeaveIfError(fs.Connect());
    29 		CleanupClosePushL(fs);
    30 
    31 		_LIT(KFileName,"c:\\tsymc\\tsymc.txt");
    32 		_LIT(KFileNameToCreate,"c:\\tsymc\\created.txt");
    33 		_LIT8(KWriteThat,"Write is working too!\n");
    34 
    35 		RFile file;
    36 		TInt err=file.Open(fs,KFileName,EFileRead|EFileWrite);
    37 		if (!err)
    38 			{
    39 			TInt size=0;
    40 			TInt sizeErr=file.Size(size);
    41 			if (!sizeErr)
    42 				{
    43 				HBufC8* content=HBufC8::NewLC(size);
    44 				TPtr8 ptr=content->Des();
    45 				TInt readErr=file.Read(ptr,size);
    46 				CleanupStack::PopAndDestroy(1,content);
    47 				//file.Close();
    48 				}
    49 
    50 			//Test write
    51 			TInt writeErr=file.Write(KWriteThat);
    52 			file.Close();
    53 			}
    54 
    55 		//Test file creation
    56 		TInt createErr=file.Create(fs,KFileNameToCreate,EFileWrite);
    57 		if (!createErr)
    58 			{
    59 			TInt writeErr=file.Write(KWriteThat);
    60 			file.Close();
    61 			}
    62 
    63 
    64 
    65 		CleanupStack::PopAndDestroy(1,&fs);
    66 		}
    67 
    68     //Check our exit condition
    69     TTime time;
    70     time.HomeTime();
    71     TTimeIntervalSeconds seconds;
    72     User::LeaveIfError(time.SecondsFrom(startTime,seconds));
    73 
    74     //Just run for a few seconds
    75     if (seconds.Int()>5)
    76     {
    77         //Stop it there
    78         CActiveScheduler::Stop();
    79         return EFalse;
    80     }
    81 
    82 
    83 	//Keep playing
    84 	return ETrue;
    85 	}
    86 
    87 
    88 
    89 class CBaseTest: public CBase
    90 	{
    91 
    92 	};
    93 
    94 
    95 GLDEF_C void MainL()
    96 	{
    97 
    98    //Testing CBase object
    99 	CBase* other=new(ELeave) CBase();
   100 	CleanupStack::PushL(other);
   101 	CBase* base=new(ELeave) CBase();
   102 	CleanupStack::PushL(base);
   103 	CleanupStack::PopAndDestroy(2,other);
   104 	//delete base;
   105 
   106 	//Testing cleanup stack
   107 	TRAPD(err,
   108 	base=new(ELeave) CBase();
   109 	CleanupStack::PushL(base);
   110 	User::Leave(KErrCancel);
   111 	);
   112 
   113 	ASSERT(err==KErrCancel);
   114 
   115 	//Testing alloc failure
   116    //See TProcess
   117 	TRAP(err,
   118 	TUint8* shouldFail=new(ELeave) TUint8[1024*1024*10];
   119 	delete[] shouldFail;
   120 	);
   121 
   122    //
   123 	ASSERT(err==KErrNoMemory);
   124 
   125    //Testing alloc failure without leave
   126    TUint8* tooLarge=new TUint8[1024*1024*10];
   127    ASSERT(tooLarge==NULL);
   128    delete[] tooLarge;
   129 
   130    //Testing simple alloc of T class
   131    TUint8* tinyAlloc=new TUint8;
   132    ASSERT(tinyAlloc!=NULL);
   133    delete tinyAlloc;
   134 
   135    //TODO:
   136    //RHashSet<TUint32> hash;
   137 
   138    //Testing AOs
   139    //Install an active scheduler
   140    CActiveScheduler* activeScheduler = new(ELeave) CActiveScheduler;
   141    CActiveScheduler::Install(activeScheduler);
   142    CleanupStack::PushL(activeScheduler);
   143 
   144    CIdle* idle = CIdle::NewL(CActive::EPriorityIdle);
   145    CleanupStack::PushL(idle);
   146 
   147    idle->Start(TCallBack(IdleCallBack,NULL));
   148 
   149    CActiveScheduler::Start();
   150 
   151    CleanupStack::PopAndDestroy(idle);
   152    CActiveScheduler::Install(NULL);
   153    CleanupStack::PopAndDestroy(activeScheduler);
   154 
   155 
   156 	//Testing unbalanced cleanup stack
   157 	//base=new(ELeave) CBase();
   158 	//CleanupStack::PushL(base);
   159 	}
   160 
   161 
   162 GLDEF_C TInt E32Main()
   163 	{
   164 	//What do we do then
   165 	//SetReturnedHandle
   166 
   167 	__UHEAP_MARK;
   168 
   169 	//CBase* base=new(ELeave) CBase();
   170 	CBase* base=new CBase();
   171 	delete base;
   172 
   173 	CBaseTest* baseTest=new CBaseTest();
   174 	delete baseTest;
   175 
   176 	HBufC* buf=HBufC::New(10);
   177 	delete buf;
   178 
   179 	CArrayFix<TInt>* active=new CArrayFixFlat<TInt>(10);
   180 	delete active;
   181 
   182 	TUint8* test=new TUint8[1024*9];
   183 	delete[] test;
   184 
   185 	CTrapCleanup* cleanupStack = CTrapCleanup::New();
   186 	if (!cleanupStack)
   187 		{
   188 		return KErrNoMemory;
   189 		}
   190 
   191 	TInt err=KErrNone;
   192 	TRAP(err,MainL());
   193 
   194 	delete cleanupStack;
   195 
   196 	__UHEAP_MARKEND;
   197 
   198 	return err;
   199 	}