diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tman/TMCAPKEY.CPP --- a/windowing/windowserver/tman/TMCAPKEY.CPP Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,625 +0,0 @@ -// Copyright (c) 1995-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 capture key -// -// - -#include -#include -#include -#include "W32STD.H" -#include "../tlib/testbase.h" -#include "TMAN.H" - -enum TTestMode - { - EModeNormalCapture, - EModeWaitingForFirstDown, - EModeKeyUpsAndDowns, - EModeAbortKeys, - }; -enum TCapKeyRetValues - { - ECapKeyOkay, - ECapKeyRetry, - ECapKeyFail, - }; - -struct SCapKeyParams - { - TInt connIndex; // Connection that should capture this key - TUint keyCode; - TUint modifier_mask; - TUint modifiers; - }; - -struct SCapKeyTestParams - { - TText *txt; // Text message telling user what to do - TInt connIndex; // Connection that receive the key press - TUint keyCode; // Expected key code - TUint modifier_mask;// Modifiers mask for expected modifiers - TUint modifiers; // Expected modifiers - }; - -struct SAbortKeyTests - { - TUint keyCode; // Expected key code - TUint modifier_mask;// Modifiers mask for expected modifiers - TUint modifiers; // Expected modifiers - }; - -LOCAL_D SCapKeyParams capKeys[]={ - {1,19,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl}, - {2,'b',EModifierFunc|EModifierCtrl,EModifierFunc}, - {2,'n',EModifierFunc|EModifierCtrl,EModifierFunc}, - {0,3,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl}, - {2,'q',0,0}, - {2,'w',0,0}, - }; - -LOCAL_D SCapKeyParams capUpAndDownKeys[]={ - {2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0}, - {2,EStdKeyEnter,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift}, - }; - -LOCAL_D SCapKeyTestParams capKeyTests[]={ - {(TText *)_S("Press q"),2,'q',EModifierFunc|EModifierCtrl|EModifierShift,0}, - //{(TText *)_S("Press q"),2,'q',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc}, - {(TText *)_S("Press w"),2,'w',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc}, - {(TText *)_S("Press a"),0,'a',0}, - //{(TText *)_S("Press a"),1,1,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl}, - {(TText *)_S("Press s"),1,19,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl}, - //{(TText *)_S("Press b"),2,'b',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc}, - {(TText *)_S("Press n"),2,'n',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc}, - {(TText *)_S("Press b"),0,2,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl}, - //{(TText *)_S("Press c"),0,'c',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc}, - {(TText *)_S("Press d"),0,'d',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc}, - {(TText *)_S("Press c"),0,3,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl}, -// -// Capture ups and downs -// - {(TText *)_S("Press "),2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0}, - {(TText *)_S("Press "),0,EStdKeyEnter,EModifierShift,0}, - {(TText *)_S("Press "),0,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift}, - {(TText *)_S("Press "),2,EStdKeyEnter,EModifierShift,EModifierShift}, -// -// Priority keys -// - {(TText *)_S("Press c"),0,0,0,0}, - {(TText *)_S("Press d"),0,0,0,0}, - {(TText *)_S("Press z"),0,0,0,0}, - }; - -LOCAL_D SAbortKeyTests abortKeyTests[]={ - {3,EModifierCtrl,EModifierCtrl}, - {4,EModifierCtrl,EModifierCtrl}, - {'z',EModifierFunc|EModifierCtrl|EModifierShift,0} - }; - -struct SErrorCapKey - { - TInt keyCode; - TUint modifier_mask; - TUint modifiers; - }; - -LOCAL_D SErrorCapKey errorKeys[]={ - {'a',EModifierFunc|EModifierShift,EModifierFunc|EModifierCtrl}, - {'1',0,EModifierFunc}, - {3,EModifierCtrl,EModifierCtrl|EModifierShift}, - }; - -const TInt numCapKeys=sizeof(capKeys)/sizeof(capKeys[0]); -const TInt numTests=sizeof(capKeyTests)/sizeof(capKeyTests[0]); -const TInt numErrorKeys=sizeof(errorKeys)/sizeof(errorKeys[0]); -const TInt numAbortKeyTests=sizeof(abortKeyTests)/sizeof(abortKeyTests[0]); -const TInt numUpDownKeys=sizeof(capUpAndDownKeys)/sizeof(capUpAndDownKeys[0]); -const TInt numUpDownKeyTests=4; -const TInt numCapKeyTests=numTests-numAbortKeyTests-numUpDownKeyTests; - -LOCAL_D TInt capKeyHandle[numCapKeys]; -LOCAL_D TInt capUpDownKeyHandle[numUpDownKeys]; - -class CCKWindow; -class TCaptureKeyTest; -class CCKAbortConnection; - -class CCKConnectionBase : public CTClient - { -public: - CCKConnectionBase(TCaptureKeyTest *aTest); - void ConstructL(); -protected: - TCaptureKeyTest *iTest; - }; - -class CCKConnection : public CCKConnectionBase - { -public: - CCKConnection(TCaptureKeyTest *aTest, TInt aConnIndex); - ~CCKConnection(); - void ConstructL(); - void CheckKeyL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey); - void SubStateChanged(); - void KeyTestL(TInt aBool); - void KeyL(const TKeyEvent &aKey,const TTime &aTime); - void CheckUpDownL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey); - void CheckUpDownL(const TKeyEvent &aKey); - inline TInt Index() {return iConnIndex;} -protected: - TInt iConnIndex; - CCKWindow *iWin; - }; - -class CAbortHandler : public CTEventBase - { -public: - CAbortHandler(RWsSession *aWs, CCKAbortConnection *aConnection); - ~CAbortHandler(); - void Request(); -protected: - void DoCancel(); - void doRunL(); -protected: - CCKAbortConnection *iConnection; - }; - -class CCKAbortConnection : public CCKConnectionBase - { -public: - CCKAbortConnection(TCaptureKeyTest *aTest); - ~CCKAbortConnection(); - void ConstructL(); - void ReceivedAbortEventL(TInt aHandle, TKeyEvent *aKey); - void Foreground(); -protected: - CAbortHandler *iAbortHandler; - TInt iAbortKeyIndex; - }; - -class CCKWindow : public CTWin - { -public: - CCKWindow(TCaptureKeyTest *aTest, TInt aConnIndex); - void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); - void Draw(); -protected: - TInt iConnIndex; - TCaptureKeyTest *iTest; - TRgb iBack; - }; - -class CCKWindowGroup : public CTWindowGroup - { -public: - CCKWindowGroup(CTClient *aClient, TCaptureKeyTest *aTest); - void KeyL(const TKeyEvent &aKey,const TTime &aTime); - void KeyDownL(const TKeyEvent &aKey,const TTime &); - void KeyUpL(const TKeyEvent &aKey,const TTime &); - void CheckUpDown(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey); -private: - TCaptureKeyTest *iTest; - }; - -class TCaptureKeyTest : public CTestBase - { -public: - TCaptureKeyTest(); - ~TCaptureKeyTest(); - TestState DoTestL(); - void ConstructL(); - void EndCaptureKeyTest(); - TInt SubState() const; - void IncSubState(); - void BadParamsL(); - void CapKeyPurgingL(); - void SetUpPriorityKeyTest(); - void TestComplete(); - void CaptureUpsAndDownsTest(); - TTestMode Mode(); - void SetMode(TTestMode aMode); -private: - CCKConnection *iConn1; - CCKConnection *iConn2; - CCKConnection *iConn3; - CCKAbortConnection *iAbortConn; - TSize iWinSize; - TInt iState; - TInt iSubState; - TTestMode iMode; - }; - -GLDEF_C CTestBase *CreateMultiCaptureKeyTest() - { - return(new(ELeave) TCaptureKeyTest()); - } - -// -// CAbortHandler - -CAbortHandler::CAbortHandler(RWsSession *aWs, CCKAbortConnection *aConnection) : CTEventBase(aWs, 10), iConnection(aConnection) - { - } - -CAbortHandler::~CAbortHandler() - { - Cancel(); - } - -void CAbortHandler::Request() - { - iWs->PriorityKeyReady(&iStatus); - SetActive(); - } - -void CAbortHandler::DoCancel() - { - iWs->PriorityKeyReadyCancel(); - } - -void CAbortHandler::doRunL() - { - TWsPriorityKeyEvent abortEvent; - iWs->GetPriorityKey(abortEvent); - iConnection->ReceivedAbortEventL(abortEvent.Handle(),abortEvent.Key()); - } - -// -// CCKConnection - -CCKConnectionBase::CCKConnectionBase(TCaptureKeyTest *aTest) : iTest(aTest) - { - } - -void CCKConnectionBase::ConstructL() - { - CTClient::ConstructL(); - iGroup=new(ELeave) CCKWindowGroup(this, iTest); - iGroup->ConstructL(); - } - -CCKConnection::CCKConnection(TCaptureKeyTest *aTest, TInt aConnIndex) : CCKConnectionBase(aTest), iConnIndex(aConnIndex) - { - } - -CCKConnection::~CCKConnection() - { - for(TInt index=0;indexGroupWin()->CancelCaptureKey(capKeyHandle[index]); - for(TInt index2=0;index2GroupWin()->CancelCaptureKeyUpAndDowns(capUpDownKeyHandle[index2]); - CTWin::Delete(iWin); - } - -void CCKConnection::SubStateChanged() - { - iWin->Invalidate(); - iWs.Flush(); - } - -void CCKConnection::ConstructL() - { - CCKConnectionBase::ConstructL(); - for(TInt index=0;indexGroupWin()->CaptureKey(capKeys[index].keyCode,capKeys[index].modifier_mask,capKeys[index].modifiers)); - for(TInt index2=0;index2GroupWin()->CaptureKeyUpAndDowns(capUpAndDownKeys[index2].keyCode, - capUpAndDownKeys[index2].modifier_mask,capUpAndDownKeys[index2].modifiers)); - TSize screenSize=iGroup->Size(); - TInt winWidth=screenSize.iWidth/2; - TInt winHeight=screenSize.iHeight-10; - iGroup->GroupWin()->AutoForeground(EFalse); // Don't allow clicking to cause foreground, might mess up test - CCKWindow *win=new(ELeave) CCKWindow(iTest, iConnIndex); - win->SetUpL(TPoint(5,5),TSize(winWidth,winHeight),iGroup,*iGc); - iWin=win; - } - -void CCKConnection::KeyTestL(TInt aBool) - { - if (!aBool) - { - CTDialog *dialog=new(ELeave) CTDialog(); - TInt ret=0; - dialog->ConstructLD(*iGroup,*iGc); - dialog->SetTitle(_L("Invalid key press")); - dialog->SetLine1(_L("Try again?")); - dialog->SetNumButtons(2); - dialog->SetButtonText(0,_L("Fail")); - dialog->SetButtonText(1,_L("Retry")); - ret=dialog->Display(); - User::Leave(ret==1 ? ECapKeyRetry : ECapKeyFail); - } - } - -void CCKConnection::CheckKeyL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey) - { - KeyTestL(aKeyTest.connIndex==iConnIndex); - KeyTestL(aKeyTest.keyCode==aKey.iCode); - KeyTestL(aKeyTest.modifiers==(aKey.iModifiers&aKeyTest.modifier_mask)); - } - -void CCKConnection::CheckUpDownL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey) - { - KeyTestL(aKeyTest.connIndex==iConnIndex); - KeyTestL(aKeyTest.keyCode==(TUint)aKey.iScanCode); - KeyTestL(aKeyTest.modifiers==(aKey.iModifiers&aKeyTest.modifier_mask)); - } - -void CCKConnection::KeyL(const TKeyEvent &aKey,const TTime &) - { - if (iTest->Mode()==EModeNormalCapture) - { - if (aKey.iCode==EKeyEscape) - iTest->AbortL(); - TRAPD(ret,CheckKeyL(capKeyTests[iTest->SubState()],aKey)); - if (ret==ECapKeyOkay) - iTest->IncSubState(); - else - iTest->TestL(ret==ECapKeyRetry); - } - } - -void CCKConnection::CheckUpDownL(const TKeyEvent &aKey) - { - CheckUpDownL(capKeyTests[iTest->SubState()],aKey); - } - -CCKAbortConnection::CCKAbortConnection(TCaptureKeyTest *aTest) : CCKConnectionBase(aTest) - { - } - -CCKAbortConnection::~CCKAbortConnection() - { - iGroup->GroupWin()->RemovePriorityKey(3,EModifierCtrl,EModifierCtrl); - delete iAbortHandler; - } - -void CCKAbortConnection::ConstructL() - { - CCKConnectionBase::ConstructL(); - User::LeaveIfError(iGroup->GroupWin()->AddPriorityKey(abortKeyTests[0].keyCode,abortKeyTests[0].modifier_mask,abortKeyTests[0].modifiers)); - User::LeaveIfError(iGroup->GroupWin()->AddPriorityKey(abortKeyTests[1].keyCode,abortKeyTests[1].modifier_mask,abortKeyTests[1].modifiers)); - User::LeaveIfError(iGroup->GroupWin()->AddPriorityKey(abortKeyTests[2].keyCode,abortKeyTests[2].modifier_mask,abortKeyTests[2].modifiers)); - iAbortHandler=new(ELeave) CAbortHandler(&iWs, this); - iAbortHandler->Construct(); - iWs.Flush(); - } - -void CCKAbortConnection::ReceivedAbortEventL(TInt aHandle, TKeyEvent *aKey) - { - iTest->TestL(aHandle==(TInt)iGroup); - iTest->TestL(aKey->iCode==abortKeyTests[iAbortKeyIndex].keyCode); - iTest->TestL((aKey->iModifiers&abortKeyTests[iAbortKeyIndex].modifier_mask)==abortKeyTests[iAbortKeyIndex].modifiers); - iAbortKeyIndex++; - iTest->IncSubState(); - } - -void CCKAbortConnection::Foreground() - { - iGroup->GroupWin()->SetOrdinalPosition(0); - iWs.Flush(); - } - -// -// CCKWindowGroup class // -// - -CCKWindowGroup::CCKWindowGroup(CTClient *aClient, TCaptureKeyTest *aTest) : CTWindowGroup(aClient), iTest(aTest) - {} - -void CCKWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &time) - { - /*TLogMessageText buf(_S("##Recieved Key: ")); - buf.Append(aKey.iScanCode); - buf.Append('('); - buf.AppendNum(aKey.iScanCode); - buf.Append(')'); - if (!iCurWin) - { - buf.Append('('); - buf.AppendNum(((CCKConnection *)iClient)->Index()); - buf.Append(')'); - } - iClient->iWs.LogMessage(buf);*/ - if (iCurWin) - iCurWin->WinKeyL(aKey,time); - else - ((CCKConnection *)iClient)->KeyL(aKey,time); - } - -void CCKWindowGroup::KeyDownL(const TKeyEvent &aKey,const TTime &) - { - if (aKey.iScanCode!=EStdKeyLeftShift && aKey.iScanCode!=EStdKeyRightShift) - { - if (iTest->Mode()==EModeWaitingForFirstDown) - iTest->SetMode(EModeKeyUpsAndDowns); - if (iTest->Mode()==EModeKeyUpsAndDowns) - ((CCKConnection *)iClient)->CheckUpDownL(aKey); - } - } - -void CCKWindowGroup::KeyUpL(const TKeyEvent &aKey,const TTime &) - { - if (aKey.iScanCode!=EStdKeyLeftShift && aKey.iScanCode!=EStdKeyRightShift) - { - if (iTest->Mode()==EModeKeyUpsAndDowns) - { - ((CCKConnection *)iClient)->CheckUpDownL(aKey); - iTest->IncSubState(); - } - } - } - -// -// CCKWindow, class // -// - -CCKWindow::CCKWindow(TCaptureKeyTest *aTest, TInt aConnIndex) : CTWin(), iConnIndex(aConnIndex), iTest(aTest) - { - iBack=TRgb::Gray256(230); - } - -void CCKWindow::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) - { - ConstructExtLD(*parent,pos,size); - iWin.SetBackgroundColor(iBack); - Activate(); - AssignGC(aGc); - } - -void CCKWindow::Draw() - { - iGc->Clear(); - if (iConnIndex==0) - iGc->DrawText(TPtrC(capKeyTests[iTest->SubState()].txt), TPoint(10,20)); - } - -// - -TCaptureKeyTest::TCaptureKeyTest() : CTestBase(_L("Capture Key")) - {} - -TCaptureKeyTest::~TCaptureKeyTest() - { - delete iConn1; - delete iConn2; - delete iConn3; - delete iAbortConn; - } - -void TCaptureKeyTest::ConstructL() - { - iAbortConn=new(ELeave) CCKAbortConnection(this); - iAbortConn->ConstructL(); - iConn3=new(ELeave) CCKConnection(this,2); - iConn3->ConstructL(); - iConn2=new(ELeave) CCKConnection(this,1); - iConn2->ConstructL(); - iConn1=new(ELeave) CCKConnection(this,0); - iConn1->ConstructL(); - iMode=EModeNormalCapture; - } - -TInt TCaptureKeyTest::SubState() const - { - return(iSubState); - } - -void TCaptureKeyTest::IncSubState() - { - iSubState++; - iConn1->SubStateChanged(); - iConn2->SubStateChanged(); - iConn3->SubStateChanged(); - switch(iMode) - { - case EModeNormalCapture: - if (iSubState==numCapKeyTests) - TestComplete(); - break; - case EModeKeyUpsAndDowns: - if (iSubState==(numCapKeyTests+numUpDownKeyTests)) - TestComplete(); - break; - case EModeAbortKeys: - if (iSubState==(numCapKeyTests+numUpDownKeyTests+numAbortKeyTests)) - TestComplete(); - break; - default: - break; - } - } - -void TCaptureKeyTest::CapKeyPurgingL() - { - TInt base=Client()->iWs.ResourceCount(); - RWindowGroup groupWin(Client()->iWs); - User::LeaveIfError(groupWin.Construct(ENullWsHandle)); - TInt capHandle=User::LeaveIfError(groupWin.CaptureKey('a',EModifierFunc,EModifierFunc)); - User::LeaveIfError(groupWin.CaptureKey('b',EModifierFunc,EModifierFunc)); - TestL(Client()->iWs.ResourceCount()==(base+3)); - groupWin.CancelCaptureKey(capHandle); - TestL(Client()->iWs.ResourceCount()==(base+2)); - groupWin.Close(); - TestL(Client()->iWs.ResourceCount()==base); // Check it also freed the extra capture key - } - -void TCaptureKeyTest::BadParamsL() - { - TInt resCount=Client()->iWs.ResourceCount(); - for(TInt index=0;indexiGroup->GroupWin()->CaptureKey(errorKeys[index].keyCode,errorKeys[index].modifier_mask,errorKeys[index].modifiers)==KErrArgument); - TestL(Client()->iWs.ResourceCount()==resCount); - } - -void TCaptureKeyTest::TestComplete() - { - Request(); - } - -void TCaptureKeyTest::SetMode(TTestMode aMode) - { - iMode=aMode; - } - -TTestMode TCaptureKeyTest::Mode() - { - return(iMode); - } - -void TCaptureKeyTest::SetUpPriorityKeyTest() - { - iMode=EModeAbortKeys; - iAbortConn->Foreground(); - } - -void TCaptureKeyTest::CaptureUpsAndDownsTest() - { - iMode=EModeWaitingForFirstDown; - } - -TestState TCaptureKeyTest::DoTestL() - { - switch(iState) - { - case 0: // Dummy one to let capture key tests run - iState++; - return(EContinue); - case 1: - LogSubTest(_L("Capture ups and downs"),1); - CaptureUpsAndDownsTest(); - iState++; - return(EContinue); - case 2: - LogSubTest(_L("Abort key"),1); - SetUpPriorityKeyTest(); - iState++; - return(EContinue); - case 3: - LogSubTest(_L("Errors"),1); - BadParamsL(); - CapKeyPurgingL(); - LogSubTest(_L("CaptureKey"),1); - iState++; - return(ENext); - default: - return(EFinished); - } -// return(ENext); - }