sl@0: // Copyright (c) 1996-2010 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: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: @internalComponent - Internal Symbian test code sl@0: */ sl@0: sl@0: #ifndef __TCAPKEY_H__ sl@0: #define __TCAPKEY_H__ sl@0: sl@0: #include sl@0: #include sl@0: #include "../tlib/testbase.h" sl@0: #include "AUTO.H" sl@0: #include "TGraphicsHarness.h" sl@0: sl@0: enum TTestMode sl@0: { sl@0: EModeNormalCapture, sl@0: EModeNormalCaptureWithPriority, sl@0: EModeWaitingForFirstNormalCapWithPriority, sl@0: EModeWaitingForFirstDown, sl@0: EModeWaitingForFirstDownWithPriority, sl@0: EModeKeyUpsAndDowns, sl@0: EModeKeyUpsAndDownsWithPriority, 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: TInt priority; 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,0}, sl@0: {2,'b',EModifierFunc|EModifierCtrl,EModifierFunc,0}, sl@0: {2,'n',EModifierFunc|EModifierCtrl,EModifierFunc,0}, sl@0: {0,3,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl,0}, sl@0: {2,'q',0,0,0}, sl@0: {2,'w',0,0,0}, sl@0: }; sl@0: sl@0: LOCAL_D SCapKeyParams capKeysWithPriority[]={ sl@0: {2,'h',0,0,7}, sl@0: {1,'h',EModifierFunc|EModifierCtrl|EModifierShift,0,7}, sl@0: {0,'h',EModifierFunc|EModifierCtrl|EModifierShift,0,7}, sl@0: {2,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,6}, sl@0: {1,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,6}, sl@0: {0,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,5}, sl@0: {2,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,4}, sl@0: {1,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,3}, sl@0: {0,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,2}, sl@0: }; sl@0: sl@0: LOCAL_D SCapKeyParams capUpAndDownKeys[]={ sl@0: {2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0,0}, sl@0: {2,EStdKeyEnter,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift,0}, sl@0: }; sl@0: sl@0: LOCAL_D SCapKeyParams capUpAndDownKeysWithPriority[]={ sl@0: {2,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7}, sl@0: {1,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7}, sl@0: {0,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7}, sl@0: {2,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,6}, sl@0: {1,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,6}, sl@0: {0,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,5}, sl@0: {2,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,4}, sl@0: {1,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,3}, sl@0: {0,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,2}, 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 w"),2,'w',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc}, sl@0: {(TText *)_S("Press a"),0,'a',0}, sl@0: {(TText *)_S("Press s"),1,19,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl}, 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 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 normal keys with priority sl@0: // sl@0: {(TText *)_S("Press h"),0,'h',EModifierFunc|EModifierCtrl|EModifierShift,0}, sl@0: {(TText *)_S("Press j"),1,'j',EModifierFunc|EModifierCtrl|EModifierShift,0}, sl@0: {(TText *)_S("Press k"),2,'k',EModifierFunc|EModifierCtrl|EModifierShift,0}, 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: // sl@0: // Capture ups and downs sl@0: // sl@0: {(TText *)_S("Press H"),0,'H',EModifierFunc|EModifierCtrl|EModifierShift,0}, sl@0: {(TText *)_S("Press J"),1,'J',EModifierFunc|EModifierCtrl|EModifierShift,0}, sl@0: {(TText *)_S("Press K"),2,'K',EModifierFunc|EModifierCtrl|EModifierShift,0}, 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: TInt priority; sl@0: }; sl@0: sl@0: LOCAL_D SErrorCapKey errorKeys[]={ sl@0: {'a', EModifierFunc|EModifierShift,EModifierFunc|EModifierCtrl, 0}, sl@0: {'1', 0, EModifierFunc, 0}, sl@0: {3, EModifierCtrl,EModifierCtrl|EModifierShift, 0}, sl@0: // @SYMPREQ 417-61800: Check that attempts to capture keys with sl@0: // EModifierLong in the modifier mask fail with KErrArgument. sl@0: {'T', EModifierLongKey, 0, 0}, sl@0: {'u', EModifierLongKey|EModifierAlt, EModifierLongKey, 0}, sl@0: {'V', EModifierLongKey|EModifierShift, EModifierLongKey|EModifierShift, 0}, sl@0: // @SYMPREQ 417-61800: Check that attempts to capture keys with a priority sl@0: // of KMinTInt fail with KErrArgument. sl@0: {'W', 0, 0, KMinTInt}, sl@0: }; sl@0: sl@0: const TInt numCapKeys=sizeof(capKeys)/sizeof(capKeys[0]); sl@0: const TInt numCapKeysWithPriority=sizeof(capKeysWithPriority)/sizeof(capKeysWithPriority[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 numUpDownKeysWithPriority=sizeof(capUpAndDownKeysWithPriority)/sizeof(capUpAndDownKeysWithPriority[0]); sl@0: const TInt numUpDownKeyTests=4; sl@0: const TInt numUpDownKeyWithPriorityTests=3; sl@0: const TInt numCapKeyWithPriorityTests=3; sl@0: const TInt numCapKeyTests=numTests-numAbortKeyTests-numUpDownKeyTests-numUpDownKeyWithPriorityTests-numCapKeyWithPriorityTests; sl@0: sl@0: LOCAL_D TInt capKeyHandle[numCapKeys]; sl@0: LOCAL_D TInt capKeyWithPriorityHandle[numCapKeysWithPriority]; sl@0: LOCAL_D TInt capUpDownKeyHandle[numUpDownKeys]; sl@0: LOCAL_D TInt capUpDownKeyWithPriorityHandle[numUpDownKeysWithPriority]; sl@0: sl@0: class CCKWindow; sl@0: class CTCaptureKey; sl@0: class CCKAbortConnection; sl@0: sl@0: class CCKConnectionBase : public CTClient sl@0: { sl@0: public: sl@0: CCKConnectionBase(CTCaptureKey *aTest); sl@0: void ConstructL(); sl@0: protected: sl@0: CTCaptureKey *iTest; sl@0: }; sl@0: sl@0: class CCKConnection : public CCKConnectionBase sl@0: { sl@0: public: sl@0: CCKConnection(CTCaptureKey *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(CTCaptureKey *aTest); sl@0: ~CCKAbortConnection(); sl@0: void ConstructL(); sl@0: void ReceivedAbortEvent(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(CTCaptureKey *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: CTCaptureKey *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, CTCaptureKey *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: CTCaptureKey *iTest; sl@0: }; sl@0: sl@0: class CTCaptureKey : public CTWsGraphicsBase sl@0: { sl@0: public: sl@0: CTCaptureKey(CTestStep* aStep); sl@0: ~CTCaptureKey(); sl@0: void ConstructL(); sl@0: void EndCaptureKeyTest(); sl@0: inline TInt State() {return iState;} sl@0: TInt SubState() const; sl@0: void IncSubState(); sl@0: void BadParams(); sl@0: void CapKeyPurgingL(); sl@0: void SetUpPriorityKeyTest(); sl@0: void CaptureWithPriorityTest(); sl@0: void CaptureUpsAndDownsTest(); sl@0: void CaptureUpsAndDownsWithPriorityTest(); sl@0: TTestMode Mode(); sl@0: void SetMode(TTestMode aMode); sl@0: inline TestClient* Client() {return TheClient;} sl@0: void SendEvents(); sl@0: void CapKeyPowerOffL(); sl@0: inline TInt ScreenNumber() {return iTest->ScreenNumber();} sl@0: protected: sl@0: virtual void RunTestCaseL(TInt aCurTestCase); 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: class CTCaptureKeyStep : public CTGraphicsStep sl@0: { sl@0: public: sl@0: CTCaptureKeyStep(); sl@0: protected: sl@0: //from CTGraphicsStep sl@0: virtual CTGraphicsBase* CreateTestL(); sl@0: }; sl@0: sl@0: _LIT(KTCaptureKeyStep,"TCaptureKey"); sl@0: sl@0: sl@0: #endif