diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tauto/TPointer.CPP --- a/windowing/windowserver/tauto/TPointer.CPP Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1087 +0,0 @@ -// 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 event handling -// Coverted from TMan test code (TMPOINTR.CPP) October 2000 -// -// - -/** - @file - @test - @internalComponent - Internal Symbian test code -*/ - -#include "TPointer.H" - - -//#define LOGGING - -#if defined(LOGGING) - LOCAL_D TLogMessageText LogMessageText; -#endif - - -CPointerWindow::CPointerWindow(CTPointer *aTest) : CTWin(), iTest(aTest) - {} - -void CPointerWindow::SetState(TInt aState) - { -#if defined(LOGGING) - _LIT(KState,"CPointerWindow::SetState(%d) OldState=%d"); - LogMessageText.Format(KState,aState,iState); - TheClient->LogMessage(LogMessageText); -#endif - iState=aState; - iWin.Invalidate(); - switch(aState) - { - case KStateWaitingForTest1: - case KStateWaitingForTest2: - case KStateWaitingForTest3: - case KStateWaitingForTest4: - case KStateWaitingForTest5: - case KStateWaitingForTest6: - case KStateWaitingForTest8: - case KStateWaitingForTest7: - iRepeatRect=TRect(); - break; - case KStateTesting8: - iWin.Close(); - Client()->iWs.Flush(); - User::After(500000); - FinishedTests(); - break; - } - TheClient->WaitForRedrawsToFinish(); - SendEvent(); - } - -void CPointerWindow::ResetTest(TInt aState) - { - TInt newState=KStateFinished; - switch(aState) - { - case KStateTesting1: - newState=KStateWaitingForTest1; - break; - case KStateTesting2: - newState=KStateWaitingForTest2; - break; - case KStateTesting3: - newState=KStateWaitingForTest3; - break; - case KStateTesting4: - newState=KStateWaitingForTest4; - break; - case KStateTesting5: - newState=KStateWaitingForTest5; - break; - case KStateTesting6: - newState=KStateWaitingForTest6; - break; - case KStateTesting8: - newState=KStateWaitingForTest8; - break; - case KStateTesting7: - newState=KStateWaitingForTest7; - break; - } - TheClient->iWs.PurgePointerEvents(); - SetState(newState); - } - -void CPointerWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) - { - ConstructExtLD(*parent,pos,size); - iTl=pos; - iSize=size; - Activate(); - AssignGC(aGc); - SetState(KStateWaitingForTest1); - BaseWin()->EnableOnEvents(); - } - -void CPointerWindow::Draw() - { - iGc->Clear(); - iGc->DrawRect(Size()); - iGc->DrawRect(iRepeatRect); - TBuf<0x80> buf; - TBuf<0x80> buf2; - switch(iState) - { - case KStateWaitingForTest1: - { - _LIT(Draw1,"Click anywhere in the window and hold the pointer steady"); - buf.Format(Draw1); - } - break; - case KStateTesting1: - { - _LIT(Draw2,"Hold pointer inside the box"); - buf.Format(Draw2); - } - break; - case KStateWaitingForTest2: - { - _LIT(Draw3,"Release the pointer then click in the window and hold the pointer steady"); - buf.Format(Draw3); - } - break; - case KStateTesting2: - { - _LIT(Draw4,"Drag the pointer outside the box"); - buf.Format(Draw4); - } - break; - case KStateWaitingForTest3: - { - _LIT(Draw5,"Release the pointer then click in the window and hold the pointer steady"); - buf.Format(Draw5); - } - break; - case KStateTesting3: - { - _LIT(Draw6,"Release the pointer"); - buf.Format(Draw6); - } - break; - case KStateWaitingForTest4: - { - _LIT(Draw7,"Click anywhere in the window and move the pointer slightly"); - buf.Format(Draw7); - } - break; - case KStateTesting4: - { - _LIT(Draw8,"Release the pointer"); - buf.Format(Draw8); - } - break; - case KStateWaitingForTest5: - { - _LIT(Draw9,"Click anywhere in the window and move the pointer slightly"); - buf.Format(Draw9); - } - break; - case KStateTesting5: - { - _LIT(Draw10,"Release the pointer"); - buf.Format(Draw10); - break; - } - case KStateWaitingForTest6: - { - _LIT(Draw11,"Click anywhere in the window"); - buf.Format(Draw11); - } - break; - case KStateTesting6: - { - _LIT(Draw12,"Move the pointer"); - buf.Format(Draw12); - } - break; - case KStateWaitingForTest8: - { - _LIT(Draw13,"Click anywhere in the window, and keep the pointer pressed"); - buf.Format(Draw13); - } - break; - case KStateTesting8: - buf.Format(KNullDesC); - break; - case KStateWaitingForTest7: - { - _LIT(Draw14,"Switch off and touch the center of the screen"); - buf.Format(Draw14); - } - break; - case KStateTesting7: - buf.Format(KNullDesC); - break; - } - switch(iState) - { - case KStateTesting1: - { - _LIT(Repeat2,"Repeat (%d/%d), interval=%d.%d"); - buf2.Format(Repeat2,iRepeatCount,KRepeatCount,iInterval.Int()/1000000,(iInterval.Int()%1000000)/100000); - } - break; - case KStateTesting2: - case KStateTesting3: - { - _LIT(Repeat1,"Repeat (%d), interval=%d.%d"); - buf2.Format(Repeat1,iRepeatCount,iInterval.Int()/1000000,(iInterval.Int()%1000000)/100000); - } - break; - } - iGc->DrawText(buf,TPoint(10,20)); - iGc->DrawText(buf2,TPoint(10,40)); - } - -void CPointerWindow::FinishedTests() - { - iState=KStateFinished; - } - -void CPointerWindow::StartNextRepeatTest() - { - iInterval=0; - iRepeatCount=0; - if (iState==KStateWaitingForTest4) - User::After(TTimeIntervalMicroSeconds32(1000000)); - else if (iState==KStateWaitingForTest5) - User::After(TTimeIntervalMicroSeconds32(1000000)); - QueueNextRepeat(); - switch(iState) - { - case KStateWaitingForTest1: - SetState(KStateTesting1); - break; - case KStateWaitingForTest2: - SetState(KStateTesting2); - break; - case KStateWaitingForTest3: - SetState(KStateTesting3); - break; - case KStateWaitingForTest4: - SetState(KStateTesting4); - break; - case KStateWaitingForTest5: - SetState(KStateTesting5); - break; - case KStateWaitingForTest6: - SetState(KStateTesting6); - break; - case KStateWaitingForTest8: - SetState(KStateTesting8); - break; - case KStateWaitingForTest7: - SetState(KStateTesting7); - break; - } - } - -void CPointerWindow::QueueNextRepeat() - { - iInterval=iInterval.Int()+KRepeatIntervalIncrements; -#if defined(LOGGING) - /*_LIT(KRequestRepeat,"Request Repeat, State=%d, Interval=%d"); - TLogMessageText buf; - buf.Format(KRequestRepeat,iState,iInterval.Int()); - TheClient->LogMessage(buf);*/ -#endif - iWin.RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32(iInterval),TRect(iRepeatRect)); - iPrevTime.HomeTime(); - iWin.Invalidate(); - } - -void CPointerWindow::PointerL(const TPointerEvent &aPointer,const TTime &aTime) - { -#if defined(LOGGING) - _LIT(KPointer,"CPointerWindow::PointerL(Type=%d, Pos=(%d,%d), ParPos=(%d,%d), Mod=0x%x) State=%d"); - LogMessageText.Format(KPointer,aPointer.iType,aPointer.iPosition.iX,aPointer.iPosition.iY,aPointer.iParentPosition.iX,aPointer.iParentPosition.iY,aPointer.iModifiers,iState); - TheClient->LogMessage(LogMessageText); -#endif - if (aPointer.iType==TPointerEvent::EButtonRepeat) - { - if (iState!=KStateTesting1 && iState!=KStateTesting2 && iState!=KStateTesting3 && iState!=KStateTesting4) - TestFailed(); - else - { - TTimeIntervalMicroSeconds32 interval(I64LOW(aTime.MicroSecondsFrom(iPrevTime).Int64())); - TBool fail1=(interval.Int()<(iInterval.Int()-KRepeatMargin) || interval.Int()>(iInterval.Int()+KRepeatMargin)); - if (fail1) - { - _LIT(KPointerRepeat1,"Pointer Repeat Interval, Exp=%d, Act=%d, F1=%d, F2=%d"); - TLogMessageText buf; - TBool fail2=(interval.Int()<(iInterval.Int()-2*KRepeatMargin) || interval.Int()>(iInterval.Int()+3*KRepeatMargin)); - buf.Format(KPointerRepeat1,iInterval.Int(),interval.Int(),fail1,fail2); - TheClient->LogMessage(buf); - } - if (interval.Int()<(iInterval.Int()- - #if defined(__MARM_ARM4__) - 2* - #endif - KRepeatMargin) || interval.Int()>(iInterval.Int()+ - #if defined(__MARM_ARM4__) - 3* - #endif - KRepeatMargin)) - TestFailed(); - else - { - if (!iRepeatRect.Contains(aPointer.iPosition) || - aPointer.iParentPosition!=(aPointer.iPosition+iWin.InquireOffset(*Parent()->WinTreeNode()))) - TestFailed(); - else - { - iRepeatCount++; - if (iState==KStateTesting1 && iRepeatCount==KRepeatCount) - { - QueueNextRepeat(); - Client()->iWs.Flush(); - User::After(TTimeIntervalMicroSeconds32(iRepeatCount*KRepeatIntervalIncrements)); - iWin.CancelPointerRepeatEventRequest(); - SetState(KStateWaitingForTest2); - } - else - QueueNextRepeat(); - } - } - } - } - else switch(iState) - { - case KStateWaitingForTest1: - case KStateWaitingForTest2: - case KStateWaitingForTest3: - case KStateWaitingForTest4: - case KStateWaitingForTest8: - if (aPointer.iType==TPointerEvent::EButton1Down) - { - iRepeatRect.iTl=aPointer.iPosition-TPoint(KRepeatRectXExtra,KRepeatRectYExtra); - iRepeatRect.iBr=aPointer.iPosition+TPoint(KRepeatRectXExtra,KRepeatRectYExtra); - StartNextRepeatTest(); - } - break; - case KStateWaitingForTest5: - if (aPointer.iType==TPointerEvent::EButton1Down) - { - iRepeatRect.iTl=aPointer.iPosition; - iRepeatRect.iBr=aPointer.iPosition+TPoint(1,1); - StartNextRepeatTest(); - } - break; - case KStateWaitingForTest6: - if (aPointer.iType==TPointerEvent::EButton1Down) - { - iRepeatRect.iTl=aPointer.iPosition+TPoint(KRepeatRectXExtra,KRepeatRectYExtra); - iRepeatRect.iBr=aPointer.iPosition+TPoint(2*KRepeatRectXExtra,2*KRepeatRectYExtra); - StartNextRepeatTest(); - } - break; - case KStateTesting1: - { - TBool isDrag=(aPointer.iType==TPointerEvent::EDrag); - TestFailed(isDrag); - if (isDrag) - { - iTest->SimulatePointer(TRawEvent::EButton1Down,aPointer.iPosition.iX,aPointer.iPosition.iY); - iTest->SimulatePointer(TRawEvent::EButton1Up,aPointer.iPosition.iX,aPointer.iPosition.iY); - } - } - break; - case KStateTesting2: - if (aPointer.iType==TPointerEvent::EDrag) - SetState(KStateWaitingForTest3); - else - TestFailed(); - break; - case KStateTesting3: - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KStateWaitingForTest4); - else - TestFailed(); - break; - case KStateTesting4: - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KStateWaitingForTest5); - else - TestFailed(); - break; - case KStateTesting5: - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KStateWaitingForTest6); - else if (aPointer.iType!=TPointerEvent::EDrag) - TestFailed(); - break; - case KStateTesting6: - if (aPointer.iType==TPointerEvent::EDrag) - { - //#if !defined(__WINS__) // Can't emulate touching dig when switched off under WINS - // if (iTest->Digitiser()) - SetState(KStateWaitingForTest7); - /* else - #endif - SetState(KStateWaitingForTest8);*/ - } - else - TestFailed(); - break; - case KStateWaitingForTest7: - if (aPointer.iType==TPointerEvent::EButton1Down || aPointer.iType==TPointerEvent::ESwitchOn) - TestFailed(); - break; - case KStateTesting7: - if (aPointer.iType!=TPointerEvent::ESwitchOn) - TestFailed(); - else - SetState(KStateWaitingForTest8); - break; - case KStateTesting8: - break; - } - } - -void CPointerWindow::TestFailed(TBool aRetest/*=EFalse*/) - { - if (iState!=KStateFailed) - { - TInt oldState=iState; - iState=KStateFailed; - if (iTest->TestFailed(oldState,aRetest) || aRetest) - ResetTest(oldState); - } - } - -void CPointerWindow::WinKeyL(const TKeyEvent &aKey,const TTime &) - { -#if defined(LOGGING) - _LIT(KKey,"CPointerWindow::WinKeyL(Code=%d, ScanCode=%d) State=%d"); - LogMessageText.Format(KKey,aKey.iCode,aKey.iScanCode,iState); - TheClient->LogMessage(LogMessageText); -#endif - if (aKey.iCode==EKeyEscape) - FinishedTests(); // Simply skip this test if the Escape key is pressed - } - -void CPointerWindow::SwitchOn(const TTime &) - { -#if defined(LOGGING) - _LIT(KOn,"CPointerWindow::SwitchOn() State=%d"); - LogMessageText.Format(KOn,iState); - TheClient->LogMessage(LogMessageText); -#endif - if (iState==KStateWaitingForTest7) - SetState(KStateTesting7); - else - TestFailed(); - } - -void CPointerWindow::SendEvent() - { -#if defined(LOGGING) - _LIT(KSend,"CPointerWindow::SendEvent() State=%d"); - LogMessageText.Format(KSend,iState); - TheClient->LogMessage(LogMessageText); -#endif - switch (iState) - { - case KStateWaitingForTest1: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/4,iTl.iY+iSize.iHeight/4); - break; - //case KStateTesting1: //Do Nothing - // break; - case KStateWaitingForTest2: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/4,iTl.iY+iSize.iHeight/4); - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/2,iTl.iY+iSize.iHeight/4); - break; - case KStateTesting2: - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+5*iSize.iWidth/8,iTl.iY+iSize.iHeight/4+2); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4,iTl.iY+iSize.iHeight/4+4); - break; - case KStateWaitingForTest3: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+3*iSize.iWidth/4,iTl.iY+iSize.iHeight/4+4); - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/4,iTl.iY+iSize.iHeight/2); - break; - case KStateTesting3: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/4,iTl.iY+iSize.iHeight/2); - break; - case KStateWaitingForTest4: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/2,iTl.iY+iSize.iHeight/2); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+3,iTl.iY+iSize.iHeight/2+1); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+6,iTl.iY+iSize.iHeight/2+2); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+9,iTl.iY+iSize.iHeight/2+3); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+12,iTl.iY+iSize.iHeight/2+4); - break; - case KStateTesting4: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/2+12,iTl.iY+iSize.iHeight/2+4); - break; - case KStateWaitingForTest5: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/2,iTl.iY+3*iSize.iHeight/4); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+3,iTl.iY+3*iSize.iHeight/4+1); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+6,iTl.iY+3*iSize.iHeight/4+2); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+9,iTl.iY+3*iSize.iHeight/4+3); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+12,iTl.iY+3*iSize.iHeight/4+4); - break; - case KStateTesting5: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/2+12,iTl.iY+3*iSize.iHeight/4+4); - break; - case KStateWaitingForTest6: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+3*iSize.iWidth/4,iTl.iY+3*iSize.iHeight/4); - break; - case KStateTesting6: - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4+4,iTl.iY+3*iSize.iHeight/4+2); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4+8,iTl.iY+3*iSize.iHeight/4+4); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4+12,iTl.iY+3*iSize.iHeight/4+6); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4+16,iTl.iY+3*iSize.iHeight/4+8); - break; - case KStateWaitingForTest8: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/2,iTl.iY+3*iSize.iHeight/4); - break; - case KStateTesting8: - break; - case KStateWaitingForTest7: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+3*iSize.iWidth/4+16,iTl.iY+3*iSize.iHeight/4+8); - iTest->SimulateEvent(TRawEvent::ESwitchOn); - iTest->SimulatePointer(TRawEvent::EPointerSwitchOn,iTl.iX+iSize.iWidth/2-1,iTl.iY+iSize.iHeight/2-1); - break; - //case KStateTesting7: //Do Nothing - // break; - /*case KStateFailed: - break; - case KStateFinished: - break;*/ - } - } - -// -// CGrabWindow // -// - -CGrabWindow::CGrabWindow(CTPointer *aTest) : iTest(aTest) - { - } - -void CGrabWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) - { - ConstructExtLD(*parent,pos,size); - iTl=pos; - iSize=size; - Activate(); - AssignGC(aGc); - SetState(KGrabStateWaitingForDown); - } - -void CGrabWindow::Draw() - { - iGc->Clear(); - iGc->DrawRect(Size()); - TBuf<0x80> buf; - switch(iState) - { - case KGrabStateWaitingForDown: - case KGrabStateWaitingForDown2: - case KGrabStateWaitingForDown5: - { - _LIT(Draw1,"Press the pointer inside the window"); - buf.Copy(Draw1); - } - break; - case KGrabStateWaitingForDown3: - case KGrabStateWaitingForUp3a: - { - _LIT(Draw2,"Press and release the pointer inside the window"); - buf.Copy(Draw2); - } - break; - case KGrabStateWaitingForDragOut: - { - _LIT(Draw3,"Drag the pointer outside into the outside window"); - buf.Copy(Draw3); - } - break; - case KGrabStateWaitingForUp: - case KGrabStateWaitingForUp2b: - case KGrabStateWaitingForUp5: - { - _LIT(Draw4,"Release the pointer"); - buf.Copy(Draw4); - } - break; - case KGrabStateWaitingForDown4: - { - _LIT(Draw5,"Press then release the pointer"); - buf.Copy(Draw5); - } - break; - default:; - } - iGc->DrawText(buf,TPoint(10,20)); - } - -void CGrabWindow::PointerL(const TPointerEvent &aPointer,const TTime&) - { -#if defined(LOGGING) - _LIT(KPointer,"CGrabWindow::PointerL(Type=%d, Pos=(%d,%d), ParPos=(%d,%d), Mod=0x%x) State=%d"); - LogMessageText.Format(KPointer,aPointer.iType,aPointer.iPosition.iX,aPointer.iPosition.iY,aPointer.iParentPosition.iX,aPointer.iParentPosition.iY,aPointer.iModifiers,iState); - TheClient->LogMessage(LogMessageText); -#endif - switch(iState) - { - case KGrabStateWaitingForDown: - if (aPointer.iType==TPointerEvent::EButton1Down) - SetState(KGrabStateWaitingForDragOut); - break; - case KGrabStateWaitingForDragOut: - if (aPointer.iType!=TPointerEvent::EDrag) - TestFailed(); - else - { - if (!TRect(Size()).Contains(aPointer.iPosition)) - SetState(KGrabStateWaitingForUp); - } - break; - case KGrabStateWaitingForUp: - if (aPointer.iType==TPointerEvent::EDrag) - break; - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KGrabStateWaitingForDown2); - else - TestFailed(); - break; - case KGrabStateWaitingForDown2: - if (aPointer.iType!=TPointerEvent::EButton1Down) - TestFailed(); - else - { - iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(); - iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(); // Call twice to check it's harmless - SetState(KGrabStateWaitingForUp2a); - } - break; - case KGrabStateWaitingForUp2a: - SetState(KGrabStateWaitingForDrag2); - break; - case KGrabStateWaitingForDrag2: - break; - case KGrabStateWaitingForUp2b: - TestFailed(); - break; - case KGrabStateWaitingForDown3: - if (aPointer.iType!=TPointerEvent::EButton1Down) - TestFailed(); - else - SetState(KGrabStateWaitingForUp3a); - break; - case KGrabStateWaitingForUp3a: - if (aPointer.iType==TPointerEvent::EButton1Up) - { - iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(); - SetState(KGrabStateWaitingForUp3b); - } - break; - case KGrabStateWaitingForUp3b: - TestFailed(); - break; - case KGrabStateWaitingForDown5: - if (aPointer.iType!=TPointerEvent::EButton1Down) - TestFailed(); - else - { - iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(EFalse); - SetState(KGrabStateWaitingForDrag5); - } - break; - case KGrabStateWaitingForDrag5: - if (aPointer.iType==TPointerEvent::EButton1Up) - TestFailed(); - break; - case KGrabStateWaitingForUp5: - TestFailed(); - break; - case KGrabStateWaitingForDown4: - iWin.Close(); // Close the window with the grab captured in it - SetState(KGrabStateWaitingForUp4); - break; - case KGrabStateFinished: - break; - } - } - -void CGrabWindow::ResetTest() - { - TheClient->iWs.PurgePointerEvents(); - SetState(KGrabStateWaitingForDown); - } - -void CGrabWindow::Pointer2(const TPointerEvent &aPointer) - { - switch(iState) - { - case KGrabStateWaitingForDrag2: - { - if (aPointer.iType==TPointerEvent::EDrag) - { - SetState(KGrabStateWaitingForUp2b); - } - else - { - if (iTest->TestFailed(iState)) - ResetTest(); - } - break; - } - case KGrabStateWaitingForUp2b: - if (aPointer.iType==TPointerEvent::EDrag) // Harmless - break; - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KGrabStateWaitingForDown3); - else - TestFailed(); - break; - case KGrabStateWaitingForUp3b: - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KGrabStateWaitingForDown5); - else - TestFailed(); - break; - case KGrabStateWaitingForUp4: - FinishedTests(); - break; - case KGrabStateWaitingForDrag5: - { - if (aPointer.iType==TPointerEvent::EDrag) - SetState(KGrabStateWaitingForUp5); - else if (iTest->TestFailed(iState)) - ResetTest(); - break; - } - case KGrabStateWaitingForUp5: - if (aPointer.iType==TPointerEvent::EDrag) // Harmless - break; - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KGrabStateWaitingForDown4); - else - TestFailed(); - break; - default:; - } - } - -void CGrabWindow::SetState(TInt aState) - { - iState=aState; - if (aState!=KGrabStateWaitingForUp4) - iWin.Invalidate(); - TheClient->WaitForRedrawsToFinish(); - SendEvent(); - } - -void CGrabWindow::TestFailed() - { -#if defined(LOGGING) - _LIT(KFail,"CGrabWindow::TestFailed() State=%d"); - LogMessageText.Format(KFail,iState); - TheClient->LogMessage(LogMessageText); -#endif - if (iState!=KStateFailed) - { - TInt oldState=iState; - iState=KStateFailed; - if (iTest->TestFailed(oldState)) - ResetTest(); - } - } - -void CGrabWindow::FinishedTests() - { - iState=KGrabStateFinished; - } - -void CGrabWindow::WinKeyL(const TKeyEvent &aKey,const TTime &) - { -#if defined(LOGGING) - _LIT(KKey,"CGrabWindow::WinKeyL(Code=%d, ScanCode=%d) State=%d"); - LogMessageText.Format(KKey,aKey.iCode,aKey.iScanCode,iState); - TheClient->LogMessage(LogMessageText); -#endif - if (aKey.iCode==EKeyEscape) - FinishedTests(); // Simply skip this test if the Escape key is pressed - } - -void CGrabWindow::SendEvent() - { - switch (iState) - { - case KGrabStateWaitingForDown: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/3,iTl.iY+iSize.iHeight/3); - break; - case KGrabStateWaitingForDragOut: - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/6,iTl.iY+iSize.iHeight/6); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+1,iTl.iY+1); - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX-10,iTl.iY-10); - break; - case KGrabStateWaitingForUp: - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX-8,iTl.iY-8); - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX-5,iTl.iY-5); - break; - case KGrabStateWaitingForDown2: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+2*iSize.iWidth/3,iTl.iY+iSize.iHeight/3); - break; - /*case KGrabStateWaitingForUp2a: //Don't need to do anything for these cases - break; - case KGrabStateWaitingForDrag2: - break;*/ - case KGrabStateWaitingForUp2b: - iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+2*iSize.iWidth/3-3,iTl.iY+iSize.iHeight/3+3); - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+2*iSize.iWidth/3,iTl.iY+iSize.iHeight/3); - break; - case KGrabStateWaitingForDown3: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+2*iSize.iWidth/3,2*iTl.iY+iSize.iHeight/3); - break; - case KGrabStateWaitingForUp3a: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+2*iSize.iWidth/3,2*iTl.iY+iSize.iHeight/3); - break; - case KGrabStateWaitingForUp3b: - break; - case KGrabStateWaitingForDown4: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+2*iSize.iWidth/5,iTl.iY+iSize.iHeight/3); - break; - case KGrabStateWaitingForUp4: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+2*iSize.iWidth/5,iTl.iY+iSize.iHeight/3); - break; - case KGrabStateWaitingForDown5: - iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/3,2*iTl.iY+iSize.iHeight/3); - break; - case KGrabStateWaitingForUp5: - iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/3,2*iTl.iY+iSize.iHeight/3); - break; - //case KGrabStateWaitingForDrag5: //Don't need to do anything for these cases - // break; - /*case KStateFailed: - break; - case KGrabStateFinished: - break;*/ - default:; - } - TheClient->iWs.Flush(); - } - - -// -// CGrabWindow2, used as part of grab tests // -// - -CGrabWindow2::CGrabWindow2(CGrabWindow *aWindow) : iGrabWindow(aWindow) - { - } - -void CGrabWindow2::Draw() - { - iGc->SetBrushStyle(CGraphicsContext::ESolidBrush); - iGc->SetBrushColor(TRgb::Gray4(2)); - iGc->DrawRect(Size()); - } - -void CGrabWindow2::PointerL(const TPointerEvent &aPointer,const TTime&) - { -#if defined(LOGGING) - _LIT(KPointer,"CGrabWindow2::PointerL(Type=%d, Pos=(%d,%d), ParPos=(%d,%d), Mod=0x%x)"); - LogMessageText.Format(KPointer,aPointer.iType,aPointer.iPosition.iX,aPointer.iPosition.iY,aPointer.iParentPosition.iX,aPointer.iParentPosition.iY,aPointer.iModifiers); - TheClient->LogMessage(LogMessageText); -#endif - iGrabWindow->Pointer2(aPointer); - } - -// -// CTPointTest // -// - -CTPointer::CTPointer(CTestStep* aStep) : CTWsGraphicsBase(aStep) - { - iState = 0; - } - - -CTPointer::~CTPointer() - { - HAL::Set(HALData::EPenDisplayOn,iOldPointerState); - delete iRepeatWin; - delete iGrabWin; - delete iGrabWin2; - Client()->ResetFocus(); - delete iTimeOut; - } - -void CTPointer::ConstructL() - { - iTimeOut=new(ELeave) CTimeOut(); - iTimeOut->ConstructL(); - iTimeOut->Start(KTimeOutAfter,TCallBack(CTPointer::TimeOut,this)); - - TheClient->iWs.SetPointerCursorArea(iTest->iNormalPointerCursorArea); - iRepeatWin=new(ELeave) CPointerWindow(this); - TSize screenSize(Client()->iScreen->SizeInPixels()); - if (TestBase()->ConfigurationSupportsPointerEventTesting()) - { - iRepeatWin->SetUpLD(TPoint(screenSize.iWidth/8,screenSize.iHeight/8),TSize(screenSize.iWidth*3/4,screenSize.iHeight*3/4),Client()->iGroup,*Client()->iGc); - } - Client()->iGroup->SetCurrentWindow(iRepeatWin); - iNoDigitiser=EFalse; - TInt err=HAL::Get(HALData::EPenDisplayOn,iOldPointerState); - if (err==KErrNotSupported) - iNoDigitiser=ETrue; - else if (err==KErrNone) - err=HAL::Set(HALData::EPenDisplayOn,ETrue); - if (err==KErrNotSupported) - iNoDigitiser=(!iOldPointerState); - else - { - TEST(err==KErrNone); - if (err!=KErrNone) - INFO_PRINTF3(_L("HAL::Set(HALData::EPenDisplayOn,ETrue) return value - Expected: %d, Actual: %d"), KErrNone, err); - } - - } - -TInt CTPointer::TimeOut(TAny* aTest) //static - { - static_cast(aTest)->TimeOut(); - return(KErrNone); - } - -void CTPointer::TimeOut() - { - TLogMessageText buf; - _LIT(KPointerTimeOut,"TIMEOUT: Pointer Test, %d, %S"); - buf.AppendFormat(KPointerTimeOut,iState,&(iTest->iSubTitle)); - TheClient->LogMessage(buf); - ++iTimeOutCount; - if (!TestFailed(-1) && iState<2) - { - iTimeOut->Start(KTimeOutAfter,TCallBack(CTPointer::TimeOut,this)); - } - } - -TBool CTPointer::TestFailed(TInt aCase,TBool aRetry/*=EFalse*/) - { - _LIT(KPointerTest,": Pointer Test, %d, %S, Case %d"); - _LIT(KRetry,"Retry"); - _LIT(KFail,"FAIL"); - TLogMessageText buf; - TInt ret=0; - if (aRetry) - buf.Append(KRetry); - else - { - ret=1; - buf.Append(KFail); - } - buf.AppendFormat(KPointerTest,iState,&(iTest->iSubTitle),aCase); - TheClient->LogMessage(buf); -#if !defined(DISABLE_FAIL_DIALOG) - if (!aRetry) - { - __DEBUGGER(); - TRAPD(err,ret=doTestFailedL()); - } -#endif - switch(ret) - { - case 0: - return(ETrue); // Re-try test - case 1: - break; - } - return(EFalse); - } - -TInt CTPointer::doTestFailedL() - { - //_LIT(Failed,"Pointer repeat test failed"); - _LIT(Retest,"Retest"); - _LIT(Fail,"Fail"); - CTDialog *dialog=new(ELeave) CTDialog(); - dialog->SetNumButtons(2); - dialog->SetButtonText(0,Retest); - dialog->SetButtonText(1,Fail); - dialog->ConstructLD(*Client()->iGroup,*Client()->iGc); - dialog->SetTitle(_L("Pointer repeat test failed")); - dialog->SetFlags(CTDialog::EDialogWaitForButtonUp); - return dialog->Display(); - } - -CGrabWindow2 *CTPointer::GrabWin2() const - { - return(iGrabWin2); - } - -void CTPointer::StartGrabTestL() - { - iGrabWin=new(ELeave) CGrabWindow(this); - iGrabWin2=new(ELeave) CGrabWindow2(iGrabWin); -// - TSize screenSize(Client()->iScreen->SizeInPixels()); - iGrabWin2->SetUpL(TPoint(screenSize.iWidth/8,screenSize.iHeight/8),TSize(screenSize.iWidth*3/4,screenSize.iHeight*3/4),Client()->iGroup,*Client()->iGc); - Client()->iGroup->SetCurrentWindow(iGrabWin2); -// - iGrabWin->SetUpLD(TPoint(screenSize.iWidth/4,screenSize.iHeight/4),TSize(screenSize.iWidth/2,screenSize.iHeight/2),Client()->iGroup,*Client()->iGc); - Client()->iGroup->SetCurrentWindow(iGrabWin); -// - } - - -void CTPointer::RunTestCaseL(TInt /*aCurTestCase*/) - { - _LIT(Repeat,"Repeat tests"); - _LIT(Grab,"Grab tests"); - - iTest->iState=iState; - - if (!TestBase()->ConfigurationSupportsPointerEventTesting()) - { - INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing")); - TestComplete(); - return; - } - - ((CTPointerStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); - switch(iState) - { - case 0: - ((CTPointerStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); - iTest->LogSubTest(Repeat); - iState++; - break; -/** - - @SYMTestCaseID GRAPHICS-WSERV-0310 - - @SYMDEF DEF081259 - - @SYMTestCaseDesc Test pointer event handling - - @SYMTestPriority High - - @SYMTestStatus Implemented - - @SYMTestActions Simulate pointer events and check the events are then handled correctly - - @SYMTestExpectedResults Pointer events are handled correctly - -*/ - case 1: - ((CTPointerStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0310")); - iTest->LogSubTest(Grab); - - StartGrabTestL(); - iState++; - break; - default: - ((CTPointerStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); - ((CTPointerStep*)iStep)->CloseTMSGraphicsStep(); - iTimeOut->Cancel(); - if (iTimeOutCount>0) TEST(EFalse); - if (iTest->IsFullRomL()) User::After(5000000); - TestComplete(); - } - ((CTPointerStep*)iStep)->RecordTestResultL(); - } - - -__WS_CONSTRUCT_STEP__(Pointer)