windowing/windowserver/twsgraphic/TWsGraphicTest.CPP
changeset 110 7f25ef56562d
parent 98 bf7481649c98
child 111 29ddb8a72f0e
--- a/windowing/windowserver/twsgraphic/TWsGraphicTest.CPP	Fri Jun 11 14:58:47 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1610 +0,0 @@
-// Copyright (c) 1995-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:
-//
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code
-*/
-
-#include <w32stdgraphic.h>
-#include <imageconversion.h>
-#include "testbase.h"
-#include "testbase.h"
-
-// Bitmap to load for tests
-#define MY_TEST_BITMAP _L("Z:\\WSTEST\\MYTEST.MBM")
-
-// Animation to load for tests
-_LIT(KSymBallFile, "Z:\\WSTEST\\symball.gif");
-
-// Executables for different sharing of graphic tests
-_LIT(KTestExe1, "TWSGRAPHICSHARETEST.exe");
-_LIT(KTestExe2, "TWSGRAPHICSHAREGLOBALTEST.exe");
-_LIT(KTestExe3, "TWSGRAPHICUNSHAREGLOBALTEST.exe");
-_LIT(KTestExe4, "TWSGRAPHICSHARESECURETEST.exe");
-_LIT(KTestExe5, "TWSGRAPHICUNSHARESECURETEST.exe");
-
-// Graphic is shared or not in executeable
-_LIT(KShare, " true");
-_LIT(KNoShare, " false");
-
-TUid KUidTestAnimation = {0x87654321};
-const TInt KDummyGraphicId = 99;
-const TInt KMaxLogLength = 256;
-const TInt KAnimationRunTime = 5000000; // 5 seconds max time to run a single animation loop
-
-// Animation loader
-class CIclLoader: public CActive
-	{
-public:
-	CIclLoader();
-	~CIclLoader();
-	void ConstructL(const TDesC& aFileName, TBool aUseUID, TBool aReplace);
-	const TWsGraphicId GetId();	
-	inline TInt FrameCount() const {return iTotalFrames;};
-	inline TBool Ok() const {return !iFailed;};
-protected:
-	void RunL();
-	TInt RunError(TInt aError);
-	void DoCancel();
-private:
-	void TestL(TInt aCondition);
-	CImageDecoder* iDecoder;
-	CWsGraphicBitmapAnimation* iTestAnimation;
-	TLogMessageText iTestLog;
-	TBool iUseUID;
-	TBool iReplace;
-	RPointerArray<CWsGraphicBitmapAnimation::CFrame> iFrames;
-	TInt iTotalFrames;
-	void NextL();
-	RFs iFs;
-	TBool iFailed;
-	};
-	
-CIclLoader::CIclLoader():
-	CActive(CActive::EPriorityLow)
-	{
-	CActiveScheduler::Add(this);
-	}
-
-CIclLoader::~CIclLoader()
-	{
-	if (iTestAnimation)
-		{
-		delete iTestAnimation;
-		iTestAnimation = NULL;
-		}
-	if (iDecoder)
-		{
-		delete iDecoder;
-		iDecoder = NULL;
-		}
-	iFrames.ResetAndDestroy();
-	iFs.Close();
-	}
-	
-const TWsGraphicId CIclLoader::GetId()
-	{
-	if (iTestAnimation)
-		{
-		return iTestAnimation->Id();
-		}
-	else
-		{
-		TWsGraphicId id(KDummyGraphicId);
-		return id;
-		}
-	}
-	
-void CIclLoader::TestL(TInt aCondition)
-	{
-	if(!aCondition)
-		{
-		RWsSession rWs;
-		User::LeaveIfError(rWs.Connect());
-		TBuf<KMaxLogLength> buf;
-		_LIT(Fail,"AUTO Failed in WsGraphics Test : CIclLoader");
-		buf.Append(Fail);
-		buf.Append(iTestLog);
-		rWs.LogMessage(buf);
-		rWs.Flush();
-		rWs.Close();
-		User::Leave(KErrGeneral);
-		}
-	}
-
-void CIclLoader::ConstructL(const TDesC& aFileName, TBool aUseUID,TBool aReplace)
-	{
-	iUseUID = aUseUID;
-	iReplace = aReplace;
-	
-	User::LeaveIfError(iFs.Connect());
-		
-	iDecoder = CImageDecoder::FileNewL(iFs,aFileName);
-	if(!iDecoder->IsImageHeaderProcessingComplete()) 
-		{
-		User::Leave(KErrGeneral);
-		}
-	NextL();
-	}
-	
-void CIclLoader::NextL()
-	{
-	// Load a frame from the animation
-	if (iDecoder && (iDecoder->FrameCount() > iFrames.Count()))
-		{
-		const TFrameInfo& info = iDecoder->FrameInfo(iFrames.Count());
-		CWsGraphicBitmapAnimation::CFrame* frame = CWsGraphicBitmapAnimation::CFrame::NewL();
-		CleanupStack::PushL(frame);
-		iFrames.AppendL(frame);
-		CleanupStack::Pop(frame);
-		frame->SetFrameInfo(info);
-		TFrameInfo copiedInfo = frame->FrameInfo();
-		TestL(info.iFlags==copiedInfo.iFlags);
-		
-		TSize bmpSize(info.iFrameCoordsInPixels.Size());
-		CFbsBitmap* bitmap = new(ELeave) CFbsBitmap;
-		frame->SetBitmap(bitmap); //takes ownership
-		User::LeaveIfError(bitmap->Create(bmpSize,info.iFrameDisplayMode));
-		
-		TDisplayMode maskDispMode;
-		CFbsBitmap* mask = new(ELeave) CFbsBitmap;
-		frame->SetMask(mask); //takes ownership
-		if((TFrameInfo::EAlphaChannel|TFrameInfo::ETransparencyPossible) & info.iFlags)
-			{
-			maskDispMode = EGray256;
-			}
-		else
-			{
-			maskDispMode = EGray2;
-			}
-		
-		User::LeaveIfError(mask->Create(info.iFrameCoordsInPixels.Size(),maskDispMode));
-		iDecoder->Convert(&iStatus,*bitmap,*mask,iFrames.Count()-1);
-	
-		SetActive();
-		}
-		
-	// if a frame loaded
-	else if(iFrames.Count())
-		{
-		_LIT_SECURE_ID(KTestSecId,0x12345678);
-		
-		// The extra code around the NewL is checking that no heap failures occur when 
-		// creating the CWsGraphicBitmapAnimation
-		TInt failRate = 1;
-		const TInt KMaxIteration = 1000;
-		for (;failRate < KMaxIteration; failRate++)
-		    {
-		    __UHEAP_RESET;
-		    __UHEAP_SETFAIL(RHeap::EDeterministic,failRate);
-		    __UHEAP_MARK;
-
-		    TInt err = KErrGeneral;
-			if (iUseUID)
-				{// creating animation using UID
-				TRAP(err, iTestAnimation = CWsGraphicBitmapAnimation::NewL(KUidTestAnimation,iFrames.Array()););
-				}
-			else
-				{// creating using transient ID allocated by wserv
-				TRAP(err, iTestAnimation = CWsGraphicBitmapAnimation::NewL(iFrames.Array()););
-				}
-			
-			TestL((err==KErrNone || err==KErrNoMemory));
-			
-			if (err != KErrNone)
-		        {
-		        __UHEAP_MARKEND;
-		        TestL(iTestAnimation == NULL);
-		        }
-		    else
-		        {
-		        break;
-		        }
-			}
-		__UHEAP_RESET;
-		TestL(iTestAnimation != NULL); 
-		TestL(failRate > 1); //Ensure the udeb version of euser.dll is available (i.e. that the rom was build with the -D_DEBUG option)
-		RDebug::Printf("TWSGraphicTest.CPP: Heapfailure loop completed after %d allocs.", failRate-1);
-			
-		// if testing that a created animation can be replaced	
-		if (iReplace)
-			{	
-			// replace the animation just created with another
-			TWsGraphicId testId = iTestAnimation->Id();
-			TInt testInt = testId.Id();  
-	    
-	   		CWsGraphicBitmapAnimation* testReplacement = CWsGraphicBitmapAnimation::NewL(testId,iFrames.Array());
-	
-			delete iTestAnimation;
-
-			iTestAnimation = testReplacement;
-		
-			TestL(iTestAnimation->Id().Id()==testInt); 
-			}
-			
-		delete iDecoder;
-		iDecoder = NULL;
-		iTotalFrames = iFrames.Count();
-		iFrames.ResetAndDestroy();
-		
-		// test that the animation methods can be used without error
-		TestL(iTestAnimation->ShareGlobally()==KErrNone);
-		TestL(iTestAnimation->UnShareGlobally()==KErrNone);
-		TestL(iTestAnimation->Share(KTestSecId)==KErrNone);
-		TestL(iTestAnimation->UnShare(KTestSecId)==KErrNone);
-		TestL(iTestAnimation->UnShare(KTestSecId)==KErrNotFound);	
-		}
-	}
-
-void CIclLoader::RunL()
-	{
-	if (iStatus == KErrNone)
-		{
-		NextL();
-		}
-	else
-		{
-		TestL(EFalse); // kill the test
-		}
-	}
-
-TInt CIclLoader::RunError(TInt aError)
-	{
-	RDebug::Printf("CIclLoader::RunError, aError %d", aError);
-	iFailed = ETrue;
-	return KErrNone;
-	}
-
-void CIclLoader::DoCancel()
-	{
-	if(iDecoder)
-		{
-		iDecoder->Cancel();
-		}
-	}
-
-// Class for testing CWsGraphics
-class CActiveWait;
-class CRedrawAO;
-class CWsGraphicBase : public CBase
-	{
-public:
-	CWsGraphicBase();
-	CWsGraphicBase(TInt aScreenNumber);
-	~CWsGraphicBase();
-	void ConstructL();
-	void DoTestL(TInt aTestNo);
-	void RedrawMe(TRect aRedrawRect, TInt aFrame);
-
-	enum TTestCases
-		{
-		ETestCreateGraphicUID,
-		ETestCreateGraphicID,
-		ETestUpdateGraphic,
-		ETestDeleteGraphic,
-		ETestDrawInvalideBitmapID,
-		ETestDrawGraphic,
-		ETestDrawGraphicID,
-		ETestDrawGraphicCompare,
-		ETestDrawGraphicSessionHandle,
-		ETestDrawAnimatedGraphicUID,
-		ETestDrawAnimatedGraphicID,
-		ETestCreateMsgGraphicMsgBuf,
-		ETestDrawReplaceGraphicID,
-		ETestDrawInvalidAnimationID,
-		ETestDrawSharedGraphic,
-		// additional cases to be added here, before ETestMaxNumberOfTests
-		ETestMaxNumberOfTests
-		};
-
-private :
-	void PrepGc();
-	void RetireGc();
-	void RunAnimation(TInt aFrameCount);
-	void LaunchNewProcessL(const TDesC& aExecutable, TBool aShare);
-	inline void TestForIdenticalBitmaps(){Test(iScreen->RectCompare(iPosition1,iPosition2));};
-	inline void TestForDifferentBitmaps(){Test(!iScreen->RectCompare(iPosition1,iPosition2));};
-	void Test(TInt aCondition);
-	void DoTestCreateGraphicUidL();	
-	void DoTestCreateGraphicIdL();
-	void DoTestUpdateGraphicL();
-	void DoTestDrawSharedGraphicL();
-	void DoTestDeleteGraphicL();
-	void DoTestDrawGraphicL();
-	void DoTestDrawGraphicIDL();
-	void DoTestDrawGraphicCompareL();
-	void DoTestDrawAnimatedGraphicUIDL();
-	void DoTestDrawAnimatedGraphicIDL();
-	void DoTestDrawGraphicSessionHandleL();
-	void DoTestCreateMsgGraphicMsgBufL();
-	void DoTestDrawReplaceGraphicIDL();
-	void DoTestDrawInvalidBitmapIDL();
-	void DoTestDrawInvalidAnimationIDL();
-private :
-	TInt iScreenNumber;
-	CWindowGc *iGc;
-	RWsSession iWs;
-	RWindowGroup *iGroupWin;
-	CWsScreenDevice *iScreen;
-	RWindow *iWin;	
-	TLogMessageText iTestLog;
-	TRect iPosition1;
-	TRect iPosition2;
-	CActiveWait* iTimer;
-	CRedrawAO* iRedrawListener;
-	TWsGraphicId iAnimId;
-	TWsGraphicAnimation iAnimData;
-	};
-
-// 
-// class CRedrawAO
-// request & listen for redraw events from wserv
-// if a redraw event is received, notify the observing class
-// 
-class CRedrawAO : public CActive
-	{
-public:
-	static CRedrawAO* NewL(RWsSession* aWs);
-	~CRedrawAO();
-	// from CActive:
-	void RunL();
-	void DoCancel();	
-	TInt RunError(TInt aError);
-	void RequestRedraw();
-	inline void SetFrameCount(TInt aCount){iFrameCount = aCount;};
-	inline TInt GetFrameCount() const {return iFrameCount;};
-private:
-	CRedrawAO(RWsSession* aWs);
-	void ConstructL();
-private:
-	RWsSession* iWs;
-	TInt iFrameCount;
-	};
-
-CRedrawAO* CRedrawAO::NewL(RWsSession* aWs)
-	{
-	CRedrawAO* self = new (ELeave) CRedrawAO(aWs);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self; 
-	}
-
-CRedrawAO::CRedrawAO(RWsSession* aWs):
-CActive(CActive::EPriorityHigh), iWs(aWs)
-	{
-	CActiveScheduler::Add(this);
-	}
-
-CRedrawAO::~CRedrawAO()
-	{
-	// cleanup 
-	Cancel();
-	}
-
-void CRedrawAO::ConstructL()
-	{
-	// nothing to construct 
-	}
-
-void CRedrawAO::RunL()
-	{
-	// leave if status is not ok. RunError will process this result
-	User::LeaveIfError(iStatus.Int());
-	TWsRedrawEvent redraw;
-	iWs->GetRedraw(redraw);
-	TUint redrawHandle = redraw.Handle();
-	if (redrawHandle == ENullWsHandle)
-		{
-		User::Leave(KErrBadHandle); // sanity check the client handle isn't a dummy 
-		}
-	else if (redrawHandle)
-		{
-		--iFrameCount;
-		(reinterpret_cast<CWsGraphicBase *>(redrawHandle))->RedrawMe(redraw.Rect(), iFrameCount); // handle the redraw signal
-		}
-	
-	if (iFrameCount > 0) 
-		{
-		RequestRedraw();
-		}
-	}
-
-TInt CRedrawAO::RunError(TInt aError)
-	{
-	if (aError != KErrBadHandle)
-		{
-		RequestRedraw();
-		}
-	return KErrNone;
-	}
-
-void CRedrawAO::DoCancel()
-	{
-	// kill all outstanding asynch. wserv requests
-	iWs->RedrawReadyCancel();
-	iFrameCount = KErrNone;	
-	}
-
-void CRedrawAO::RequestRedraw()
-	{
-	if (!IsActive())
-		{
-		iWs->RedrawReady(&iStatus);
-		SetActive();
-		}
-	}
-
-//
-
-class CActiveWait : public CActive
-	{
-public:
-	static CActiveWait* NewL();
-	~CActiveWait();
-	void Wait(TInt aDelay);
-	// From CActive:
-	void RunL();
-	void DoCancel();
-	TInt RunError(TInt aError);
-protected:
-	CActiveWait();
-	void ConstructL();
-protected:
-	RTimer iTimer;
-	TTime iFromTime;
-	};
-
-CActiveWait* CActiveWait::NewL()
-	{
-	CActiveWait* self = new (ELeave) CActiveWait;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
-	
-void CActiveWait::ConstructL()
-	{
-	User::LeaveIfError(iTimer.CreateLocal());
-	CActiveScheduler::Add(this);
-	}
-	
-CActiveWait::CActiveWait() : CActive(CActive::EPriorityStandard)
-	{
-	iFromTime.HomeTime();
-	}
-
-CActiveWait::~CActiveWait()
-	{
-	Cancel();
-	iTimer.Close();
-	}
-
-void CActiveWait::DoCancel()
-	{
-	iTimer.Cancel();
-	CActiveScheduler::Stop();
-	}
-
-void CActiveWait::RunL()
-	{
-	CActiveScheduler::Stop();
-	}
-	
-TInt CActiveWait::RunError(TInt aError)
-	{
-	return aError; // exists so a break point can be placed on it.
-	}
-
-void CActiveWait::Wait(TInt aDelay)
-
-
-	{
-	iTimer.After(iStatus, aDelay);
-	SetActive();
-	CActiveScheduler::Start();
-	}
-	
-//
-
-CWsGraphicBase::CWsGraphicBase(TInt aScreenNumber) : iScreenNumber(aScreenNumber), iAnimId(KDummyGraphicId)
-	{
-	}
-	
-CWsGraphicBase::~CWsGraphicBase() 
-	{
-	iWin->Close();
-	delete iWin;
-	delete iScreen;
-	delete iGc;
-	delete iGroupWin;
-	iWs.Close();
-	if (iTimer)
-		{
-		delete iTimer;
-		iTimer = NULL;
-		}
-	if (iRedrawListener)
-		{
-		delete iRedrawListener;
-		iRedrawListener = NULL;
-		}
-	}
-	
-void CWsGraphicBase::ConstructL()
-	{
-	User::LeaveIfError(iWs.Connect());
-	iScreen=new(ELeave) CWsScreenDevice(iWs);
-	User::LeaveIfError(iScreen->Construct(iScreenNumber));
-
-	TSize screenSize = iScreen->SizeInPixels();
-	iPosition1.SetRect(0,0,screenSize.iWidth/2,screenSize.iHeight);
-	iPosition2.SetRect(screenSize.iWidth/2,0,screenSize.iWidth,screenSize.iHeight);
-
-	iTimer = CActiveWait::NewL();
-	iRedrawListener = CRedrawAO::NewL(&iWs);
-
-	iGc=new(ELeave) CWindowGc(iScreen);
-	User::LeaveIfError(iGc->Construct());
-	iGroupWin=new(ELeave) RWindowGroup(iWs);
-	iGroupWin->Construct(1);
-		
-	iWin=new(ELeave) RWindow(iWs);
-	iWin->Construct(*iGroupWin, (TUint32)this);
-	iWin->EnableRedrawStore(EFalse);	// disable the redraw store for these tests
-	iWin->SetRequiredDisplayMode(EColor256);
-	iWin->SetExtent(TPoint(0,0),iScreen->SizeInPixels());
-	iWin->Activate();
-	iWin->BeginRedraw();
-	iWin->EndRedraw();
-	iWs.Flush();
-	}
-	
-// To test whether sharing of graphics works a new process has to be launched.
-// The argument is set whether the graphic should be shared or not.	
-void CWsGraphicBase::LaunchNewProcessL(const TDesC& aExecutable, TBool aShare)
-	{
-	TBuf<128> args;
-	RProcess pr;
-	TRequestStatus status;
-	
-	if (aShare)
-		{
-		args.Append(KShare);
-		}
-	else
-		{
-		args.Append(KNoShare);
-		}
-		
-	User::LeaveIfError(pr.Create(aExecutable,args));
-	pr.Logon(status);
-	pr.Resume();
-	User::WaitForRequest(status);
-	pr.Close();
-	
-	if (status != KErrNone)
-		{
-		User::Leave(status.Int());
-		}
-	}
-
-//
-// CWsGraphicBase::PrepGc
-// activate a gc & clear the two rects
-//
-void CWsGraphicBase::PrepGc()
-	{
-	iGc->Activate(*iWin);
-	iWin->Invalidate();
-	iWin->BeginRedraw();
-	iGc->Clear(iPosition1);
-	iGc->Clear(iPosition2);
-	iWs.Flush();
-	}
-
-//
-// CWsGraphicBase::RetireGc
-// deactivate a gc & flush any outstanding RWindow requests
-void CWsGraphicBase::RetireGc()
-	{
-	iGc->Deactivate();
-	iWin->EndRedraw();
-	iWs.Flush();
-	}
-
-//
-// CWsGraphicBase::RedrawMe
-// called from the redraw listener AO, triggered by a redraw event
-// Invalidates the area requiring a redraw & 
-// initiates a redraw of the CWsGraphicBitmapAnimation's window
-// 
-void CWsGraphicBase::RedrawMe(TRect aRedrawRect, TInt aFrame)
-	{
-	// do draw with next frame
-	if (iAnimData.IsPlaying())
-		{
-		iGc->Activate(*iWin);
-		iWin->Invalidate(aRedrawRect);
-		iWin->BeginRedraw();
-		iWs.Flush();
-		iGc->DrawWsGraphic(iAnimId,iPosition1,iAnimData.Pckg());
-		iGc->Deactivate();
-		iWin->EndRedraw();
-		iWs.Flush();
-		
-		// check for last frame
-		if (aFrame == 0)
-			{
-			iTimer->Cancel();
-			}
-		}
-	}
-			
-/**
-   @SYMTestCaseID GRAPHICS-WSERV-0001
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Create Globally and Locally Shared Graphic Bitmaps from UIDs.
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions First test that TWsGraphicIds can be created from UIDs. Then create CWsGraphicBitmap objects through 
-   	CWsGraphicBitmap::NewL, passing a UID from a TWsGraphicId. Two different objects are created
-		1.	Globally shared available to all applications
-		2.	Locally shared available to selected clients
-   
-   @SYMTestExpectedResults The CWsGraphicBitmap objects are created and no errors are reported.
- */	
-void CWsGraphicBase::DoTestCreateGraphicUidL()
-	{
-	iTestLog.Append(_L("CreateGraphicUid"));
-	
-	_LIT_SECURE_ID(KTestSecId,0x12345678);
-			
-	// Test the creation of TWsGraphicIds from UIDs
-	TUid uid1 = {0x10000001};
-	TUid uid2 = {0x10000002};
-	 
-	TWsGraphicId twsGraphicId1(uid1);
-	Test(twsGraphicId1.Uid()==uid1);
-	
-	TWsGraphicId twsGraphicId2(uid2);
-	Test(twsGraphicId2.Uid()==uid2);
-	
-	TWsGraphicId twsGraphicId3(twsGraphicId2);
-	Test(twsGraphicId3.Uid()==uid2);
-	
-	TWsGraphicId twsGraphicId4(1);
-	twsGraphicId4.Set(uid1);
-	Test(twsGraphicId4.Uid()==uid1);		
-	
-	// Create globally shared CWsGraphicBitmap		
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;		
-	
-	TSize screenSize = iScreen->SizeInPixels();
-	bitmap1.Create(screenSize,iScreen->DisplayMode());
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(twsGraphicId1.Uid(), &bitmap1,&mask1);		
-	Test(bTest->IsActive());
-	
-	TWsGraphicId tid1 = bTest->Id();
-	Test(tid1.Uid()==uid1);
-	
-	Test(bTest->ShareGlobally()==KErrNone);
-	
-	// Create local shared CWsGraphicBitmap		
-	CFbsBitmap bitmap2;
-	CFbsBitmap mask2;		
-	
-	bitmap2.Create(screenSize,iScreen->DisplayMode());
-	mask2.Create(bitmap2.SizeInPixels(),iScreen->DisplayMode());
-	
-	CWsGraphicBitmap* bTest2 = CWsGraphicBitmap::NewL(twsGraphicId2.Uid(), &bitmap2,&mask2);		
- 
-	TWsGraphicId tid2 = bTest2->Id();
-	Test(tid2.Uid()==uid2);
-	
-	Test(bTest2->Share(KTestSecId)==KErrNone);
-	
-	// Test the unsharing of the CWsGraphicBitmaps
-	Test(bTest->UnShareGlobally()==KErrNone);
-	Test(bTest2->UnShare(KTestSecId)==KErrNone);
-	Test(bTest2->UnShare(KTestSecId)==KErrNotFound);
-	
-	delete bTest;	
-	delete bTest2;
-	}
-	
-/**
-   @SYMTestCaseID GRAPHICS-WSERV-0002
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Create Globally and Locally Shared Graphic Bitmaps.
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions First test that TWsGraphicIds can be created from IDs. Then create CWsGraphicBitmap objects through 
-   	CWsGraphicBitmap::NewL. Two different objects are created
-		1.	Globally shared available to all applications
-		2.	Locally shared available to selected clients
-   
-   @SYMTestExpectedResults The CWsGraphicBitmap objects are created and no errors are reported.
- */
-void CWsGraphicBase::DoTestCreateGraphicIdL()
-	{
-	iTestLog.Append(_L("CreateGraphicId"));
- 		
-	_LIT_SECURE_ID(KTestSecId,0x12345678);
-	
-	// Test creating TWsGraphicIds from ids first
-	TUid uid1 = {0x10000001};
-	 
-	TWsGraphicId twsGraphicId1(uid1);
-	
-	twsGraphicId1.Set(9);
-	Test(twsGraphicId1.Id()==9);
-	
-	TWsGraphicId twsGraphicId2(twsGraphicId1);
-	Test(twsGraphicId2.Id()==9);
-	
-	TWsGraphicId twsGraphicId3(7);
-	Test(twsGraphicId3.Id()==7);
-	
-	// Create globally shared CWsGraphicBitmap
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-
-	TSize screenSize = iScreen->SizeInPixels();
-	bitmap1.Create(screenSize,iScreen->DisplayMode());
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
-	Test(bTest->IsActive());
-	
-	TWsGraphicId tid1 = bTest->Id();
-	
-	Test(bTest->ShareGlobally()==KErrNone);
-	
-	// Create local shared CWsGraphicBitmap	
-	CFbsBitmap bitmap2;
-	CFbsBitmap mask2;
-	
-	bitmap2.Create(screenSize,iScreen->DisplayMode());
-	mask2.Create(bitmap2.SizeInPixels(),iScreen->DisplayMode());
- 		
-	CWsGraphicBitmap* bTest2 = CWsGraphicBitmap::NewL(&bitmap2,&mask2);
-	
-	TWsGraphicId tid2 = bTest2->Id();
-	
-	Test(bTest2->Share(KTestSecId)==KErrNone);
-	
-	// Test the unsharing of the CWsGraphicBitmaps
-	Test(bTest->UnShareGlobally()==KErrNone);
-	Test(bTest2->UnShare(KTestSecId)==KErrNone);
-	Test(bTest2->UnShare(KTestSecId)==KErrNotFound);
- 	
-	delete bTest2;	
-	delete bTest;		
-	}
-	
-	/**
-   @SYMTestCaseID GRAPHICS-WSERV-0003
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Update an existing graphic bitmap with new data.
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test calls CWsGraphicBitmap::NewL method with new data passed to the CWsGraphicBitmap object. 
-   		
-   
-   @SYMTestExpectedResults The CWsGraphicBitmap object is updated with no errors reported.
- */
-void CWsGraphicBase::DoTestUpdateGraphicL()
-	{
-	iTestLog.Append(_L("UpdateGraphic"));
- 		
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-	CFbsBitmap bitmap2;
-	CFbsBitmap mask2;
-	
-	TSize screenSize = iScreen->SizeInPixels();
-	bitmap1.Create(screenSize,iScreen->DisplayMode());
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
- 	
-	CWsGraphic* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
-
-	bitmap2.Create(screenSize,iScreen->DisplayMode());
-	mask2.Create(bitmap2.SizeInPixels(),iScreen->DisplayMode());
- 	
-	TWsGraphicId tid1 = bTest->Id();
-	TInt testInt = tid1.Id(); 
-    
-   	CWsGraphic* testReplacement = CWsGraphicBitmap::NewL(tid1, &bitmap2,&mask2);
-
-	delete bTest;
-	bTest = testReplacement;
-	
-	Test(bTest->Id().Id()==testInt); 
-	
-	delete bTest;		
-	}
-	
-
-	
-	/**
-   @SYMTestCaseID GRAPHICS-WSERV-0004
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Try to delete an existing graphic.
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app calls CWsGraphic::Destroy() method, 
-   
-   @SYMTestExpectedResults The CWsGraphicBitmap object is removed from the Window Server with no 
-   		errors reported
- */
-void CWsGraphicBase::DoTestDeleteGraphicL()
-	{
-	iTestLog.Append(_L("DeleteGraphic"));
- 		
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-	
-	TSize screenSize = iScreen->SizeInPixels();
-	bitmap1.Create(screenSize,iScreen->DisplayMode());
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	CWsGraphic* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
-	
-	bTest->Destroy();
-	
-	Test(!bTest->IsActive());
- 
-	delete bTest; 
-	}
-	
-		/**
-   @SYMTestCaseID GRAPHICS-WSERV-0005
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Check a bitmap is not drawn if the bitmap and mask it uses are invalid
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app creates a valid and invalid bitmap and attempts to draw them
-   
-   @SYMTestExpectedResults The valid bitmap is drawn but the invalid bitmap is not drawn
- */	
-void CWsGraphicBase::DoTestDrawInvalidBitmapIDL()
-	{
-	iTestLog.Append(_L("DrawInvalidBitmapID"));
- 		
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-	CFbsBitmap *bitmap2 = NULL;
-	CFbsBitmap *mask2 = NULL;
-	
-	User::LeaveIfError(bitmap1.Load(MY_TEST_BITMAP,0));
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	// valid bitmap
-	CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
-	
-	// invalid bitmap
-	CWsGraphicBitmap* bTest2 = CWsGraphicBitmap::NewL(bitmap2,mask2);
- 	
-	PrepGc();
-	iGc->DrawWsGraphic(bTest->Id(),iPosition1);
-	iGc->DrawWsGraphic(bTest2->Id(),iPosition2);
-	RetireGc();
-	
-	// compare the graphic in both positions, should only be graphic in position 1
-	TestForDifferentBitmaps();
-	
-	delete bTest2;
-	delete bTest;
-	}
-	
-		/**
-   @SYMTestCaseID GRAPHICS-WSERV-0006
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Draw a graphic within a rectangle on the screen, then try to draw with a non-existant graphic
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app calls CWindowGC::DrawWsGraphic() method using the TWGraphicId object, to draw within a rectangle on the screen
-   		 
-   @SYMTestExpectedResults The graphic is drawn on the screen with no errors reported. Drawing with a non-existant graphic causes
-   		nothing to be drawn and no error reported
- */
-void CWsGraphicBase::DoTestDrawGraphicL()
-	{
-	iTestLog.Append(_L("DrawGraphic"));
-	
-	_LIT8(KTestData,"HelloWorld");
-	
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-
-	User::LeaveIfError(bitmap1.Load(MY_TEST_BITMAP,0));
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
-
-	PrepGc();	
-	iGc->DrawWsGraphic(bTest->Id(),iPosition1,KTestData);
-	TWsGraphicId twsGraphicId1(KDummyGraphicId); // create unrecognised wsbitmap id & attempt to draw it
-	iGc->DrawWsGraphic(twsGraphicId1,iPosition2,KTestData);
-	RetireGc();
-
-	// compare the graphic in both positions, should only be graphic in position 1
-	TestForDifferentBitmaps();
-	
-	delete bTest;  	
-	}
-	
-			/**
-   @SYMTestCaseID GRAPHICS-WSERV-0007
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Draw a graphic using a transient ID within a rectangle on the screen
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app calls CWindowGC::DrawWsGraphic() using a TWsGraphic object, to draw within
-   		a rectangle on the screen
-   
-   @SYMTestExpectedResults The graphic is drawn.
- */
-void CWsGraphicBase::DoTestDrawGraphicIDL()
-	{
-	iTestLog.Append(_L("DrawGraphicID"));
-		
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-
-	User::LeaveIfError(bitmap1.Load(MY_TEST_BITMAP,0));
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
-	 			
-	PrepGc();
-	iGc->DrawWsGraphic(bTest->Id(),iPosition1);
-	RetireGc();
-	
-	// compare the graphic in both positions, should only be graphic in position 1
-	TestForDifferentBitmaps();
- 	
-	delete bTest;
-	}
-	
-
-	
-			/**
-   @SYMTestCaseID GRAPHICS-WSERV-0008
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Draw a graphic in two different rectangles on the screen and compare them
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app calls CWindowGC::DrawWsGraphic() using the TWsGraphic object, to draw a known bitmap
-   		rectangle on the screen twice in different places. The bitmaps are then compared.
-   
-   @SYMTestExpectedResults The two bitmaps are identical
- */
-void CWsGraphicBase::DoTestDrawGraphicCompareL()
-	{
-	iTestLog.Append(_L("DrawGraphicCompare"));
-
-	_LIT8(KTestData,"HelloWorld");
-	
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-	
-	CFbsBitmap bitmap2;
-	CFbsBitmap mask2;
-	
-	User::LeaveIfError(bitmap1.Load(MY_TEST_BITMAP,0));
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	User::LeaveIfError(bitmap2.Load(MY_TEST_BITMAP,0));
-	mask2.Create(bitmap2.SizeInPixels(),iScreen->DisplayMode());
-
-	CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
-	CWsGraphicBitmap* bTest2 = CWsGraphicBitmap::NewL(&bitmap2,&mask2);
-	
-	PrepGc();
-	//draw the graphic in the two different rectangles	
-	iGc->DrawWsGraphic(bTest->Id(),iPosition1,KTestData);
-	iGc->DrawWsGraphic(bTest2->Id(),iPosition2,KTestData);
-	RetireGc();
-
-	// compare the graphic in both positions. Contents of each rect should be identical
-	TestForIdenticalBitmaps();
-			
-	delete bTest2;
-	delete bTest;
-	}
-	
-		/**
-   @SYMTestCaseID GRAPHICS-WSERV-0009
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Draw a global and local graphic in two different rectangles on the screen and compare them
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app calls CWindowGC::DrawGraphic() using the TWsGraphic object, to draw a known 
-   		global and local bitmap rectangle on the screen twice in different places. The bitmaps are then compared.
-   
-   @SYMTestExpectedResults The two bitmaps are identical
- */
-void CWsGraphicBase::DoTestDrawGraphicSessionHandleL()
-	{
-	iTestLog.Append(_L("DrawGraphicSessionHandle"));
-	_LIT_SECURE_ID(KTestSecId,0x12345678);
-	
-	// test TWsGraphicControlState first
-	_LIT8(KTestData,"HelloWorld");
-
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-	
-	CFbsBitmap bitmap2;
-	CFbsBitmap mask2;
-	
-	User::LeaveIfError(bitmap1.Load(MY_TEST_BITMAP,0));
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	User::LeaveIfError(bitmap2.Load(MY_TEST_BITMAP,0));
-	mask2.Create(bitmap2.SizeInPixels(),iScreen->DisplayMode());
-	
-	CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
-	CWsGraphicBitmap* bTest2 = CWsGraphicBitmap::NewL(&bitmap2,&mask2);
-	
-	Test(bTest->ShareGlobally()==KErrNone);
-	Test(bTest2->Share(KTestSecId)==KErrNone);
-	
-	PrepGc();
-	iGc->DrawWsGraphic(bTest->Id(),iPosition1,KTestData);
-	iGc->DrawWsGraphic(bTest2->Id(),iPosition2,KTestData);	
-	RetireGc();
-
-	// compare the graphic in both positions. Contents of each rect should be identical
-	TestForIdenticalBitmaps();
- 		
-	delete bTest2;
-	delete bTest;
-	}
-
-	/**
-   @SYMTestCaseID GRAPHICS-WSERV-0010
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Check an animation can be constructed using a UID, manipulated and then drawn
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app creates CWsGraphicBitmapAnimation object via a UID and then draws the object to the screen
-   
-   @SYMTestExpectedResults The object is drawn
- */	
-void CWsGraphicBase::DoTestDrawAnimatedGraphicUIDL()
-	{
-	iTestLog.Append(_L("DrawAnimatedGraphicUID"));
-
-	// test TWsGraphicAnimation first
-	iAnimData.Play(EFalse);
-
-	// load the animation via a UID
-	CIclLoader*	iclLoader;		
-	iclLoader = new(ELeave) CIclLoader();
-	iclLoader->ConstructL(KSymBallFile,ETrue,EFalse); // this is actually an asynchronous operation, so we give it a chance to execute below
-
-	while (iclLoader->Ok() && iclLoader->GetId().Id() == KDummyGraphicId)
-		{
-		iTimer->Wait(1000);
-		}
-	
-	Test(iclLoader->Ok()); // fail test if iclLoder experienced problems
-	
-	iAnimId = iclLoader->GetId();
-	
-	// animation is ready to be drawn. draw to the 1st position only	
-	PrepGc();
-	iGc->DrawWsGraphic(iAnimId,iPosition1,iAnimData.Pckg());	
-	RetireGc();
-	
-	// run the animation
-	RunAnimation(iclLoader->FrameCount());
-
-	// compare the graphic in both positions. 
-	TestForDifferentBitmaps();
- 	
-	iTimer->Cancel();
-	iclLoader->Cancel();
-	delete iclLoader;
-	}
-
-	/**
-   @SYMTestCaseID GRAPHICS-WSERV-0011
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Check an animation can be constructed using an ID, manipulated and then drawn
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app creates CWsGraphicBitmapAnimation object via an ID and then draws the object to the screen
-   
-   @SYMTestExpectedResults The object is drawn
- */	
-void CWsGraphicBase::DoTestDrawAnimatedGraphicIDL()
-	{
-	iTestLog.Append(_L("DrawAnimatedGraphicID"));	
-	iAnimData.Play(ETrue);
-	iAnimData.Play(ETrue);
-	Test(iAnimData.Loops());
-	iAnimData.Pause();
-	Test(!iAnimData.IsPlaying());
-	Test(iAnimData.IsPaused());
-	iAnimData.Pause();
-	Test(iAnimData.Loops());
-	iAnimData.Play(EFalse);
-	Test(!iAnimData.Loops());
-	Test(!iAnimData.IsStopping());
-	Test(!iAnimData.IsStopped());		
- 		
-	// load the animation via an ID
-	CIclLoader*	iclLoader;
-	iclLoader = new(ELeave) CIclLoader();
-	iclLoader->ConstructL(KSymBallFile,EFalse,EFalse);
-	
-	while (iclLoader->GetId().Id() == KDummyGraphicId)
-		{
-		iTimer->Wait(1000);
-		}
-	iAnimId = iclLoader->GetId();
-	
-	PrepGc();
-	iGc->DrawWsGraphic(iAnimId,iPosition1,iAnimData.Pckg());	
-	RetireGc();
-
-	// run the animation
-	RunAnimation(iclLoader->FrameCount());
-
-	// compare the graphic in both positions
-	TestForDifferentBitmaps();
-	
-	iAnimData.Stop(ETrue);
-	Test(iAnimData.IsStopped());
-	iAnimData.Pause();
-	iAnimData.Play(EFalse);
-	iAnimData.Stop(EFalse);
-	Test(!iAnimData.IsStopped());
-
-	iTimer->Cancel();	
-	iclLoader->Cancel();
-	delete iclLoader;
-	}
-
-	/**
-   @SYMTestCaseID GRAPHICS-WSERV-0012
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Check an animation can be constructed and then replaced, manipulated and then drawn
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app creates CWsGraphicBitmapAnimation object, the replaces it, and then draws the object 
-   		to the screen
-   
-   @SYMTestExpectedResults The object is drawn
- */		
-void CWsGraphicBase::DoTestDrawReplaceGraphicIDL()
-	{
-	// test TWsGraphicControlStateTimed first
-	iTestLog.Append(_L("DrawAnimatedGraphicID"));	
-	_LIT8(KTestData,"HelloWorld");
-	iAnimData.Stop(ETrue);
-			
-	// load and replace the animation 	
-	CIclLoader*	iclLoader;
-	iclLoader = new(ELeave) CIclLoader();
-	iclLoader->ConstructL(KSymBallFile,false,true);
-	
-	while (iclLoader->GetId().Id() == KDummyGraphicId)
-		{
-		iTimer->Wait(1000);
-		}
-	iAnimId = iclLoader->GetId();
-
-	// draw the animation in two positions
-	PrepGc();
-	iGc->DrawWsGraphic(iAnimId,iPosition1,KTestData);	
-	RetireGc();
-	
-	// run the animation
-	RunAnimation(iclLoader->FrameCount());
-
-	// compare the graphic in both positions
-	// Expect identical, as the command buffer used in position1 animation is invalid, therefore never drawn
-	TestForIdenticalBitmaps();
-	
-	iTimer->Cancel();
-	iclLoader->Cancel();
-	delete iclLoader;			
-	}
-
-	/**
-   @SYMTestCaseID GRAPHICS-WSERV-0013
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Check the creation and manipulation of an RWsGraphicMsgBuf object
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions Creates and manipulates an RWsGraphicMsgBuf object
-   
-   @SYMTestExpectedResults RWsGraphicMsgBuf functions correctly
- */		
-void CWsGraphicBase::DoTestCreateMsgGraphicMsgBufL()
-	{
-	iTestLog.Append(_L("CreateMsgGraphicMsgBuf"));
-	
-	_LIT(KNebraska,"Nebraska");
-	_LIT8(KTesting,"Testing");
-	RWsGraphicMsgBuf msgBuf;
-	msgBuf.CleanupClosePushL();
-	msgBuf.Append(TUid::Uid(0x12345670),KTesting());
-	msgBuf.Append(TUid::Uid(0x12345671),KNebraska());
-	msgBuf.Append(TUid::Uid(0x12345670),KTesting());
-	
-	Test(TUid::Uid(0x12345670)==msgBuf.TypeId(0));
-
-	msgBuf.Remove(0);
-	const TInt count = msgBuf.Count();
-	Test(count == 2);
-			
-	iAnimData.Play(ETrue);
-	msgBuf.Append(iAnimData);
-	Test(msgBuf.Count() == 3);
-	
-	CleanupStack::Pop();
-	
-	// load the animation via a UID
-	CIclLoader*	iclLoader;		
-	iclLoader = new(ELeave) CIclLoader();
-	iclLoader->ConstructL(KSymBallFile,true,false);
-
-	while (iclLoader->GetId().Id() == KDummyGraphicId)
-		{
-		iTimer->Wait(1000);
-		}
-	iAnimId = iclLoader->GetId();
-
-	PrepGc();
-	iGc->DrawWsGraphic(iAnimId,iPosition1,msgBuf.Pckg());	
-	RetireGc();
- 	
-	// run the animation
-	RunAnimation(iclLoader->FrameCount());
-
-	// compare the graphic in both positions
-	TestForDifferentBitmaps();
- 	
-	iTimer->Cancel();
-	iclLoader->Cancel();
-	delete iclLoader;
-	msgBuf.Close();
-	}
-
-	
-	
-	/**
-   @SYMTestCaseID GRAPHICS-WSERV-0014
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Check an animation is not drawn if the command buffer it uses is invalid
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app creates CWsGraphicBitmapAnimation object then draws the animation using
-   		a valid and invalid command buffer
-   
-   @SYMTestExpectedResults The animation is drawn while using the valid command buffer but not drawn
-   		when the command buffer is invalid
- */		
-void CWsGraphicBase::DoTestDrawInvalidAnimationIDL()
-	{
-	// test TWsGraphicControlStateTimed first, a valid command buffer
-	iTestLog.Append(_L("DrawInvalidAnimationID"));	
-	iAnimData.Play(ETrue);
-	
-	// invalid command buffer
-	_LIT8(KTestData2,"12345678");
-			
-	// load and replace the animation 	
-	CIclLoader*	iclLoader;
-	iclLoader = new(ELeave) CIclLoader();
-	iclLoader->ConstructL(KSymBallFile,false,false);
-	
-	while (iclLoader->GetId().Id() == KDummyGraphicId)
-		{
-		iTimer->Wait(1000);
-		}
-	iAnimId = iclLoader->GetId();
-
-	PrepGc();
-	iGc->DrawWsGraphic(iAnimId,iPosition1,iAnimData.Pckg());	
-	iGc->DrawWsGraphic(iAnimId,iPosition2,KTestData2);
-	RetireGc();
-	
-	// run the animation
-	RunAnimation(iclLoader->FrameCount());
-
-	// compare the graphic in both positions
-	TestForDifferentBitmaps();
-
-	iAnimData.Stop(ETrue);	
-	iTimer->Cancel();
-	iclLoader->Cancel();
-	delete iclLoader;			
-	}
-	
-	/**
-   @SYMTestCaseID GRAPHICS-WSERV-0015
-  
-   @SYMPREQ	PREQ1246
-
-   @SYMTestCaseDesc Check the sharing of graphics with other clients.
-   
-   @SYMTestPriority High
-   
-   @SYMTestStatus Implemented
-   
-   @SYMTestActions The test app creates CWsGraphicBitmap object an then tests the sharing of the object with
-   			different clients
-   
-   @SYMTestExpectedResults The CWsGraphicBitmap object is shared correctly
- */
-void CWsGraphicBase::DoTestDrawSharedGraphicL()
-	{
-	iTestLog.Append(_L("DrawSharedGraphic"));
-	_LIT_SECURE_ID(KTestSecId,0x10003a4b);
-
-	TUid uid1 = {0x12000021};
-	TWsGraphicId twsGraphicId1(uid1);
-	
-	CFbsBitmap bitmap1;
-	CFbsBitmap mask1;
-	
-	User::LeaveIfError(bitmap1.Load(MY_TEST_BITMAP,0));
-	mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
-	
-	CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(twsGraphicId1.Uid(), &bitmap1,&mask1);
-	
-	// Try to draw the graphic in an client. Should fail as graphic is not shared 
-	TRAPD(err, LaunchNewProcessL(KTestExe1, EFalse));
-	Test(err == KErrNone);
-
-	// Share the graphic globally and try to draw the graphic in an client. Should pass
-	Test(bTest->ShareGlobally()==KErrNone);
-	TRAP(err, LaunchNewProcessL(KTestExe2, ETrue));
-	Test(err == KErrNone);
-	
-	// Unshare the graphic globally and try to draw the graphic in an client. Should fail
-	Test(bTest->UnShareGlobally()==KErrNone);
-	TRAP(err, LaunchNewProcessL(KTestExe3, EFalse));
-	Test(err == KErrNone);
-	
-	// Share the graphic to a client and try to draw the graphic in the client. Should pass
-	Test(bTest->Share(KTestSecId)==KErrNone);		
-	TRAP(err, LaunchNewProcessL(KTestExe4, ETrue));
-	Test(err == KErrNone);
-	
-	// Unshare the graphic to a client and try to draw the graphic in the client. Should fail
-	Test(bTest->UnShare(KTestSecId)==KErrNone);
-	TRAP(err, LaunchNewProcessL(KTestExe5, EFalse));
-	Test(err == KErrNone);
-			
-	delete bTest;	
-	}
-
-	
-void CWsGraphicBase::DoTestL(TInt aTestNo)
-	{
-	switch (aTestNo)
-		{
-		case ETestCreateGraphicUID:
-			DoTestCreateGraphicUidL();
-			break;
-		case ETestCreateGraphicID:
-			DoTestCreateGraphicIdL();
-			break;
-		case ETestUpdateGraphic:
-			DoTestUpdateGraphicL();
-			break;
-		case ETestDeleteGraphic:
-			DoTestDeleteGraphicL();
-			break;
-		case ETestDrawInvalideBitmapID:
-			DoTestDrawInvalidBitmapIDL();
-			break;
-		case ETestDrawGraphic:
-			DoTestDrawGraphicL();
-			break;
-		case ETestDrawGraphicID:
-			DoTestDrawGraphicIDL();
-			break;
-		case ETestDrawGraphicCompare:
-			DoTestDrawGraphicCompareL();
-			break;
-		case ETestDrawGraphicSessionHandle:
-			DoTestDrawGraphicSessionHandleL();
-			break;	
-#ifdef _DEBUG
-      // These tests require debug-only API to simulate OOM. Running
-      // the tests in non-debug environments invalidates the tests.
-		case ETestDrawAnimatedGraphicUID:
-			DoTestDrawAnimatedGraphicUIDL();
-			break;
-		case ETestDrawAnimatedGraphicID:
-			DoTestDrawAnimatedGraphicIDL();
-			break;
-		case ETestCreateMsgGraphicMsgBuf:
-			DoTestCreateMsgGraphicMsgBufL();
-			break;
-		case ETestDrawReplaceGraphicID:
-			DoTestDrawReplaceGraphicIDL();
-			break;
-		case ETestDrawInvalidAnimationID:
-			DoTestDrawInvalidAnimationIDL();
-			break;
-#endif
-		case ETestDrawSharedGraphic:
-			DoTestDrawSharedGraphicL();
-			break;
-		}
-	RDebug::Print(iTestLog);
-	iTestLog.Delete(0,256);	
-	}
-	
-// writes out to WSERV.log if error
-void CWsGraphicBase::Test(TInt aCondition)
-	{
-	if(!aCondition)
-		{
-		TBuf<KMaxLogLength> buf;
-		_LIT(Fail,"AUTO Failed in WsGraphics Test : ");
-		buf.Append(Fail);
-		buf.Append(iTestLog);
-		RDebug::Print(buf);
-		RProcess().Terminate(KErrGeneral);
-		}
-	}
-	
-//
-// CWsGraphicBase::RunAnimation
-// Redraw event listener is launched & the 
-// animation is given a total of KAnimationRunTime (25 seconds) to run a single loop
-// 
-void CWsGraphicBase::RunAnimation(TInt aFrameCount)
-	{
-	--aFrameCount; // account for the fact the initial frame is already displayed
-	iRedrawListener->SetFrameCount(aFrameCount);
-	iRedrawListener->RequestRedraw();
-	iTimer->Wait(KAnimationRunTime);
-	if (iAnimData.IsPlaying())
-		{
-		iAnimData.Stop(ETrue);
-		}
-	iRedrawListener->Cancel();
-	iAnimData.Stop(EFalse);
-	Test(iRedrawListener->GetFrameCount() == 0); // ensure the animation ran through until last frame
-	}
-
-void MainL()
-	{
-	TInt testCount = KErrNone;
-
-    //Read the argument from the command line for current screen number
-	TBuf<256> commandLine;
-	User::CommandLine(commandLine);
-	TLex lex(commandLine);
-	lex.NextToken();
-	lex.SkipSpace();
-	TInt screenNumber=(TInt)lex.Get();
-
-	CActiveScheduler* activeScheduler=new(ELeave) CActiveScheduler;
-	CActiveScheduler::Install(activeScheduler);
-	CleanupStack::PushL(activeScheduler);
-
-    CWsGraphicBase testBase(screenNumber);
-    testBase.ConstructL();
-    
-    // run through all the tests   
-    while (testCount < CWsGraphicBase::ETestMaxNumberOfTests)
-    	{
-    	testBase.DoTestL(testCount);
-    	testCount++;
-    	}
-    
-	CleanupStack::PopAndDestroy(activeScheduler);
-	}
-
-GLDEF_C TInt E32Main()
-	{
-	CTrapCleanup* cleanUpStack=CTrapCleanup::New();
-	if(cleanUpStack==NULL)
-		{
-		return KErrNoMemory;
-		}
-	TRAPD(err, MainL());
-	delete cleanUpStack;
-	return(err);
-	}