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