1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/graphics/windowing/windowserver/test/tauto/TCapKey.H Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,322 @@
1.4 +// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +//
1.18 +
1.19 +/**
1.20 + @file
1.21 + @test
1.22 + @internalComponent - Internal Symbian test code
1.23 +*/
1.24 +
1.25 +#ifndef __TCAPKEY_H__
1.26 +#define __TCAPKEY_H__
1.27 +
1.28 +#include <e32std.h>
1.29 +#include <w32std.h>
1.30 +#include "../tlib/testbase.h"
1.31 +#include "AUTO.H"
1.32 +#include "TGraphicsHarness.h"
1.33 +
1.34 +enum TTestMode
1.35 + {
1.36 + EModeNormalCapture,
1.37 + EModeNormalCaptureWithPriority,
1.38 + EModeWaitingForFirstNormalCapWithPriority,
1.39 + EModeWaitingForFirstDown,
1.40 + EModeWaitingForFirstDownWithPriority,
1.41 + EModeKeyUpsAndDowns,
1.42 + EModeKeyUpsAndDownsWithPriority,
1.43 + EModeAbortKeys,
1.44 + };
1.45 +enum TCapKeyRetValues
1.46 + {
1.47 + ECapKeyOkay,
1.48 + ECapKeyRetry,
1.49 + ECapKeyFail,
1.50 + };
1.51 +
1.52 +struct SCapKeyParams
1.53 + {
1.54 + TInt connIndex; // Connection that should capture this key
1.55 + TUint keyCode;
1.56 + TUint modifier_mask;
1.57 + TUint modifiers;
1.58 + TInt priority;
1.59 + };
1.60 +
1.61 +struct SCapKeyTestParams
1.62 + {
1.63 + TText *txt; // Text message telling user what to do
1.64 + TInt connIndex; // Connection that receive the key press
1.65 + TUint keyCode; // Expected key code
1.66 + TUint modifier_mask;// Modifiers mask for expected modifiers
1.67 + TUint modifiers; // Expected modifiers
1.68 + };
1.69 +
1.70 +struct SAbortKeyTests
1.71 + {
1.72 + TUint keyCode; // Expected key code
1.73 + TUint modifier_mask;// Modifiers mask for expected modifiers
1.74 + TUint modifiers; // Expected modifiers
1.75 + };
1.76 +
1.77 +LOCAL_D SCapKeyParams capKeys[]={
1.78 + {1,19,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl,0},
1.79 + {2,'b',EModifierFunc|EModifierCtrl,EModifierFunc,0},
1.80 + {2,'n',EModifierFunc|EModifierCtrl,EModifierFunc,0},
1.81 + {0,3,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl,0},
1.82 + {2,'q',0,0,0},
1.83 + {2,'w',0,0,0},
1.84 + };
1.85 +
1.86 +LOCAL_D SCapKeyParams capKeysWithPriority[]={
1.87 + {2,'h',0,0,7},
1.88 + {1,'h',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
1.89 + {0,'h',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
1.90 + {2,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,6},
1.91 + {1,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,6},
1.92 + {0,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,5},
1.93 + {2,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,4},
1.94 + {1,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,3},
1.95 + {0,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,2},
1.96 + };
1.97 +
1.98 +LOCAL_D SCapKeyParams capUpAndDownKeys[]={
1.99 + {2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0,0},
1.100 + {2,EStdKeyEnter,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift,0},
1.101 + };
1.102 +
1.103 +LOCAL_D SCapKeyParams capUpAndDownKeysWithPriority[]={
1.104 + {2,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
1.105 + {1,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
1.106 + {0,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
1.107 + {2,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,6},
1.108 + {1,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,6},
1.109 + {0,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,5},
1.110 + {2,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,4},
1.111 + {1,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,3},
1.112 + {0,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,2},
1.113 + };
1.114 +
1.115 +LOCAL_D SCapKeyTestParams capKeyTests[]={
1.116 + {(TText *)_S("Press q"),2,'q',EModifierFunc|EModifierCtrl|EModifierShift,0},
1.117 + {(TText *)_S("Press <Alt>w"),2,'w',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
1.118 + {(TText *)_S("Press a"),0,'a',0},
1.119 + {(TText *)_S("Press <Ctrl><Alt>s"),1,19,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
1.120 + {(TText *)_S("Press <Alt>n"),2,'n',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
1.121 + {(TText *)_S("Press <Ctrl><Alt>b"),0,2,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
1.122 + {(TText *)_S("Press <Alt>d"),0,'d',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
1.123 + {(TText *)_S("Press <Ctrl><Alt>c"),0,3,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
1.124 +//
1.125 +// Capture normal keys with priority
1.126 +//
1.127 + {(TText *)_S("Press h"),0,'h',EModifierFunc|EModifierCtrl|EModifierShift,0},
1.128 + {(TText *)_S("Press j"),1,'j',EModifierFunc|EModifierCtrl|EModifierShift,0},
1.129 + {(TText *)_S("Press k"),2,'k',EModifierFunc|EModifierCtrl|EModifierShift,0},
1.130 +//
1.131 +// Capture ups and downs
1.132 +//
1.133 + {(TText *)_S("Press <Space>"),2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0},
1.134 + {(TText *)_S("Press <Enter>"),0,EStdKeyEnter,EModifierShift,0},
1.135 + {(TText *)_S("Press <Shift><Space>"),0,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift},
1.136 + {(TText *)_S("Press <Shift><Enter>"),2,EStdKeyEnter,EModifierShift,EModifierShift},
1.137 +
1.138 +//
1.139 +// Capture ups and downs
1.140 +//
1.141 + {(TText *)_S("Press H"),0,'H',EModifierFunc|EModifierCtrl|EModifierShift,0},
1.142 + {(TText *)_S("Press J"),1,'J',EModifierFunc|EModifierCtrl|EModifierShift,0},
1.143 + {(TText *)_S("Press K"),2,'K',EModifierFunc|EModifierCtrl|EModifierShift,0},
1.144 +//
1.145 +// Priority keys
1.146 +//
1.147 + {(TText *)_S("Press <Ctrl>c"),0,0,0,0},
1.148 + {(TText *)_S("Press <Ctrl>d"),0,0,0,0},
1.149 + {(TText *)_S("Press z"),0,0,0,0},
1.150 + };
1.151 +
1.152 +LOCAL_D SAbortKeyTests abortKeyTests[]={
1.153 + {3,EModifierCtrl,EModifierCtrl},
1.154 + {4,EModifierCtrl,EModifierCtrl},
1.155 + {'z',EModifierFunc|EModifierCtrl|EModifierShift,0}
1.156 + };
1.157 +
1.158 +struct SErrorCapKey
1.159 + {
1.160 + TInt keyCode;
1.161 + TUint modifier_mask;
1.162 + TUint modifiers;
1.163 + TInt priority;
1.164 + };
1.165 +
1.166 +LOCAL_D SErrorCapKey errorKeys[]={
1.167 + {'a', EModifierFunc|EModifierShift,EModifierFunc|EModifierCtrl, 0},
1.168 + {'1', 0, EModifierFunc, 0},
1.169 + {3, EModifierCtrl,EModifierCtrl|EModifierShift, 0},
1.170 + // @SYMPREQ 417-61800: Check that attempts to capture keys with
1.171 + // EModifierLong in the modifier mask fail with KErrArgument.
1.172 + {'T', EModifierLongKey, 0, 0},
1.173 + {'u', EModifierLongKey|EModifierAlt, EModifierLongKey, 0},
1.174 + {'V', EModifierLongKey|EModifierShift, EModifierLongKey|EModifierShift, 0},
1.175 + // @SYMPREQ 417-61800: Check that attempts to capture keys with a priority
1.176 + // of KMinTInt fail with KErrArgument.
1.177 + {'W', 0, 0, KMinTInt},
1.178 + };
1.179 +
1.180 +const TInt numCapKeys=sizeof(capKeys)/sizeof(capKeys[0]);
1.181 +const TInt numCapKeysWithPriority=sizeof(capKeysWithPriority)/sizeof(capKeysWithPriority[0]);
1.182 +const TInt numTests=sizeof(capKeyTests)/sizeof(capKeyTests[0]);
1.183 +const TInt numErrorKeys=sizeof(errorKeys)/sizeof(errorKeys[0]);
1.184 +const TInt numAbortKeyTests=sizeof(abortKeyTests)/sizeof(abortKeyTests[0]);
1.185 +const TInt numUpDownKeys=sizeof(capUpAndDownKeys)/sizeof(capUpAndDownKeys[0]);
1.186 +const TInt numUpDownKeysWithPriority=sizeof(capUpAndDownKeysWithPriority)/sizeof(capUpAndDownKeysWithPriority[0]);
1.187 +const TInt numUpDownKeyTests=4;
1.188 +const TInt numUpDownKeyWithPriorityTests=3;
1.189 +const TInt numCapKeyWithPriorityTests=3;
1.190 +const TInt numCapKeyTests=numTests-numAbortKeyTests-numUpDownKeyTests-numUpDownKeyWithPriorityTests-numCapKeyWithPriorityTests;
1.191 +
1.192 +LOCAL_D TInt capKeyHandle[numCapKeys];
1.193 +LOCAL_D TInt capKeyWithPriorityHandle[numCapKeysWithPriority];
1.194 +LOCAL_D TInt capUpDownKeyHandle[numUpDownKeys];
1.195 +LOCAL_D TInt capUpDownKeyWithPriorityHandle[numUpDownKeysWithPriority];
1.196 +
1.197 +class CCKWindow;
1.198 +class CTCaptureKey;
1.199 +class CCKAbortConnection;
1.200 +
1.201 +class CCKConnectionBase : public CTClient
1.202 + {
1.203 +public:
1.204 + CCKConnectionBase(CTCaptureKey *aTest);
1.205 + void ConstructL();
1.206 +protected:
1.207 + CTCaptureKey *iTest;
1.208 + };
1.209 +
1.210 +class CCKConnection : public CCKConnectionBase
1.211 + {
1.212 +public:
1.213 + CCKConnection(CTCaptureKey *aTest, TInt aConnIndex);
1.214 + ~CCKConnection();
1.215 + void ConstructL();
1.216 + void CheckKeyL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
1.217 + void SubStateChanged();
1.218 + void KeyTestL(TInt aBool);
1.219 + void KeyL(const TKeyEvent &aKey,const TTime &aTime);
1.220 + void CheckUpDownL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
1.221 + void CheckUpDownL(const TKeyEvent &aKey);
1.222 + inline TInt Index() {return iConnIndex;}
1.223 +protected:
1.224 + TInt iConnIndex;
1.225 + CCKWindow *iWin;
1.226 + };
1.227 +
1.228 +class CAbortHandler : public CTEventBase
1.229 + {
1.230 +public:
1.231 + CAbortHandler(RWsSession *aWs, CCKAbortConnection *aConnection);
1.232 + ~CAbortHandler();
1.233 + void Request();
1.234 +protected:
1.235 + void DoCancel();
1.236 + void doRunL();
1.237 +protected:
1.238 + CCKAbortConnection *iConnection;
1.239 + };
1.240 +
1.241 +class CCKAbortConnection : public CCKConnectionBase
1.242 + {
1.243 +public:
1.244 + CCKAbortConnection(CTCaptureKey *aTest);
1.245 + ~CCKAbortConnection();
1.246 + void ConstructL();
1.247 + void ReceivedAbortEvent(TInt aHandle, TKeyEvent *aKey);
1.248 + void Foreground();
1.249 +protected:
1.250 + CAbortHandler *iAbortHandler;
1.251 + TInt iAbortKeyIndex;
1.252 + };
1.253 +
1.254 +class CCKWindow : public CTWin
1.255 + {
1.256 +public:
1.257 + CCKWindow(CTCaptureKey *aTest, TInt aConnIndex);
1.258 + void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
1.259 + void Draw();
1.260 +protected:
1.261 + TInt iConnIndex;
1.262 + CTCaptureKey *iTest;
1.263 + TRgb iBack;
1.264 + };
1.265 +
1.266 +class CCKWindowGroup : public CTWindowGroup
1.267 + {
1.268 +public:
1.269 + CCKWindowGroup(CTClient *aClient, CTCaptureKey *aTest);
1.270 + void KeyL(const TKeyEvent &aKey,const TTime &aTime);
1.271 + void KeyDownL(const TKeyEvent &aKey,const TTime &);
1.272 + void KeyUpL(const TKeyEvent &aKey,const TTime &);
1.273 + void CheckUpDown(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
1.274 +private:
1.275 + CTCaptureKey *iTest;
1.276 + };
1.277 +
1.278 +class CTCaptureKey : public CTWsGraphicsBase
1.279 + {
1.280 +public:
1.281 + CTCaptureKey(CTestStep* aStep);
1.282 + ~CTCaptureKey();
1.283 + void ConstructL();
1.284 + void EndCaptureKeyTest();
1.285 + inline TInt State() {return iState;}
1.286 + TInt SubState() const;
1.287 + void IncSubState();
1.288 + void BadParams();
1.289 + void CapKeyPurgingL();
1.290 + void SetUpPriorityKeyTest();
1.291 + void CaptureWithPriorityTest();
1.292 + void CaptureUpsAndDownsTest();
1.293 + void CaptureUpsAndDownsWithPriorityTest();
1.294 + TTestMode Mode();
1.295 + void SetMode(TTestMode aMode);
1.296 + inline TestClient* Client() {return TheClient;}
1.297 + void SendEvents();
1.298 + void CapKeyPowerOffL();
1.299 + inline TInt ScreenNumber() {return iTest->ScreenNumber();}
1.300 +protected:
1.301 + virtual void RunTestCaseL(TInt aCurTestCase);
1.302 +private:
1.303 + CCKConnection *iConn1;
1.304 + CCKConnection *iConn2;
1.305 + CCKConnection *iConn3;
1.306 + CCKAbortConnection *iAbortConn;
1.307 + TSize iWinSize;
1.308 + TInt iState;
1.309 + TInt iSubState;
1.310 + TTestMode iMode;
1.311 + };
1.312 +
1.313 +class CTCaptureKeyStep : public CTGraphicsStep
1.314 + {
1.315 +public:
1.316 + CTCaptureKeyStep();
1.317 +protected:
1.318 + //from CTGraphicsStep
1.319 + virtual CTGraphicsBase* CreateTestL();
1.320 + };
1.321 +
1.322 +_LIT(KTCaptureKeyStep,"TCaptureKey");
1.323 +
1.324 +
1.325 +#endif