os/graphics/windowing/windowserver/test/tauto/TCapKey.H
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
/**
sl@0
    17
 @file
sl@0
    18
 @test
sl@0
    19
 @internalComponent - Internal Symbian test code
sl@0
    20
*/
sl@0
    21
sl@0
    22
#ifndef __TCAPKEY_H__
sl@0
    23
#define __TCAPKEY_H__
sl@0
    24
sl@0
    25
#include <e32std.h>
sl@0
    26
#include <w32std.h>
sl@0
    27
#include "../tlib/testbase.h"
sl@0
    28
#include "AUTO.H"
sl@0
    29
#include "TGraphicsHarness.h"
sl@0
    30
sl@0
    31
enum TTestMode
sl@0
    32
	{
sl@0
    33
	EModeNormalCapture,
sl@0
    34
	EModeNormalCaptureWithPriority,
sl@0
    35
	EModeWaitingForFirstNormalCapWithPriority,
sl@0
    36
	EModeWaitingForFirstDown,
sl@0
    37
	EModeWaitingForFirstDownWithPriority,
sl@0
    38
	EModeKeyUpsAndDowns,
sl@0
    39
	EModeKeyUpsAndDownsWithPriority,
sl@0
    40
	EModeAbortKeys,
sl@0
    41
	};
sl@0
    42
enum TCapKeyRetValues
sl@0
    43
	{
sl@0
    44
	ECapKeyOkay,
sl@0
    45
	ECapKeyRetry,
sl@0
    46
	ECapKeyFail,
sl@0
    47
	};
sl@0
    48
sl@0
    49
struct SCapKeyParams
sl@0
    50
	{
sl@0
    51
	TInt connIndex;		// Connection that should capture this key
sl@0
    52
	TUint keyCode;
sl@0
    53
	TUint modifier_mask;
sl@0
    54
	TUint modifiers;
sl@0
    55
	TInt priority;
sl@0
    56
	};
sl@0
    57
sl@0
    58
struct SCapKeyTestParams
sl@0
    59
	{
sl@0
    60
	TText *txt;			// Text message telling user what to do
sl@0
    61
	TInt connIndex;		// Connection that receive the key press
sl@0
    62
	TUint keyCode;		// Expected key code
sl@0
    63
	TUint modifier_mask;// Modifiers mask for expected modifiers
sl@0
    64
	TUint modifiers;	// Expected modifiers
sl@0
    65
	};
sl@0
    66
sl@0
    67
struct SAbortKeyTests
sl@0
    68
	{
sl@0
    69
	TUint keyCode;		// Expected key code
sl@0
    70
	TUint modifier_mask;// Modifiers mask for expected modifiers
sl@0
    71
	TUint modifiers;	// Expected modifiers
sl@0
    72
	};
sl@0
    73
sl@0
    74
LOCAL_D SCapKeyParams capKeys[]={
sl@0
    75
	{1,19,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl,0},
sl@0
    76
	{2,'b',EModifierFunc|EModifierCtrl,EModifierFunc,0},
sl@0
    77
	{2,'n',EModifierFunc|EModifierCtrl,EModifierFunc,0},
sl@0
    78
	{0,3,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl,0},
sl@0
    79
	{2,'q',0,0,0},
sl@0
    80
	{2,'w',0,0,0},
sl@0
    81
	};
sl@0
    82
sl@0
    83
LOCAL_D SCapKeyParams capKeysWithPriority[]={
sl@0
    84
	{2,'h',0,0,7},
sl@0
    85
	{1,'h',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
sl@0
    86
	{0,'h',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
sl@0
    87
	{2,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,6},
sl@0
    88
	{1,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,6},
sl@0
    89
	{0,'j',EModifierFunc|EModifierCtrl|EModifierShift,0,5},
sl@0
    90
	{2,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,4},
sl@0
    91
	{1,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,3},
sl@0
    92
	{0,'k',EModifierFunc|EModifierCtrl|EModifierShift,0,2},
sl@0
    93
	};
sl@0
    94
	
sl@0
    95
LOCAL_D SCapKeyParams capUpAndDownKeys[]={
sl@0
    96
	{2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0,0},
sl@0
    97
	{2,EStdKeyEnter,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift,0},
sl@0
    98
	};
sl@0
    99
sl@0
   100
LOCAL_D SCapKeyParams capUpAndDownKeysWithPriority[]={
sl@0
   101
	{2,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
sl@0
   102
	{1,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
sl@0
   103
	{0,'H',EModifierFunc|EModifierCtrl|EModifierShift,0,7},
sl@0
   104
	{2,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,6},
sl@0
   105
	{1,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,6},
sl@0
   106
	{0,'J',EModifierFunc|EModifierCtrl|EModifierShift,0,5},
sl@0
   107
	{2,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,4},
sl@0
   108
	{1,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,3},
sl@0
   109
	{0,'K',EModifierFunc|EModifierCtrl|EModifierShift,0,2},
sl@0
   110
	};
sl@0
   111
	
sl@0
   112
LOCAL_D SCapKeyTestParams capKeyTests[]={
sl@0
   113
	{(TText *)_S("Press q"),2,'q',EModifierFunc|EModifierCtrl|EModifierShift,0},
sl@0
   114
	{(TText *)_S("Press <Alt>w"),2,'w',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
sl@0
   115
	{(TText *)_S("Press a"),0,'a',0},
sl@0
   116
	{(TText *)_S("Press <Ctrl><Alt>s"),1,19,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
sl@0
   117
	{(TText *)_S("Press <Alt>n"),2,'n',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
sl@0
   118
	{(TText *)_S("Press <Ctrl><Alt>b"),0,2,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
sl@0
   119
	{(TText *)_S("Press <Alt>d"),0,'d',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
sl@0
   120
	{(TText *)_S("Press <Ctrl><Alt>c"),0,3,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
sl@0
   121
//
sl@0
   122
// Capture normal keys with priority
sl@0
   123
//
sl@0
   124
	{(TText *)_S("Press h"),0,'h',EModifierFunc|EModifierCtrl|EModifierShift,0},
sl@0
   125
	{(TText *)_S("Press j"),1,'j',EModifierFunc|EModifierCtrl|EModifierShift,0},
sl@0
   126
	{(TText *)_S("Press k"),2,'k',EModifierFunc|EModifierCtrl|EModifierShift,0},
sl@0
   127
//
sl@0
   128
// Capture ups and downs
sl@0
   129
//
sl@0
   130
	{(TText *)_S("Press <Space>"),2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0},
sl@0
   131
	{(TText *)_S("Press <Enter>"),0,EStdKeyEnter,EModifierShift,0},
sl@0
   132
	{(TText *)_S("Press <Shift><Space>"),0,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift},
sl@0
   133
	{(TText *)_S("Press <Shift><Enter>"),2,EStdKeyEnter,EModifierShift,EModifierShift},
sl@0
   134
sl@0
   135
//
sl@0
   136
// Capture ups and downs
sl@0
   137
//
sl@0
   138
	{(TText *)_S("Press H"),0,'H',EModifierFunc|EModifierCtrl|EModifierShift,0},
sl@0
   139
	{(TText *)_S("Press J"),1,'J',EModifierFunc|EModifierCtrl|EModifierShift,0},
sl@0
   140
	{(TText *)_S("Press K"),2,'K',EModifierFunc|EModifierCtrl|EModifierShift,0},
sl@0
   141
//
sl@0
   142
// Priority keys
sl@0
   143
//
sl@0
   144
	{(TText *)_S("Press <Ctrl>c"),0,0,0,0},
sl@0
   145
	{(TText *)_S("Press <Ctrl>d"),0,0,0,0},
sl@0
   146
	{(TText *)_S("Press z"),0,0,0,0},
sl@0
   147
	};
sl@0
   148
sl@0
   149
LOCAL_D SAbortKeyTests abortKeyTests[]={
sl@0
   150
	{3,EModifierCtrl,EModifierCtrl},
sl@0
   151
	{4,EModifierCtrl,EModifierCtrl},
sl@0
   152
	{'z',EModifierFunc|EModifierCtrl|EModifierShift,0}
sl@0
   153
	};
sl@0
   154
sl@0
   155
struct SErrorCapKey
sl@0
   156
	{
sl@0
   157
	TInt keyCode;
sl@0
   158
	TUint modifier_mask;
sl@0
   159
	TUint modifiers;
sl@0
   160
	TInt priority;
sl@0
   161
	};
sl@0
   162
sl@0
   163
LOCAL_D SErrorCapKey errorKeys[]={
sl@0
   164
	{'a', EModifierFunc|EModifierShift,EModifierFunc|EModifierCtrl, 0},
sl@0
   165
	{'1', 0, EModifierFunc, 0},
sl@0
   166
	{3, EModifierCtrl,EModifierCtrl|EModifierShift, 0},
sl@0
   167
	// @SYMPREQ 417-61800: Check that attempts to capture keys with
sl@0
   168
	// EModifierLong in the modifier mask fail with KErrArgument.
sl@0
   169
	{'T', EModifierLongKey, 0, 0},
sl@0
   170
	{'u', EModifierLongKey|EModifierAlt, EModifierLongKey, 0},
sl@0
   171
	{'V', EModifierLongKey|EModifierShift, EModifierLongKey|EModifierShift, 0},
sl@0
   172
	// @SYMPREQ 417-61800: Check that attempts to capture keys with a priority
sl@0
   173
	// of KMinTInt fail with KErrArgument.
sl@0
   174
	{'W', 0, 0, KMinTInt},
sl@0
   175
	};
sl@0
   176
sl@0
   177
const TInt numCapKeys=sizeof(capKeys)/sizeof(capKeys[0]);
sl@0
   178
const TInt numCapKeysWithPriority=sizeof(capKeysWithPriority)/sizeof(capKeysWithPriority[0]);
sl@0
   179
const TInt numTests=sizeof(capKeyTests)/sizeof(capKeyTests[0]);
sl@0
   180
const TInt numErrorKeys=sizeof(errorKeys)/sizeof(errorKeys[0]);
sl@0
   181
const TInt numAbortKeyTests=sizeof(abortKeyTests)/sizeof(abortKeyTests[0]);
sl@0
   182
const TInt numUpDownKeys=sizeof(capUpAndDownKeys)/sizeof(capUpAndDownKeys[0]);
sl@0
   183
const TInt numUpDownKeysWithPriority=sizeof(capUpAndDownKeysWithPriority)/sizeof(capUpAndDownKeysWithPriority[0]);
sl@0
   184
const TInt numUpDownKeyTests=4;
sl@0
   185
const TInt numUpDownKeyWithPriorityTests=3;
sl@0
   186
const TInt numCapKeyWithPriorityTests=3;
sl@0
   187
const TInt numCapKeyTests=numTests-numAbortKeyTests-numUpDownKeyTests-numUpDownKeyWithPriorityTests-numCapKeyWithPriorityTests;
sl@0
   188
sl@0
   189
LOCAL_D TInt capKeyHandle[numCapKeys];
sl@0
   190
LOCAL_D TInt capKeyWithPriorityHandle[numCapKeysWithPriority];
sl@0
   191
LOCAL_D TInt capUpDownKeyHandle[numUpDownKeys];
sl@0
   192
LOCAL_D TInt capUpDownKeyWithPriorityHandle[numUpDownKeysWithPriority];
sl@0
   193
sl@0
   194
class CCKWindow;
sl@0
   195
class CTCaptureKey;
sl@0
   196
class CCKAbortConnection;
sl@0
   197
sl@0
   198
class CCKConnectionBase : public CTClient
sl@0
   199
	{
sl@0
   200
public:
sl@0
   201
	CCKConnectionBase(CTCaptureKey *aTest);
sl@0
   202
	void ConstructL();
sl@0
   203
protected:
sl@0
   204
	CTCaptureKey *iTest;
sl@0
   205
	};
sl@0
   206
sl@0
   207
class CCKConnection : public CCKConnectionBase
sl@0
   208
	{
sl@0
   209
public:
sl@0
   210
	CCKConnection(CTCaptureKey *aTest, TInt aConnIndex);
sl@0
   211
	~CCKConnection();
sl@0
   212
	void ConstructL();
sl@0
   213
	void CheckKeyL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
sl@0
   214
	void SubStateChanged();
sl@0
   215
	void KeyTestL(TInt aBool);
sl@0
   216
	void KeyL(const TKeyEvent &aKey,const TTime &aTime);
sl@0
   217
	void CheckUpDownL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
sl@0
   218
	void CheckUpDownL(const TKeyEvent &aKey);
sl@0
   219
	inline TInt Index() {return iConnIndex;}
sl@0
   220
protected:
sl@0
   221
	TInt iConnIndex;
sl@0
   222
	CCKWindow *iWin;
sl@0
   223
	};
sl@0
   224
sl@0
   225
class CAbortHandler : public CTEventBase
sl@0
   226
	{
sl@0
   227
public:
sl@0
   228
	CAbortHandler(RWsSession *aWs, CCKAbortConnection *aConnection);
sl@0
   229
	~CAbortHandler();
sl@0
   230
	void Request();
sl@0
   231
protected:
sl@0
   232
	void DoCancel();
sl@0
   233
	void doRunL();
sl@0
   234
protected:
sl@0
   235
	CCKAbortConnection *iConnection;
sl@0
   236
	};
sl@0
   237
sl@0
   238
class CCKAbortConnection : public CCKConnectionBase
sl@0
   239
	{
sl@0
   240
public:
sl@0
   241
	CCKAbortConnection(CTCaptureKey *aTest);
sl@0
   242
	~CCKAbortConnection();
sl@0
   243
	void ConstructL();
sl@0
   244
	void ReceivedAbortEvent(TInt aHandle, TKeyEvent *aKey);
sl@0
   245
	void Foreground();
sl@0
   246
protected:
sl@0
   247
	CAbortHandler *iAbortHandler;
sl@0
   248
	TInt iAbortKeyIndex;
sl@0
   249
	};
sl@0
   250
sl@0
   251
class CCKWindow : public CTWin
sl@0
   252
	{
sl@0
   253
public:
sl@0
   254
	CCKWindow(CTCaptureKey *aTest, TInt aConnIndex);
sl@0
   255
	void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
sl@0
   256
	void Draw();
sl@0
   257
protected:
sl@0
   258
	TInt iConnIndex;
sl@0
   259
	CTCaptureKey *iTest;
sl@0
   260
	TRgb iBack;
sl@0
   261
	};
sl@0
   262
sl@0
   263
class CCKWindowGroup : public CTWindowGroup
sl@0
   264
	{
sl@0
   265
public:
sl@0
   266
	CCKWindowGroup(CTClient *aClient, CTCaptureKey *aTest);
sl@0
   267
	void KeyL(const TKeyEvent &aKey,const TTime &aTime);
sl@0
   268
	void KeyDownL(const TKeyEvent &aKey,const TTime &);
sl@0
   269
	void KeyUpL(const TKeyEvent &aKey,const TTime &);
sl@0
   270
	void CheckUpDown(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
sl@0
   271
private:
sl@0
   272
	CTCaptureKey *iTest;
sl@0
   273
	};
sl@0
   274
sl@0
   275
class CTCaptureKey : public CTWsGraphicsBase
sl@0
   276
	{
sl@0
   277
public:
sl@0
   278
	CTCaptureKey(CTestStep* aStep);
sl@0
   279
	~CTCaptureKey();
sl@0
   280
	void ConstructL();
sl@0
   281
	void EndCaptureKeyTest();
sl@0
   282
	inline TInt State() {return iState;}
sl@0
   283
	TInt SubState() const;
sl@0
   284
	void IncSubState();
sl@0
   285
	void BadParams();
sl@0
   286
	void CapKeyPurgingL();
sl@0
   287
	void SetUpPriorityKeyTest();
sl@0
   288
	void CaptureWithPriorityTest();
sl@0
   289
	void CaptureUpsAndDownsTest();
sl@0
   290
	void CaptureUpsAndDownsWithPriorityTest();
sl@0
   291
	TTestMode Mode();
sl@0
   292
	void SetMode(TTestMode aMode);
sl@0
   293
	inline TestClient* Client() {return TheClient;}
sl@0
   294
	void SendEvents();
sl@0
   295
	void CapKeyPowerOffL();
sl@0
   296
	inline TInt ScreenNumber() {return iTest->ScreenNumber();}
sl@0
   297
protected:
sl@0
   298
	virtual void RunTestCaseL(TInt aCurTestCase);
sl@0
   299
private:
sl@0
   300
	CCKConnection *iConn1;
sl@0
   301
	CCKConnection *iConn2;
sl@0
   302
	CCKConnection *iConn3;
sl@0
   303
	CCKAbortConnection *iAbortConn;
sl@0
   304
	TSize iWinSize;
sl@0
   305
	TInt iState;
sl@0
   306
	TInt iSubState;
sl@0
   307
	TTestMode iMode;
sl@0
   308
	};
sl@0
   309
sl@0
   310
class CTCaptureKeyStep : public CTGraphicsStep
sl@0
   311
	{
sl@0
   312
public:
sl@0
   313
	CTCaptureKeyStep();
sl@0
   314
protected:	
sl@0
   315
	//from CTGraphicsStep
sl@0
   316
	virtual CTGraphicsBase* CreateTestL();
sl@0
   317
	};
sl@0
   318
sl@0
   319
_LIT(KTCaptureKeyStep,"TCaptureKey");
sl@0
   320
sl@0
   321
sl@0
   322
#endif