sl@0: // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Test pointer capture sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: @internalComponent - Internal Symbian test code sl@0: */ sl@0: sl@0: #include "TPNTCAP.H" sl@0: sl@0: #define LOGGING on sl@0: sl@0: _LIT(ClickOnMe,"Click on me"); sl@0: sl@0: // sl@0: // CMcConnection sl@0: sl@0: CPcConnection::CPcConnection(CTPointerCapture *aTest) : iTest(aTest) sl@0: { sl@0: } sl@0: sl@0: CPcConnection::~CPcConnection() sl@0: { sl@0: } sl@0: sl@0: void CPcConnection::ConstructL() sl@0: { sl@0: CTClient::SetScreenNumber(iTest->TestBase()->ScreenNumber()); sl@0: CTClient::ConstructL(); sl@0: iGroup=new(ELeave) CTWindowGroup(this); sl@0: iGroup->ConstructL(); sl@0: iGroup->GroupWin()->SetOrdinalPosition(0,1); sl@0: iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); sl@0: iWs.Flush(); sl@0: } sl@0: sl@0: // sl@0: // CPcWindow, base class // sl@0: // sl@0: sl@0: CPcWindowBase::CPcWindowBase(CTPointerCapture *aTest) : CTWin(), iTest(aTest) sl@0: { sl@0: } sl@0: sl@0: void CPcWindowBase::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) sl@0: { sl@0: ConstructExtLD(*parent,pos,size); sl@0: iWin.SetBackgroundColor(iBack); sl@0: Activate(); sl@0: AssignGC(aGc); sl@0: } sl@0: sl@0: void CPcWindowBase::SetUpL(TPoint pos,TSize size,CTWinBase *parent) sl@0: { sl@0: SetUpL(pos,size,parent,*iTest->Client()->iGc); sl@0: } sl@0: sl@0: void CPcWindowBase::SubStateChanged() sl@0: { sl@0: iWin.Invalidate(); sl@0: Client()->iWs.Flush(); sl@0: } sl@0: sl@0: void CPcWindowBase::Draw(TDesC &aBuf) sl@0: { sl@0: iGc->Clear(); sl@0: iGc->SetPenColor(iBack.Gray4()>1 ? TRgb(0,0,0) : TRgb(255,255,255)); sl@0: iGc->DrawText(aBuf, TPoint(10,20)); sl@0: } sl@0: sl@0: void CPcWindowBase::PointerL(const TPointerEvent &pointer,const TTime &) sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"Pointer Event Recieved Type=%S State=%d SubState=%d"); sl@0: _LIT(KDown,"Down"); sl@0: _LIT(KUp,"Up"); sl@0: iTest->LOG_MESSAGE4(KLog1,&(pointer.iType?KUp():KDown()),iTest->State(),iTest->SubState()); sl@0: #endif sl@0: if (pointer.iType==TPointerEvent::EButton1Down && !iTest->iFailed) sl@0: { sl@0: if (iTest->SubState()==ERootWindow) // Root window click, must not be inside this window sl@0: { sl@0: if (TRect(Size()).Contains(pointer.iPosition)) sl@0: { sl@0: iTest->TestFailed(); sl@0: return; sl@0: } sl@0: } sl@0: TInt ret; sl@0: if ((ret=PointerDown())==EFailed) sl@0: iTest->TestFailed(); sl@0: else sl@0: iTest->IncSubStateL(ret==ENeedsDDEvent); sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"End of processing Pointer Event"); sl@0: iTest->LOG_MESSAGE(KLog2); sl@0: #endif sl@0: } sl@0: sl@0: void CPcWindowBase::DragDropL(const TPointerEvent &pointer,const TTime &) sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog,"CPcWindowBase::DragDropL Type=%d State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE4(KLog,pointer.iType,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case ENormalCaptureWithoutFocus: sl@0: if (iTest->SubState()==0) sl@0: break; sl@0: case ECaptureDisabled: sl@0: case ENormalCapture: sl@0: case ECaptureAllGroups: sl@0: iTest->TestFailed(); sl@0: break; sl@0: } sl@0: if (pointer.iType==TPointerEvent::EButton1Down && !iTest->iFailed) sl@0: { sl@0: if (DragDrop()==EFailed) sl@0: iTest->TestFailed(); sl@0: else sl@0: iTest->GotDDL(); sl@0: } sl@0: } sl@0: // sl@0: sl@0: CPcWindowMain::CPcWindowMain(CTPointerCapture *aTest) : CPcWindowBase(aTest) sl@0: { sl@0: iBack=TRgb::Gray256(236); sl@0: } sl@0: sl@0: TPointerCheckRet CPcWindowMain::PointerDown() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"CPcWindowMain::PointerDown State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case ECaptureDisabled: sl@0: if (iTest->SubState()==EMainWindow) sl@0: return(EOkay); sl@0: break; sl@0: case ENormalCapture: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: case ERootWindow: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: case ECaptureAllGroups: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: case EOtherGroup: sl@0: case EOtherSession: sl@0: case ERootWindow: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: case EDragDropCapture: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: return(ENeedsDDEvent); sl@0: case ERootWindow: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: case EDragDropCaptureAllGroups: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: case EOtherGroup: sl@0: case EOtherSession: sl@0: return(ENeedsDDEvent); sl@0: case ERootWindow: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: case ENormalCaptureWithoutFocus: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"CPcWindowMain::PointerDown FAILED State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: return(EFailed); sl@0: } sl@0: sl@0: TPointerCheckRet CPcWindowMain::DragDrop() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"CPcWindowMain::DragDrop State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case EDragDropCapture: sl@0: case EDragDropCaptureAllGroups: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"CPcWindowMain::DragDrop FAILED State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: return(EFailed); sl@0: } sl@0: sl@0: void CPcWindowMain::Draw() sl@0: { sl@0: TBuf<0x40> buf; sl@0: if (iTest->State()==ECaptureDisabled) sl@0: { sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: buf.Copy(ClickOnMe); sl@0: break; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: buf.Copy(ClickOnMe); sl@0: break; sl@0: case EChildWindow: sl@0: case EOtherGroup: sl@0: case EOtherSession: sl@0: break; sl@0: case ERootWindow: sl@0: { sl@0: _LIT(ClickOnRoot,"Click on the root window"); sl@0: if (iTest->State()"); sl@0: buf.Copy(ClickOnRoot); sl@0: buf.Append(AndEscape); sl@0: } sl@0: } sl@0: break; sl@0: } sl@0: } sl@0: CPcWindowBase::Draw(buf); sl@0: } sl@0: sl@0: void CPcWindowMain::WinKeyL(const TKeyEvent &aKey,const TTime &) sl@0: { sl@0: switch(aKey.iCode) sl@0: { sl@0: case EKeyEscape: sl@0: iTest->AbortTests(); sl@0: break; sl@0: case EKeyEnter: sl@0: if (iTest->SubState()==ERootWindow) sl@0: iTest->IncSubStateL(EFalse); sl@0: break; sl@0: } sl@0: } sl@0: sl@0: // sl@0: sl@0: CPcWindowChild::CPcWindowChild(CTPointerCapture *aTest) : CPcWindowBase(aTest) sl@0: { sl@0: iBack=TRgb::Gray256(85); sl@0: } sl@0: sl@0: TPointerCheckRet CPcWindowChild::PointerDown() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"CPcWindowChild::PointerDown State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case ECaptureDisabled: sl@0: break; sl@0: default: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EChildWindow: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"CPcWindowChild::PointerDown FAILED State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: return(EFailed); sl@0: } sl@0: sl@0: TPointerCheckRet CPcWindowChild::DragDrop() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"CPcWindowChild::PointerDown State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case EDragDropCapture: sl@0: case EDragDropCaptureAllGroups: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EChildWindow: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"CPcWindowChild::PointerDown FAILED State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: return(EFailed); sl@0: } sl@0: sl@0: void CPcWindowChild::Draw() sl@0: { sl@0: TBuf<0x40> buf; sl@0: if (iTest->State()!=ECaptureDisabled) sl@0: { sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EChildWindow: sl@0: buf.Copy(ClickOnMe); sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: } sl@0: CPcWindowBase::Draw(buf); sl@0: } sl@0: sl@0: // sl@0: sl@0: CPcWindowNickFocusGroup::CPcWindowNickFocusGroup(CTPointerCapture *aTest, CTClient *aClient) : CTWindowGroup(aClient), iTest(aTest) sl@0: { sl@0: } sl@0: sl@0: void CPcWindowNickFocusGroup::KeyL(const TKeyEvent &aKey,const TTime &) sl@0: { sl@0: if (aKey.iCode==EKeyEscape) sl@0: iTest->IncSubStateL(EFalse); sl@0: } sl@0: sl@0: // sl@0: sl@0: CPcWindowAltGroup::CPcWindowAltGroup(CTPointerCapture *aTest) : CPcWindowBase(aTest) sl@0: { sl@0: iBack=TRgb::Gray256(236); sl@0: } sl@0: sl@0: TPointerCheckRet CPcWindowAltGroup::PointerDown() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"CPcWindowAltGroup::PointerDown State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case ECaptureDisabled: sl@0: if (iTest->SubState()==EChildWindow) sl@0: return(EOkay); sl@0: break; sl@0: case ENormalCapture: sl@0: case EDragDropCapture: sl@0: case ENormalCaptureWithoutFocus: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EOtherGroup: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"CPcWindowAltGroup::PointerDown FAILED State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: return(EFailed); sl@0: } sl@0: sl@0: TPointerCheckRet CPcWindowAltGroup::DragDrop() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"CPcWindowAltGroup::DragDrop State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case EDragDropCapture: sl@0: case EDragDropCaptureAllGroups: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EOtherGroup: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"CPcWindowAltGroup::DragDrop FAILED State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: return(EFailed); sl@0: } sl@0: sl@0: void CPcWindowAltGroup::Draw() sl@0: { sl@0: TBuf<0x40> buf; sl@0: if (iTest->State()==ECaptureDisabled) sl@0: { sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EMainWindow: sl@0: break; sl@0: case EChildWindow: sl@0: buf.Copy(ClickOnMe); sl@0: break; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EOtherGroup: sl@0: buf.Copy(ClickOnMe); sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: } sl@0: CPcWindowBase::Draw(buf); sl@0: } sl@0: sl@0: // sl@0: sl@0: CPcWindowAltConnection::CPcWindowAltConnection(CTPointerCapture *aTest) : CPcWindowBase(aTest) sl@0: { sl@0: iBack=TRgb::Gray256(236); sl@0: } sl@0: sl@0: TPointerCheckRet CPcWindowAltConnection::PointerDown() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"CPcWindowAltConnection::PointerDown State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case ECaptureDisabled: sl@0: if (iTest->SubState()==EChildWindow) sl@0: return(EOkay); sl@0: break; sl@0: case ENormalCapture: sl@0: case EDragDropCapture: sl@0: case ENormalCaptureWithoutFocus: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EOtherSession: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"CPcWindowAltConnection::PointerDown FAILED State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: return(EFailed); sl@0: } sl@0: sl@0: TPointerCheckRet CPcWindowAltConnection::DragDrop() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog1,"CPcWindowAltConnection::DragDrop State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog1,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: switch(iTest->State()) sl@0: { sl@0: case EDragDropCapture: sl@0: case EDragDropCaptureAllGroups: sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EOtherSession: sl@0: return(EOkay); sl@0: default: sl@0: break; sl@0: } sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: #if defined(LOGGING) sl@0: _LIT(KLog2,"CPcWindowAltConnection::DragDrop FAILED State=%d SubState=%d"); sl@0: iTest->LOG_MESSAGE3(KLog2,iTest->State(),iTest->SubState()); sl@0: #endif sl@0: return(EFailed); sl@0: } sl@0: sl@0: void CPcWindowAltConnection::Draw() sl@0: { sl@0: TBuf<0x40> buf; sl@0: if (iTest->State()!=ECaptureDisabled) sl@0: { sl@0: switch(iTest->SubState()) sl@0: { sl@0: case EOtherSession: sl@0: buf.Copy(ClickOnMe); sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: } sl@0: CPcWindowBase::Draw(buf); sl@0: } sl@0: sl@0: // sl@0: sl@0: CTPointerCapture::CTPointerCapture(CTestStep* aStep) : CTWsGraphicsBase(aStep) sl@0: { sl@0: iSubState=0; sl@0: iFailed=EFalse; sl@0: } sl@0: sl@0: CTPointerCapture::~CTPointerCapture() sl@0: { sl@0: delete iNickFocusBlankWin; sl@0: delete iNickFocusGroup; sl@0: delete iAltConnectionWin; sl@0: delete iAltConnection; sl@0: delete iChildWin; sl@0: delete iMainWin; sl@0: delete iMainGroup; sl@0: delete iAltGroupWin; sl@0: delete iAltGroup; sl@0: } sl@0: sl@0: void CTPointerCapture::TestFailed() sl@0: { sl@0: if (iFailed) sl@0: { sl@0: _LIT(KLog,"Test Failed State=%d SubState=%d"); sl@0: LOG_MESSAGE3(KLog,iTest->iState,iSubState); sl@0: } sl@0: __ASSERT_DEBUG(iFailed==EFalse,AutoPanic(ETManPanicPcFailed)); sl@0: TInt dRet=1; sl@0: #if !defined(DISABLE_FAIL_DIALOG) sl@0: Client()->iGroup->GroupWin()->SetOrdinalPosition(0,10); // Put error dialog on top of test windows sl@0: TRAPD(err,dRet=doTestFailedL()); sl@0: Client()->iGroup->GroupWin()->SetOrdinalPosition(0,0); sl@0: #endif sl@0: switch(dRet) sl@0: { sl@0: case 0: sl@0: break; sl@0: case 1: sl@0: iFailed=ETrue; sl@0: NextTest(); sl@0: break; sl@0: } sl@0: } sl@0: sl@0: TInt CTPointerCapture::doTestFailedL() sl@0: { sl@0: CTDialog *dialog=new(ELeave) CTDialog(); sl@0: dialog->SetTitle(_L("Pointer capture test failed")); sl@0: dialog->SetNumButtons(2); sl@0: dialog->SetButtonText(0,_L("Retest")); sl@0: dialog->SetButtonText(1,_L("Fail")); sl@0: dialog->ConstructLD(*Client()->iGroup,*Client()->iGc); sl@0: return dialog->Display(); sl@0: } sl@0: sl@0: TInt CTPointerCapture::State() const sl@0: { sl@0: return(iTest->iState); sl@0: } sl@0: sl@0: TInt CTPointerCapture::SubState() const sl@0: { sl@0: return(iSubState); sl@0: } sl@0: sl@0: void CTPointerCapture::doIncSubStateL() sl@0: { sl@0: iSubState++; sl@0: TInt max=0; sl@0: switch(iTest->iState) sl@0: { sl@0: case ECaptureDisabled: sl@0: max=ESubStates1; sl@0: break; sl@0: case ENormalCapture: sl@0: max=ESubStates2; sl@0: break; sl@0: case ECaptureAllGroups: sl@0: max=ESubStates3; sl@0: break; sl@0: case EDragDropCapture: sl@0: max=ESubStates4; sl@0: break; sl@0: case EDragDropCaptureAllGroups: sl@0: max=ESubStates5; sl@0: break; sl@0: case ENormalCaptureWithoutFocus: sl@0: max=ESubStates6; sl@0: break; sl@0: } sl@0: //SubState 4 has been broken by something in the framework sl@0: if (iSubState==max || iSubState==4) sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog,"IncState OldState=%d SubState=%d"); sl@0: LOG_MESSAGE3(KLog,iTest->iState,iSubState); sl@0: #endif sl@0: NextTest(); sl@0: } sl@0: StateChanged(); sl@0: TheClient->WaitForRedrawsToFinish(); sl@0: if (iSubState>0) sl@0: SendEventsL(); sl@0: } sl@0: sl@0: void CTPointerCapture::GotDDL() sl@0: { sl@0: if (iDDState==DDStateWaiting) sl@0: doIncSubStateL(); sl@0: else sl@0: iDDState=DDStateGot; sl@0: } sl@0: sl@0: void CTPointerCapture::IncSubStateL(TBool aNeedsDD) sl@0: { sl@0: if (!aNeedsDD) sl@0: { sl@0: if (iDDState!=DDStateNull) sl@0: TestFailed(); sl@0: else sl@0: doIncSubStateL(); sl@0: } sl@0: else if (iDDState==DDStateGot) sl@0: doIncSubStateL(); sl@0: else sl@0: iDDState=DDStateWaiting; sl@0: } sl@0: sl@0: void CTPointerCapture::StateChanged() sl@0: { sl@0: iDDState=DDStateNull; sl@0: iChildWin->SubStateChanged(); sl@0: iMainWin->SubStateChanged(); sl@0: iAltGroupWin->SubStateChanged(); sl@0: iAltConnectionWin->SubStateChanged(); sl@0: } sl@0: sl@0: void CTPointerCapture::AbortTests() sl@0: { sl@0: iTest->iState=99; sl@0: } sl@0: sl@0: void CTPointerCapture::NextTest() sl@0: { sl@0: TEST(!iFailed); sl@0: if (iFailed) sl@0: { sl@0: _LIT(KLog,"SubTest %d failed"); sl@0: LOG_MESSAGE2(KLog,iTest->iState); sl@0: } sl@0: ++iTest->iState; sl@0: iSubState=0; sl@0: iFailed=EFalse; sl@0: CaseComplete(); sl@0: _LIT(KLog,"Done NextTest NewSubTest %d"); sl@0: LOG_MESSAGE2(KLog,iTest->iState); sl@0: } sl@0: sl@0: void CTPointerCapture::ConstructL() sl@0: { sl@0: TheClient->iWs.SetPointerCursorArea(iTest->iNormalPointerCursorArea); sl@0: iScreenSize=TSize(TheClient->iScreen->SizeInPixels()); sl@0: TInt winWidth2=iScreenSize.iWidth/2-EWinBorderSize*2; sl@0: TInt winWidth4=iScreenSize.iWidth/4-EWinBorderSize*2; sl@0: TInt winHeight=iScreenSize.iHeight/2-EWinBorderSize*2; sl@0: // sl@0: iMainGroup=new(ELeave) CTWindowGroup(Client()); sl@0: iMainGroup->ConstructL(); sl@0: iMainGroup->GroupWin()->SetOrdinalPosition(0,1); sl@0: iMainWin=new(ELeave) CPcWindowMain(this); sl@0: iMainWin->SetUpL(TPoint(EWinBorderSize,EWinBorderSize) ,TSize(winWidth2,winHeight) ,iMainGroup); sl@0: iMainGroup->SetCurrentWindow(iMainWin); sl@0: iChildWin=new(ELeave) CPcWindowChild(this); sl@0: iChildWin->SetUpL(TPoint(0,winHeight/2) ,TSize(winWidth2,winHeight/2) ,iMainWin); sl@0: // sl@0: iAltGroup=new(ELeave) CTWindowGroup(Client()); sl@0: iAltGroup->ConstructL(); sl@0: iAltGroup->GroupWin()->SetOrdinalPosition(0,1); sl@0: iAltGroup->GroupWin()->EnableReceiptOfFocus(EFalse); sl@0: iAltGroupWin=new(ELeave) CPcWindowAltGroup(this); sl@0: iAltGroupWin->SetUpL(TPoint(iScreenSize.iWidth/2+EWinBorderSize,EWinBorderSize) ,TSize(winWidth4,winHeight) ,iAltGroup); sl@0: // sl@0: iAltConnection=new(ELeave) CPcConnection(this); sl@0: iAltConnection->ConstructL(); sl@0: iAltConnectionWin=new(ELeave) CPcWindowAltConnection(this); sl@0: iAltConnectionWin->SetUpL(TPoint(iScreenSize.iWidth/4*3+EWinBorderSize,EWinBorderSize) ,TSize(winWidth4,winHeight),iAltConnection->iGroup,*iAltConnection->iGc); sl@0: iTest->DelayIfFullRomL(); sl@0: SetSelfDrive(ETrue); sl@0: } sl@0: sl@0: void CTPointerCapture::NickFocusL() sl@0: { sl@0: iNickFocusGroup=new(ELeave) CPcWindowNickFocusGroup(this,Client()); sl@0: iNickFocusGroup->ConstructL(); sl@0: iNickFocusGroup->GroupWin()->SetOrdinalPosition(0,2); sl@0: iNickFocusBlankWin=new(ELeave) CTBlankWindow(); sl@0: iNickFocusBlankWin->ConstructL(*iNickFocusGroup); sl@0: iNickFocusBlankWin->SetSize(TSize(1,1)); sl@0: iNickFocusBlankWin->Activate(); sl@0: } sl@0: sl@0: void CTPointerCapture::SetCapture(TInt aCaptureFlags) sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog,"Change Capture State=%d CaptureFlags=0x%x"); sl@0: LOG_MESSAGE3(KLog,iTest->iState,aCaptureFlags); sl@0: #endif sl@0: iMainWin->Win()->SetPointerCapture(aCaptureFlags); sl@0: } sl@0: sl@0: void CTPointerCapture::SendEventsL() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLog,"SendEvent State=%d SubState=%d"); sl@0: LOG_MESSAGE3(KLog,iTest->iState,iSubState); sl@0: #endif sl@0: switch (iSubState) sl@0: { sl@0: case 0: sl@0: iTest->SimulatePointerDownUp(iScreenSize.iWidth/4,iScreenSize.iHeight/8+EWinBorderSize/2); sl@0: break; sl@0: case 1: sl@0: if (iTest->iState>ECaptureDisabled) sl@0: { sl@0: iTest->SimulatePointerDownUp(iScreenSize.iWidth/4,3*iScreenSize.iHeight/8-EWinBorderSize/2); sl@0: break; sl@0: } sl@0: case 2: sl@0: iTest->SimulatePointerDownUp(5*iScreenSize.iWidth/8,iScreenSize.iHeight/4); sl@0: break; sl@0: case 3: sl@0: iTest->SimulatePointerDownUp(7*iScreenSize.iWidth/8,iScreenSize.iHeight/4); sl@0: break; sl@0: case 4: sl@0: if (iTest->IsFullRomL()) sl@0: iTest->SimulateKeyDownUp(EStdKeyEnter); sl@0: else sl@0: iTest->SimulatePointerDownUp(0,0); sl@0: if (iTest->iState==ENormalCaptureWithoutFocus) sl@0: { sl@0: iTest->SimulateKeyDownUp(EStdKeyEscape); sl@0: break; sl@0: } sl@0: break; sl@0: default: sl@0: TEST(EFalse); sl@0: } sl@0: TheClient->iWs.Flush(); sl@0: } sl@0: sl@0: void CTPointerCapture::RunTestCaseL(TInt /*aCurTestCase*/) sl@0: { sl@0: _LIT(TestNoCapture,"No capture"); sl@0: _LIT(TestNormalCapture,"Normal capture"); sl@0: _LIT(TestAllGroups,"All groups"); sl@0: _LIT(TestDragDrop,"Drag & Drop"); sl@0: _LIT(TestDragDropAllGroups,"Drag & Drop All groups"); sl@0: _LIT(TestWithoutFocus,"Without focus"); sl@0: StateChanged(); sl@0: sl@0: if (!TestBase()->ConfigurationSupportsPointerEventTesting()) sl@0: { sl@0: INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing")); sl@0: TestComplete(); sl@0: return; sl@0: } sl@0: sl@0: ((CTPointerCaptureStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); sl@0: switch(iTest->iState) sl@0: { sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0290 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test pointer capture can be disabled sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Disable the pointer capture to the screen and simulate sl@0: capture with the pointer sl@0: sl@0: @SYMTestExpectedResults The pointer capture has been disabled sl@0: sl@0: */ sl@0: case ECaptureDisabled: sl@0: ((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0290")); sl@0: if (TheClient->iScreen->GetScreenNumber()>0) sl@0: { sl@0: _LIT(KLog,"Cannot run this test on the 2nd screen - all pointer events goto the 1st screen"); sl@0: LOG_MESSAGE(KLog); sl@0: TestComplete(); sl@0: } sl@0: iTest->LogSubTest(TestNoCapture); sl@0: SetCapture(RWindowBase::TCaptureDisabled); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0291 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test pointer capture can be enabled sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Enable the pointer capture to the screen and simulate sl@0: capture with the pointer sl@0: sl@0: @SYMTestExpectedResults The pointer capture has been enabled and works sl@0: correctly sl@0: sl@0: */ sl@0: case ENormalCapture: sl@0: ((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0291")); sl@0: iTest->LogSubTest(TestNormalCapture); sl@0: SetCapture(RWindowBase::TCaptureEnabled); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0292 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test pointer capture can be enabled for sl@0: windows belonging to any group sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Enable the pointer capture to all windows and simulate sl@0: capture with the pointer sl@0: sl@0: @SYMTestExpectedResults The pointer capture has been enabled and works sl@0: correctly sl@0: sl@0: */ sl@0: case ECaptureAllGroups: sl@0: ((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0292")); sl@0: iTest->LogSubTest(TestAllGroups); sl@0: SetCapture(RWindowBase::TCaptureEnabled|RWindowBase::TCaptureFlagAllGroups); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0293 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test drag and drop pointer capture can be enabled for sl@0: windows belonging to any group sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Enable drag and drop pointer capture to all windows and simulate sl@0: capture with the pointer sl@0: sl@0: @SYMTestExpectedResults The pointer capture has been enabled and works sl@0: correctly sl@0: sl@0: */ sl@0: case EDragDropCapture: sl@0: ((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0293")); sl@0: iTest->LogSubTest(TestDragDrop); sl@0: SetCapture(RWindowBase::TCaptureDragDrop&~RWindowBase::TCaptureFlagAllGroups); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0294 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test drag and drop pointer capture can be enabled sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Enable drag and drop pointer capture and simulate sl@0: capture with the pointer sl@0: sl@0: @SYMTestExpectedResults The pointer capture has been enabled and works sl@0: correctly sl@0: sl@0: */ sl@0: case EDragDropCaptureAllGroups: sl@0: ((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0294")); sl@0: iTest->LogSubTest(TestDragDropAllGroups); sl@0: SetCapture(RWindowBase::TCaptureDragDrop); sl@0: break; sl@0: /** sl@0: sl@0: @SYMTestCaseID GRAPHICS-WSERV-0295 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test pointer capture can be enabled sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Enable the pointer capture to the screen and simulate capture sl@0: with the pointer when the screen does not have the focus sl@0: sl@0: @SYMTestExpectedResults The pointer capture has been enabled and works sl@0: correctly sl@0: sl@0: */ sl@0: case ENormalCaptureWithoutFocus: sl@0: ((CTPointerCaptureStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0295")); sl@0: iTest->LogSubTest(TestWithoutFocus); sl@0: NickFocusL(); sl@0: SetCapture(RWindowBase::TCaptureEnabled); sl@0: break; sl@0: default: sl@0: ((CTPointerCaptureStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); sl@0: ((CTPointerCaptureStep*)iStep)->CloseTMSGraphicsStep(); sl@0: TestComplete(); sl@0: return; sl@0: } sl@0: ((CTPointerCaptureStep*)iStep)->RecordTestResultL(); sl@0: SendEventsL(); sl@0: } sl@0: sl@0: __WS_CONSTRUCT_STEP__(PointerCapture)