author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// 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<CTPntKey*>(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)