windowing/windowserver/tauto/TPNTCAP.CPP
author Faisal Memon <faisal.memon@nokia.com>
Fri, 25 Jun 2010 17:49:58 +0100
branchEGL_MERGE
changeset 105 158b2308cc08
parent 0 5d03bc08d59c
permissions -rw-r--r--
Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.

// 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:
// Test pointer capture
// 
//

/**
 @file
 @test
 @internalComponent - Internal Symbian test code
*/

#include "TPNTCAP.H"

#define LOGGING on

_LIT(ClickOnMe,"Click on me");

//
// CMcConnection

CPcConnection::CPcConnection(CTPointerCapture *aTest) : iTest(aTest)
	{
	}

CPcConnection::~CPcConnection()
	{
	}

void CPcConnection::ConstructL()
	{
	CTClient::SetScreenNumber(iTest->TestBase()->ScreenNumber());
	CTClient::ConstructL();
	iGroup=new(ELeave) CTWindowGroup(this);
	iGroup->ConstructL();
	iGroup->GroupWin()->SetOrdinalPosition(0,1);
	iGroup->GroupWin()->EnableReceiptOfFocus(EFalse);
	iWs.Flush();
	}

//
// CPcWindow, base class //
//

CPcWindowBase::CPcWindowBase(CTPointerCapture *aTest) : CTWin(), iTest(aTest)
	{
	}

void CPcWindowBase::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
	{
	ConstructExtLD(*parent,pos,size);
	iWin.SetBackgroundColor(iBack);
	Activate();
	AssignGC(aGc);
	}

void CPcWindowBase::SetUpL(TPoint pos,TSize size,CTWinBase *parent)
	{
	SetUpL(pos,size,parent,*iTest->Client()->iGc);
	}

void CPcWindowBase::SubStateChanged()
	{
	iWin.Invalidate();
	Client()->iWs.Flush();
	}

void CPcWindowBase::Draw(TDesC &aBuf)
	{
	iGc->Clear();
	iGc->SetPenColor(iBack.Gray4()>1 ? TRgb(0,0,0) : TRgb(255,255,255));
	iGc->DrawText(aBuf, TPoint(10,20));
	}

void CPcWindowBase::PointerL(const TPointerEvent &pointer,const TTime &)
	{
#if defined(LOGGING)
	_LIT(KLog1,"Pointer Event Recieved  Type=%S  State=%d  SubState=%d");
	_LIT(KDown,"Down");
	_LIT(KUp,"Up");
	iTest->LOG_MESSAGE4(KLog1,&(pointer.iType?KUp():KDown()),iTest->State(),iTest->SubState());
#endif
	if (pointer.iType==TPointerEvent::EButton1Down && !iTest->iFailed)
		{
		if (iTest->SubState()==ERootWindow)	// Root window click, must not be inside this window
			{
			if (TRect(Size()).Contains(pointer.iPosition))
				{
				iTest->TestFailed();
				return;
				}
			}
		TInt ret;
		if ((ret=PointerDown())==EFailed)
			iTest->TestFailed();
		else
			iTest->IncSubStateL(ret==ENeedsDDEvent);
		}
#if defined(LOGGING)
	_LIT(KLog2,"End of processing Pointer Event");
	iTest->LOG_MESSAGE(KLog2);
#endif
	}

void CPcWindowBase::DragDropL(const TPointerEvent &pointer,const TTime &)
	{
#if defined(LOGGING)
	_LIT(KLog,"CPcWindowBase::DragDropL  Type=%d  State=%d  SubState=%d");
	iTest->LOG_MESSAGE4(KLog,pointer.iType,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case ENormalCaptureWithoutFocus:
			if (iTest->SubState()==0)
				break;
		case ECaptureDisabled:
		case ENormalCapture:
		case ECaptureAllGroups:
			iTest->TestFailed();
			break;
		}
	if (pointer.iType==TPointerEvent::EButton1Down && !iTest->iFailed)
		{
		if (DragDrop()==EFailed)
			iTest->TestFailed();
		else
			iTest->GotDDL();
		}
	}
//

CPcWindowMain::CPcWindowMain(CTPointerCapture *aTest) : CPcWindowBase(aTest)
	{
	iBack=TRgb::Gray256(236);
	}

TPointerCheckRet CPcWindowMain::PointerDown()
	{
#if defined(LOGGING)
	_LIT(KLog1,"CPcWindowMain::PointerDown  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case ECaptureDisabled:
			if (iTest->SubState()==EMainWindow)
				return(EOkay);
			break;
		case ENormalCapture:
			switch(iTest->SubState())
				{
				case EMainWindow:
				case ERootWindow:
					return(EOkay);
				default:
					break;
				}
			break;
		case ECaptureAllGroups:
			switch(iTest->SubState())
				{
				case EMainWindow:
				case EOtherGroup:
				case EOtherSession:
				case ERootWindow:
					return(EOkay);
				default:
					break;
				}
			break;
		case EDragDropCapture:
			switch(iTest->SubState())
				{
				case EMainWindow:
					return(ENeedsDDEvent);
				case ERootWindow:
					return(EOkay);
				default:
					break;
				}
			break;
		case EDragDropCaptureAllGroups:
			switch(iTest->SubState())
				{
				case EMainWindow:
				case EOtherGroup:
				case EOtherSession:
					return(ENeedsDDEvent);
				case ERootWindow:
					return(EOkay);
				default:
					break;
				}
			break;
		case ENormalCaptureWithoutFocus:
			switch(iTest->SubState())
				{
				case EMainWindow:
					return(EOkay);
				default:
					break;
				}
			break;
		default:
			break;
		}
#if defined(LOGGING)
	_LIT(KLog2,"CPcWindowMain::PointerDown  FAILED  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState());
#endif
	return(EFailed);
	}

TPointerCheckRet CPcWindowMain::DragDrop()
	{
#if defined(LOGGING)
	_LIT(KLog1,"CPcWindowMain::DragDrop  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case EDragDropCapture:
		case EDragDropCaptureAllGroups:
			switch(iTest->SubState())
				{
				case EMainWindow:
					return(EOkay);
				default:
					break;
				}
			break;
		default:
			break;
		}
#if defined(LOGGING)
	_LIT(KLog2,"CPcWindowMain::DragDrop  FAILED  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState());
#endif
	return(EFailed);
	}

void CPcWindowMain::Draw()
	{
	TBuf<0x40> buf;
	if (iTest->State()==ECaptureDisabled)
		{
		switch(iTest->SubState())
			{
			case EMainWindow:
				buf.Copy(ClickOnMe);
				break;
			}
		}
	else
		{
		switch(iTest->SubState())
			{
			case EMainWindow:
				buf.Copy(ClickOnMe);
				break;
			case EChildWindow:
			case EOtherGroup:
			case EOtherSession:
				break;
			case ERootWindow:
				{
				_LIT(ClickOnRoot,"Click on the root window");
				if (iTest->State()<ENormalCaptureWithoutFocus)
					buf.Copy(ClickOnRoot);
				else
					{
					_LIT(AndEscape,", then press <Escape>");
					buf.Copy(ClickOnRoot);
					buf.Append(AndEscape);
					}
				}
				break;
			}
		}
	CPcWindowBase::Draw(buf);
	}

void CPcWindowMain::WinKeyL(const TKeyEvent &aKey,const TTime &)
	{
	switch(aKey.iCode)
		{
		case EKeyEscape:
			iTest->AbortTests();
			break;
		case EKeyEnter:
			if (iTest->SubState()==ERootWindow)
				iTest->IncSubStateL(EFalse);
			break;
		}
	}

//

CPcWindowChild::CPcWindowChild(CTPointerCapture *aTest) : CPcWindowBase(aTest)
	{
	iBack=TRgb::Gray256(85);
	}

TPointerCheckRet CPcWindowChild::PointerDown()
	{
#if defined(LOGGING)
	_LIT(KLog1,"CPcWindowChild::PointerDown  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case ECaptureDisabled:
			break;
		default:
			switch(iTest->SubState())
				{
				case EChildWindow:
					return(EOkay);
				default:
					break;
				}
			break;
		}
#if defined(LOGGING)
	_LIT(KLog2,"CPcWindowChild::PointerDown  FAILED  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState());
#endif
	return(EFailed);
	}

TPointerCheckRet CPcWindowChild::DragDrop()
	{
#if defined(LOGGING)
	_LIT(KLog1,"CPcWindowChild::PointerDown  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case EDragDropCapture:
		case EDragDropCaptureAllGroups:
			switch(iTest->SubState())
				{
				case EChildWindow:
					return(EOkay);
				default:
					break;
				}
			break;
		default:
			break;
		}
#if defined(LOGGING)
	_LIT(KLog2,"CPcWindowChild::PointerDown  FAILED  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState());
#endif
	return(EFailed);
	}

void CPcWindowChild::Draw()
	{
	TBuf<0x40> buf;
	if (iTest->State()!=ECaptureDisabled)
		{
		switch(iTest->SubState())
			{
			case EChildWindow:
				buf.Copy(ClickOnMe);
				break;
			default:
				break;
			}
		}
	CPcWindowBase::Draw(buf);
	}

//

CPcWindowNickFocusGroup::CPcWindowNickFocusGroup(CTPointerCapture *aTest, CTClient *aClient) : CTWindowGroup(aClient), iTest(aTest)
	{
	}

void CPcWindowNickFocusGroup::KeyL(const TKeyEvent &aKey,const TTime &)
	{
	if (aKey.iCode==EKeyEscape)
		iTest->IncSubStateL(EFalse);
	}

//

CPcWindowAltGroup::CPcWindowAltGroup(CTPointerCapture *aTest) : CPcWindowBase(aTest)
	{
	iBack=TRgb::Gray256(236);
	}

TPointerCheckRet CPcWindowAltGroup::PointerDown()
	{
#if defined(LOGGING)
	_LIT(KLog1,"CPcWindowAltGroup::PointerDown  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case ECaptureDisabled:
			if (iTest->SubState()==EChildWindow)
				return(EOkay);
			break;
		case ENormalCapture:
		case EDragDropCapture:
		case ENormalCaptureWithoutFocus:
			switch(iTest->SubState())
				{
				case EOtherGroup:
					return(EOkay);
				default:
					break;
				}
			break;
		default:
			break;
		}
#if defined(LOGGING)
	_LIT(KLog2,"CPcWindowAltGroup::PointerDown  FAILED  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState());
#endif
	return(EFailed);
	}

TPointerCheckRet CPcWindowAltGroup::DragDrop()
	{
#if defined(LOGGING)
	_LIT(KLog1,"CPcWindowAltGroup::DragDrop  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case EDragDropCapture:
		case EDragDropCaptureAllGroups:
			switch(iTest->SubState())
				{
				case EOtherGroup:
					return(EOkay);
				default:
					break;
				}
			break;
		default:
			break;
		}
#if defined(LOGGING)
	_LIT(KLog2,"CPcWindowAltGroup::DragDrop  FAILED  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState());
#endif
	return(EFailed);
	}

void CPcWindowAltGroup::Draw()
	{
	TBuf<0x40> buf;
	if (iTest->State()==ECaptureDisabled)
		{
		switch(iTest->SubState())
			{
			case EMainWindow:
				break;
			case EChildWindow:
				buf.Copy(ClickOnMe);
				break;
			}
		}
	else
		{
		switch(iTest->SubState())
			{
			case EOtherGroup:
				buf.Copy(ClickOnMe);
				break;
			default:
				break;
			}
		}
	CPcWindowBase::Draw(buf);
	}

//

CPcWindowAltConnection::CPcWindowAltConnection(CTPointerCapture *aTest) : CPcWindowBase(aTest)
	{
	iBack=TRgb::Gray256(236);
	}

TPointerCheckRet CPcWindowAltConnection::PointerDown()
	{
#if defined(LOGGING)
	_LIT(KLog1,"CPcWindowAltConnection::PointerDown  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case ECaptureDisabled:
			if (iTest->SubState()==EChildWindow)
				return(EOkay);
			break;
		case ENormalCapture:
		case EDragDropCapture:
		case ENormalCaptureWithoutFocus:
			switch(iTest->SubState())
				{
				case EOtherSession:
					return(EOkay);
				default:
					break;
				}
			break;
		default:
			break;
		}
#if defined(LOGGING)
	_LIT(KLog2,"CPcWindowAltConnection::PointerDown  FAILED  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState());
#endif
	return(EFailed);
	}

TPointerCheckRet CPcWindowAltConnection::DragDrop()
	{
#if defined(LOGGING)
	_LIT(KLog1,"CPcWindowAltConnection::DragDrop  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState());
#endif
	switch(iTest->State())
		{
		case EDragDropCapture:
		case EDragDropCaptureAllGroups:
			switch(iTest->SubState())
				{
				case EOtherSession:
					return(EOkay);
				default:
					break;
				}
			break;
		default:
			break;
		}
#if defined(LOGGING)
	_LIT(KLog2,"CPcWindowAltConnection::DragDrop  FAILED  State=%d  SubState=%d");
	iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState());
#endif
	return(EFailed);
	}

void CPcWindowAltConnection::Draw()
	{
	TBuf<0x40> buf;
	if (iTest->State()!=ECaptureDisabled)
		{
		switch(iTest->SubState())
			{
			case EOtherSession:
				buf.Copy(ClickOnMe);
				break;
			default:
				break;
			}
		}
	CPcWindowBase::Draw(buf);
	}

//

CTPointerCapture::CTPointerCapture(CTestStep* aStep) : CTWsGraphicsBase(aStep)
	{
	iSubState=0;
	iFailed=EFalse;
	}

CTPointerCapture::~CTPointerCapture()
	{
	delete iNickFocusBlankWin;
	delete iNickFocusGroup;
	delete iAltConnectionWin;
	delete iAltConnection;
	delete iChildWin;
	delete iMainWin;
	delete iMainGroup;
	delete iAltGroupWin;
	delete iAltGroup;
	}

void CTPointerCapture::TestFailed()
	{
	if (iFailed)
		{
		_LIT(KLog,"Test Failed  State=%d  SubState=%d");
		LOG_MESSAGE3(KLog,iTest->iState,iSubState);
		}
	__ASSERT_DEBUG(iFailed==EFalse,AutoPanic(ETManPanicPcFailed));
	TInt dRet=1;
#if !defined(DISABLE_FAIL_DIALOG)
	Client()->iGroup->GroupWin()->SetOrdinalPosition(0,10);	// Put error dialog on top of test windows
	TRAPD(err,dRet=doTestFailedL());
	Client()->iGroup->GroupWin()->SetOrdinalPosition(0,0);
#endif
	switch(dRet)
		{
		case 0:
			break;
		case 1:
			iFailed=ETrue;
			NextTest();
			break;
		}
	}

TInt CTPointerCapture::doTestFailedL()
	{
	CTDialog *dialog=new(ELeave) CTDialog();
	dialog->SetTitle(_L("Pointer capture test failed"));
	dialog->SetNumButtons(2);
	dialog->SetButtonText(0,_L("Retest"));
	dialog->SetButtonText(1,_L("Fail"));
	dialog->ConstructLD(*Client()->iGroup,*Client()->iGc);
	return dialog->Display();
	}

TInt CTPointerCapture::State() const
	{
	return(iTest->iState);
	}

TInt CTPointerCapture::SubState() const
	{
	return(iSubState);
	}

void CTPointerCapture::doIncSubStateL()
	{
	iSubState++;
	TInt max=0;
	switch(iTest->iState)
		{
		case ECaptureDisabled:
			max=ESubStates1;
			break;
		case ENormalCapture:
			max=ESubStates2;
			break;
		case ECaptureAllGroups:
			max=ESubStates3;
			break;
		case EDragDropCapture:
			max=ESubStates4;
			break;
		case EDragDropCaptureAllGroups:
			max=ESubStates5;
			break;
		case ENormalCaptureWithoutFocus:
			max=ESubStates6;
			break;
		}
	//SubState 4 has been broken by something in the framework
	if (iSubState==max || iSubState==4)
		{
	#if defined(LOGGING)
		_LIT(KLog,"IncState  OldState=%d  SubState=%d");
		LOG_MESSAGE3(KLog,iTest->iState,iSubState);
	#endif
		NextTest();
		}
	StateChanged();
	TheClient->WaitForRedrawsToFinish();
	if (iSubState>0)
		SendEventsL();
	}

void CTPointerCapture::GotDDL()
	{
	if (iDDState==DDStateWaiting)
		doIncSubStateL();
	else
		iDDState=DDStateGot;
	}

void CTPointerCapture::IncSubStateL(TBool aNeedsDD)
	{
	if (!aNeedsDD)
		{
		if (iDDState!=DDStateNull)
			TestFailed();
		else
			doIncSubStateL();
		}
	else if (iDDState==DDStateGot)
		doIncSubStateL();
	else
		iDDState=DDStateWaiting;
	}

void CTPointerCapture::StateChanged()
	{
	iDDState=DDStateNull;
	iChildWin->SubStateChanged();
	iMainWin->SubStateChanged();
	iAltGroupWin->SubStateChanged();
	iAltConnectionWin->SubStateChanged();
	}

void CTPointerCapture::AbortTests()
	{
	iTest->iState=99;
	}

void CTPointerCapture::NextTest()
	{
	TEST(!iFailed);
	if (iFailed)
		{
		_LIT(KLog,"SubTest %d failed");
		LOG_MESSAGE2(KLog,iTest->iState);
		}
	++iTest->iState;
	iSubState=0;
	iFailed=EFalse;
	CaseComplete();
	_LIT(KLog,"Done NextTest  NewSubTest %d");
	LOG_MESSAGE2(KLog,iTest->iState);
	}

void CTPointerCapture::ConstructL()
	{
	TheClient->iWs.SetPointerCursorArea(iTest->iNormalPointerCursorArea);
	iScreenSize=TSize(TheClient->iScreen->SizeInPixels());
	TInt winWidth2=iScreenSize.iWidth/2-EWinBorderSize*2;
	TInt winWidth4=iScreenSize.iWidth/4-EWinBorderSize*2;
	TInt winHeight=iScreenSize.iHeight/2-EWinBorderSize*2;
//
	iMainGroup=new(ELeave) CTWindowGroup(Client());
	iMainGroup->ConstructL();
	iMainGroup->GroupWin()->SetOrdinalPosition(0,1);
	iMainWin=new(ELeave) CPcWindowMain(this);
	iMainWin->SetUpL(TPoint(EWinBorderSize,EWinBorderSize) ,TSize(winWidth2,winHeight) ,iMainGroup);
	iMainGroup->SetCurrentWindow(iMainWin);
	iChildWin=new(ELeave) CPcWindowChild(this);
	iChildWin->SetUpL(TPoint(0,winHeight/2) ,TSize(winWidth2,winHeight/2) ,iMainWin);
//
	iAltGroup=new(ELeave) CTWindowGroup(Client());
	iAltGroup->ConstructL();
	iAltGroup->GroupWin()->SetOrdinalPosition(0,1);
	iAltGroup->GroupWin()->EnableReceiptOfFocus(EFalse);
	iAltGroupWin=new(ELeave) CPcWindowAltGroup(this);
	iAltGroupWin->SetUpL(TPoint(iScreenSize.iWidth/2+EWinBorderSize,EWinBorderSize) ,TSize(winWidth4,winHeight) ,iAltGroup);
//
	iAltConnection=new(ELeave) CPcConnection(this);
	iAltConnection->ConstructL();
	iAltConnectionWin=new(ELeave) CPcWindowAltConnection(this);
	iAltConnectionWin->SetUpL(TPoint(iScreenSize.iWidth/4*3+EWinBorderSize,EWinBorderSize) ,TSize(winWidth4,winHeight),iAltConnection->iGroup,*iAltConnection->iGc);
	iTest->DelayIfFullRomL();
	SetSelfDrive(ETrue);
	}

void CTPointerCapture::NickFocusL()
	{
	iNickFocusGroup=new(ELeave) CPcWindowNickFocusGroup(this,Client());
	iNickFocusGroup->ConstructL();
	iNickFocusGroup->GroupWin()->SetOrdinalPosition(0,2);
	iNickFocusBlankWin=new(ELeave) CTBlankWindow();
	iNickFocusBlankWin->ConstructL(*iNickFocusGroup);
	iNickFocusBlankWin->SetSize(TSize(1,1));
	iNickFocusBlankWin->Activate();
	}

void CTPointerCapture::SetCapture(TInt aCaptureFlags)
	{
#if defined(LOGGING)
	_LIT(KLog,"Change Capture  State=%d  CaptureFlags=0x%x");
	LOG_MESSAGE3(KLog,iTest->iState,aCaptureFlags);
#endif
	iMainWin->Win()->SetPointerCapture(aCaptureFlags);
	}

void CTPointerCapture::SendEventsL()
	{
#if defined(LOGGING)
	_LIT(KLog,"SendEvent  State=%d  SubState=%d");
	LOG_MESSAGE3(KLog,iTest->iState,iSubState);
#endif
	switch (iSubState)
		{
	case 0:
		iTest->SimulatePointerDownUp(iScreenSize.iWidth/4,iScreenSize.iHeight/8+EWinBorderSize/2);
		break;
	case 1:
		if (iTest->iState>ECaptureDisabled)
			{
			iTest->SimulatePointerDownUp(iScreenSize.iWidth/4,3*iScreenSize.iHeight/8-EWinBorderSize/2);
			break;
			}
	case 2:
		iTest->SimulatePointerDownUp(5*iScreenSize.iWidth/8,iScreenSize.iHeight/4);
		break;
	case 3:
		iTest->SimulatePointerDownUp(7*iScreenSize.iWidth/8,iScreenSize.iHeight/4);
		break;
	case 4:
		if (iTest->IsFullRomL())
			iTest->SimulateKeyDownUp(EStdKeyEnter);
		else
			iTest->SimulatePointerDownUp(0,0);
		if (iTest->iState==ENormalCaptureWithoutFocus)
			{
			iTest->SimulateKeyDownUp(EStdKeyEscape);
			break;
			}
		break;
	default:
		TEST(EFalse);
		}
	TheClient->iWs.Flush();
	}

void CTPointerCapture::RunTestCaseL(TInt /*aCurTestCase*/)
	{
	_LIT(TestNoCapture,"No capture");
	_LIT(TestNormalCapture,"Normal capture");
	_LIT(TestAllGroups,"All groups");
	_LIT(TestDragDrop,"Drag & Drop");
	_LIT(TestDragDropAllGroups,"Drag & Drop All groups");
	_LIT(TestWithoutFocus,"Without focus");
	StateChanged();
	
	if (!TestBase()->ConfigurationSupportsPointerEventTesting())
	    {
	    INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing"));
	    TestComplete();
	    return;
	    }
	
	((CTPointerCaptureStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
	switch(iTest->iState)
		{
/**

  @SYMTestCaseID GRAPHICS-WSERV-0290
  
  @SYMDEF             DEF081259
 
  @SYMTestCaseDesc Test pointer capture can be disabled
    
  @SYMTestPriority High
 
  @SYMTestStatus Implemented
 
  @SYMTestActions Disable the pointer capture to the screen and simulate
  					capture with the pointer
  
  @SYMTestExpectedResults The pointer capture has been disabled
 
*/
		case ECaptureDisabled:
			((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0290"));
			if (TheClient->iScreen->GetScreenNumber()>0)
				{
				_LIT(KLog,"Cannot run this test on the 2nd screen - all pointer events goto the 1st screen");
				LOG_MESSAGE(KLog);
				TestComplete();
				}
			iTest->LogSubTest(TestNoCapture);
			SetCapture(RWindowBase::TCaptureDisabled);
			break;
/**

  @SYMTestCaseID GRAPHICS-WSERV-0291
  
  @SYMDEF             DEF081259
 
  @SYMTestCaseDesc Test pointer capture can be enabled
    
  @SYMTestPriority High
 
  @SYMTestStatus Implemented
 
  @SYMTestActions Enable the pointer capture to the screen and simulate
  					capture with the pointer
  
  @SYMTestExpectedResults The pointer capture has been enabled and works
  							correctly
 
*/
		case ENormalCapture:
			((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0291"));
			iTest->LogSubTest(TestNormalCapture);
			SetCapture(RWindowBase::TCaptureEnabled);
			break;
/**

  @SYMTestCaseID GRAPHICS-WSERV-0292
  
  @SYMDEF             DEF081259
 
  @SYMTestCaseDesc Test pointer capture can be enabled for 
  					windows belonging to any group
    
  @SYMTestPriority High
 
  @SYMTestStatus Implemented
 
  @SYMTestActions Enable the pointer capture to all windows and simulate
  					capture with the pointer
  
  @SYMTestExpectedResults The pointer capture has been enabled and works
  							correctly
 
*/
		case ECaptureAllGroups:
			((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0292"));
			iTest->LogSubTest(TestAllGroups);
			SetCapture(RWindowBase::TCaptureEnabled|RWindowBase::TCaptureFlagAllGroups);
			break;
/**

  @SYMTestCaseID GRAPHICS-WSERV-0293
  
  @SYMDEF             DEF081259
 
  @SYMTestCaseDesc Test drag and drop pointer capture can be enabled for 
  					windows belonging to any group
    
  @SYMTestPriority High
 
  @SYMTestStatus Implemented
 
  @SYMTestActions Enable drag and drop  pointer capture to all windows and simulate
  					capture with the pointer
  
  @SYMTestExpectedResults The pointer capture has been enabled and works
  							correctly
 
*/
		case EDragDropCapture:
			((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0293"));
			iTest->LogSubTest(TestDragDrop);
			SetCapture(RWindowBase::TCaptureDragDrop&~RWindowBase::TCaptureFlagAllGroups);
			break;
/**

  @SYMTestCaseID GRAPHICS-WSERV-0294
  
  @SYMDEF             DEF081259
 
  @SYMTestCaseDesc Test drag and drop pointer capture can be enabled
    
  @SYMTestPriority High
 
  @SYMTestStatus Implemented
 
  @SYMTestActions Enable drag and drop  pointer capture and simulate
  					capture with the pointer
  
  @SYMTestExpectedResults The pointer capture has been enabled and works
  							correctly
 
*/
		case EDragDropCaptureAllGroups:
			((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0294"));
			iTest->LogSubTest(TestDragDropAllGroups);
			SetCapture(RWindowBase::TCaptureDragDrop);
			break;
/**

  @SYMTestCaseID GRAPHICS-WSERV-0295
  
  @SYMDEF             DEF081259
 
  @SYMTestCaseDesc Test pointer capture can be enabled
    
  @SYMTestPriority High
 
  @SYMTestStatus Implemented
 
  @SYMTestActions Enable the pointer capture to the screen and simulate capture
  					with the pointer when the screen does not have the focus
  
  @SYMTestExpectedResults The pointer capture has been enabled and works
  							correctly
 
*/
		case ENormalCaptureWithoutFocus:
			((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0295"));
			iTest->LogSubTest(TestWithoutFocus);
			NickFocusL();
			SetCapture(RWindowBase::TCaptureEnabled);
			break;
		default:
			((CTPointerCaptureStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
			((CTPointerCaptureStep*)iStep)->CloseTMSGraphicsStep();
			TestComplete();
			return;
		}
	((CTPointerCaptureStep*)iStep)->RecordTestResultL();
	SendEventsL();
	}

__WS_CONSTRUCT_STEP__(PointerCapture)