windowing/windowserver/tauto/TSCROLL.CPP
author Faisal Memon <faisal.memon@nokia.com>
Thu, 06 May 2010 11:31:11 +0100
branchNewGraphicsArchitecture
changeset 47 48b924ae7197
parent 0 5d03bc08d59c
permissions -rw-r--r--
Applied patch 1, to provide a syborg specific minigui oby file. Need to compare this with the "stripped" version currently in the tree. This supplied version applies for Nokia builds, but need to repeat the test for SF builds to see if pruning is needed, or if the file needs to be device-specific.

// 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)