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