diff -r 57c618273d5c -r bbf46f59e123 windowing/windowserver/test/tauto/TPntKey.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tauto/TPntKey.CPP Tue Aug 31 16:31:06 2010 +0300 @@ -0,0 +1,385 @@ +// 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: +// Converted from TMan test code (TMPNTKEY.CPP) May 2001 +// Test Pointer move/drag buffer +// +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + +#include "TPNTKEY.H" + +#define LOGGING on //Uncomment this line to get more logging + +TInt CTPntKeyWindow::iTestScanCodes[ENumPntKeyTests]={'A','B',0,'C',EStdKeyEnter,'Y'}; +TUint CTPntKeyWindow::iTestCodes[ENumPntKeyTests]={'a','B',0,'c',EKeyEnter,'y'}; +TUint CTPntKeyWindow::iTestModifiers[ENumPntKeyTests]={0,EModifierShift,0,0,0,0}; + +CTPntKeyWindow::CTPntKeyWindow(CTPntKey *aTest) : iTest(aTest) + {} + +CTPntKeyWindow::~CTPntKeyWindow() + { + } + +void CTPntKeyWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent) + { + ConstructExtLD(*parent,pos,size); + iWin.SetPointerGrab(ETrue); + iKey1=TRect(size.iWidth*1/16,size.iHeight/2,size.iWidth*5/16,size.iHeight); + iKey2=TRect(size.iWidth*6/16,size.iHeight/2,size.iWidth*10/16,size.iHeight); + iKey3=TRect(size.iWidth*11/16,size.iHeight/2,size.iWidth*15/16,size.iHeight); + iWin.AddKeyRect(iKey1,'A',EFalse); + iWin.AddKeyRect(iKey2,'B',EFalse); + AssignGC(*Client()->iGc); + BaseWin()->EnableOnEvents(); + Activate(); + } + +void CTPntKeyWindow::Error(TInt aWhere) + { + iTest->Failed(aWhere); + } + +void CTPntKeyWindow::NextKey() + { + if (++iKeyCount!=ENumPntKeyTests) + { + #if defined(LOGGING) + _LIT(KLog,"Next Key KeyCount=%d"); + iTest->LOG_MESSAGE2(KLog,iKeyCount); + #endif + if (iKeyCount==2) + iWin.RemoveAllKeyRects(); + else if (iKeyCount==3) + iWin.AddKeyRect(iKey3,'C',EFalse); + else if (iKeyCount==4) + { + #if !defined(__WINS__) + if (iTest->NoDigitiser()) + { + return; + } + #endif + iWin.RemoveAllKeyRects(); + iWin.AddKeyRect(TRect(Client()->iScreen->SizeInPixels()),'Z',EFalse); + } + else if (iKeyCount==5) + { + iWin.RemoveAllKeyRects(); + Client()->iWs.Flush(); + User::After(500000); // Wait half a second + iWin.AddKeyRect(TRect(Client()->iScreen->SizeInPixels()),'Y',ETrue); + } + Invalidate(); + } + SendEvent(); + } + +void CTPntKeyWindow::SendEvent() + { + TheClient->WaitForRedrawsToFinish(); +#if defined(LOGGING) + _LIT(KLog,"SendEvent KeyCount=%d"); + iTest->LOG_MESSAGE2(KLog,iKeyCount); +#endif + switch(iKeyCount) + { + case 0: + SimulatePointerDownUp(iKey1); + break; + case 1: + iTest->TestBase()->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftShift); + SimulatePointerDownUp(iKey2); + iTest->TestBase()->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftShift); + break; + case 2: + case 5: + { + TPoint pos=Position(); + TSize size=Size(); + iTest->TestBase()->SimulatePointerDownUp(pos.iX+size.iWidth/2,pos.iY+size.iHeight/4); + } + break; + case 3: + SimulatePointerDownUp(iKey3); + break; + case 4: + iTest->TestBase()->SimulateKeyDownUp(EStdKeyEnter); + break; + } + } + +void CTPntKeyWindow::SimulatePointerDownUp(const TRect& aRect) + { + iTest->TestBase()->SimulatePointerDownUp((aRect.iTl.iX+aRect.iBr.iX)/2,(aRect.iTl.iY+aRect.iBr.iY)/2); + } + +void CTPntKeyWindow::Test(TInt aCheck) + { + if (!aCheck) + Error(3); + } + +void CTPntKeyWindow::KeyUpL(const TKeyEvent &aKey,const TTime&) + { + if (aKey.iScanCode==iTestScanCodes[iKeyCount]) + NextKey(); + } + +void CTPntKeyWindow::KeyDownL(const TKeyEvent &aKey,const TTime &) + { +#if defined(LOGGING) + _LIT(KLog,"KeyDownL ScanCode=%d '%c' (%d) KeyCount=%d"); + iTest->LOG_MESSAGE5(KLog,aKey.iScanCode,aKey.iScanCode,iTestScanCodes[iKeyCount],iKeyCount); +#endif + if (aKey.iScanCode!=EStdKeyLeftFunc && aKey.iScanCode!=EStdKeyRightFunc && + aKey.iScanCode!=EStdKeyLeftAlt && aKey.iScanCode!=EStdKeyRightAlt && + aKey.iScanCode!=EStdKeyLeftCtrl && aKey.iScanCode!=EStdKeyRightCtrl && + aKey.iScanCode!=EStdKeyLeftShift && aKey.iScanCode!=EStdKeyRightShift && + aKey.iScanCode!=EStdKeyOff && + aKey.iScanCode!=EStdKeyEscape) + Test(aKey.iScanCode==iTestScanCodes[iKeyCount]); + } + +void CTPntKeyWindow::WinKeyL(const TKeyEvent &aKey,const TTime &) + { + if (aKey.iCode!=EKeyEscape) + { +#if defined(LOGGING) + _LIT(KLog1,"WinKeyL1 ScanCode=%d (%d) Code=%d '%c' (%d)"); + _LIT(KLog2,"WinKeyL2 ScanCode=%d Modifiers=0x%x (0x%x) KeyCount=%d"); + iTest->LOG_MESSAGE6(KLog1,aKey.iScanCode,iTestScanCodes[iKeyCount],aKey.iCode,aKey.iCode,iTestCodes[iKeyCount]); + iTest->LOG_MESSAGE5(KLog2,aKey.iScanCode,aKey.iModifiers&EModifierMask,iTestModifiers[iKeyCount]&EModifierMask,iKeyCount); +#endif + Test(aKey.iScanCode==iTestScanCodes[iKeyCount]); + Test(aKey.iCode==iTestCodes[iKeyCount]); + Test((aKey.iModifiers&EModifierMask)==(iTestModifiers[iKeyCount]&EModifierMask)); + } + } + +void CTPntKeyWindow::SwitchOn(const TTime &) + { +#if defined(LOGGING) + _LIT(KLog,"SwitchOn KeyCount=%d"); + iTest->LOG_MESSAGE2(KLog,iKeyCount); +#endif + if (iKeyCount==4) + NextKey(); + else if (iKeyCount!=5) + Error(2); + } + +void CTPntKeyWindow::PointerL(const TPointerEvent &aPointer,const TTime &) + { +#if defined(LOGGING) + _LIT(KLog,"Pointer Event Type=%d Pos=(%d,%d) PPos=(%d,%d) KeyCount=%d"); + iTest->LOG_MESSAGE7(KLog,aPointer.iType,aPointer.iPosition.iX,aPointer.iPosition.iY + ,aPointer.iParentPosition.iX,aPointer.iParentPosition.iY,iKeyCount); +#endif + if (aPointer.iType==TPointerEvent::EButton1Down) + { + if (iKeyCount!=2) + Error(1); + else + NextKey(); + } + } + +void CTPntKeyWindow::DrawButton(const TRect &aRect, const TDesC &aText) + { + iGc->DrawRect(aRect); + iGc->DrawText(aText, TPoint((aRect.iBr.iX+aRect.iTl.iX)/2,(aRect.iBr.iY+aRect.iTl.iY)/2)); + } + +void CTPntKeyWindow::Draw() + { + iGc->SetBrushColor(TRgb::Gray4(0)); + iGc->SetPenColor(TRgb::Gray4(3)); + iGc->Clear(); + DrawButton(iKey1,_L("A")); + DrawButton(iKey2,_L("B")); + DrawButton(iKey3,_L("C")); + switch(iKeyCount) + { + case 0: + iGc->DrawText(_L("Click on 'A'"), TPoint(10,20)); + break; + case 1: + iGc->DrawText(_L("Shift-Click on 'B'"), TPoint(10,20)); + break; + case 2: + iGc->DrawText(_L("Click anywhere in this window"), TPoint(10,20)); + break; + case 3: + iGc->DrawText(_L("Click on 'C'"), TPoint(10,20)); + break; + case 4: +#if defined(__WINS__) // Can't emulate touching dig when switched off under WINS + iGc->DrawText(_L("Switch off and on (or press Enter)"), TPoint(10,20)); +#else + iGc->DrawText(_L("Switch off, then touch the screen to switch on"), TPoint(10,20)); +#endif + break; + case 5: +#if defined(__WINS__) // Can't emulate touching dig when switched off under WINS + iGc->DrawText(_L("Touch anywhere in the window"), TPoint(10,20)); +#else + iGc->DrawText(_L("Switch off and touch the screen to switch on again"), TPoint(10,20)); +#endif + break; + } + } + +CTPntKey::CTPntKey(CTestStep* aStep): + CTWsGraphicsBase(aStep) + { + } + +CTPntKey::~CTPntKey() + { + HAL::Set(HALData::EPenDisplayOn,iOldPointerState); + CTWin::Delete(iWin); + Client()->ResetFocus(); + delete iTimeOut; + } + +TInt CTPntKey::TimeOut(TAny* aTest) //static + { + static_cast(aTest)->TimeOut(); + return(KErrNone); + } + +void CTPntKey::TimeOut() + { + TLogMessageText buf; + _LIT(KPntKeyTimeOut,"TIMEOUT: Pointer Key, %d, %S"); + buf.AppendFormat(KPntKeyTimeOut,iState,&TestBase()->iSubTitle); + TheClient->LogMessage(buf); + Failed(4); + } + +void CTPntKey::Failed(TInt aWhere) + { + _LIT(KLog,"Failed at %d"); + LOG_MESSAGE2(KLog,aWhere); + if (!iFailed) + { + iFailed=ETrue; + Client()->iGroup->ClearCurrentWindow(); + } + } + +void CTPntKey::ConstructL() + { + TInt mods=TheClient->iWs.GetModifierState(); + if (mods&EModifierCapsLock) + iTest->SimulateKeyDownUp(EStdKeyCapsLock); + //Make sure all the keys we test are in the up state + iTest->SimulateKeyDownUp(EStdKeyLeftShift); + iTest->SimulateKeyDownUp(EStdKeyRightShift); + iTest->SimulateKeyDownUp(EStdKeyLeftFunc); + iTest->SimulateKeyDownUp(EStdKeyLeftCtrl); + iTest->SimulateKeyDownUp(EStdKeyRightCtrl); + mods=TheClient->iWs.GetModifierState(); + _LIT(KLog,"Initial Modifiers state 0x%x (ideally should be zero)"); + LOG_MESSAGE2(KLog,mods); + TheClient->iScreen->SetScreenMode(0); //May sure we are in the right screen size mode + TheClient->iScreen->SetAppScreenMode(0); + TheClient->iWs.SetPointerCursorArea(TestBase()->iNormalPointerCursorArea); + CTPntKeyWindow *win=new(ELeave) CTPntKeyWindow(this); + win->SetUpLD(TPoint(20,20),Client()->iScreen->SizeInPixels()-TSize(40,40),Client()->iGroup); + iWin=win; + Client()->iGroup->SetCurrentWindow(iWin); + 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(EFalse); + } + TheClient->WaitForRedrawsToFinish(); //Make sure all pending events have been delt with (redraw events are lowest priority) + iTimeOut=new(ELeave) CTimeOut(); + iTimeOut->ConstructL(); + iTimeOut->Start(KTimeOutAfter,TCallBack(CTPntKey::TimeOut,this)); + } + +void CTPntKey::RunTestCaseL(TInt /*aCurTestCase*/) + { + _LIT(KTestName,"Key set 1"); + TEST(!iFailed); + if (iFailed) + { + _LIT(KLog,"Test Failed Substate=%d KeyCount=%d"); + LOG_MESSAGE3(KLog,iTest->iState,iWin->KeyCount()); + } + ((CTPntKeyStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); + switch(++iTest->iState) + { +/** +@SYMTestCaseID GRAPHICS-WSERV-0200 + +@SYMDEF DEF081259 + +@SYMTestCaseDesc Test Pointer move/drag buffer + +@SYMTestPriority High + +@SYMTestStatus Implemented + +@SYMTestActions Exercise the pointer move/drag buffer and check + that it functions correctly + +@SYMTestExpectedResults The buffer functions correctly +*/ + case 1: + ((CTPntKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0200")); + iTest->LogSubTest(KTestName); + if (TestBase()->ConfigurationSupportsPointerEventTesting()) + { + iWin->SendEvent(); + TheClient->Flush(); + } + else + { + INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing")); + } + break; + case 2: + ((CTPntKeyStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); + ((CTPntKeyStep*)iStep)->CloseTMSGraphicsStep(); + if (TestBase()->ConfigurationSupportsPointerEventTesting()) + { + iTimeOut->Cancel(); + } + TestComplete(); + break; + } + ((CTPntKeyStep*)iStep)->RecordTestResultL(); + } + +__WS_CONSTRUCT_STEP__(PntKey)