diff -r bf7481649c98 -r 2717213c588a windowing/windowserver/test/tauto/TMULTCON.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tauto/TMULTCON.CPP Tue Jun 22 15:21:29 2010 +0300 @@ -0,0 +1,478 @@ +// 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 multiple connections to the window server +// +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + +#include "TMULTCON.H" + +const TInt EMaxSubState=3; + +//#define LOGGING on //Uncomment this line to get extra logging + +_LIT(ClickOnMe,"Click on me"); +_LIT(KError,"ERROR"); + + +CTMultiCon::CTMultiCon(CTestStep* aStep) : CTWsGraphicsBase(aStep) + { + } + +CTMultiCon::~CTMultiCon() + { + delete iConn1; + delete iConn2; + delete iConn3; + delete iTimeOut; + } + +void CTMultiCon::EndAutoForegroundTest() + { +#if defined(LOGGING) + _LIT(KLog,"EndAutoForegroundTest SubState %d"); + LOG_MESSAGE2(KLog,iSubState); +#endif + iConn1->iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); + iConn2->iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); + iConn3->iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); + CActiveScheduler::Stop(); + } + +void CTMultiCon::ConstructL() + { + iTimeOut=new(ELeave) CTimeOut(); + iTimeOut->ConstructL(); + TheClient->iWs.SetPointerCursorArea(iTest->iNormalPointerCursorArea); + iScreenSize=TSize(TheClient->iScreen->SizeInPixels()); + iConn3=new(ELeave) CMcConnectionDef(this); + iConn3->ConstructL(); + iConn2=new(ELeave) CMcConnection(this); + iConn2->ConstructL(); + iConn1=new(ELeave) CMcConnectionAf(this); + iConn1->ConstructL(); + iTest->SimulateKeyDownUp(EStdKeyLeftCtrl); + iTest->SimulateKeyDownUp(EStdKeyRightCtrl); + TInt mods=TheClient->iWs.GetModifierState(); + _LIT(KLog,"Initial Modifiers state 0x%x (ideally should be zero)"); + LOG_MESSAGE2(KLog,mods); + } + +TInt CTMultiCon::TimeOut(TAny* aTest) //static + { + static_cast(aTest)->TimeOut(); + return(KErrNone); + } + +void CTMultiCon::TimeOut() + { + TLogMessageText buf; + _LIT(KMultiConTimeOut,"TIMEOUT: Multiple Conection Test, %d, %S"); + buf.AppendFormat(KMultiConTimeOut,iTest->iState,&iTest->iSubTitle); + TheClient->LogMessage(buf); + ++iTimeOutCount; + EndAutoForegroundTest(); + } + + +// +// CMcConnection // +// + +CMcConnectionBase::CMcConnectionBase(CTMultiCon *aTest) : iTest(aTest) + { + } + +CMcConnectionBase::~CMcConnectionBase() + { + CTWin::Delete(iWin); + delete iGc; + } + +void CMcConnectionBase::SubStateChanged() + { + iWin->Invalidate(); + iWs.Flush(); + } + +void CMcConnectionBase::ConstructL() + { + CTClient::SetScreenNumber(iTest->ScreenNumber()); + CTClient::ConstructL(); + User::LeaveIfError(iScreen->CreateContext(iGc)); + } + +CMcConnection::CMcConnection(CTMultiCon *aTest) : CMcConnectionBase(aTest) + { + } + +void CMcConnection::ConstructL() + { + CMcConnectionBase::ConstructL(); + iGroup=new(ELeave) CTWindowGroup(this); + iGroup->ConstructL(); + TSize screenSize=iGroup->Size(); + TInt winWidth=screenSize.iWidth/3; + TInt winHeight=screenSize.iHeight/2-10; + iGroup->GroupWin()->AutoForeground(EFalse); + CMcWindow *win=new(ELeave) CMcWindow(iTest); + win->SetUpL(TPoint(5,5),TSize(winWidth,winHeight),iGroup,*iGc); + iWin=win; + iWs.Flush(); + } + +CMcConnectionAf::CMcConnectionAf(CTMultiCon *aTest) : CMcConnectionBase(aTest) + { + } + +void CMcConnectionAf::ConstructL() + { + CMcConnectionBase::ConstructL(); + iGroup=new(ELeave) CMcWindowGroupAf(this); + iGroup->ConstructL(); + TSize screenSize=iGroup->Size(); + TInt winWidth=screenSize.iWidth/3; + TInt winHeight=screenSize.iHeight/2-10; + iGroup->GroupWin()->AutoForeground(ETrue); + CMcWindowAf *win=new(ELeave) CMcWindowAf(iTest); + win->SetUpL(TPoint(winWidth,5),TSize(winWidth,winHeight),iGroup,*iGc); + iWin=win; + iWs.Flush(); + } + +void CMcConnectionAf::KeyL(const TKeyEvent &aKey) + { +#if defined(LOGGING) + _LIT(KLog1,"KeyL SS=%d (0) GpWinOrdPos=%d (0) Code=%d (32)"); + _LIT(KLog2," '%c'"); + TLogMessageText buf; + buf.Format(KLog1,iTest->SubState(),iGroup->GroupWin()->OrdinalPosition(),aKey.iCode); + if (aKey.iCode>0) + buf.AppendFormat(KLog2,aKey.iCode); + iTest->LOG_MESSAGE(buf); +#endif + switch(aKey.iCode) + { + case ' ': + if (iTest->SubState()==0) + { + iTest->TEST(iGroup->GroupWin()->OrdinalPosition()==0); + iTest->IncSubState(); + } + break; + case EKeyEscape: + iTest->EndAutoForegroundTest(); + break; + } + } + +CMcConnectionDef::CMcConnectionDef(CTMultiCon *aTest) : CMcConnectionBase(aTest) + { + } + +void CMcConnectionDef::ConstructL() + { + CMcConnectionBase::ConstructL(); + iGroup=new(ELeave) CTWindowGroup(this); + iGroup->ConstructL(); + iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); + TSize screenSize=iGroup->Size(); + TInt winWidth=screenSize.iWidth/3-10; + TInt winHeight=(screenSize.iHeight/2)-10; + CMcWindowDef *win=new(ELeave) CMcWindowDef(iTest); + win->SetUpL(TPoint(5+winWidth/2,screenSize.iHeight/2),TSize(winWidth,winHeight),iGroup,*iGc); + iWin=win; + iWs.Flush(); + } + +// +// CMcWindow, base class // +// + +CMcWindowBase::CMcWindowBase(CTMultiCon *aTest) : CTWin(), iTest(aTest) + { + } + +void CMcWindowBase::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) + { + ConstructExtLD(*parent,pos,size); + iWin.SetBackgroundColor(iBack); + Activate(); + AssignGC(aGc); + } + +// +// CMcWindow, window used to test multiple connections // +// + +CMcWindow::CMcWindow(CTMultiCon *aTest) : CMcWindowBase(aTest) + { + iBack=TRgb::Gray256(221); + } + +void CMcWindow::PointerL(const TPointerEvent &pointer,const TTime &) + { +#if defined(LOGGING) + _LIT(KLog,"Pointer SS=%d (1) Type=%d (%d) GpWinOrdPos=%d (1)"); + iTest->LOG_MESSAGE5(KLog,iTest->SubState(),pointer.iType,TPointerEvent::EButton1Down,Client()->iGroup->GroupWin()->OrdinalPosition()); +#endif + if (pointer.iType==TPointerEvent::EButton1Down) + { + switch(iTest->SubState()) + { + case 1: + iTest->TEST(Client()->iGroup->GroupWin()->OrdinalPosition()==1); + iTest->IncSubState(); + break; + } + } + } + +void CMcWindow::Draw() + { + iGc->Clear(); + TBuf<0x40> buf; + switch(iTest->SubState()) + { + case 1: + buf.Copy(ClickOnMe); + break; + case 0: + case 2: + case 3: + buf.Copy(KNullDesC); + break; + default: + buf.Copy(KError); + } + iGc->DrawText(buf, TPoint(10,20)); + } + +// +// CMcWindowAf, Auto foreground version of CMcWindow // +// + +CMcWindowAf::CMcWindowAf(CTMultiCon *aTest) : CMcWindowBase(aTest) + { + iBack=TRgb::Gray256(150); + } + +void CMcWindowAf::PointerL(const TPointerEvent &pointer,const TTime &) + { +#if defined(LOGGING) + _LIT(KLog,"PointerL SS=%d (2) Type=%d (%d) GpWinOrdPos=%d (0)"); + iTest->LOG_MESSAGE5(KLog,iTest->SubState(),pointer.iType,TPointerEvent::EButton1Down,Client()->iGroup->GroupWin()->OrdinalPosition()); +#endif + if (pointer.iType==TPointerEvent::EButton1Down) + { + switch(iTest->SubState()) + { + case 2: + iTest->TEST(Client()->iGroup->GroupWin()->OrdinalPosition()==0); + iTest->IncSubState(); + break; + } + } + } + +void CMcWindowAf::Draw() + { + _LIT(PressSpace,"Press "); + iGc->Clear(); + TBuf<0x40> buf; + switch(iTest->SubState()) + { + case 1: + case 3: + break; + case 0: + buf.Copy(PressSpace); + break; + case 2: + buf.Copy(ClickOnMe); + break; + default: + buf.Copy(KError); + } + iGc->DrawText(buf, TPoint(10,20)); + } + +// + +CMcWindowGroupAf::CMcWindowGroupAf(CTClient *aClient) : CTWindowGroup(aClient) + {} + +void CMcWindowGroupAf::KeyL(const TKeyEvent &aKey, const TTime &) + { + ((CMcConnectionAf *)iClient)->KeyL(aKey); + } + +// +// CMcWindowDef, Default auto foreground version of CMcWindow // +// + +CMcWindowDef::CMcWindowDef(CTMultiCon *aTest) : CMcWindowBase(aTest) + { + iBack=TRgb::Gray256(236); + } + +void CMcWindowDef::PointerL(const TPointerEvent &pointer,const TTime &) + { +#if defined(LOGGING) + _LIT(KLog,"PointerL SS=%d (3) Type=%d (%d) GpWinOrdPos=%d (0)"); + iTest->LOG_MESSAGE5(KLog,iTest->SubState(),pointer.iType,TPointerEvent::EButton1Down,Client()->iGroup->GroupWin()->OrdinalPosition()); +#endif + if (pointer.iType==TPointerEvent::EButton1Down) + { + switch(iTest->SubState()) + { + case 3: + iTest->TEST(Client()->iGroup->GroupWin()->OrdinalPosition()==0); + iTest->IncSubState(); + break; + } + } + } + +void CMcWindowDef::Draw() + { + iGc->Clear(); + TBuf<0x40> buf; + switch(iTest->SubState()) + { + case 0: + case 1: + case 2: + break; + case 3: + buf.Copy(ClickOnMe); + break; + default: + buf.Copy(KError); + } + iGc->DrawText(buf, TPoint(10,20)); + } + +// + +TInt CTMultiCon::SubState() const + { + return(iSubState); + } + +void CTMultiCon::IncSubState() + { + if (iSubState==EMaxSubState) + EndAutoForegroundTest(); + else + { + iSubState++; + #if defined(LOGGING) + _LIT(KLog,"New SubState %d"); + LOG_MESSAGE2(KLog,iSubState); + #endif + iConn1->SubStateChanged(); + iConn2->SubStateChanged(); + iConn3->SubStateChanged(); + TheClient->WaitForRedrawsToFinish(); + SendEvents(); + } + } + +void CTMultiCon::SendEvents() + { +#if defined(LOGGING) + _LIT(KLog,"Sending event for substate %d"); + LOG_MESSAGE2(KLog,iSubState); +#endif + + switch (iSubState) + { + case 0: + iTest->SimulateKeyDownUp(EStdKeySpace); + break; + case 1: + iTest->SimulatePointerDownUp(iScreenSize.iWidth/6+5,iScreenSize.iHeight/4); + break; + case 2: + iTest->SimulatePointerDownUp(iScreenSize.iWidth/2,iScreenSize.iHeight/4); + break; + case 3: + iTest->SimulatePointerDownUp(iScreenSize.iWidth/3,3*iScreenSize.iHeight/4-5); + break; + default: + TEST(EFalse); + } + TheClient->iWs.Flush(); + } + +void CTMultiCon::RunTestCaseL(TInt /*aCurTestCase*/) + { + _LIT(KTestMultiCon1,"MultiCon 1"); + _LIT(KTimeOut,"Test Timed Out after %dsecs. SubState=%d"); + ((CTMultiConStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); + + if (!TestBase()->ConfigurationSupportsPointerEventTesting()) + { + INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing")); + TestComplete(); + return; + } + + switch(++iTest->iState) + { +/** + + @SYMTestCaseID GRAPHICS-WSERV-0289 + + @SYMDEF DEF081259 + + @SYMTestCaseDesc Test multiple connections to the window server + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions Make mutiple connections to the window server and check + that the connections are made corectly + + @SYMTestExpectedResults The connections are made correctly + +*/ + case 1: + ((CTMultiConStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0289")); + iTest->LogSubTest(KTestMultiCon1); + iTimeOut->Start(KTimeOutAfter,TCallBack(CTMultiCon::TimeOut,this)); + SendEvents(); + CActiveScheduler::Start(); + iTimeOut->Cancel(); + TEST(iTimeOutCount==0); + if (iTimeOutCount!=0) + LOG_MESSAGE3(KTimeOut,KTimeOutAfter/1000000,iSubState); + break; + default: + ((CTMultiConStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); + ((CTMultiConStep*)iStep)->CloseTMSGraphicsStep(); + TestComplete(); + break; + } + ((CTMultiConStep*)iStep)->RecordTestResultL(); + } + +__WS_CONSTRUCT_STEP__(MultiCon)