windowing/windowserver/tauto/TSCROLL.CPP
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tauto/TSCROLL.CPP	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,850 @@
+// 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:
+// Window scroll tests
+// 
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "TSCROLL.H"
+	
+#pragma warning(disable : 4710)
+
+//
+// Scroll window, used to test the Scroll() command
+//
+
+void DrawScrollWin(CBitmapContext *aGc, const TPoint &aOffset, const TSize &aSize)
+	{
+	aGc->Clear();
+	TPoint drawBase(-10,-20);
+	TSize drawSize(aSize.iWidth-2*drawBase.iX,aSize.iHeight-2*drawBase.iY);
+	aGc->DrawRect(TRect(drawBase,drawBase+drawSize));
+	TPoint offset=drawBase+aOffset;
+	aGc->SetPenColor(TRgb::Gray4(2));
+//	aGc->SetDrawMode(CGraphicsContext::EDrawModeXOR);
+	aGc->DrawRect(TRect(offset+TPoint(13,23),offset+TPoint(22,32)));
+	TInt xpos,xplus;
+	for(xpos=0,xplus=2;xpos<drawSize.iWidth;xplus+=2,xpos+=xplus)
+		aGc->DrawLine(TPoint(xpos,0)+offset,TPoint(xpos,drawSize.iHeight)+offset);
+	for(TInt ypos=0,yplus=2;ypos<drawSize.iHeight;yplus+=2,ypos+=yplus)
+		aGc->DrawLine(TPoint(0,ypos)+offset,TPoint(drawSize.iWidth,ypos)+offset);
+//
+	aGc->SetPenColor(TRgb(0,0,0));
+	aGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
+	TheClient->iWs.Flush();
+	for(xpos=0;xpos<drawSize.iWidth;xpos+=16)
+		{
+		aGc->DrawLine(TPoint(xpos,0)+offset,TPoint(drawSize.iWidth,xpos*drawSize.iHeight/drawSize.iWidth)+offset);
+		aGc->DrawLine(TPoint(xpos,0)+offset,TPoint(0,drawSize.iHeight-xpos*drawSize.iHeight/drawSize.iWidth)+offset);
+		aGc->DrawLine(TPoint(xpos,drawSize.iHeight)+offset,TPoint(drawSize.iWidth,drawSize.iHeight-xpos*drawSize.iHeight/drawSize.iWidth)+offset);
+		aGc->DrawLine(TPoint(xpos,drawSize.iHeight)+offset,TPoint(0,xpos*drawSize.iHeight/drawSize.iWidth)+offset);
+		}
+		
+	}
+
+CScrollWindowNorm::CScrollWindowNorm() : CTWin()
+	{
+	}
+
+void DrawScrollWin(const TPoint &aOffset, const TSize &aSize)
+	{
+	::DrawScrollWin(TheClient->iGc, aOffset, aSize);
+	}
+
+void CScrollWindowNorm::Draw()
+	{
+	DrawScrollWin(iScrollTest->Offset(), Size());
+	}
+
+void CScrollWindowNorm::SetScrollTest(CScrollTestBase *aScrollTest)
+	{
+	iScrollTest=aScrollTest;
+	}
+
+//
+// CScrollWindowBackedUp
+//
+
+CScrollWindowBackedUp::CScrollWindowBackedUp(TDisplayMode aDisplayMode) : CTBackedUpWin(aDisplayMode)
+	{
+	}
+
+void CScrollWindowBackedUp::Draw()
+	{
+	DrawScrollWin(iScrollTest->Offset(), Size());
+	}
+
+void CScrollWindowBackedUp::SetScrollTest(CScrollTestBase *aScrollTest)
+	{
+	iScrollTest=aScrollTest;
+	}
+
+//
+// CScrollTestBase
+//
+
+void CScrollTestBase::Reset()
+	{
+	iOffset=TPoint(0,0);
+	iInvalid.Clear();
+	}
+
+void CScrollTestBase::DoInvalidate()
+	{
+	}
+
+TPoint CScrollTestBase::Offset() const
+	{
+	return(iOffset);
+	}
+
+CScrollTestBase::~CScrollTestBase()
+	{
+	delete iBlankWin;
+	iInvalid.Close();
+	}
+
+void CScrollTestBaseNorm::ConstructL(const TPoint &aPos, const TSize &aSize)
+	{
+	iScrollWin=new(ELeave) CScrollWindowNorm();
+	iScrollWin->SetUpL(aPos, aSize, TheClient->iGroup, *TheClient->iGc);
+	iScrollWin->SetScrollTest(this);
+	iSize=iScrollWin->Size();
+	}
+
+CScrollTestBaseNorm::~CScrollTestBaseNorm()
+	{
+	delete iScrollWin;
+	}
+
+void CScrollTestBaseNorm::Redraw()
+	{
+	iScrollWin->Redraw();
+	}
+
+void CScrollTestBaseNorm::Reset()
+	{
+	iScrollWin->Win()->Invalidate();
+	iScrollWin->Redraw();
+	CScrollTestBase::Reset();
+	}
+
+CTDrawableWin *CScrollTestBaseNorm::ScrollWin() const
+	{
+	return(iScrollWin);
+	}
+
+void CScrollTestBaseNorm::AdjustTestScrollRegion(const TRect &aClipRect, const TPoint &aOffset, const TRect &aRect)
+	{
+	RRegion clipped_visible;
+	VisibleRegion(clipped_visible);
+	clipped_visible.ClipRect(aClipRect);
+//
+//
+	RRegion invalidate(aRect);
+	invalidate.SubRegion(clipped_visible);
+	invalidate.Offset(aOffset);
+	invalidate.ClipRect(aClipRect);
+//
+	RRegion invalidate2(aRect);
+	invalidate2.ClipRect(aClipRect);
+	invalidate2.Intersect(iInvalid);
+	invalidate2.Offset(aOffset);
+	invalidate2.ClipRect(aClipRect);
+//
+	RRegion validate(aRect);
+	validate.Intersect(clipped_visible);
+	validate.SubRegion(iInvalid);
+	validate.Offset(aOffset);
+	validate.ClipRect(aClipRect);
+//
+	iInvalid.SubRegion(validate);
+	iInvalid.Union(invalidate);
+	iInvalid.Union(invalidate2);
+	RRegion visible;
+	VisibleRegion(visible);
+	iInvalid.Intersect(visible);
+	iInvalid.Tidy();
+//
+	invalidate2.Close();
+	invalidate.Close();
+	validate.Close();
+	visible.Close();
+	clipped_visible.Close();
+
+	iOffset+=aOffset;
+	}
+
+void CScrollTestBaseNorm::VisibleRegion(RRegion &aRegion)
+	{
+	aRegion.Clear();
+	aRegion.AddRect(TRect(iSize));
+	TRect child;
+	child.iTl=iBlankWin->BaseWin()->InquireOffset(*ScrollWin()->BaseWin());
+	child.iBr=child.iTl+iBlankWin->BaseWin()->Size();
+	aRegion.SubRect(child);
+	}
+
+void CScrollWindow1::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset, const TRect &aRect)
+	{
+	TheGc->Activate(*iScrollWin->DrawableWin());
+	RRegion region(aRect);
+	RRegion visible;
+	VisibleRegion(visible);
+	visible.ClipRect(aClipRect);
+	region.Intersect(visible);
+	visible.Close();
+	region.SubRegion(iInvalid);
+	region.Offset(aOffset);
+	region.ClipRect(aClipRect);
+	TheGc->SetClippingRegion(region);
+	TheGc->CopyRect(aOffset,aRect);
+	TheGc->Deactivate();
+	AdjustTestScrollRegion(aClipRect, aOffset,aRect);
+	iInvalid.Union(TRegionFix<1>(TRect(aClipRect)));
+	region.Close();
+	}
+
+void CScrollWindow1::DoTestScroll(const TPoint &aOffset)
+	{
+	DoTestScroll(TRect(TPoint(0,0),iSize), aOffset,TRect(-aOffset,iSize));
+	}
+
+void CScrollWindow1::DoTestScroll(const TPoint &aOffset, const TRect &aRect)
+	{
+	DoTestScroll(TRect(TPoint(0,0),iSize), aOffset, aRect);
+	}
+
+void CScrollWindow1::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset)
+	{
+	DoTestScroll(aClipRect, aOffset, TRect(-aOffset.iX,-aOffset.iY,iSize.iWidth-aOffset.iX, iSize.iHeight-aOffset.iY));
+	}
+
+void CScrollWindow1::DoInvalidate()
+	{
+	for(TInt index=0;index<iInvalid.Count();index++)
+		iScrollWin->Invalidate(iInvalid[index]);
+	}
+
+void CScrollWindow2::Reset()
+	{
+	CScrollTestBaseNorm::Reset();
+	iClipped=EFalse;
+	}
+
+CScrollWindow2::CScrollWindow2(CTScroll *aTest) : iTest(aTest)
+	{
+	}
+
+void CScrollWindow2::Draw()
+	{
+	if (iClipped)
+		TheClient->iGc->SetClippingRegion(iInvalid);
+	iScrollWin->Draw();
+	if (iClipped)
+		TheClient->iGc->CancelClippingRegion();
+	}
+
+void CScrollWindow2::DoTestScroll(const TPoint &aOffset)
+	{
+	AdjustTestScrollRegion(TRect(iSize), aOffset, TRect(-aOffset.iX,-aOffset.iY,iSize.iWidth-aOffset.iX, iSize.iHeight-aOffset.iY));
+	iClipped=ETrue;
+	iScrollWin->DrawableWin()->Scroll(aOffset);
+	}
+
+void CScrollWindow2::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset)
+	{
+	AdjustTestScrollRegion(aClipRect, aOffset, TRect(-aOffset.iX,-aOffset.iY,iSize.iWidth-aOffset.iX, iSize.iHeight-aOffset.iY));
+	iClipped=ETrue;
+	iScrollWin->DrawableWin()->Scroll(aClipRect, aOffset);
+	}
+
+void CScrollWindow2::DoTestScroll(const TPoint &aOffset, const TRect &aRect)
+	{
+	AdjustTestScrollRegion(TRect(iSize), aOffset, aRect);
+	iClipped=ETrue;
+	iScrollWin->DrawableWin()->Scroll(aOffset, aRect);
+	}
+
+void CScrollWindow2::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset, const TRect &aRect)
+	{
+	AdjustTestScrollRegion(aClipRect, aOffset, aRect);
+	iClipped=ETrue;
+	iScrollWin->DrawableWin()->Scroll(aClipRect, aOffset, aRect);
+	}
+
+void CScrollWindow3::DrawScrollBit()
+	{
+	::DrawScrollWin(iBitmapGc, iOffset, iSize);
+	}
+
+void CScrollWindow3::Reset()
+	{
+	CScrollTestBase::Reset();
+	iBitmapGc->Clear(TRect(iSize));
+	DrawScrollBit();
+	DoInvalidate();
+	}
+
+CScrollWindow3::~CScrollWindow3()
+	{
+	delete iBitmapGc;
+	delete iBitmapDevice;
+	delete iBitmap;
+	}
+
+void CScrollWindow3::ConstructL(const TPoint &aPos, const TSize &aSize)
+	{
+	CScrollTestBaseNorm::ConstructL(aPos,aSize);
+	iBitmap=new(ELeave) CFbsBitmap();
+	User::LeaveIfError(iBitmap->Create(iSize,EGray4));
+	iBitmapDevice=CFbsBitmapDevice::NewL(iBitmap);
+	User::LeaveIfError(iBitmapDevice->CreateContext(iBitmapGc));
+	DrawScrollBit();
+	}
+
+void CScrollWindow3::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset, const TRect &aRect)
+	{
+	iOffset+=aOffset;
+	RRegion blank(aRect);
+	TRect clipRect(aClipRect);
+	clipRect.Intersection(TRect(iSize));
+	blank.SubRect(clipRect);
+	blank.Offset(aOffset);
+	blank.ClipRect(clipRect);
+	TRect rect(aRect);
+	rect.Intersection(clipRect);		
+	TRect rect2(clipRect);
+	rect2.Move(-aOffset);
+	rect.Intersection(rect2);			
+	iBitmapGc->CopyRect(aOffset,rect);
+	iBitmapGc->SetClippingRegion(&blank);
+	iBitmapGc->Clear(TRect(iSize));
+	iBitmapGc->SetClippingRegion(NULL);
+	blank.Close();
+	}
+
+void CScrollWindow3::DoTestScroll(const TPoint &aOffset)
+	{
+	DoTestScroll(TRect(iSize), aOffset,TRect(-aOffset.iX,-aOffset.iY,iSize.iWidth-aOffset.iX, iSize.iHeight-aOffset.iY));
+	}
+
+void CScrollWindow3::DoTestScroll(const TPoint &aOffset, const TRect &aRect)
+	{
+	DoTestScroll(TRect(iSize), aOffset, aRect);
+	}
+
+void CScrollWindow3::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset)
+	{
+	DoTestScroll(aClipRect, aOffset, TRect(-aOffset.iX,-aOffset.iY,iSize.iWidth-aOffset.iX, iSize.iHeight-aOffset.iY));
+	}
+
+void CScrollWindow3::Draw()
+	{
+	TheGc->BitBlt(TPoint(),iBitmap);
+	}
+
+void CScrollWindow3::DoInvalidate()
+	{
+	RWindow win=*iScrollWin->Win();
+	win.Invalidate();
+	win.BeginRedraw();
+	TheGc->Activate(win);
+	Draw();
+	TheGc->Deactivate();
+	win.EndRedraw();
+	}
+
+void CScrollWindow4::ConstructL(const TPoint &aPos, const TSize &aSize)
+	{
+	iScrollWin=new(ELeave) CScrollWindowBackedUp(EGray4);
+	iScrollWin->SetUpL(aPos, aSize, TheClient->iGroup, *TheClient->iGc);
+	iScrollWin->SetScrollTest(this);
+	iSize=iScrollWin->Size();
+	TheClient->iGc->Activate(*iScrollWin->DrawableWin());
+	TheClient->iGc->Clear();
+	DrawScrollWin(TPoint(), iSize);
+	TheClient->iGc->Deactivate();
+	}
+
+CScrollWindow4::~CScrollWindow4()
+	{
+	delete iScrollWin;
+	}
+
+void CScrollWindow4::Redraw()
+	{
+	}
+
+void CScrollWindow4::Reset()
+	{
+	TheClient->iGc->Activate(*iScrollWin->DrawableWin());
+	TheClient->iGc->Clear();
+	DrawScrollWin(TPoint(), iSize);
+	TheClient->iGc->Deactivate();
+	CScrollTestBase::Reset();
+	}
+
+void CScrollWindow4::DoTestScroll(const TPoint &aOffset)
+	{
+	iScrollWin->DrawableWin()->Scroll(aOffset);
+	iOffset+=aOffset;
+	}
+
+void CScrollWindow4::DoTestScroll(const TPoint &aOffset, const TRect &aRect)
+	{
+	iScrollWin->DrawableWin()->Scroll(aOffset, aRect);
+	iOffset+=aOffset;
+	}
+
+void CScrollWindow4::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset)
+	{
+	iScrollWin->DrawableWin()->Scroll(aClipRect, aOffset);
+	iOffset+=aOffset;
+	}
+
+void CScrollWindow4::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset, const TRect &aRect)
+	{
+	iScrollWin->DrawableWin()->Scroll(aClipRect, aOffset, aRect);
+	iOffset+=aOffset;
+	}
+
+CTDrawableWin *CScrollWindow4::ScrollWin() const
+	{
+	return(iScrollWin);
+	}
+
+//
+
+CTScroll::CTScroll(CTestStep* aStep):
+	CTWsGraphicsBase(aStep)
+	{
+	}
+
+CTScroll::~CTScroll()
+	{
+	BaseWin->SetVisible(ETrue);
+	TestWin->SetVisible(ETrue);
+	delete iBaseScrollWin;
+	delete iTestScrollWin;
+	}
+
+void CTScroll::ConstructL()
+	{
+	BaseWin->SetVisible(EFalse);
+	TestWin->SetVisible(EFalse);
+//
+	iTest->iState=1;
+	TSize screenSize=TheClient->iGroup->Size();
+	TInt winWidth=(screenSize.iWidth/3)-10;
+	TInt winHeight=screenSize.iHeight-10;
+	TInt winBaseX=(screenSize.iWidth/3);
+	if (iMode==0)
+		{
+		iBaseScrollWin=new(ELeave) CScrollWindow1();
+		iTestScrollWin=new(ELeave) CScrollWindow2(this);
+		}
+	else
+		{
+		iBaseScrollWin=new(ELeave) CScrollWindow3();
+		iTestScrollWin=new(ELeave) CScrollWindow4();
+		}
+	iWinSize=TSize(winWidth,winHeight);
+	iBaseScrollWin->ConstructL(TPoint(winBaseX+5,5),iWinSize);
+	iTestScrollWin->ConstructL(TPoint(winBaseX+winWidth+15,5),iWinSize);
+
+	iBaseScrollWin->iBlankWin=new(ELeave) CTBlankWindow();
+	iBaseScrollWin->iBlankWin->SetUpL(iBaseScrollWin->ScrollWin()->BaseWin()->InquireOffset(*TheClient->iGroup->GroupWin())+TPoint(winWidth>>2,winHeight>>2),TSize(winWidth>>2,winHeight>>1),TheClient->iGroup,*TheClient->iGc);
+	iBaseScrollWin->iBlankWin->BlankWin()->SetShadowHeight(2);
+	
+	iTestScrollWin->iBlankWin=new(ELeave) CTBlankWindow();
+	iTestScrollWin->iBlankWin->SetUpL(iTestScrollWin->ScrollWin()->BaseWin()->InquireOffset(*TheClient->iGroup->GroupWin())+TPoint(winWidth>>2,winHeight>>2),TSize(winWidth>>2,winHeight>>1),TheClient->iGroup,*TheClient->iGc);
+	}
+
+void CTScroll::CheckScrollWindows()
+	{
+	CheckRect(iBaseScrollWin->ScrollWin(),iTestScrollWin->ScrollWin(),TRect(iBaseScrollWin->ScrollWin()->Size()),_L("CTScroll::CheckScrollWindows()"));
+	}
+
+void CTScroll::DoTestScroll(const TPoint &aOffset)
+	{
+	iTestScrollWin->DoTestScroll(aOffset);
+	iBaseScrollWin->DoTestScroll(aOffset);
+	}
+
+void CTScroll::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset)
+	{
+	iTestScrollWin->DoTestScroll(aClipRect,aOffset);
+	iBaseScrollWin->DoTestScroll(aClipRect,aOffset);
+	}
+
+void CTScroll::DoTestScroll(const TPoint &aOffset, const TRect &aRect)
+	{
+	iTestScrollWin->DoTestScroll(aOffset,aRect);
+	iBaseScrollWin->DoTestScroll(aOffset,aRect);
+	}
+
+void CTScroll::DoTestScroll(const TRect &aClipRect, const TPoint &aOffset, const TRect &aRect)
+	{
+	iTestScrollWin->DoTestScroll(aClipRect,aOffset,aRect);
+	iBaseScrollWin->DoTestScroll(aClipRect,aOffset,aRect);
+	}
+
+void CTScroll::FinishedRectScrolls()
+	{
+	iBaseScrollWin->DoInvalidate();
+	}
+
+void CTScroll::CheckOomScroll()
+	{
+	TheClient->iWs.HeapSetFail(RHeap::ENone,0);
+	FinishedRectScrolls();
+	iTestScrollWin->Redraw();
+	iBaseScrollWin->Redraw();
+//	if (iMode!=1)				// Out of memory scrolling of backed up windows can not work 100% when out of memory
+//		CheckScrollWindows();	// Redraw window code can't check these cases properly yet
+	}
+
+void CTScroll::OomScrolling()
+	{
+	iTestScrollWin->iBlankWin->BaseWin()->SetShadowHeight(0);
+	iBaseScrollWin->iBlankWin->BaseWin()->SetShadowHeight(0);
+	iTestScrollWin->ScrollWin()->BaseWin()->SetShadowHeight(0);
+	iTestScrollWin->Redraw();
+	iBaseScrollWin->Redraw();
+	for(TInt count=1;count<20;count++)
+		{
+		TheClient->iWs.HeapSetFail(RHeap::EDeterministic,count);
+		DoTestScroll(TPoint(50,0));
+		CheckOomScroll();
+	//
+		TheClient->iWs.HeapSetFail(RHeap::EDeterministic,count);
+		iTestScrollWin->Reset();
+		iBaseScrollWin->Reset();
+		DoTestScroll(TPoint(-6,-14),TRect(20,20,100,50));
+		CheckOomScroll();
+	//
+		TheClient->iWs.HeapSetFail(RHeap::EDeterministic,count);
+		iTestScrollWin->Reset();
+		iBaseScrollWin->Reset();
+		DoTestScroll(TRect(TPoint(1,1),iWinSize-TSize(1,1)),TPoint(50,0),TRect(10,10,50,50));
+		CheckOomScroll();
+		}
+	}
+
+void CTScroll::RunTestCaseL(TInt /*aCurTestCase*/)
+	{
+	_LIT(KScroll,"Scroll");
+	//if (iTest->iState==0) iTest->iState=22;
+	if (iDoCheck)
+		{
+		if (iMode==1)		// The test code does not mimic scrolling to a non-backed up window properly
+			{
+			TheClient->iWs.Flush();
+			TheClient->iWs.Finish();
+			CheckScrollWindows();
+			}
+		iTestScrollWin->Reset();
+		iBaseScrollWin->Reset();
+		TheClient->iWs.Flush();
+		++iTest->iState;
+		iDoCheck=EFalse;
+		return;
+		}
+	((CTScrollStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+	switch(iTest->iState)
+		{
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0249
+
+@SYMDEF  			DEF081259
+
+@SYMTestCaseDesc    Test window scrolling by different offsets
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Pass different offsets for scrolling a window by and
+					check the window is scrolled correctly
+
+@SYMTestExpectedResults Window scrolls correctly to offsets
+*/	 
+		case 1:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			//DemoWindowScroll();
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(6,0));
+			DoTestScroll(TPoint(-6,-14));
+			DoTestScroll(TPoint(-6,-14));
+			DoTestScroll(TPoint(0,10));
+			DoTestScroll(TPoint(0,0));
+			DoTestScroll(TPoint(10,23));		
+			break;
+		case 2:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(50,0));
+			break;
+		case 3:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(0,33));
+			break;
+		case 4:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(-10,0));
+			break;
+		case 5:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(0,-13));
+			break;
+		case 6:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(0,0));
+			break;
+		case 7:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(-234,-1400));
+			break;
+		case 8:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(-69,15));
+			break;
+		case 9:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(-234,-1400));
+			DoTestScroll(TPoint(233,1401));
+			break;
+		case 10:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0249"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(10,-1));
+			DoTestScroll(TPoint(11,-10));
+			DoTestScroll(TPoint(-5,-40));
+			DoTestScroll(TPoint(0,50));
+			break;
+			
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0250
+
+@SYMDEF  			DEF081259
+
+@SYMTestCaseDesc    Test window scrolling by different offsets and
+				source rectangles
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Pass different offsets for scroll a window by and
+				different source rectangles.
+				Check the window is scrolled correctly
+
+@SYMTestExpectedResults Window scrolls correctly to offsets and source
+					rectangles
+*/	 
+		case 11:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0250"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(-6,-14),TRect(20,20,100,50));
+			DoTestScroll(TPoint(-6,-14),TRect(20,20,100,50));
+			DoTestScroll(TPoint(-6,-14),TRect(40,10,130,130));
+			break;
+		case 12:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0250"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(10,-1),TRect(20,20,21,21));
+			break;
+		case 13:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0250"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(-20,-14),TRect(10,10,10,10));
+			break;
+		case 14:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0250"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(-6,-14),TRect(20,20,200,300));
+			DoTestScroll(TPoint(10,-24),TRect(20,20,200,300));
+			DoTestScroll(TPoint(3,12),TRect(20,20,200,300));
+			DoTestScroll(TPoint(-20,19),TRect(20,20,200,300));
+			break;
+		case 15:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0250"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TPoint(-6,-14),TRect(20000,200000,30000,300000));
+			DoTestScroll(TPoint(10,-24),TRect(20,20,-200,-300));
+			DoTestScroll(TPoint(10,-24),TRect(20,20,-200,300));
+			DoTestScroll(TPoint(10,-24),TRect(20,20,200,-300));
+			DoTestScroll(TPoint(3,12),TRect(-100,-200,1000,2000));
+			DoTestScroll(TPoint(-20,19),TRect(0,0,0,0));
+			break;
+			
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0251
+
+@SYMDEF  			DEF081259
+
+@SYMTestCaseDesc    Test window scrolling by different offsets and
+				clipping rectangles
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Pass different offsets for scroll a window by and
+				different clipping rectangles.
+				Check the window is scrolled correctly
+
+@SYMTestExpectedResults Window scrolls correctly to offsets and clipping
+					rectangles
+*/	
+		case 16:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0251"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TRect(10,10,200,200),TPoint(-6,-14));
+			break;
+		case 17:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0251"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TRect(10,50,210,200),TPoint(10,20));
+			DoTestScroll(TRect(0,0,100,100),TPoint(-22,4));
+			DoTestScroll(TRect(50,50,300,500),TPoint(-5,-2));
+			break;
+		case 18:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0251"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TRect(-1000,-10000,23456,1111),TPoint(-6,-14));
+			break;
+		case 19:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0251"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TRect(20,5,198,202),TPoint(-100,1));
+			DoTestScroll(TRect(1,1,200,123),TPoint(2,1));
+			DoTestScroll(TRect(23,23,200,400),TPoint(5,-1));
+			break;
+		case 20:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0251"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TRect(0,0,0,0),TPoint(-10,1));
+			DoTestScroll(TRect(-1000,1,2000,123),TPoint(2,1));
+			DoTestScroll(TRect(23,-23,200,40000),TPoint(5,-1));
+			DoTestScroll(TRect(-1000,-10000,23456,1111),TPoint(-6,-14));
+			break;
+			
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0252
+
+@SYMDEF  			DEF081259
+
+@SYMTestCaseDesc    Test window scrolling by different offsets and
+				clipping ans source rectangles
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Pass different offsets for scroll a window by and
+				different clipping and source rectangles.
+				Check the window is scrolled correctly
+
+@SYMTestExpectedResults Window scrolls correctly to offsets and source
+					and clipping rectangles
+*/	
+		case 21:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0252"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TRect(TPoint(1,1),iWinSize-TSize(1,1)),TPoint(-6,-14),TRect(10,10,50,50));
+			DoTestScroll(TRect(TPoint(1,1),iWinSize-TSize(1,1)),TPoint(16,4),TRect(10,10,50,50));
+			break;
+		case 22:
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0252"));
+			iTest->LogSubTest(KScroll);
+			DoTestScroll(TRect(TPoint(10,100),iWinSize-TSize(0,10)),TPoint(26,22),TRect(iWinSize));
+			DoTestScroll(TRect(iWinSize),TPoint(2,-1),TRect(-10,-10,50,50));
+			break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0253
+
+@SYMDEF  			DEF081259
+
+@SYMTestCaseDesc    Out of memory window scrolling test 
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Out of memory window scrolling test 
+
+@SYMTestExpectedResults Out of memory scrolling is handled correctly
+*/
+		case 23:		
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0253"));
+			iTest->LogSubTest(KScroll);
+			OomScrolling();
+			iTest->CloseAllPanicWindows();
+			++iTest->iState;
+			return;
+		case 24:		
+			((CTScrollStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0253"));
+			++iTest->iState;
+			++iMode;
+			if (iMode==1)
+				{
+				delete iBaseScrollWin;
+				delete iTestScrollWin;
+				ConstructL();
+				}
+			return;
+		default:
+			((CTScrollStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+			((CTScrollStep*)iStep)->CloseTMSGraphicsStep();
+			TestComplete();
+			break;
+		}
+	((CTScrollStep*)iStep)->RecordTestResultL();
+	FinishedRectScrolls();
+	iDoCheck=ETrue;
+	}
+
+void CTScroll::DemoWindowScrollL()
+	//Function to see what scrolling does.
+	{
+	CBlankWindow* iWin;
+	iWin=new(ELeave) CBlankWindow(TRgb(64,64,224));
+	iWin->SetUpL(TPoint(20,10),TSize(120,100),TheClient->iGroup,*TheClient->iGc);
+	iWin->BaseWin()->SetRequiredDisplayMode(EColor256);
+	iWin->Win()->SetBackgroundColor(TRgb(64,224,64));
+	iWin->RealDraw(ETrue);
+	TheClient->WaitForRedrawsToFinish();
+	iWin->DrawableWin()->Scroll(TPoint(8,5),TRect(20,20,100,80));
+	TheClient->Flush();
+	TheClient->WaitForRedrawsToFinish();
+	TheClient->Flush();
+	}
+
+
+__WS_CONSTRUCT_STEP__(Scroll)
+#pragma warning(default : 4710)