windowing/windowserver/test/tauto/TOOM.CPP
changeset 103 2717213c588a
child 116 171fae344dd4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/tauto/TOOM.CPP	Tue Jun 22 15:21:29 2010 +0300
@@ -0,0 +1,1583 @@
+// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Out of memory tests
+// 
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+
+#include "TOOM.H"
+
+ 
+typedef COomFailBase *(*COmmCreate)(CTOom *aTest);
+
+COomFailBase *CreateOomConnect(CTOom *aTest)
+	{return(new(ELeave) COomConnect(aTest));}
+
+COomFailBase *CreateOomWindow(CTOom *aTest)
+	{return(new(ELeave) COomWindow(aTest));}
+
+COomFailBase *CreateOomWindowGroup(CTOom *aTest)
+	{return(new(ELeave) COomWindowGroup(aTest));}
+
+COomFailBase *CreateOomBackedUpWindow(CTOom *aTest)
+	{return(new(ELeave) COomBackedUpWindow(aTest));}
+
+COomFailBase *CreateOomBackupResize(CTOom *aTest)
+	{return(new(ELeave) COomBackupResize(aTest));}
+
+COomFailBase *CreateOomBlankWindow(CTOom *aTest)
+	{return(new(ELeave) COomBlankWindow(aTest));}
+
+COomFailBase *CreateOomGc(CTOom *aTest)
+	{return(new(ELeave) COomGc(aTest));}
+
+COomFailBase *CreateOomScreenDevice(CTOom *aTest)
+	{return(new(ELeave) COomScreenDevice(aTest));}
+
+COomFailBase *CreateOomPointerBuffer(CTOom *aTest)
+	{return(new(ELeave) COomPointerBuffer(aTest));}
+
+COomFailBase *CreateOomPolygon(CTOom *aTest)
+	{return(new(ELeave) COomPolygon(aTest));}
+
+COomFailBase *CreateOomPriorityKey(CTOom *aTest)
+	{return(new(ELeave) COomPriorityKey(aTest));}
+
+COomFailBase *CreateOomCaptureKey(CTOom *aTest)
+	{return(new(ELeave) COomCaptureKey(aTest));}
+
+COomFailBase *CreateOomCaptureKeyUpDown(CTOom *aTest)
+	{return(new(ELeave) COomCaptureKeyUpDown(aTest));}
+
+COomFailBase *CreateOomHotKey(CTOom *aTest)
+	{return(new(ELeave) COomHotKey(aTest));}
+
+COomFailBase *CreateOomGroupName(CTOom *aTest)
+	{return(new(ELeave) COomGroupName(aTest));}
+
+COomFailBase *CreateOomMessageSend(CTOom *aTest)
+	{return(new(ELeave) COomMessageSend(aTest));}
+
+COomFailBase *CreateOomMessageFetch(CTOom *aTest)
+	{return(new(ELeave) COomMessageFetch(aTest));}
+
+COomFailBase *CreateOomSprite(CTOom *aTest)
+	{return(new(ELeave) COomSprite(aTest));}
+
+COomFailBase *CreateOomPointerCursor(CTOom *aTest)
+	{return(new(ELeave) COomPointerCursor(aTest));}
+
+COomFailBase *CreateOomCopyScreen(CTOom *aTest)
+	{return(new(ELeave) COomCopyScreen(aTest));}
+
+COomFailBase *CreateOomRequestEvents(CTOom *aTest)
+	{return(new(ELeave) COomRequestEvents(aTest));}
+
+COomFailBase *CreateOomCustomTextCursor(CTOom *aTest)
+	{return(new(ELeave) COomCustomTextCursor(aTest));}
+
+COomFailBase *CreateOomTranspWindow(CTOom *aTest)
+	{return(new(ELeave) COomTranspWindow(aTest));}
+
+COomFailBase *CreateOomObscuredWindow(CTOom *aTest)
+	{return(new(ELeave) COomObscuredWindow(aTest));}
+
+COmmCreate CreateOomFailTest[]={
+	CreateOomConnect,
+	CreateOomWindow,
+	CreateOomWindowGroup,
+	CreateOomBackedUpWindow,
+	CreateOomBackupResize,
+	CreateOomBlankWindow,
+	CreateOomGc,
+	CreateOomScreenDevice,
+	CreateOomPointerBuffer,
+	CreateOomPolygon,
+	CreateOomPriorityKey,
+	CreateOomCaptureKey,
+	CreateOomCaptureKeyUpDown,
+	CreateOomHotKey,
+	CreateOomGroupName,
+	CreateOomSprite,
+	CreateOomPointerCursor,
+	CreateOomCopyScreen,
+	CreateOomRequestEvents,
+	CreateOomMessageSend,
+	CreateOomMessageFetch,
+	CreateOomCustomTextCursor,
+	CreateOomTranspWindow,
+	CreateOomObscuredWindow,
+	};
+
+//
+// Individual out of memory test classes //
+//
+
+COomFailBase::COomFailBase(CTOom *aTest) : iTest(aTest)
+	{}
+
+void COomFailBase::ConstructL()
+	{
+	iTest->INFO_PRINTF1(TestName());
+	}
+
+void COomFailBase::PreFail()
+	{}
+
+void COomFailBase::ClearUpL()
+	{}
+
+void COomFailBase::Flush()
+	{
+	iWs.Flush();
+	}
+
+COomConnect::COomConnect(CTOom *aTest) : COomFailBase(aTest)
+	{}
+
+TOomTestName COomConnect::TestName()
+	{
+	return(_L("Connect"));
+	}
+
+/** Creates a wserv session, connects and creates CWsScreenDevice object
+*/
+TInt COomConnect::Fail()
+	{
+	TInt err = iWs.Connect();
+	if (err!=KErrNone)
+		return err;
+	
+	TRAP(err, iDummyScreen = new (ELeave) CWsScreenDevice(iWs));
+	if (err!=KErrNone)
+		{
+		iWs.Close();
+		return err;
+		}
+		
+	if ((err=iDummyScreen->Construct(iTest->ScreenNumber()))!=KErrNone)
+		{
+		delete iDummyScreen;
+		iDummyScreen = NULL;
+		iWs.Close();
+		return err;
+		}
+		
+	return err;
+	}
+
+void COomConnect::ClearUpL()
+	{
+	if (iDummyScreen)
+		{
+		delete iDummyScreen;
+		iDummyScreen = NULL;
+		}
+	iWs.Close();
+	}
+
+//
+
+COomSetup::COomSetup(CTOom *aTest) : COomFailBase(aTest)
+	{}
+
+void COomSetup::ConstructL()
+	{
+	COomFailBase::ConstructL();
+	User::LeaveIfError(iWs.Connect());
+	iDummyScreen = new (ELeave) CWsScreenDevice(iWs);
+	User::LeaveIfError(iDummyScreen->Construct(iTest->ScreenNumber()));
+	
+	iWinGroup=RWindowGroup(iWs);
+	iWinGroup.Construct(556);
+	iWinGroup.EnableReceiptOfFocus(EFalse);	// Stop auto group switching on close
+	}
+
+COomSetup::~COomSetup()
+	{
+	iWinGroup.Close();
+	delete iDummyScreen;
+	iDummyScreen = NULL;
+	
+	iTest->TEST(iWs.ResourceCount()==0);
+	if (iWs.ResourceCount()!=0)
+		iTest->INFO_PRINTF3(_L("iWs.ResourceCount() return value - Expected: %d, Actual: %d"), 0, iWs.ResourceCount());			
+
+	iWs.Close();
+	}
+
+//
+
+COomWindowGroup::COomWindowGroup(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+TOomTestName COomWindowGroup::TestName()
+	{
+	return(_L("Window Group"));
+	}
+
+/** Creates a RWindowGroup object
+*/
+TInt COomWindowGroup::Fail()
+	{
+	iFailWinGroup=RWindowGroup(iWs);
+	return(iFailWinGroup.Construct(987));
+	}
+
+void COomWindowGroup::ClearUpL()
+	{
+	iFailWinGroup.Close();
+	}
+
+//
+
+COomWindow::COomWindow(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+TOomTestName COomWindow::TestName()
+	{
+	return(_L("Window"));
+	}
+
+/** Creates a RWindow object
+*/
+TInt COomWindow::Fail()
+	{
+	iFailWin=RWindow(iWs);
+	return(iFailWin.Construct(iWinGroup,11));
+	}
+
+void COomWindow::ClearUpL()
+	{
+	iFailWin.Close();
+	}
+
+//
+
+COomBackedUpWindow::COomBackedUpWindow(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+TOomTestName COomBackedUpWindow::TestName()
+	{
+	return(_L("Backed up window"));
+	}
+
+/** Creates a RBackedUpWindow object
+*/
+TInt COomBackedUpWindow::Fail()
+	{
+	iFailWin=RBackedUpWindow(iWs);
+	return(iFailWin.Construct(iWinGroup,EGray16,22));
+	}
+
+void COomBackedUpWindow::ClearUpL()
+	{
+	iFailWin.Close();
+	}
+
+//
+
+COomBackupResize::COomBackupResize(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomBackupResize::~COomBackupResize()
+	{
+	iFailWin.Close();
+	}
+
+TOomTestName COomBackupResize::TestName()
+	{
+	return(_L("Resize backed up window"));
+	}
+
+void COomBackupResize::ConstructL()
+	{
+	COomSetup::ConstructL();
+	iFailWin=RBackedUpWindow(iWs);
+	User::LeaveIfError(iFailWin.Construct(iWinGroup,EGray16,33));
+	User::LeaveIfError(iFailWin.SetSizeErr(TSize(10,10)));
+	iFailWin.Activate();
+	}
+	
+/** Sets the size of previously created backed-up window
+*/
+TInt COomBackupResize::Fail()
+	{
+	return(iFailWin.SetSizeErr(TSize(100,100)));
+	}
+
+void COomBackupResize::ClearUpL()
+//Virtual fn declared in CoomFailBase. This is the only one that can leave, I think, but one is enough
+	{
+	User::LeaveIfError(iFailWin.SetSizeErr(TSize(10,10)));
+	}
+
+//
+
+COomBlankWindow::COomBlankWindow(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+TOomTestName COomBlankWindow::TestName()
+	{
+	return(_L("Blank window"));
+	}
+
+/** Creates a RBlankWindow object
+*/
+TInt COomBlankWindow::Fail()
+	{
+	iFailWin=RBlankWindow(iWs);
+	return(iFailWin.Construct(iWinGroup,44));
+	}
+
+void COomBlankWindow::ClearUpL()
+	{
+	iFailWin.Close();
+	}
+
+//
+
+COomPointerBuffer::COomPointerBuffer(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomPointerBuffer::~COomPointerBuffer()
+	{
+	iFailWin.Close();
+	}
+
+TOomTestName COomPointerBuffer::TestName()
+	{
+	return(_L("Pointer buffer"));
+	}
+
+void COomPointerBuffer::ConstructL()
+	{
+	COomSetup::ConstructL();
+	iFailWin=RBackedUpWindow(iWs);
+	User::LeaveIfError(iFailWin.Construct(iWinGroup,EGray16,55));
+	User::LeaveIfError(iFailWin.SetSizeErr(TSize(10,10)));
+	iFailWin.Activate();
+	}
+
+/** Allocates a buffer for storing pointer movements for previously created backed-up window
+*/
+TInt COomPointerBuffer::Fail()
+	{
+	return(iFailWin.AllocPointerMoveBuffer(10,0));
+	}
+
+void COomPointerBuffer::ClearUpL()
+	{
+	iFailWin.FreePointerMoveBuffer();
+	}
+
+//
+
+COomPriorityKey::COomPriorityKey(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomPriorityKey::~COomPriorityKey()
+	{
+	}
+
+TOomTestName COomPriorityKey::TestName()
+	{
+	return(_L("Priority key"));
+	}
+
+void COomPriorityKey::ConstructL()
+	{
+	COomSetup::ConstructL();
+	}
+
+/** Adds a priority key for a previously created window group
+*/
+TInt COomPriorityKey::Fail()
+	{
+	return(iWinGroup.AddPriorityKey(1,0,0));
+	}
+
+void COomPriorityKey::ClearUpL()
+	{
+	iWinGroup.RemovePriorityKey(1,0,0);
+	}
+
+//
+
+COomCaptureKey::COomCaptureKey(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomCaptureKey::~COomCaptureKey()
+	{
+	}
+
+TOomTestName COomCaptureKey::TestName()
+	{
+	return(_L("Capture key"));
+	}
+
+void COomCaptureKey::ConstructL()
+	{
+	COomSetup::ConstructL();
+	}
+
+/** Requests a capture keys for a previously created window group
+*/
+TInt COomCaptureKey::Fail()
+	{
+	for (iIndex=0;iIndex<(TInt)(sizeof(iCapKey)/sizeof(iCapKey[0]));iIndex++)
+		{
+		TInt ret=iWinGroup.CaptureKey('a',0,0);
+		if (ret<0)
+			return(ret);
+		iCapKey[iIndex]=ret;
+		}
+	return(KErrNone);
+	}
+
+void COomCaptureKey::ClearUpL()
+	{
+	for (TInt index=0;index<iIndex;index++)
+		iWinGroup.CancelCaptureKey(iCapKey[index]);
+	}
+
+//
+
+COomCaptureKeyUpDown::COomCaptureKeyUpDown(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomCaptureKeyUpDown::~COomCaptureKeyUpDown()
+	{
+	}
+
+TOomTestName COomCaptureKeyUpDown::TestName()
+	{
+	return(_L("Capture up/down keys"));
+	}
+
+void COomCaptureKeyUpDown::ConstructL()
+	{
+	COomSetup::ConstructL();
+	}
+
+/** Requests the capture of key-up and key-down events for a previously created window group
+*/
+TInt COomCaptureKeyUpDown::Fail()
+	{
+	for (iIndex=0;iIndex<(TInt)(sizeof(iCapKey)/sizeof(iCapKey[0]));iIndex++)
+		{
+		TInt ret=iWinGroup.CaptureKeyUpAndDowns('a',0,0);
+		if (ret<0)
+			return(ret);
+		iCapKey[iIndex]=ret;
+		}
+	return(KErrNone);
+	}
+
+void COomCaptureKeyUpDown::ClearUpL()
+	{
+	for (TInt index=0;index<iIndex;index++)
+		iWinGroup.CancelCaptureKeyUpAndDowns(iCapKey[index]);
+	}
+
+//
+
+COomHotKey::COomHotKey(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomHotKey::~COomHotKey()
+	{
+	}
+
+TOomTestName COomHotKey::TestName()
+	{
+	return(_L("hot keys"));
+	}
+
+void COomHotKey::ConstructL()
+	{
+	COomSetup::ConstructL();
+	}
+
+/** Sets hot key for the session.
+*/
+TInt COomHotKey::Fail()
+	{
+	return(iWs.SetHotKey(EHotKeyEnableLogging,'a',0,0));
+	}
+
+void COomHotKey::ClearUpL()
+	{
+	iWs.RestoreDefaultHotKey(EHotKeyEnableLogging);
+	}
+
+//
+
+COomGroupName::COomGroupName(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomGroupName::~COomGroupName()
+	{
+	}
+
+TOomTestName COomGroupName::TestName()
+	{
+	return(_L("Group name"));
+	}
+
+void COomGroupName::ConstructL()
+	{
+	COomSetup::ConstructL();
+	}
+
+/** Sets the window group's name.
+*/
+TInt COomGroupName::Fail()
+	{
+	return(iWinGroup.SetName(_L("A Name")));
+	}
+
+void COomGroupName::ClearUpL()
+	{
+	iWinGroup.SetName(_L(""));
+	}
+
+//
+
+COomMessageSend::COomMessageSend(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomMessageSend::~COomMessageSend()
+	{
+	}
+
+TOomTestName COomMessageSend::TestName()
+	{
+	return(_L("MessageSend"));
+	}
+
+void COomMessageSend::ConstructL()
+	{
+	COomSetup::ConstructL();
+	}
+
+void COomMessageSend::PreFail()
+	{
+	iWinGroup2=RWindowGroup(iWs);
+	iWinGroup2.Construct(557);
+	iWinGroup2.EnableReceiptOfFocus(EFalse);	// Stop auto group switching on close
+	}
+
+/** Sends a message to another window group
+*/
+TInt COomMessageSend::Fail()
+	{
+	TBuf8<0x20> params(_L8("SomeParams"));
+	return(iWs.SendMessageToWindowGroup(iWinGroup2.Identifier(),TUid::Uid(123),params));
+	}
+
+void COomMessageSend::ClearUpL()
+	{
+	iWinGroup2.Close();
+	}
+
+//
+
+COomMessageFetch::COomMessageFetch(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomMessageFetch::~COomMessageFetch()
+	{
+	}
+
+TOomTestName COomMessageFetch::TestName()
+	{
+	return(_L("MessageFetch"));
+	}
+
+void COomMessageFetch::ConstructL()
+	{
+	COomSetup::ConstructL();
+	}
+
+#define CLIENT_HANDLE 555
+#define UID_VALUE 123
+#define MESSAGE_LEN 0x20
+void COomMessageFetch::PreFail()
+	{
+	iWinGroup2=RWindowGroup(iWs);
+	iWinGroup2.Construct(CLIENT_HANDLE);
+	iWinGroup2.EnableReceiptOfFocus(EFalse);	// Stop auto group switching on close
+	TBuf8<MESSAGE_LEN> params(_L8("SomeParams"));
+	TBool retVal = iWs.SendMessageToWindowGroup(iWinGroup2.Identifier(),TUid::Uid(UID_VALUE),params);
+	iTest->TEST(retVal==KErrNone);
+	if (retVal!=KErrNone)
+		iTest->INFO_PRINTF3(_L("iWs.SendMessageToWindowGroup() return value - Expected: %d, Actual: %d"), KErrNone, retVal);			
+	}
+
+/** Fetches a message
+*/
+TInt COomMessageFetch::Fail()
+	{
+	TWsEvent event;
+	TPtr8 ptr(NULL,0);
+	TUid uid;
+	event.SetType(EEventMessageReady);
+	event.SetHandle(CLIENT_HANDLE);
+	event.SetTimeNow();
+	SEventMessageReady& eventMessageReady=*(SEventMessageReady*)event.EventData();
+	eventMessageReady.iWindowGroupIdentifier=iWinGroup2.Identifier();
+	eventMessageReady.iMessageUid=TUid::Uid(UID_VALUE);
+	eventMessageReady.iMessageParametersSize=MESSAGE_LEN;
+	TInt ret=TheClient->iWs.FetchMessage(uid,ptr,event);
+	if (ret==KErrNone)
+		User::Free((TAny *)ptr.Ptr());
+	return(ret);
+	}
+
+void COomMessageFetch::ClearUpL()
+	{
+	iWinGroup2.Close();
+	}
+
+//
+
+COomRequestEvents::COomRequestEvents(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomRequestEvents::~COomRequestEvents()
+	{
+	}
+
+TOomTestName COomRequestEvents::TestName()
+	{
+	return(_L("Request events"));
+	}
+
+void COomRequestEvents::ConstructL()
+	{
+	COomSetup::ConstructL();
+	}
+
+/** Enables window group change events and modifier change events
+*/
+TInt COomRequestEvents::Fail()
+	{
+	TInt err;
+	if ((err=iWinGroup.EnableOnEvents())==KErrNone)
+		if ((err=iWinGroup.EnableGroupChangeEvents())==KErrNone)
+			err=iWinGroup.EnableModifierChangedEvents(EModifierCapsLock,EEventControlAlways);
+	return(err);
+	}
+
+void COomRequestEvents::ClearUpL()
+	{
+	iWinGroup.DisableOnEvents();
+	iWinGroup.DisableGroupChangeEvents();
+	iWinGroup.DisableModifierChangedEvents();
+	}
+
+//
+
+COomCopyScreen::COomCopyScreen(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+TOomTestName COomCopyScreen::TestName()
+	{
+	return(_L("Copy screen"));
+	}
+
+COomCopyScreen::~COomCopyScreen()
+	{
+	delete iScrDev;
+	delete iBitmap;
+	}
+
+void COomCopyScreen::ConstructL()
+	{
+	COomSetup::ConstructL();
+	iScrDev=new(ELeave) CWsScreenDevice(iWs);
+	User::LeaveIfError(iScrDev->Construct(iTest->ScreenNumber()));
+	iBitmap=new(ELeave) CFbsBitmap();
+	User::LeaveIfError(iBitmap->Create(TSize(100,100),EGray4));
+	}
+
+/** Copies screen to bitmap
+*/
+TInt COomCopyScreen::Fail()
+	{
+	TInt ret=iScrDev->CopyScreenToBitmap(iBitmap);
+	if (ret==KErrNone)
+		ret=iScrDev->CopyScreenToBitmap(iBitmap,TRect(10,10,50,50));
+	return(ret);
+	}
+
+void COomCopyScreen::ClearUpL()
+	{
+	}
+
+//
+
+COomSpriteBase::COomSpriteBase(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomSpriteBase::~COomSpriteBase()
+	{
+	iWin.Close();
+	delete iBitmap;
+	delete iMask;
+	delete iBitmap2;
+	delete iMask2;
+	}
+
+void COomSpriteBase::ConstructL()
+	{
+	COomSetup::ConstructL();
+	iWin=RWindow(iWs);
+	User::LeaveIfError(iWin.Construct(iWinGroup,33));
+	User::LeaveIfError(iWin.SetSizeErr(TSize(100,100)));
+	iWin.Activate();
+	iBitmap=new(ELeave) CFbsBitmap();
+	User::LeaveIfError(iBitmap->Create(TSize(10,10),EGray4));
+	iBitmap2=new(ELeave) CFbsBitmap();
+	User::LeaveIfError(iBitmap2->Create(TSize(40,40),EGray4));
+	iMask=new(ELeave) CFbsBitmap();
+	User::LeaveIfError(iMask->Create(TSize(10,10),EGray4));
+	iMask2=new(ELeave) CFbsBitmap();
+	User::LeaveIfError(iMask2->Create(TSize(40,40),EGray4));
+	}
+
+//
+
+COomSprite::COomSprite(CTOom *aTest) : COomSpriteBase(aTest)
+	{}
+
+TOomTestName COomSprite::TestName()
+	{
+	return(_L("Sprites"));
+	}
+
+/** Creates a sprite.
+*/
+TInt COomSprite::Fail()
+	{
+	iSprite=RWsSprite(iWs);
+	TInt err=iSprite.Construct(iWin,TPoint(10,10),0);
+	if (err==KErrNone)
+		{
+		TSpriteMember sprite;
+		sprite.iBitmap=iBitmap;
+		sprite.iMaskBitmap=iMask;
+		sprite.iInvertMask=EFalse;
+		sprite.iDrawMode=CGraphicsContext::EDrawModePEN;
+		sprite.iOffset=TPoint(0,0);
+		sprite.iInterval=TTimeIntervalMicroSeconds32(100000);
+		if ((err=iSprite.AppendMember(sprite))==KErrNone)
+			if ((err=iSprite.Activate())==KErrNone)
+				{
+				sprite.iBitmap=iBitmap2;		// Bigger bitmap to force resize of bitmap
+				sprite.iMaskBitmap=iMask2;
+				if ((err=iSprite.AppendMember(sprite))==KErrNone)
+					err=iSprite.UpdateMember(1,sprite);
+				}
+		}
+	return(err);
+	}
+
+void COomSprite::ClearUpL()
+	{
+	iSprite.Close();
+	}
+
+//
+
+COomPointerCursor::COomPointerCursor(CTOom *aTest) : COomSpriteBase(aTest)
+	{}
+
+TOomTestName COomPointerCursor::TestName()
+	{
+	return(_L("Pointer cursor"));
+	}
+
+/** Creates a pointer cursor.
+*/
+TInt COomPointerCursor::Fail()
+	{
+	iPointerCursor=RWsPointerCursor(iWs);
+	TInt err=iPointerCursor.Construct(0);
+	if (err==KErrNone)
+		{
+		TSpriteMember sprite;
+		sprite.iBitmap=iBitmap;
+		sprite.iMaskBitmap=iMask;
+		sprite.iInvertMask=EFalse;
+		sprite.iDrawMode=CGraphicsContext::EDrawModePEN;
+		sprite.iOffset=TPoint(0,0);
+		sprite.iInterval=TTimeIntervalMicroSeconds32(100000);
+		if ((err=iPointerCursor.AppendMember(sprite))==KErrNone)
+			if ((err=iPointerCursor.Activate())==KErrNone)
+				{
+				sprite.iBitmap=iBitmap2;		// Bigger bitmap to force resize of bitmap
+				sprite.iMaskBitmap=iMask2;
+				if ((err=iPointerCursor.AppendMember(sprite))==KErrNone)
+					err=iPointerCursor.UpdateMember(1,sprite);
+				}
+		}
+	return(err);
+	}
+
+void COomPointerCursor::ClearUpL()
+	{
+	iPointerCursor.Close();
+	}
+
+//
+
+COomGc::COomGc(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomGc::~COomGc()
+	{
+	delete iScrDev;
+	}
+
+TOomTestName COomGc::TestName()
+	{
+	return(_L("Graphic Context"));
+	}
+
+void COomGc::ConstructL()
+	{
+	COomSetup::ConstructL();
+	iScrDev=new(ELeave) CWsScreenDevice(iWs);
+	User::LeaveIfError(iScrDev->Construct(iTest->ScreenNumber()));
+	}
+
+/** Creates a graphical context for a previously created screen device.
+*/
+TInt COomGc::Fail()
+	{
+	TRAPD(err,iFailGc=new(ELeave) CWindowGc(iScrDev));
+	if (err!=KErrNone)
+		return(err);
+	return(iFailGc->Construct());
+	}
+
+void COomGc::ClearUpL()
+	{
+	delete iFailGc;
+	iFailGc=NULL;
+	}
+
+//
+
+COomPolygon::COomPolygon(CTOom *aTest) : COomSetup(aTest), iPnts(5)
+	{}
+
+COomPolygon::~COomPolygon()
+	{
+	delete iGc;
+	delete iScrDev;
+	iWin.Close();
+	}
+
+TOomTestName COomPolygon::TestName()
+	{
+	return(_L("Polygon"));
+	}
+
+void COomPolygon::ConstructL()
+	{
+	COomSetup::ConstructL();
+	iScrDev=new(ELeave) CWsScreenDevice(iWs);
+	User::LeaveIfError(iScrDev->Construct(iTest->ScreenNumber()));
+	User::LeaveIfError(iScrDev->CreateContext(iGc));
+	iWin=RBackedUpWindow(iWs);
+	User::LeaveIfError(iWin.Construct(iWinGroup,EGray16,33));
+	User::LeaveIfError(iWin.SetSizeErr(TSize(40,40)));
+	iWin.Activate();
+	TInt index;
+	for(index=0;index<20;index+=2)
+		iPnts.AppendL(TPoint(20+index,index));
+	for(index=0;index<20;index+=2)
+		iPnts.AppendL(TPoint(40-index,20+index));
+	for(index=0;index<20;index+=2)
+		iPnts.AppendL(TPoint(20-index,40-index));
+	for(index=0;index<20;index+=2)
+		iPnts.AppendL(TPoint(index,20-index));
+	}
+
+/** Draws a polygon.
+*/
+TInt COomPolygon::Fail()
+	{
+	iGc->Activate(iWin);
+	iGc->Clear();
+	iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+	iGc->SetBrushColor(TRgb::Gray4(2));
+	iGc->SetPenColor(TRgb::Gray4(0));
+	TInt err=iGc->DrawPolygon(&iPnts,CGraphicsContext::EAlternate);
+	if (err!=KErrNone)
+		return(err);
+	err=iGc->DrawPolygon(&iPnts,CGraphicsContext::EWinding);
+	if (err!=KErrNone)
+		return(err);
+	return(KErrNone);
+	}
+
+void COomPolygon::ClearUpL()
+	{
+	iGc->Deactivate();
+	}
+
+//
+
+COomScreenDevice::COomScreenDevice(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+TOomTestName COomScreenDevice::TestName()
+	{
+	return(_L("Screen device"));
+	}
+
+/** Creates a screen device handle.
+*/
+TInt COomScreenDevice::Fail()
+	{
+	TRAPD(err,iScrDev=new(ELeave) CWsScreenDevice(iWs));
+	if (err!=KErrNone)
+		return(err);
+	return(iScrDev->Construct(iTest->ScreenNumber()));
+	}
+
+void COomScreenDevice::ClearUpL()
+	{
+	delete iScrDev;
+	iScrDev=NULL;
+	}
+
+//
+
+COomCustomTextCursor::COomCustomTextCursor(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomCustomTextCursor::~COomCustomTextCursor()
+	{
+	delete iMemberArray;
+	delete iBitmap;
+	}
+
+TOomTestName COomCustomTextCursor::TestName()
+	{
+	return(_L("Custom Text Cursor"));
+	}
+
+void COomCustomTextCursor::ConstructL()
+	{
+	COomSetup::ConstructL();
+
+	iBitmap = new(ELeave) CFbsBitmap;
+	User::LeaveIfError(iBitmap->Load(TEST_BITMAP_NAME, EMbmWsautotestBmp1));
+
+	TSpriteMember member;
+	member.iMaskBitmap=NULL;
+	member.iInvertMask=EFalse;
+	member.iDrawMode=CGraphicsContext::EDrawModePEN;
+	member.iOffset=TPoint();
+	member.iInterval=TTimeIntervalMicroSeconds32(0);
+	member.iBitmap = iBitmap;
+
+	iMemberArray = new(ELeave) CArrayFixFlat<TSpriteMember>(1);
+	iMemberArray->AppendL(member);
+	}
+
+/** Adds a custom text cursor to the server's list of cursors.
+*/
+TInt COomCustomTextCursor::Fail()
+	{
+	TInt err = TheClient->iWs.SetCustomTextCursor(0x98765432, iMemberArray->Array(), 0, RWsSession::ECustomTextCursorAlignTop);
+	if (err == KErrAlreadyExists)
+		return KErrNone;
+	else
+		return err;
+	}
+
+void COomCustomTextCursor::ClearUpL()
+	{
+	}
+
+COomTranspWindow::COomTranspWindow(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+COomTranspWindow::~COomTranspWindow()
+	{
+	delete iBackgroundWin;
+	delete iFirst;
+	delete iSecond;
+	
+	delete iFbsBitmap;
+	delete iWsBitmap;
+	delete iFbsBitmapDevice; 
+	delete iFbsBitmapGc;
+	delete iWsBitmapDevice; 
+	delete iWsBitmapGc;				
+	}
+
+TOomTestName COomTranspWindow::TestName()
+	{
+	return(_L("Transparent Window"));
+	}
+
+void COomTranspWindow::ConstructL()
+	{
+	COomSetup::ConstructL();
+	
+	iTransparencyEnabled = (TransparencySupportedL() == KErrNone);
+	if(!iTransparencyEnabled)
+		return;
+
+	iFbsBitmap = new (ELeave) CFbsBitmap;
+
+	// Do the creation 
+	const TSize KSizeForBitmap(10,10);
+	iFbsBitmap->Create(KSizeForBitmap,EGray256);
+	
+	// Fill the bitmap with a colour		
+	iFbsBitmapDevice=CFbsBitmapDevice::NewL(iFbsBitmap);
+		
+	iFbsBitmapDevice->CreateContext(iFbsBitmapGc);
+	
+	iFbsBitmapGc->SetPenStyle(CGraphicsContext::ENullPen);
+	iFbsBitmapGc->SetBrushStyle(CGraphicsContext::ESolidBrush);	
+	iFbsBitmapGc->SetBrushColor(128);
+	iFbsBitmapGc->DrawRect(TRect(KSizeForBitmap));
+	
+	// Create a CWsBitmap, and fill it with a colour	
+	iWsBitmap = new (ELeave) CWsBitmap(TheClient->iWs);
+	
+	// Do the creation 
+	iWsBitmap->Create(KSizeForBitmap,EGray256);	
+		
+	// Fill the bitmap with a colour		
+	iWsBitmapDevice=CFbsBitmapDevice::NewL(iWsBitmap);	
+			
+	iWsBitmapDevice->CreateContext(iWsBitmapGc);		
+	iWsBitmapGc->SetPenStyle(CGraphicsContext::ENullPen);
+	iWsBitmapGc->SetBrushStyle(CGraphicsContext::ESolidBrush);	
+	iWsBitmapGc->SetBrushColor(128);
+	iWsBitmapGc->DrawRect(TRect(KSizeForBitmap));				
+	}
+	
+
+/** Does nothing if transparency is not enabled. Creates a blank window with 
+* two transparent child-windows. Tests setting the transparency via a factor, CFbsBitmap
+* or a CWsBitmap, and changing from one to the other.
+* Changes child-windows' sizes and toggles their visibility.
+*/
+TInt COomTranspWindow::Fail()
+	{
+	if(!iTransparencyEnabled)
+		return KErrNone;
+	TSize scrSize(TheClient->iScreen->SizeInPixels());
+	TRAPD(res, iBackgroundWin = new (ELeave) CBlankWindow(TRgb(0,0,238)));
+	if(res != KErrNone)
+		{
+		return res;	
+		}
+
+	TDisplayMode mode=EColor256;
+	TRAP(res, iBackgroundWin->SetUpL(TPoint(50,50),scrSize-TSize(100,100),TheClient->iGroup,*TheClient->iGc,&mode));
+	if(res != KErrNone)
+		{
+		return res;
+		}
+
+	TheClient->Flush();
+	TheClient->WaitForRedrawsToFinish();
+
+	iBackgroundWin->Win()->SetBackgroundColor(TRgb(51,204,51));
+	iBackgroundWin->Invalidate();
+
+	TheClient->Flush();
+	TheClient->WaitForRedrawsToFinish();
+
+	TRect	thePos1(20, 20, 60, 60);
+	TRect	thePos2(100, 40, 160, 80);
+	TRAP(res, iFirst = CTransWindow::NewL(iBackgroundWin, TRgb(255,0,0,128),&mode));
+	if(res != KErrNone)
+		{
+		return res;
+		}
+
+	TRAP(res, iSecond = CTransWindow::NewL(iBackgroundWin, TRgb(255,0,0,128),&mode));
+	if(res != KErrNone)
+		{
+		return res;
+		}
+
+	TRAP(res, iFirst->SetExtL(thePos1.iTl,thePos1.Size()));
+	if(res != KErrNone)
+		{
+		return res;
+		}
+
+	TRAP(res, iSecond->SetExtL(thePos2.iTl,thePos2.Size()));
+	if(res != KErrNone)
+		{
+		return res;
+		}
+
+	res=SetTransparencyTesting();
+	if(res != KErrNone)
+		{
+		return res;
+		}
+
+	TheClient->Flush();
+	//TheClient->WaitForRedrawsToFinish();
+
+	iFirst->Activate();
+	iFirst->AssignGC(*TheClient->iGc);
+
+	iSecond->Activate();
+	iSecond->AssignGC(*TheClient->iGc);
+
+	iFirst->Win()->SetBackgroundColor(TRgb(0, 0, 255));
+	iSecond->Win()->SetBackgroundColor(TRgb(0, 0, 255));
+	iFirst->Invalidate();
+	iSecond->Invalidate();
+	
+	iFirst->AdjustSize(150,10, 0);
+	iSecond->AdjustSize(150,10, 0);
+
+	TheClient->Flush();
+	TheClient->WaitForRedrawsToFinish();
+
+	iFirst->ToggleVisibility();
+	iSecond->ToggleVisibility();
+
+	TheClient->Flush();
+	TheClient->WaitForRedrawsToFinish();
+	
+	iFirst->AdjustSize(200,10, 0);
+	iSecond->AdjustSize(200,10, 0);
+
+	iFirst->ToggleVisibility();
+	iSecond->ToggleVisibility();
+
+	TheClient->Flush();
+	TheClient->WaitForRedrawsToFinish();
+
+	return KErrNone;
+	}
+
+
+// This function tests setting the transparency via a factor, CFbsBitmap
+// or a CWsBitmap, and changing from one to the other.
+TInt COomTranspWindow::SetTransparencyTesting()
+	{
+	TInt res;	
+	TLogMessageText buf;
+		
+	// Need all nine transitions, from the 3 ways to the same 3 ways.
+	// The ways are Factor, CWsBitmap, CFbsBitmap
+	const TRgb KTransparencyFactor(128,128,128);
+	res=iFirst->Win()->SetTransparencyFactor(KTransparencyFactor);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyFactor -1");
+		TheClient->LogMessage(buf);
+		return res;
+		}
+			
+	res=iFirst->Win()->SetTransparencyBitmap(*iFbsBitmap);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyBitmap - fbs -2");
+		TheClient->LogMessage(buf);
+		return res;
+		}			
+		
+	res=iFirst->Win()->SetTransparencyWsBitmap(*iWsBitmap);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyBitmap - Ws -3");
+		TheClient->LogMessage(buf);
+		return res;
+		}
+				
+	res=iFirst->Win()->SetTransparencyFactor(KTransparencyFactor);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyBitmap - fbs -4");
+		TheClient->LogMessage(buf);
+		return res;
+		}	
+	res=iFirst->Win()->SetTransparencyWsBitmap(*iWsBitmap);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyBitmap - Ws -5");
+		TheClient->LogMessage(buf);
+		return res;
+		}
+	res=iFirst->Win()->SetTransparencyWsBitmap(*iWsBitmap);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyBitmap - Ws -6");
+		TheClient->LogMessage(buf);
+		return res;
+		}			
+		
+	res=iFirst->Win()->SetTransparencyBitmap(*iFbsBitmap);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyBitmap - fbs -7");
+		TheClient->LogMessage(buf);
+		return res;
+		}	
+		
+	res=iFirst->Win()->SetTransparencyBitmap(*iFbsBitmap);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyBitmap - fbs -8");
+		TheClient->LogMessage(buf);
+		return res;
+		}
+		
+	res=iFirst->Win()->SetTransparencyFactor(KTransparencyFactor);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyFactor -9");
+		TheClient->LogMessage(buf);
+		return res;
+		}				
+		
+	res=iFirst->Win()->SetTransparencyFactor(KTransparencyFactor);
+	if (res!=KErrNone)
+		{
+		buf=_L("test failure!! with SetTransparencyFactor -10");
+		TheClient->LogMessage(buf);
+		return res;
+		}
+					
+	return res;
+	}	
+
+void COomTranspWindow::ClearUpL()
+	{
+	delete iFirst;
+	iFirst = NULL;
+	delete iSecond;
+	iSecond = NULL;
+	delete iBackgroundWin;
+	iBackgroundWin = NULL;
+	}
+
+//
+
+CWindowWithOneLine* CWindowWithOneLine::NewL(CTWinBase& aParent, const TRect& aExtent)
+	{
+	CWindowWithOneLine* self = new(ELeave) CWindowWithOneLine;
+	CleanupStack::PushL(self);
+	self->ConstructL(aParent);
+	const TSize screenSize(TheClient->iScreen->SizeInPixels());	
+	self->SetExtL(aExtent.iTl, aExtent.Size());
+	self->AssignGC(*TheClient->iGc);
+	self->Activate();
+	self->DrawNow();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CWindowWithOneLine::Draw()
+	{
+	iGc->DrawLine(TPoint(0,0), TPoint(Size().iWidth, Size().iHeight));
+	}
+
+//
+
+COomObscuredWindow::COomObscuredWindow(CTOom *aTest) : COomSetup(aTest)
+	{}
+
+TOomTestName COomObscuredWindow::TestName()
+	{
+	return(_L("Obscured window"));
+	}
+
+TInt COomObscuredWindow::Fail()
+	{
+	TRAPD(err, DoFailL());
+	return err;
+	}
+
+	
+void COomObscuredWindow::DoFailL()
+	{
+#ifdef __WINS__
+	RDebug::Print(_L("COomObscuredWindow::DoFailL - enter"));
+#endif
+	const TRect extent(20, 20, 100, 100);
+	CBlankWindow* backgroundWindow = new(ELeave) CBlankWindow(TRgb(12, 23, 34));
+	CleanupStack::PushL(backgroundWindow);
+	TDisplayMode mode = EColor16MAP;
+	backgroundWindow->SetUpL(extent.iTl, extent.Size(), TheClient->iGroup, *TheClient->iGc, &mode);
+	
+	CWindowWithOneLine* window = CWindowWithOneLine::NewL(*backgroundWindow, extent);
+	CleanupStack::PushL(window);
+#ifdef __WINS__
+	RDebug::Print(_L("COomObscuredWindow - WaitForRedrawsToFinish - 1"));
+#endif
+	TheClient->WaitForRedrawsToFinish();
+	
+	CBlankWindow* obscuringWindow = new(ELeave) CBlankWindow(TRgb(255, 0, 0));
+	CleanupStack::PushL(obscuringWindow);
+	obscuringWindow->SetUpL(extent.iTl, extent.Size(), backgroundWindow, *TheClient->iGc, &mode);
+
+	TheClient->Flush();
+#ifdef __WINS__
+    RDebug::Print(_L("COomObscuredWindow - WaitForRedrawsToFinish - 2"));
+#endif
+	TheClient->WaitForRedrawsToFinish();
+
+	window->Invalidate();
+
+	for(TInt i = 0; i < 50; i++)
+		{
+		RWindow anotherWin(iWs);
+		User::LeaveIfError(anotherWin.Construct(iWinGroup, 11));
+		anotherWin.Close();
+		
+		if(i % 4)
+			window->Invalidate();
+
+		TheClient->Flush();
+#ifdef __WINS__
+	    RDebug::Print(_L("COomObscuredWindow - WaitForRedrawsToFinish - 3 - %d"), i);
+#endif
+	    TheClient->WaitForRedrawsToFinish();
+		}
+
+	TheClient->Flush();
+#ifdef __WINS__
+    RDebug::Print(_L("COomObscuredWindow - WaitForRedrawsToFinish - 4"));
+#endif
+	TheClient->WaitForRedrawsToFinish();
+
+	CleanupStack::PopAndDestroy(obscuringWindow);
+	CleanupStack::PopAndDestroy(window);
+	CleanupStack::PopAndDestroy(backgroundWindow);
+#ifdef __WINS__
+    RDebug::Print(_L("COomObscuredWindow::DoFailL - exit"));
+#endif
+	}
+
+void COomObscuredWindow::ClearUpL()
+	{
+	}	
+
+//
+
+CTOom::CTOom(CTestStep* aStep) : CTWsGraphicsBase(aStep)
+	{
+	iState = 0;
+	}
+	
+const TDesC& CTOom::TestName() const
+	{
+	_LIT(KTestName,"CTOom");
+	return(KTestName());
+	}
+	
+void CTOom::DoOomTestL(COomFailBase *aOomTest)
+	{
+	//TLogMessageText buf;
+	TEST(aOomTest!=NULL);
+	if (aOomTest==NULL)
+		INFO_PRINTF1(_L("aOomTest - Expected: Not Null, Actual: NULL"));			
+
+	TRAPD(ret1,aOomTest->ConstructL());
+	TEST(ret1==KErrNone);
+	if (ret1!=KErrNone)
+		INFO_PRINTF3(_L("aOomTest->ConstructL() return value - Expected: %d, Actual: %d"), KErrNone, ret1);			
+
+	aOomTest->Flush();
+	__UHEAP_MARK;
+//	TInt oldCount=TheClient->iWs.HeapCount();
+	for(TInt mode=0;mode<3;mode++)
+		{
+		/*buf.Format(_L("OOMTest[%d] Mode=%d"),iState,mode),
+		TheClient->LogMessage(buf);*/
+		TInt successCount=0;
+		for(TInt count=1;;count++)
+			{
+			TInt ret;
+			aOomTest->PreFail();
+			if (mode==0)
+				TheClient->iWs.HeapSetFail(RHeap::EDeterministic,count);
+			else if (mode==1)
+				TheClient->iWs.HeapSetBurstFail(RHeap::EBurstFailNext, count, KMaxTUint16);
+			else if (mode==3)
+				{
+				__UHEAP_SETFAIL(RHeap::EDeterministic,count);	//Leavescan will complain about EFailNext, although it isn't a leaving function
+				}
+			ret=aOomTest->Fail();
+			if (mode==0)
+				TheClient->iWs.HeapSetFail(RHeap::ENone,0);
+			else if (mode==1)
+				TheClient->iWs.HeapSetBurstFail(RHeap::ENone, 0, 0);
+			else if (mode==2)
+				{
+				__UHEAP_RESET;
+				}
+			aOomTest->ClearUpL();  //In just 1 case this could leave...
+			aOomTest->Flush();
+			if (ret==KErrNone)
+				{
+				if (successCount==10)
+					break;
+				successCount++;
+				}
+			else
+				{
+				/*if (successCount>0)
+					{
+					buf.Format(_L("[%d,%d] Count=%d, MaxSuccess=%d"),iState,mode,count,successCount);
+					TheClient->LogMessage(buf);
+					}*/
+				successCount=0;
+				/*if (ret!=KErrNoMemory)
+					{
+					buf.Format(_L("[%d,%d] Fail, Count=%d, Error=%d"),iState,mode,count,ret);
+					TheClient->LogMessage(buf);
+					}*/
+				TEST(ret==KErrNoMemory);
+				if (ret!=KErrNoMemory)
+					INFO_PRINTF3(_L("aOomTest->Fail() return value - Expected: %d, Actual: %d"), KErrNoMemory, ret);			
+
+				}
+			}
+		/*buf.Format(_L("[%d,%d] LastCount=%d"),iState,mode,count),
+		TheClient->LogMessage(buf);*/
+		}
+//	TEST(oldCount>=TheClient->iWs.HeapCount());
+	__UHEAP_MARKEND;
+	delete aOomTest;
+	/*buf.Format(_L("OOMTest[%d] Finished"),iState);
+	TheClient->LogMessage(buf);*/
+	}
+
+void CTOom::ConstructL()
+	{
+	iShieldWin=RBlankWindow(TheClient->iWs);
+	User::LeaveIfError(iShieldWin.Construct(*(TheClient->iGroup->GroupWin()),1));
+//	iShieldWin.SetOrdinalPosition(0,-1);
+	iShieldWin.Activate();
+	}
+
+CTOom::~CTOom()
+	{
+	iShieldWin.Close();
+	}
+
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0124
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Out of memory tests
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Uses deterministic heap failure mode to test WSERV classes against out-of-memory errors.
+					Sets and unsets deterministic mode using both RWsSession.HeapSetFail() methods and
+					__UHEAP_SETFAIL/__UHEAP_RESET macros (doing this both client and WSERV threads are tested). 
+					On each step the test creates a failure object and repeatedly asks it to do some work (calling Fail() method).
+					A failure object is an object which encapsulates some allocation functionality inside it's Fail() method.
+					The test is performed for 23 different failure objects that do the following:
+						1. Creates a wserv session, connects and creates CWsScreenDevice object.
+						2. Creates a RWindowGroup object.
+						3. Creates a RWindow object.
+						4. Creates a RBackedUpWindow object.
+						5. Sets the size of previously created backed-up window.
+						6. Creates a RBlankWindow object.
+						7. Allocates a buffer for storing pointer movements for a previously created backed-up window.
+						8. Adds a priority key for a previously created window group.
+						9. Requests a capture keys for a previously created window group.
+						10. Requests the capture of key-up and key-down events for a previously created window group.
+						11. Sets hot key for the session.
+						12. Sets the window group's name.
+						13. Sends a message to another window group.
+						14. Fetches a message.
+						15. Enables window group change events and modifier change events.
+						16. Copies screen to bitmap.
+						17. Creates a sprite.
+						18. Creates a pointer cursor.
+						19. Creates a graphical context for a previously created screen device.
+						20. Draws a polygon.
+						21. Creates a screen device handle.
+						22. Adds a custom text cursor to the server's list of cursors.
+						23. Does nothing if transparency is not enabled. Creates a blank window with 
+							two transparent child-windows. Tests setting the transparency via a factor, CFbsBitmap
+							or a CWsBitmap, and changing from one to the other.
+							Changes child-windows' sizes and toggles their visibility.
+					
+
+@SYMTestExpectedResults The test checks that the creation failure objects doesn't fail and their's work either causes no errors or causes KErrNoMemory error.
+*/
+void CTOom::RunTestCaseL(TInt /*aCurTestCase*/) 
+	{
+	((CTOomStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0124"));
+	if (iState==0)
+		{
+		// commented by Anton Golovko, 01.03.2006 while converting to TEF
+		// the code below prevented the test to do anything.
+//		if (iTest->IsFullRomL()) 
+//			{
+//			TestComplete();
+//			return;
+//			}
+		iOldCount=TheClient->iWs.HeapCount();
+		}
+	else if (iState==sizeof(CreateOomFailTest)/sizeof(CreateOomFailTest[0]))
+		{
+		iTest->CloseAllPanicWindows();
+		TInt heapCount=TheClient->iWs.HeapCount();
+		if (heapCount>iOldCount)
+			{
+			TEST(iOldCount>=heapCount-184);		//For some uninvestigated reason 184 object get allocated on the server side, partly because of INFO_PRINTF1
+			if (iOldCount<heapCount-184)
+					INFO_PRINTF3(_L("iOldCount>=heapCount-174 - Expected: %d, Actual: %d"), heapCount-184, iOldCount);			
+
+			}
+		((CTOomStep*)iStep)->CloseTMSGraphicsStep();
+		TestComplete();
+		return;
+		}
+	DoOomTestL(CreateOomFailTest[iState++](this));
+	((CTOomStep*)iStep)->RecordTestResultL();
+	}
+	
+	
+	
+	
+__WS_CONSTRUCT_STEP__(Oom)
+