os/graphics/windowing/windowserver/test/tauto/TEvent.CPP
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
// Test window server events
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
/**
sl@0
    19
 @file
sl@0
    20
 @test
sl@0
    21
 @internalComponent - Internal Symbian test code
sl@0
    22
*/
sl@0
    23
sl@0
    24
#ifndef __INIPARSER_H__
sl@0
    25
#define __INIPARSER_H__
sl@0
    26
#endif // __INIPARSER_H__
sl@0
    27
sl@0
    28
#include "PARSEINIDATA.H"
sl@0
    29
#include "TEVENT.H"
sl@0
    30
#include "W32CLICK.H"
sl@0
    31
#include <w32debug.h>
sl@0
    32
#include <hal.h>
sl@0
    33
sl@0
    34
#define FAIL_LOGGING on
sl@0
    35
//#define DETAILED
sl@0
    36
#define LOGGING 1	//Uncomment this when there is a fail so that you get more logging
sl@0
    37
sl@0
    38
_LIT(KKeyClickPluginDll, "click.dll");
sl@0
    39
sl@0
    40
const TInt KLongKeyCaptureLowPriority = 1;
sl@0
    41
const TInt KLongKeyCaptureHighPriority = 2;
sl@0
    42
sl@0
    43
CTQueueClient::CTQueueClient(CTEventTest *aTest) : iTest(aTest)
sl@0
    44
	{
sl@0
    45
	}
sl@0
    46
sl@0
    47
CTQueueClient::~CTQueueClient()
sl@0
    48
	{
sl@0
    49
	CloseEventTestGroupOnSecondScreen();
sl@0
    50
	iGroup->GroupWin()->EnableReceiptOfFocus(EFalse);
sl@0
    51
	delete iChildWin;
sl@0
    52
	delete iWin;
sl@0
    53
sl@0
    54
	}
sl@0
    55
sl@0
    56
void CTQueueClient::ConstructL(TBool aCreateChild)
sl@0
    57
	{
sl@0
    58
	CTClient::ConstructL();
sl@0
    59
	iGroup=new(ELeave) CTQueueWindowGroup(this);
sl@0
    60
	iGroup->ConstructL();
sl@0
    61
	iWin=new(ELeave) CTBackedUpWin(EGray4);
sl@0
    62
	iWin->ConstructExtLD(*iGroup,TPoint(EWinPositionX,EWinPositionY),TSize(EWinWidth,EWinHeight));
sl@0
    63
	iWin->Activate();
sl@0
    64
	if (aCreateChild)
sl@0
    65
		{
sl@0
    66
		iChildWin=new(ELeave) CTBackedUpWin(EGray4);
sl@0
    67
		iChildWin->ConstructExtLD(*iWin,ChildTopLeft(),ChildSize());
sl@0
    68
		iChildWin->Activate();
sl@0
    69
		}
sl@0
    70
	iWs.Flush();
sl@0
    71
	}
sl@0
    72
sl@0
    73
void CTQueueClient::ConstructEventHandlerL()
sl@0
    74
	{
sl@0
    75
	iEventHandler=new(ELeave) CTQueueTestEvent(&iWs, iTest);
sl@0
    76
	((CTQueueTestEvent *)iEventHandler)->ConstructL();
sl@0
    77
	}
sl@0
    78
sl@0
    79
TInt CTQueueClient::WindowGroupIdentifier()
sl@0
    80
	{
sl@0
    81
	return(iGroup->GroupWin()->Identifier());
sl@0
    82
	}
sl@0
    83
sl@0
    84
CTWinBase* CTQueueClient::GetHandle(TPoint& aPos)
sl@0
    85
	{
sl@0
    86
	if (iCapturing)
sl@0
    87
		return iChildWin;
sl@0
    88
	if (iChildWin && TRect(ChildTopLeft(),ChildSize()).Contains(aPos))
sl@0
    89
	//if (iChildWin && TRect(TPoint(),ChildSize()).Contains(aPos))
sl@0
    90
		{
sl@0
    91
		aPos-=ChildTopLeft();
sl@0
    92
		if (iChildCapturing)
sl@0
    93
			iCapturing=ETrue;
sl@0
    94
		return iChildWin;
sl@0
    95
		}
sl@0
    96
	return iWin;
sl@0
    97
	}
sl@0
    98
sl@0
    99
void CTQueueClient::AddExpectedEvent(TWsEvent &aEvent)
sl@0
   100
	{
sl@0
   101
#if defined(DETAILED)
sl@0
   102
	_LIT(KLog,"   Adding Event Type=%d");
sl@0
   103
	TLogMessageText buf;
sl@0
   104
	buf.Format(KLog,aEvent.Type());
sl@0
   105
	LogMessage(buf);
sl@0
   106
#endif
sl@0
   107
	((CTQueueTestEvent *)iEventHandler)->AddExpectedEvent(aEvent);
sl@0
   108
	}
sl@0
   109
sl@0
   110
void CTQueueClient::SetChildCapture(TInt aCaptureFlags)
sl@0
   111
	{
sl@0
   112
	if (!iChildWin)
sl@0
   113
		return;
sl@0
   114
	iChildWin->BaseWin()->SetPointerCapture(aCaptureFlags);
sl@0
   115
	if (aCaptureFlags|RWindowBase::TCaptureFlagEnabled)
sl@0
   116
		iChildCapturing=ETrue;
sl@0
   117
	}
sl@0
   118
//
sl@0
   119
sl@0
   120
CTQueueTestEvent::CTQueueTestEvent(RWsSession *aWs, CTEventTest *aTest) : CTEvent(aWs)
sl@0
   121
	{
sl@0
   122
	iTest = aTest;
sl@0
   123
	iCheckTimeStamp = EFalse;
sl@0
   124
	iLastEventError = EFalse;
sl@0
   125
	}
sl@0
   126
sl@0
   127
void CTQueueTestEvent::ConstructL()
sl@0
   128
	{
sl@0
   129
	CTEventBase::Construct();
sl@0
   130
	iEventBuffer.SetLengthL(EEventBufferSize);
sl@0
   131
	iRedrawType=iTest->TestBase()->RedrawStoreTypeL();
sl@0
   132
	}
sl@0
   133
sl@0
   134
void CTQueueTestEvent::TestL(TInt aTest)
sl@0
   135
	{
sl@0
   136
	if (!aTest)
sl@0
   137
		{
sl@0
   138
		iTest->Failed();
sl@0
   139
		User::Leave(ETestFailed);
sl@0
   140
		}
sl@0
   141
	}
sl@0
   142
sl@0
   143
//#define FAIL_LOGGING yes
sl@0
   144
void CTQueueTestEvent::doRunL()
sl@0
   145
	{
sl@0
   146
	TWsEvent wsEvent;
sl@0
   147
	iWs->GetEvent(wsEvent);
sl@0
   148
	TWsEvent expectedEvent;
sl@0
   149
sl@0
   150
#if defined(FAIL_LOGGING)
sl@0
   151
	TInt eType,wsHan,eHan,wsKeyCode,eKeyCode,wsKeyRepeat,eKeyRepeat,wsKeyScan,eKeyScan;
sl@0
   152
	TLogMessageText buf;
sl@0
   153
	_LIT(KStartString,"AUTO  EventTestFail ");
sl@0
   154
#endif
sl@0
   155
	TInt wsType=wsEvent.Type();
sl@0
   156
	if (wsEvent.Type()==EEventNull)
sl@0
   157
		TestL(wsEvent.Handle()==0);
sl@0
   158
	else
sl@0
   159
		{
sl@0
   160
		TInt count=iEventBuffer.Count();
sl@0
   161
		if (count==0 && wsType==EEventFocusGained)
sl@0
   162
			goto End;
sl@0
   163
		if (iLastEventError
sl@0
   164
			&& (iRedrawType==EPartialRedraw_FullRedrawSupport || iRedrawType==EPartialRedraw_PreserveStoredCmds)
sl@0
   165
			&& wsEvent.Type()==EEventErrorMessage /*&& expectedEvent.Type()!=EEventErrorMessage*/)		//Should really check if the next expected event is an error but there is no way to do this without removing it from the buffer
sl@0
   166
			{
sl@0
   167
		#if defined(DETAILED)
sl@0
   168
			_LIT(KLog,"Skip Duplicate Error Message");
sl@0
   169
			iTest->LOG_MESSAGE(KLog);
sl@0
   170
		#endif
sl@0
   171
			return;		//Ignore repeated error events
sl@0
   172
			}
sl@0
   173
		do	{
sl@0
   174
			TestL(iEventBuffer.Remove(&expectedEvent));	//Loop needed for REL Build with DEB WSERV and W32
sl@0
   175
		#if defined(DETAILED)
sl@0
   176
			_LIT(KLog,"Skip event while waiting for error message");
sl@0
   177
			if (expectedEvent.Type()==EEventErrorMessage && wsEvent.Type()!=expectedEvent.Type())
sl@0
   178
				iTest->LOG_MESSAGE(KLog);
sl@0
   179
		#endif
sl@0
   180
			} while (expectedEvent.Type()==EEventErrorMessage && wsEvent.Type()!=expectedEvent.Type());
sl@0
   181
		++iEventCount;		//iEventSet
sl@0
   182
	#if defined(FAIL_LOGGING)
sl@0
   183
		wsType=wsEvent.Type(),eType=expectedEvent.Type(),wsHan=wsEvent.Handle(),eHan=expectedEvent.Handle();
sl@0
   184
		if (wsType!=eType)
sl@0
   185
			{
sl@0
   186
			_LIT(KEventDiff,"Count=%d  Events Differ Exp=%d  Act=%d");
sl@0
   187
			buf.Copy(KStartString);
sl@0
   188
			buf.AppendFormat(KEventDiff,iEventCount,eType,wsType);
sl@0
   189
			iTest->LOG_MESSAGE(buf);
sl@0
   190
			}
sl@0
   191
		else
sl@0
   192
			{
sl@0
   193
		#if defined(DETAILED)
sl@0
   194
			_LIT(KLog," Count=%d  Event Type=%d");
sl@0
   195
			iTest->LOG_MESSAGE3(KLog,iEventCount,wsType);
sl@0
   196
		#endif
sl@0
   197
			}
sl@0
   198
		if (wsHan!=eHan)
sl@0
   199
			{
sl@0
   200
			_LIT(KHandlesDiff,"Count=%d  Handles Differ");
sl@0
   201
			buf.Copy(KStartString);
sl@0
   202
			buf.AppendFormat(KHandlesDiff,iEventCount);
sl@0
   203
			iTest->LOG_MESSAGE(buf);
sl@0
   204
			}
sl@0
   205
	#endif
sl@0
   206
		TestL(wsEvent.Type()==expectedEvent.Type() && wsEvent.Handle()==expectedEvent.Handle());
sl@0
   207
		}		
sl@0
   208
	iLastEventError=(wsEvent.Type()==EEventErrorMessage);
sl@0
   209
sl@0
   210
	switch(wsEvent.Type())
sl@0
   211
		{
sl@0
   212
		case EEventKey:
sl@0
   213
		#if defined(FAIL_LOGGING)
sl@0
   214
			wsKeyCode=wsEvent.Key()->iCode,eKeyCode=expectedEvent.Key()->iCode;
sl@0
   215
			if (wsKeyCode!=eKeyCode)
sl@0
   216
				{
sl@0
   217
				_LIT(KKeysDiff,"Count=%d  Key Code Exp=%d (%c)  Act=%d (%c)");
sl@0
   218
				buf.Copy(KStartString);
sl@0
   219
				buf.AppendFormat(KKeysDiff,iEventCount,eKeyCode,eKeyCode,wsKeyCode,wsKeyCode);
sl@0
   220
				iTest->LOG_MESSAGE(buf);
sl@0
   221
				}
sl@0
   222
			wsKeyRepeat=wsEvent.Key()->iRepeats,eKeyRepeat=expectedEvent.Key()->iRepeats;
sl@0
   223
			if ((wsKeyRepeat>0)!=(eKeyRepeat>0) || wsKeyRepeat<eKeyRepeat)
sl@0
   224
				{
sl@0
   225
				_LIT(KKeysRepDiff,"Count=%d  Key Repeat Exp=%d  Act=%d");
sl@0
   226
				buf.Copy(KStartString);
sl@0
   227
				buf.AppendFormat(KKeysRepDiff,iEventCount,eKeyRepeat,wsKeyRepeat);
sl@0
   228
				iTest->LOG_MESSAGE(buf);
sl@0
   229
				}
sl@0
   230
		#endif
sl@0
   231
			TestL(wsEvent.Key()->iCode==expectedEvent.Key()->iCode &&
sl@0
   232
				wsEvent.Key()->iRepeats>=expectedEvent.Key()->iRepeats &&
sl@0
   233
				(wsEvent.Key()->iRepeats>0)==(expectedEvent.Key()->iRepeats>0));
sl@0
   234
			// Fall Through
sl@0
   235
		case EEventKeyDown:
sl@0
   236
		case EEventKeyUp:
sl@0
   237
			{
sl@0
   238
			TUint wsModifiers = wsEvent.Key()->iModifiers;
sl@0
   239
			TUint eModifiers = expectedEvent.Key()->iModifiers;
sl@0
   240
		#if defined(FAIL_LOGGING)
sl@0
   241
			wsKeyScan=wsEvent.Key()->iScanCode,eKeyScan=expectedEvent.Key()->iScanCode;
sl@0
   242
			if (wsKeyScan!=eKeyScan)
sl@0
   243
				{
sl@0
   244
				_LIT(KScanDiff,"Count=%d  Scan Code Exp=%d (%c)  Act=%d (%c)");
sl@0
   245
				buf.Copy(KStartString);
sl@0
   246
				buf.AppendFormat(KScanDiff,iEventCount,eKeyScan,eKeyScan,wsKeyScan,wsKeyScan);
sl@0
   247
				iTest->LOG_MESSAGE(buf);
sl@0
   248
				}
sl@0
   249
sl@0
   250
			if (eModifiers != KModifiersIgnore && wsModifiers != eModifiers)
sl@0
   251
				{
sl@0
   252
				_LIT(KModDiff,"Count=%d  Modifiers Exp=0x%x  Act=0x%x");
sl@0
   253
				buf.Copy(KStartString);
sl@0
   254
				buf.AppendFormat(KModDiff, iEventCount, eModifiers, wsModifiers);
sl@0
   255
				iTest->LOG_MESSAGE(buf);
sl@0
   256
				}
sl@0
   257
		#endif
sl@0
   258
			TestL(wsEvent.Key()->iScanCode == expectedEvent.Key()->iScanCode &&
sl@0
   259
				(eModifiers == KModifiersIgnore || wsModifiers == eModifiers));
sl@0
   260
			}
sl@0
   261
			break;
sl@0
   262
		case EEventModifiersChanged:
sl@0
   263
			{
sl@0
   264
			TBool changeModifiersOK=(wsEvent.ModifiersChanged()->iChangedModifiers
sl@0
   265
																==expectedEvent.ModifiersChanged()->iChangedModifiers);
sl@0
   266
			TBool modifiersOK=((wsEvent.ModifiersChanged()->iModifiers&wsEvent.ModifiersChanged()->iChangedModifiers)==
sl@0
   267
						(expectedEvent.ModifiersChanged()->iModifiers&wsEvent.ModifiersChanged()->iChangedModifiers));
sl@0
   268
		#if defined(FAIL_LOGGING)
sl@0
   269
			if (!changeModifiersOK || !modifiersOK)
sl@0
   270
				{
sl@0
   271
				_LIT(KModDiff,"Count=%d  Modifiers");
sl@0
   272
				buf.Copy(KStartString);
sl@0
   273
				buf.AppendFormat(KModDiff,iEventCount);
sl@0
   274
				iTest->LOG_MESSAGE(buf);
sl@0
   275
				}
sl@0
   276
		#endif
sl@0
   277
			TestL(changeModifiersOK);
sl@0
   278
			TestL(modifiersOK);
sl@0
   279
			}
sl@0
   280
			break;
sl@0
   281
		case EEventPointer:
sl@0
   282
		case EEventDragDrop:
sl@0
   283
			{
sl@0
   284
		#if defined(FAIL_LOGGING)
sl@0
   285
			TInt expectedType=expectedEvent.Pointer()->iType, actualType=wsEvent.Pointer()->iType;
sl@0
   286
			TPoint expectedPos=expectedEvent.Pointer()->iPosition, actualPos=wsEvent.Pointer()->iPosition;
sl@0
   287
			if (actualType!=expectedType)
sl@0
   288
				{
sl@0
   289
				_LIT(KPointerDiff,"Count=%d  Pointer Type Exp=%d  Act=%d");
sl@0
   290
				buf.Copy(KStartString);
sl@0
   291
				buf.AppendFormat(KPointerDiff,iEventCount,expectedType,actualType);
sl@0
   292
				iTest->LOG_MESSAGE(buf);
sl@0
   293
				}
sl@0
   294
			if (actualPos!=expectedPos)
sl@0
   295
				{
sl@0
   296
				_LIT(KPointerPosDiff,"Count=%d  Pointer Pos E=(%d,%d)  A=(%d,%d)");
sl@0
   297
				buf.Copy(KStartString);
sl@0
   298
				buf.AppendFormat(KPointerPosDiff,iEventCount,expectedPos.iX,expectedPos.iY
sl@0
   299
																,actualPos.iX,actualPos.iY);
sl@0
   300
				iTest->LOG_MESSAGE(buf);
sl@0
   301
				}
sl@0
   302
		#endif
sl@0
   303
			TestL(wsEvent.Pointer()->iType==expectedEvent.Pointer()->iType);
sl@0
   304
			TestL(wsEvent.Pointer()->iPosition==expectedEvent.Pointer()->iPosition);
sl@0
   305
			TInt count=iEventBuffer.Count();count++;			//Dummy line to help in debugging.
sl@0
   306
			}
sl@0
   307
			break;
sl@0
   308
		case EEventWindowVisibilityChanged:
sl@0
   309
			{
sl@0
   310
		#if defined(FAIL_LOGGING)
sl@0
   311
			TUint expectedFlags=expectedEvent.VisibilityChanged()->iFlags;
sl@0
   312
			TUint actualFlags=wsEvent.VisibilityChanged()->iFlags;
sl@0
   313
			if (actualFlags!=expectedFlags)
sl@0
   314
				{
sl@0
   315
				_LIT(KVisibilityDiff,"Count=%d  Visibility Flags Exp=%d  Act=%d");
sl@0
   316
				buf.Copy(KStartString);
sl@0
   317
				buf.AppendFormat(KVisibilityDiff,iEventCount,expectedFlags,actualFlags);
sl@0
   318
				iTest->LOG_MESSAGE(buf);
sl@0
   319
				}
sl@0
   320
		#endif
sl@0
   321
			TestL(wsEvent.VisibilityChanged()->iFlags==expectedEvent.VisibilityChanged()->iFlags);
sl@0
   322
			TInt count=iEventBuffer.Count();count++;			//Dummy line to help in debugging.
sl@0
   323
			}
sl@0
   324
			break;
sl@0
   325
		case EEventMessageReady:
sl@0
   326
			{
sl@0
   327
			const SEventMessageReady message = *(SEventMessageReady*)wsEvent.EventData();
sl@0
   328
			TestL(message.iMessageUid== TUid::Uid(123));
sl@0
   329
			}
sl@0
   330
			break;
sl@0
   331
		default:;
sl@0
   332
		}
sl@0
   333
	if(iCheckTimeStamp)
sl@0
   334
		{
sl@0
   335
		const TInt KOffset=100000; //0.1secs
sl@0
   336
		TInt64 offset = expectedEvent.Time().Int64() - wsEvent.Time().Int64();
sl@0
   337
		#if defined(FAIL_LOGGING)
sl@0
   338
			if(Abs(offset)<KOffset)
sl@0
   339
				{
sl@0
   340
				_LIT(KTimeStampDiff,"Count=%d  Offset=%d, ExpectedTime=%d, WServEventTime=%d");
sl@0
   341
				buf.Copy(KStartString);
sl@0
   342
				buf.AppendFormat(KTimeStampDiff,iEventCount,offset,expectedEvent.Time().Int64(),wsEvent.Time().Int64());
sl@0
   343
				iTest->LOG_MESSAGE(buf);
sl@0
   344
				}
sl@0
   345
		#endif
sl@0
   346
		TestL(Abs(offset)<KOffset);
sl@0
   347
		}
sl@0
   348
	End:
sl@0
   349
	if (iEventBuffer.Count()==0)
sl@0
   350
	    {
sl@0
   351
		TRAPD(err, iTest->NextSetOfEventsL());		//Not allowed to leave
sl@0
   352
		if(err != KErrNone)
sl@0
   353
		    {
sl@0
   354
            buf.Copy(KStartString);
sl@0
   355
            buf.AppendFormat(_L("Subtest does not follow rules set by TEvent test framework, leave code: %d"), err);
sl@0
   356
            iTest->TEST(EFalse);
sl@0
   357
            iTest->LOG_MESSAGE(buf);
sl@0
   358
            User::Leave(err);
sl@0
   359
		    }
sl@0
   360
	    }
sl@0
   361
	
sl@0
   362
	}
sl@0
   363
sl@0
   364
void CTQueueTestEvent::AddExpectedEvent(TWsEvent &aEvent)
sl@0
   365
	{
sl@0
   366
	if(iCheckTimeStamp)
sl@0
   367
		{
sl@0
   368
		static_cast<TWsQTEvent&>(aEvent).Time().UniversalTime();
sl@0
   369
		}
sl@0
   370
	iEventBuffer.Add(&aEvent);
sl@0
   371
	}
sl@0
   372
sl@0
   373
TInt CTQueueTestEvent::EventsLeft()
sl@0
   374
	{
sl@0
   375
	return iEventBuffer.Count();
sl@0
   376
	}
sl@0
   377
//
sl@0
   378
sl@0
   379
CTQueueWindowGroup::CTQueueWindowGroup(CTClient *aClient) : CTWindowGroup(aClient)
sl@0
   380
	{}
sl@0
   381
sl@0
   382
void CTQueueWindowGroup::ConstructL()
sl@0
   383
	{
sl@0
   384
	CTWindowGroup::ConstructL();
sl@0
   385
	User::LeaveIfError(iGroupWin.EnableOnEvents(EEventControlAlways));
sl@0
   386
	User::LeaveIfError(iGroupWin.EnableGroupChangeEvents());
sl@0
   387
	}
sl@0
   388
sl@0
   389
//
sl@0
   390
sl@0
   391
/**
sl@0
   392
 Closes and deletes anim DLL.
sl@0
   393
 @param aAnimDll Pointer to the anim Dll to be closed and deleted
sl@0
   394
 */
sl@0
   395
LOCAL_C void DestroyAnimDll(TAny* aAnimDll)
sl@0
   396
	{
sl@0
   397
	(static_cast<RAnimDll*>(aAnimDll))->Destroy();
sl@0
   398
	}
sl@0
   399
sl@0
   400
/**
sl@0
   401
 Destroys an REventAnimBase derived anim
sl@0
   402
 @param aAnim REventAnimBase derived client-side handle to anim
sl@0
   403
 */
sl@0
   404
LOCAL_C void DestroyAnim(TAny* aAnim)
sl@0
   405
	{
sl@0
   406
	(static_cast<REventAnimBase*>(aAnim))->Destroy();
sl@0
   407
	}
sl@0
   408
sl@0
   409
/**
sl@0
   410
 Loads the DLL containing the test anims and pushes it onto the cleanup stack.
sl@0
   411
 This function leaves if the operation was unsuccessful.
sl@0
   412
 @return A pointer to the DLL containing test anims
sl@0
   413
 */
sl@0
   414
RAnimDll* REventAnimBase::LoadL()
sl@0
   415
	{
sl@0
   416
	RAnimDll* animDll=new(ELeave) RAnimDll(TheClient->iWs);
sl@0
   417
	CleanupStack::PushL(TCleanupItem(DestroyAnimDll,animDll));
sl@0
   418
	User::LeaveIfError(animDll->Load(KAnimDLLName));
sl@0
   419
	CleanupStack::Pop(animDll);
sl@0
   420
	return animDll;
sl@0
   421
	}
sl@0
   422
sl@0
   423
/**
sl@0
   424
 Closes the client-side handle to the anim, destroys the DLL and deletes itself.
sl@0
   425
 */
sl@0
   426
void REventAnimBase::Destroy()
sl@0
   427
	{
sl@0
   428
	Close();
sl@0
   429
	delete this;
sl@0
   430
	}
sl@0
   431
sl@0
   432
/**
sl@0
   433
 Resets server-side state of anim
sl@0
   434
 */
sl@0
   435
void REventAnimBase::Reset()
sl@0
   436
	{
sl@0
   437
	CommandReply(EADllReset);
sl@0
   438
	}
sl@0
   439
sl@0
   440
/**
sl@0
   441
 @return Under non-error conditions, returns 0.
sl@0
   442
 Under error conditions, returns the number of events received
sl@0
   443
 since the first unexpected event was sent.
sl@0
   444
 */
sl@0
   445
TInt REventAnimBase::ErrorCode()
sl@0
   446
	{
sl@0
   447
	return CommandReply(EADllErrorCode);
sl@0
   448
	}
sl@0
   449
sl@0
   450
/**
sl@0
   451
 @return The number of events received by the anim since it was last reset.
sl@0
   452
 */
sl@0
   453
TInt REventAnimBase::NumberOfEventsReceived()
sl@0
   454
	{
sl@0
   455
	return CommandReply(EADllNumberOfEventsReceived);
sl@0
   456
	}
sl@0
   457
sl@0
   458
/**
sl@0
   459
 Adds an expected event to the list of events expected by the anim.
sl@0
   460
 @param aEat Indicates if event is expected to be eaten (ETrue 'indicates expected to be eaten')
sl@0
   461
 @param aEvent The expected event
sl@0
   462
 @return KErrNone if succcessful, othewise error code.
sl@0
   463
 */
sl@0
   464
TInt REventAnimBase::AddExpectedEvent(TBool aEat, const TRawEvent& aEvent)
sl@0
   465
	{
sl@0
   466
	TAnimRawEvent event;
sl@0
   467
	event.iRawEvent=aEvent;
sl@0
   468
	event.iEat=aEat;
sl@0
   469
	return AddExpectedEvent(event);
sl@0
   470
	}
sl@0
   471
sl@0
   472
/**
sl@0
   473
 Adds an expected event to the list of events expected by the anim.
sl@0
   474
 @param aEvent The expected event
sl@0
   475
 @return KErrNone if succcessful, othewise error code.
sl@0
   476
 */
sl@0
   477
TInt REventAnimBase::AddExpectedEvent(const TAnimRawEvent& aEvent)
sl@0
   478
	{
sl@0
   479
	TPckgBuf<TAnimRawEvent> param;
sl@0
   480
	param()=aEvent;
sl@0
   481
	return CommandReply(EADllAddExpectedEvent,param);
sl@0
   482
	}
sl@0
   483
sl@0
   484
//
sl@0
   485
sl@0
   486
/**
sl@0
   487
 Loads the DLL containing the event test anim and creates an anim for event tests
sl@0
   488
 @param aWin the base window to which the anim is associated (this anim is a Window anim)
sl@0
   489
 @return A pointer to the new REventAnim
sl@0
   490
 */
sl@0
   491
REventAnim* REventAnim::NewL(RWindowBase* aWin, RAnimDll* aDll, REventAnimBase::EAnimationType aType/*=EEventAnim*/)
sl@0
   492
	{
sl@0
   493
	REventAnim* self=new(ELeave) REventAnim(aDll);
sl@0
   494
	CleanupStack::PushL(TCleanupItem(DestroyAnim,self));
sl@0
   495
	User::LeaveIfError(self->Construct(*aWin,(aType == EEventAnim ? EAnimTypeEventTest : EAnimTypeEventPostingTest), TPtrC8()));
sl@0
   496
	CleanupStack::Pop(self);
sl@0
   497
	return self;
sl@0
   498
	}
sl@0
   499
sl@0
   500
/**
sl@0
   501
 Checks if the anim has received the correct events, and resets the sever-side state of the anim
sl@0
   502
 @return positive value if events did not match expected showing the first event that didn't match.
sl@0
   503
         negative value if there were the wrong number of events showing the number of events there were
sl@0
   504
         0 if correct number of events and they all match
sl@0
   505
 */
sl@0
   506
TInt REventAnim::TestFail(TInt aNoEvents)
sl@0
   507
	{
sl@0
   508
	TInt events=CommandReply(EADllErrorCode);
sl@0
   509
	if (events>0)
sl@0
   510
		return events;
sl@0
   511
	events=CommandReply(EADllNoEventsAndReset);
sl@0
   512
	if (events==aNoEvents)
sl@0
   513
		return 0;
sl@0
   514
	return -events;
sl@0
   515
	}
sl@0
   516
sl@0
   517
//
sl@0
   518
/**
sl@0
   519
 Loads the DLL containing the event test anim and creates an anim for event handler removal tests
sl@0
   520
 @param aWin the base window to which the anim is associated (this anim is a Window anim)
sl@0
   521
 @return A pointer to the new REventAnim
sl@0
   522
 */
sl@0
   523
RRemovableAnim* RRemovableAnim::NewLC(RWindowBase* aWin, RAnimDll* aDll)
sl@0
   524
	{
sl@0
   525
	RRemovableAnim* self=new(ELeave) RRemovableAnim(aDll);
sl@0
   526
	CleanupStack::PushL(TCleanupItem(DestroyAnim,self));
sl@0
   527
	User::LeaveIfError(self->Construct(*aWin,EAnimTypeRemovableAnim,TPtrC8()));
sl@0
   528
	return self;
sl@0
   529
	}
sl@0
   530
sl@0
   531
/**
sl@0
   532
 Sets the lifetime of the anim. This anim will remove itself from the
sl@0
   533
 event handler list after receiving this number of events.
sl@0
   534
 @return The lifetime of the anim
sl@0
   535
 */
sl@0
   536
TInt RRemovableAnim::SetEventHandlerLifetime(TInt aEventCount)
sl@0
   537
	{
sl@0
   538
	TPckgBuf<TInt> param;
sl@0
   539
	param()=aEventCount;
sl@0
   540
	return CommandReply(EADllSetEventHandlerLifetime, param);
sl@0
   541
	}
sl@0
   542
sl@0
   543
/**
sl@0
   544
 Retrieves the lifetime of the anim. This anim will remove itself from the
sl@0
   545
 event handler list after receiving this number of events.
sl@0
   546
 @return The lifetime of the anim
sl@0
   547
 */
sl@0
   548
TInt RRemovableAnim::EventHandlerLifetime()
sl@0
   549
	{
sl@0
   550
	return CommandReply(EADllEventHandlerLifetime);
sl@0
   551
	}
sl@0
   552
/**
sl@0
   553
 Adds the anim to the list of event handlers.
sl@0
   554
 This anim should receive any subsequent events.
sl@0
   555
 @return KErrNone on successful addition.
sl@0
   556
 */
sl@0
   557
TInt RRemovableAnim::AddToEventHandlers()
sl@0
   558
	{
sl@0
   559
	return CommandReply(EADllAddToEventHandlers);
sl@0
   560
	}
sl@0
   561
sl@0
   562
/**
sl@0
   563
 Removes the anim from the list of event handlers.
sl@0
   564
 This anim should not receive any subsequent events.
sl@0
   565
 @return KErrNone on successful removal.
sl@0
   566
 */
sl@0
   567
TInt RRemovableAnim::RemoveFromEventHandlers()
sl@0
   568
	{
sl@0
   569
	return CommandReply(EADllRemoveFromEventHandlers);
sl@0
   570
	}
sl@0
   571
sl@0
   572
/**
sl@0
   573
 Tests if the anim has received the correct number of events, and that
sl@0
   574
 the events received are all the correct events.
sl@0
   575
 @param aNoEvents The total expected number of events since it was last reset/constructed.
sl@0
   576
 @return ETrue if the anim has received the expected events.
sl@0
   577
 */
sl@0
   578
TBool RRemovableAnim::TestPassed()
sl@0
   579
	{
sl@0
   580
	return CommandReply(EADllTestPassed);
sl@0
   581
	}
sl@0
   582
sl@0
   583
//
sl@0
   584
sl@0
   585
CTEventTest::CTEventTest(CTestStep* aStep) : CTWsGraphicsBase(aStep)
sl@0
   586
	{
sl@0
   587
	INFO_PRINTF1(_L("Testing Event functions"));
sl@0
   588
	}
sl@0
   589
sl@0
   590
CTEventTest::~CTEventTest()
sl@0
   591
	{
sl@0
   592
	delete iBlankWin;
sl@0
   593
	iBackingWindow.Close();
sl@0
   594
	delete iVisWins1;
sl@0
   595
	delete iVisWins2;
sl@0
   596
	delete iVisWins3;
sl@0
   597
	delete iTransWin;
sl@0
   598
	delete iQueueClient;
sl@0
   599
	if (iAnim)
sl@0
   600
		iAnim->Destroy();
sl@0
   601
	delete iEventTestGroup2;		//Just in case it doesn't get deleted normally
sl@0
   602
	delete iEventTestGroup3;		//Just in case it doesn't get deleted normally
sl@0
   603
	delete iEventTestGroup4;        //Just in case it doesn't get deleted normally
sl@0
   604
	if (iPtrPluginLoaded)
sl@0
   605
	    {
sl@0
   606
	    iClick.Unload();
sl@0
   607
	    }
sl@0
   608
	iClick.Close();
sl@0
   609
	if (iTurnBackOnCapsLock)
sl@0
   610
		{
sl@0
   611
		TheClient->iWs.SetModifierState(EModifierCapsLock,ETurnOnModifier);
sl@0
   612
		}
sl@0
   613
	if (iRemovableAnims)
sl@0
   614
		{
sl@0
   615
		EventHandlerRemoval_DestroyAllAnims();
sl@0
   616
		iRemovableAnims->Close();
sl@0
   617
		delete iRemovableAnims;
sl@0
   618
		}
sl@0
   619
	if (iAnimDll)
sl@0
   620
		{
sl@0
   621
		iAnimDll->Destroy();
sl@0
   622
		}
sl@0
   623
#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS	
sl@0
   624
#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA  	
sl@0
   625
	if (!iSurfaceId.IsNull())
sl@0
   626
	    {
sl@0
   627
	    iSurfaceManager.CloseSurface(iSurfaceId);
sl@0
   628
	    }
sl@0
   629
	iSurfaceManager.Close();
sl@0
   630
	if(iTimeOutCallback)
sl@0
   631
	    {
sl@0
   632
	    iTimeOutCallback->Cancel();
sl@0
   633
	    delete iTimeOutCallback;
sl@0
   634
	    }
sl@0
   635
#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
sl@0
   636
#endif // SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
sl@0
   637
	}
sl@0
   638
sl@0
   639
void CTEventTest::ConstructL()
sl@0
   640
	{
sl@0
   641
    _LIT(KWsIniFile, "z:\\system\\data\\wsini.ini");
sl@0
   642
    CIniData* iniData = CIniData::NewL(KWsIniFile, ' ');
sl@0
   643
    _LIT( KWsiniYShifting, "YSHIFTING");
sl@0
   644
    iniData->FindVar(KWsiniYShifting, iYOffset);
sl@0
   645
    delete iniData;
sl@0
   646
	TheClient->iScreen->SetAppScreenMode(0);
sl@0
   647
	TheClient->iScreen->SetScreenMode(0);						// in mode 0 TheClient->iScreen->SizeInPixels() 
sl@0
   648
	iPhysicalScreenSize = TheClient->iScreen->SizeInPixels();	// is equal to physical screen size
sl@0
   649
	BaseWin->Invalidate();
sl@0
   650
	BaseWin->Win()->BeginRedraw();
sl@0
   651
	TheGc->Activate(*BaseWin->Win());
sl@0
   652
	TheGc->SetBrushColor(TRgb::Gray16(12));
sl@0
   653
	TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   654
	TheGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   655
	TheGc->DrawRect(TRect(BaseWin->Win()->Size()));
sl@0
   656
	TheGc->Deactivate();
sl@0
   657
	BaseWin->Win()->EndRedraw();
sl@0
   658
	TheGc->Activate(*TestWin->Win());
sl@0
   659
	TheGc->SetBrushColor(TRgb::Gray16(4));
sl@0
   660
	TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   661
	TheGc->SetPenStyle(CGraphicsContext::ENullPen);
sl@0
   662
	TheGc->DrawRect(TRect(TestWin->Win()->Size()));
sl@0
   663
	TheGc->Deactivate();
sl@0
   664
	iBackingWindow=RBlankWindow(TheClient->iWs);
sl@0
   665
	iBackingWindow.Construct(*TheClient->iGroup->WinTreeNode(),ENullWsHandle);
sl@0
   666
	iBackingWindow.SetColor(TRgb(0,0xDD,0xDD));
sl@0
   667
	iBackingWindow.SetOrdinalPosition(-1,-25);
sl@0
   668
	iBackingWindow.Activate();
sl@0
   669
	iBlankWin=new(ELeave) CTBlankWindow();
sl@0
   670
	iBlankWin->ConstructL(*TheClient->iGroup);
sl@0
   671
	User::LeaveIfError(iBlankWin->BaseWin()->SetRequiredDisplayMode(EColor256));
sl@0
   672
	iBlankWin->SetExt(TPoint(),iPhysicalScreenSize);
sl@0
   673
	iBlankWin->SetVisible(EFalse);
sl@0
   674
	iBlankWin->Activate();
sl@0
   675
	CArrayFixFlat<TInt> *rotations=new(ELeave) CArrayFixFlat<TInt>(1);
sl@0
   676
	iNumScrModes=TheClient->iScreen->NumScreenModes();
sl@0
   677
	TInt modes=Min(2,iNumScrModes);
sl@0
   678
	TInt mode;
sl@0
   679
	TInt rot;
sl@0
   680
	CleanupStack::PushL(rotations);
sl@0
   681
	for (mode=0;mode<modes;++mode)
sl@0
   682
		{
sl@0
   683
		User::LeaveIfError(TheClient->iScreen->GetRotationsList(mode,rotations));
sl@0
   684
		for (rot=rotations->Count()-1;rot>=0;--rot)
sl@0
   685
			{
sl@0
   686
			iScreenModeTests|=(1<<(*rotations)[rot]);
sl@0
   687
			}
sl@0
   688
		}
sl@0
   689
	if (CheckScalingSupportedOrNot())
sl@0
   690
		iScreenModeTests|=EDoScale;
sl@0
   691
sl@0
   692
	iClick=RSoundPlugIn(TheClient->iWs);
sl@0
   693
	User::LeaveIfError(iClick.Construct(TUid::Uid(CLICK_THIRD_UID)));
sl@0
   694
    TBool ptrPluginLoadable = EFalse;
sl@0
   695
    iClick.IsLoaded(ptrPluginLoadable);
sl@0
   696
    if (ptrPluginLoadable)
sl@0
   697
        {
sl@0
   698
        User::LeaveIfError(iClick.Load(KKeyClickPluginDll));
sl@0
   699
        iPtrPluginLoaded = ETrue;
sl@0
   700
        }
sl@0
   701
	CleanupStack::PopAndDestroy();
sl@0
   702
	if (TheClient->iWs.GetModifierState()&EModifierCapsLock)
sl@0
   703
		{
sl@0
   704
		iTurnBackOnCapsLock=ETrue;
sl@0
   705
		TheClient->iWs.SetModifierState(EModifierCapsLock,ETurnOffModifier);
sl@0
   706
		}
sl@0
   707
	iAnimDll = REventAnimBase::LoadL();
sl@0
   708
	TInt mods=TheClient->iWs.GetModifierState();
sl@0
   709
	if (mods&EModifierCapsLock)
sl@0
   710
		iTest->SimulateKeyDownUp(EStdKeyCapsLock);
sl@0
   711
	if (mods&EModifierNumLock)
sl@0
   712
		iTest->SimulateKeyDownUp(EStdKeyNumLock);
sl@0
   713
	//Make sure all the keys we test are in the up state
sl@0
   714
	iTest->SimulateKeyDownUp(EStdKeyLeftShift);
sl@0
   715
	iTest->SimulateKeyDownUp(EStdKeyRightShift);
sl@0
   716
	iTest->SimulateKeyDownUp(EStdKeyLeftFunc);
sl@0
   717
	iTest->SimulateKeyDownUp(EStdKeyLeftCtrl);
sl@0
   718
	iTest->SimulateKeyDownUp(EStdKeyRightCtrl);
sl@0
   719
	mods=TheClient->iWs.GetModifierState();
sl@0
   720
	_LIT(KLog,"Initial Modifiers state 0x%x (ideally should be zero)");
sl@0
   721
	LOG_MESSAGE2(KLog,mods);
sl@0
   722
	iTest->DelayIfFullRomL();
sl@0
   723
sl@0
   724
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
   725
	// 2d or 3d pointer?
sl@0
   726
	if(HAL::Get(HALData::EPointer3D,iIs3DPointer)!=KErrNone)
sl@0
   727
		{
sl@0
   728
		iIs3DPointer=EFalse;
sl@0
   729
		}
sl@0
   730
#endif
sl@0
   731
	TheClient->iWs.GetKeyboardRepeatRate(iKeyBoardRepeatInitialDelay, iKeyBoardRepeatNextDelay);
sl@0
   732
	}
sl@0
   733
sl@0
   734
void CTEventTest::Failed()
sl@0
   735
	{
sl@0
   736
#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS	
sl@0
   737
#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA  	
sl@0
   738
   if(iTimeOutCallback)
sl@0
   739
        {
sl@0
   740
        iTimeOutCallback->Cancel();
sl@0
   741
        iTimeOutCallback->Deque();
sl@0
   742
        delete iTimeOutCallback;
sl@0
   743
        iTimeOutCallback = NULL;
sl@0
   744
        }
sl@0
   745
    TEST(EFalse);
sl@0
   746
#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
sl@0
   747
#endif // SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
sl@0
   748
	CActiveScheduler::Stop();
sl@0
   749
	iFailed=ETrue;
sl@0
   750
	}
sl@0
   751
sl@0
   752
void CTEventTest::CheckTimeInterval(const TTimeIntervalMicroSeconds32 &aTime,TInt aCheckTime)
sl@0
   753
	{
sl@0
   754
	TEST(aTime.Int()==aCheckTime);
sl@0
   755
	if (aTime.Int()!=aCheckTime)
sl@0
   756
		INFO_PRINTF3(_L("aTime.Int()==aCheckTime - Expected: %d, Actual: %d"), aCheckTime, aTime.Int());
sl@0
   757
	}
sl@0
   758
sl@0
   759
void CTEventTest::KeyRepeatRate(TInt aInitialRepeat, TInt aRepeat)
sl@0
   760
	{
sl@0
   761
	TheClient->iWs.SetKeyboardRepeatRate(TTimeIntervalMicroSeconds32(aInitialRepeat), TTimeIntervalMicroSeconds32(aRepeat));
sl@0
   762
	TTimeIntervalMicroSeconds32 initialTime;
sl@0
   763
	TTimeIntervalMicroSeconds32 time;
sl@0
   764
	TheClient->iWs.GetKeyboardRepeatRate(initialTime,time);
sl@0
   765
	CheckTimeInterval(initialTime,aInitialRepeat);
sl@0
   766
	CheckTimeInterval(time,aRepeat);
sl@0
   767
	}
sl@0
   768
sl@0
   769
void CTEventTest::DoubleClickSettings(TInt aInterval, TInt aDistance)
sl@0
   770
	{
sl@0
   771
	TheClient->iWs.SetDoubleClick(TTimeIntervalMicroSeconds32(aInterval), aDistance);
sl@0
   772
	TTimeIntervalMicroSeconds32 interval;
sl@0
   773
	TInt distance;
sl@0
   774
	TheClient->iWs.GetDoubleClickSettings(interval, distance);
sl@0
   775
	CheckTimeInterval(interval,aInterval);
sl@0
   776
	TEST(aDistance==distance);
sl@0
   777
	if (aDistance!=distance)
sl@0
   778
		INFO_PRINTF3(_L("aDistance==distance - Expected: %d, Actual: %d"), distance, aDistance);
sl@0
   779
	}
sl@0
   780
sl@0
   781
TInt EventCancelFunc(TAny* aClient)
sl@0
   782
	{
sl@0
   783
	TWsQTEvent event;
sl@0
   784
	event.SetType(EEventModifiersChanged);
sl@0
   785
	((TModifiersChangedEvent *)event.EventData())->iChangedModifiers=0;
sl@0
   786
	((TModifiersChangedEvent *)event.EventData())->iModifiers=0;
sl@0
   787
	TheClient->iWs.SendEventToWindowGroup(TheClient->iGroup->GroupWin()->Identifier(),event);
sl@0
   788
//
sl@0
   789
	TRequestStatus status;
sl@0
   790
	((CTClient *)aClient)->iWs.EventReady(&status);
sl@0
   791
	((CTClient *)aClient)->iWs.EventReadyCancel();
sl@0
   792
	User::WaitForRequest(status);
sl@0
   793
	return(KErrNone);
sl@0
   794
	}
sl@0
   795
sl@0
   796
void CTEventTest::General()
sl@0
   797
	{
sl@0
   798
	TWsQTEvent event;
sl@0
   799
	event.SetType(EEventModifiersChanged);
sl@0
   800
	((TModifiersChangedEvent *)event.EventData())->iChangedModifiers=0;
sl@0
   801
	((TModifiersChangedEvent *)event.EventData())->iModifiers=0;
sl@0
   802
	TheClient->iWs.SendEventToWindowGroup(TheClient->iGroup->GroupWin()->Identifier(),event);
sl@0
   803
	TCallBack callBack(EventCancelFunc,TheClient);
sl@0
   804
	TheClient->SetCancelFunction(callBack);
sl@0
   805
//
sl@0
   806
	TTimeIntervalMicroSeconds32 oldInitialTime;
sl@0
   807
	TTimeIntervalMicroSeconds32 oldTime;
sl@0
   808
	TheClient->iWs.GetKeyboardRepeatRate(oldInitialTime,oldTime);
sl@0
   809
//
sl@0
   810
	KeyRepeatRate(EKeyboardInitialRepeat1, EKeyboardRepeat1);
sl@0
   811
	KeyRepeatRate(EKeyboardInitialRepeat2, EKeyboardRepeat2);
sl@0
   812
	KeyRepeatRate(EKeyboardInitialRepeat3+200, EKeyboardRepeat3); // Max initial repeat with normal keyboard repeat value
sl@0
   813
	KeyRepeatRate(EKeyboardInitialRepeat3, EKeyboardRepeat7+200); // Max key and initial repeat
sl@0
   814
	KeyRepeatRateNegTest(EKeyboardInitialRepeat4, EKeyboardRepeat4); // -ve initial repeat
sl@0
   815
	KeyRepeatRateNegTest(EKeyboardInitialRepeat2, EKeyboardRepeat6); // -ve keyboard repeat
sl@0
   816
	#if defined __WINS__ || defined __WINSCW__
sl@0
   817
	KeyRepeatRateNegTest(EKeyboardInitialRepeat3+400, EKeyboardRepeat5); // More than max initial repeat
sl@0
   818
	#endif//defined __WINS__ || defined __WINSCW__
sl@0
   819
	DoubleClickSettings(EDoubleClickTime1,EDoubleClickGap1);
sl@0
   820
	DoubleClickSettings(EDoubleClickTime2,EDoubleClickGap2);
sl@0
   821
	TheClient->iWs.SetKeyboardRepeatRate(oldInitialTime,oldTime);
sl@0
   822
//
sl@0
   823
	}
sl@0
   824
sl@0
   825
#define UNIQUE_PRIORITY 123
sl@0
   826
void CTEventTest::General2()
sl@0
   827
	{
sl@0
   828
	RWindowGroup& group=*TheClient->iGroup->GroupWin();
sl@0
   829
	TInt priority=group.OrdinalPriority();
sl@0
   830
	TInt position=group.OrdinalPosition();
sl@0
   831
	TInt priorityGain=TheClient->iWs.GetWindowGroupOrdinalPriority(group.Identifier())-priority;
sl@0
   832
	group.SetOrdinalPosition(0,UNIQUE_PRIORITY);
sl@0
   833
	TWsQTEvent event;
sl@0
   834
	event.SetType(EEventModifiersChanged);
sl@0
   835
	((TModifiersChangedEvent *)event.EventData())->iChangedModifiers=0;
sl@0
   836
	((TModifiersChangedEvent *)event.EventData())->iModifiers=0;
sl@0
   837
	TheClient->iWs.SendEventToAllWindowGroups(UNIQUE_PRIORITY+priorityGain,event);
sl@0
   838
	TCallBack callBack(EventCancelFunc,TheClient);
sl@0
   839
	TheClient->SetCancelFunction(callBack);
sl@0
   840
	group.SetOrdinalPosition(position,priority);
sl@0
   841
	}
sl@0
   842
sl@0
   843
void CTEventTest::AddExpectedKey(TInt aEventCode, TInt aScanCode, TInt aCode/*=0*/, TInt aRepeats/*=0*/, TUint aModifiers/*=KModifiersIgnore*/)
sl@0
   844
	{
sl@0
   845
	TPckgBuf<TWsEvent> evtPkg;
sl@0
   846
	TWsEvent& event=evtPkg();
sl@0
   847
	if (aEventCode==EEventKey && aCode==0)
sl@0
   848
		aCode=aScanCode;
sl@0
   849
	event.SetType(aEventCode);
sl@0
   850
	event.SetHandle((TInt)iQueueClient->iGroup);
sl@0
   851
	event.Key()->iCode=aCode;
sl@0
   852
	event.Key()->iScanCode=aScanCode;
sl@0
   853
	event.Key()->iModifiers=aModifiers;
sl@0
   854
	event.Key()->iRepeats=aRepeats;
sl@0
   855
	iQueueClient->AddExpectedEvent(event);
sl@0
   856
	if (iAddToClick)
sl@0
   857
		{
sl@0
   858
		if (aModifiers == KModifiersIgnore)
sl@0
   859
			{
sl@0
   860
			// Key click tests assume zero modifiers in click event by default
sl@0
   861
			event.Key()->iModifiers = 0;
sl@0
   862
			}
sl@0
   863
		iClick.CommandReply(EClickEventAdd,evtPkg);
sl@0
   864
		}
sl@0
   865
	}
sl@0
   866
sl@0
   867
void CTEventTest::AddExpectedKeyDownUp(TInt aScanCode, TInt aCode/*=0*/, TInt aRepeats/*=0*/, TUint aModifiers/*=KModifiersIgnore*/)
sl@0
   868
	{
sl@0
   869
	__ASSERT_DEBUG(aScanCode<'a' || aScanCode>'z',AutoPanic(EAutoPanicScanCapital));
sl@0
   870
	// EModiferAutorepeatable can be present in EEventKey but is never valid
sl@0
   871
	// in EEventKeyDown and EEventKeyUp. 
sl@0
   872
	TUint modifiersDownUp = (aModifiers == KModifiersIgnore) ?
sl@0
   873
		aModifiers : aModifiers & ~EModifierAutorepeatable;
sl@0
   874
sl@0
   875
	AddExpectedKey(EEventKeyDown,aScanCode,0,aRepeats,modifiersDownUp);
sl@0
   876
	AddExpectedKey(EEventKey,aScanCode,aCode,aRepeats,aModifiers);
sl@0
   877
	AddExpectedKey(EEventKeyUp,aScanCode,0,aRepeats,modifiersDownUp);
sl@0
   878
	}
sl@0
   879
sl@0
   880
void CTEventTest::AddExpectedEvent(TInt aEventCode, CTWinBase* aWin)
sl@0
   881
	{
sl@0
   882
	TWsQTEvent event;
sl@0
   883
	event.iType=aEventCode;
sl@0
   884
	event.iHandle=REINTERPRET_CAST(TInt,aWin);
sl@0
   885
	iQueueClient->AddExpectedEvent(event);
sl@0
   886
	}
sl@0
   887
sl@0
   888
void CTEventTest::AddExpectedEvent(TInt aEventCode, RWindowGroup* aWindow)
sl@0
   889
	{
sl@0
   890
	TWsQTEvent event;
sl@0
   891
	event.iType=aEventCode;
sl@0
   892
	event.iHandle=(TUint32)aWindow;
sl@0
   893
	iQueueClient->AddExpectedEvent(event);
sl@0
   894
	}
sl@0
   895
sl@0
   896
void CTEventTest::AddExpectedEvent(TInt aEventCode)
sl@0
   897
	{
sl@0
   898
	AddExpectedEvent(aEventCode,iQueueClient->iGroup);
sl@0
   899
	}
sl@0
   900
sl@0
   901
void CTEventTest::AddExpectedErrorMessage(TWsErrorMessage::TErrorCategory aCategory, TInt aError)
sl@0
   902
	{
sl@0
   903
	TWsQTEvent event;
sl@0
   904
	event.iType=EEventErrorMessage;
sl@0
   905
	event.iHandle=(TInt)iQueueClient->iGroup;
sl@0
   906
	event.ErrorMessage()->iErrorCategory=aCategory;
sl@0
   907
	event.ErrorMessage()->iError=aError;
sl@0
   908
	iQueueClient->AddExpectedEvent(event);
sl@0
   909
	}
sl@0
   910
sl@0
   911
void CTEventTest::CalculatePointerEvent(TWsEvent& aEvent,TPointerEvent::TType aType, TPoint aPos)
sl@0
   912
	{
sl@0
   913
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
   914
	TAdvancedPointerEvent& ptrEvent=*aEvent.Pointer();
sl@0
   915
	aEvent.SetType(EEventPointer);
sl@0
   916
	ptrEvent.iParentPosition=aPos;
sl@0
   917
	// SetHandle must be done after iParentPosition is set, but before iPosition is set.
sl@0
   918
	aEvent.SetHandle(reinterpret_cast<TInt>(iQueueClient->GetHandle(aPos)));	
sl@0
   919
	const TPoint3D point3D(aPos.iX, aPos.iY, 0);
sl@0
   920
	const TInt pointerEventModifiers=0;
sl@0
   921
	const TUint8 pointerNumber=0;
sl@0
   922
	aEvent.InitAdvancedPointerEvent(aType,pointerEventModifiers,point3D,pointerNumber);
sl@0
   923
#else	
sl@0
   924
	TPointerEvent& ptrEvent=*aEvent.Pointer();
sl@0
   925
	aEvent.SetType(EEventPointer);
sl@0
   926
	ptrEvent.iParentPosition=aPos;		//Must be done before next line
sl@0
   927
	aEvent.SetHandle(REINTERPRET_CAST(TInt,iQueueClient->GetHandle(aPos)));
sl@0
   928
	ptrEvent.iType=aType;
sl@0
   929
	ptrEvent.iModifiers=0;
sl@0
   930
	ptrEvent.iPosition=aPos;
sl@0
   931
#endif
sl@0
   932
	}
sl@0
   933
sl@0
   934
void CTEventTest::CalculatePointerCaptureEvent(TWsEvent& aEvent, TPointerEvent::TType aType, TPoint aPos, TInt aHandle)
sl@0
   935
	{
sl@0
   936
	TPointerEvent& ptrEvent=*aEvent.Pointer();
sl@0
   937
	aEvent.SetType(EEventPointer);
sl@0
   938
	ptrEvent.iParentPosition=aPos;		//Must be done before next line
sl@0
   939
	if(iVisWins1 && iVisWins2)
sl@0
   940
		{
sl@0
   941
		if (TRect(iQueueClient->ChildTopLeft(),iQueueClient->ChildSize()).Contains(aPos) &&
sl@0
   942
			!TRect(iQueueClient->ChildTopLeft()+TPoint(15,15),iQueueClient->ChildSize()).Contains(aPos))
sl@0
   943
			{
sl@0
   944
			aPos-=iQueueClient->ChildTopLeft();	//Pointer is on the first window
sl@0
   945
			aEvent.SetHandle((TInt)iVisWins1);
sl@0
   946
			}
sl@0
   947
		else if (TRect(iQueueClient->ChildTopLeft()+TPoint(15,15),iQueueClient->ChildSize()).Contains(aPos))
sl@0
   948
			{
sl@0
   949
			aPos-=(iQueueClient->ChildTopLeft()+TPoint(15,15));	//Pointer is on the second window
sl@0
   950
			aEvent.SetHandle((TInt)iVisWins2);
sl@0
   951
			}
sl@0
   952
		else if (TRect(TPoint(EWinPositionX,EWinPositionY),TSize(EWinWidth,EWinHeight)).Contains(aPos))
sl@0
   953
			{
sl@0
   954
			aPos-=TPoint(EWinPositionX,EWinPositionY);	//Pointer is on the parent window
sl@0
   955
			aEvent.SetHandle((TInt)iQueueClient->iWin);
sl@0
   956
			}
sl@0
   957
		else
sl@0
   958
			{
sl@0
   959
			aEvent.SetHandle((TInt)0);		//Pointer is not in the same window group
sl@0
   960
			}
sl@0
   961
		}
sl@0
   962
	ptrEvent.iType=aType;
sl@0
   963
	ptrEvent.iModifiers=0;
sl@0
   964
	if(aHandle!=0 && aHandle!=aEvent.Handle())
sl@0
   965
		{
sl@0
   966
		aEvent.SetHandle(aHandle);
sl@0
   967
		ptrEvent.iPosition=ptrEvent.iParentPosition-(iQueueClient->ChildTopLeft()+TPoint(15,15));
sl@0
   968
		}
sl@0
   969
	else
sl@0
   970
		{
sl@0
   971
		ptrEvent.iPosition=aPos;
sl@0
   972
		}
sl@0
   973
	}
sl@0
   974
sl@0
   975
void CTEventTest::AddExpectedPointerCapture(TPointerEvent::TType aType, TPoint aPos, TInt aHandle)
sl@0
   976
	{
sl@0
   977
	TPckgBuf<TWsQTEvent> evtPkg;
sl@0
   978
	CalculatePointerCaptureEvent(evtPkg(),aType,aPos,aHandle);
sl@0
   979
	iQueueClient->AddExpectedEvent(evtPkg());
sl@0
   980
	}
sl@0
   981
sl@0
   982
void CTEventTest::AddExpectedPointer(TPointerEvent::TType aType, TPoint aPos)
sl@0
   983
	{
sl@0
   984
	TPckgBuf<TWsQTEvent> evtPkg;
sl@0
   985
	CalculatePointerEvent(evtPkg(),aType,aPos);
sl@0
   986
	iQueueClient->AddExpectedEvent(evtPkg());
sl@0
   987
	if (iAddToClick)
sl@0
   988
		{
sl@0
   989
		evtPkg().Pointer()->iParentPosition+=TPoint(EWinPositionX,EWinPositionY);
sl@0
   990
		iClick.CommandReply(EClickEventAdd,evtPkg);
sl@0
   991
		}
sl@0
   992
	}
sl@0
   993
sl@0
   994
void CTEventTest::AddExpectedPointerClick(TPointerEvent::TType aType, TPoint aPos)
sl@0
   995
	{
sl@0
   996
	TPckgBuf<TWsQTEvent> evtPkg;
sl@0
   997
	CalculatePointerEvent(evtPkg(),aType,aPos);
sl@0
   998
	evtPkg().Pointer()->iParentPosition+=TPoint(EWinPositionX,EWinPositionY);
sl@0
   999
	iClick.CommandReply(EClickEventAdd,evtPkg);
sl@0
  1000
	}
sl@0
  1001
sl@0
  1002
void CTEventTest::AddExpectedPointerDownUp(TPoint aPos)
sl@0
  1003
	{
sl@0
  1004
	AddExpectedPointer(TPointerEvent::EButton1Down,aPos);
sl@0
  1005
	AddExpectedPointer(TPointerEvent::EButton1Up,aPos);
sl@0
  1006
	}
sl@0
  1007
sl@0
  1008
void CTEventTest::AddExpectedPointerScr(TPointerEvent::TType aType, TPoint aPos)
sl@0
  1009
	{
sl@0
  1010
	AddExpectedPointer(aType,TPoint(aPos.iX-EWinPositionX,aPos.iY-EWinPositionY));
sl@0
  1011
	}
sl@0
  1012
sl@0
  1013
void CTEventTest::AddExpectedPointerDownUpScr(TPoint aPos)
sl@0
  1014
	{
sl@0
  1015
	AddExpectedPointerDownUp(TPoint(aPos.iX-EWinPositionX,aPos.iY-EWinPositionY));
sl@0
  1016
	}
sl@0
  1017
sl@0
  1018
void CTEventTest::AddExpectedModifiersChanged(TInt aChangedModifiers, TInt aModifiers)
sl@0
  1019
	{
sl@0
  1020
	TWsQTEvent event;
sl@0
  1021
	event.iType=EEventModifiersChanged;
sl@0
  1022
	event.iHandle=(TInt)iQueueClient->iGroup;
sl@0
  1023
	event.ModifiersChanged()->iChangedModifiers=aChangedModifiers;
sl@0
  1024
	event.ModifiersChanged()->iModifiers=aModifiers;
sl@0
  1025
	iQueueClient->AddExpectedEvent(event);
sl@0
  1026
	}
sl@0
  1027
sl@0
  1028
void CTEventTest::AddExpectedEnterExit(TInt aEventCode, TPoint aPos)
sl@0
  1029
	{
sl@0
  1030
	AddExpectedEvent(aEventCode,iQueueClient->GetHandle(aPos));
sl@0
  1031
	}
sl@0
  1032
sl@0
  1033
void CTEventTest::AddExpectedKeyAnim(TRawEvent::TType aEventCode, TInt aScanCode, TBool aEat)
sl@0
  1034
	{
sl@0
  1035
	TAnimRawEvent event;
sl@0
  1036
	event.iRawEvent.Set(aEventCode,aScanCode);
sl@0
  1037
	event.iEat=aEat;
sl@0
  1038
	TInt retVal = iAnim->AddEvent(event);
sl@0
  1039
	TEST(retVal==KErrNone);
sl@0
  1040
	if (retVal!=KErrNone)
sl@0
  1041
		INFO_PRINTF3(_L("iAnim->AddEvent(event) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
  1042
sl@0
  1043
	if (!aEat)
sl@0
  1044
		AddExpectedKey((aEventCode==TRawEvent::EKeyDown ? EEventKeyDown:EEventKeyUp),aScanCode);
sl@0
  1045
	}
sl@0
  1046
sl@0
  1047
void CTEventTest::AddExpectedPointerAnim(TRawEvent::TType aEventCode, TPoint aPoint, TBool aEat/*=ETrue*/)
sl@0
  1048
	{
sl@0
  1049
	TAnimRawEvent event;
sl@0
  1050
	event.iRawEvent.Set(aEventCode,aPoint.iX,aPoint.iY);
sl@0
  1051
	event.iEat=aEat;
sl@0
  1052
sl@0
  1053
	TInt retVal = iAnim->AddEvent(event);
sl@0
  1054
	TEST(retVal==KErrNone);
sl@0
  1055
	if (retVal!=KErrNone)
sl@0
  1056
		INFO_PRINTF3(_L("iAnim->AddEvent(event) return value - Expected: %d, Actual: %d"), KErrNone, retVal);
sl@0
  1057
sl@0
  1058
	if (!aEat)
sl@0
  1059
		AddExpectedPointer((aEventCode==TRawEvent::EButton1Down ? TPointerEvent::EButton1Down:TPointerEvent::EButton1Up)
sl@0
  1060
																			,aPoint-TPoint(EWinPositionX,EWinPositionY));
sl@0
  1061
	}
sl@0
  1062
sl@0
  1063
void CTEventTest::AddExpectedVisibilityChange(TUint aFlags)
sl@0
  1064
	{
sl@0
  1065
	TWsQTEvent event;
sl@0
  1066
	event.iType=EEventWindowVisibilityChanged;
sl@0
  1067
	event.iHandle=(TInt)iVisWins1;
sl@0
  1068
	event.VisibilityChanged()->iFlags=aFlags;
sl@0
  1069
	iQueueClient->AddExpectedEvent(event);
sl@0
  1070
	}
sl@0
  1071
sl@0
  1072
void CTEventTest::AddExpectedVisibilityChange(TUint aFlags, CTBlankWindow* aWindow)
sl@0
  1073
    {
sl@0
  1074
    TWsQTEvent event;
sl@0
  1075
    event.iType=EEventWindowVisibilityChanged;
sl@0
  1076
    event.iHandle=(TInt)aWindow;
sl@0
  1077
    event.VisibilityChanged()->iFlags=aFlags;
sl@0
  1078
    iQueueClient->AddExpectedEvent(event);
sl@0
  1079
    }
sl@0
  1080
sl@0
  1081
void CTEventTest::SimulatePointerWin(TRawEvent::TType aType, TInt aX, TInt aY)
sl@0
  1082
	{
sl@0
  1083
	SimulatePointer(aType,EWinPositionX+aX,EWinPositionY+aY+iYOffset);
sl@0
  1084
	}
sl@0
  1085
sl@0
  1086
void CTEventTest::SimulatePointerDownUpWin(TInt aX, TInt aY)
sl@0
  1087
	{
sl@0
  1088
	iTest->SimulatePointerDownUp(EWinPositionX+aX,EWinPositionY+aY+iYOffset);
sl@0
  1089
	}
sl@0
  1090
sl@0
  1091
void CTEventTest::SimulatePointer(TRawEvent::TType aType, TInt aX, TInt aY)
sl@0
  1092
    {
sl@0
  1093
    iTest->SimulatePointer(aType,aX,aY+iYOffset);
sl@0
  1094
    }
sl@0
  1095
sl@0
  1096
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
  1097
void CTEventTest::SimulateButton1DownWithSimulatedMove(TInt aX, TInt aY)
sl@0
  1098
	{
sl@0
  1099
	if(iIs3DPointer)
sl@0
  1100
		{
sl@0
  1101
		// With advanced pointer events we can have an XYInputType of Pointer coupled with 3DPointer
sl@0
  1102
		// which now makes MovesAvailable return ETrue rahter than EFalse, which in turn stops the simulated
sl@0
  1103
		// Emove from being generated.
sl@0
  1104
		// So...
sl@0
  1105
		// If MovesAvailable() returns ETrue, then this move will be used, and the WServ simulated move wont be generated
sl@0
  1106
		// If MovesAvailable() returns EFalse, then this move will be filtered out, and the WServ simulated move will be generated		
sl@0
  1107
		SimulatePointer(TRawEvent::EPointerMove,aX,aY);
sl@0
  1108
		}
sl@0
  1109
	// then the original button down event
sl@0
  1110
	SimulatePointer(TRawEvent::EButton1Down,aX,aY);	
sl@0
  1111
	}
sl@0
  1112
#endif
sl@0
  1113
sl@0
  1114
void CTEventTest::NextSetOfEventsL()
sl@0
  1115
	{
sl@0
  1116
	iQueueClient->ResetCount(iEventSet);
sl@0
  1117
	switch (iTest->iState)
sl@0
  1118
		{
sl@0
  1119
	case 1:
sl@0
  1120
		QueuePurge_NextSetOfEventsL();
sl@0
  1121
		break;
sl@0
  1122
	case 2:
sl@0
  1123
		SendEventTest_NextSetOfEvents();
sl@0
  1124
		break;
sl@0
  1125
	case 4:
sl@0
  1126
		InvisibleWindow_NextSetOfEvents();
sl@0
  1127
		break;
sl@0
  1128
	case 5:
sl@0
  1129
		JavaAdditions_NextSetOfEvents();
sl@0
  1130
		break;
sl@0
  1131
	case 6:
sl@0
  1132
		WinCap_NextSetOfEvents();
sl@0
  1133
		break;
sl@0
  1134
	case 7:
sl@0
  1135
		XyInputType_NextSetOfEvents();
sl@0
  1136
		break;
sl@0
  1137
	case 8:
sl@0
  1138
		MovingPointerCursor_NextSetOfEventsL();
sl@0
  1139
		break;
sl@0
  1140
	case 9:
sl@0
  1141
		RotatedMode_NextSetOfEventsL();
sl@0
  1142
		break;
sl@0
  1143
	case 10:
sl@0
  1144
		AnimEvent_NextSetOfEventsL();
sl@0
  1145
		break;
sl@0
  1146
	case 11:
sl@0
  1147
		FocusChanged_NextSetOfEventsL();
sl@0
  1148
		break;
sl@0
  1149
	case 12:
sl@0
  1150
		StopEvents_NextSetOfEventsL();
sl@0
  1151
		break;
sl@0
  1152
	case 13:
sl@0
  1153
		VirtualKeyboard_NextSetOfEventsL();
sl@0
  1154
		break;
sl@0
  1155
	case 14:
sl@0
  1156
		KeyClicks_NextSetOfEvents();
sl@0
  1157
		break;
sl@0
  1158
	case 15:
sl@0
  1159
		CaptureLong_NextSetOfEventsL();
sl@0
  1160
		break;
sl@0
  1161
	case 16:
sl@0
  1162
		Password_NextSetOfEvents();
sl@0
  1163
		break;
sl@0
  1164
	case 17:
sl@0
  1165
		GroupListChanged_NextSetOfEventsL();
sl@0
  1166
		break;
sl@0
  1167
	case 18:
sl@0
  1168
		RepeatableKeysL();
sl@0
  1169
		break;
sl@0
  1170
	case 19:
sl@0
  1171
		ScreenScaling_NextSetOfEventsL();
sl@0
  1172
		break;
sl@0
  1173
	case 20:
sl@0
  1174
		VisibilityChanged_NextSetOfEventsL();
sl@0
  1175
		break;
sl@0
  1176
	case 21:
sl@0
  1177
		CheckTimeStamp_NextSetOfEventsL();
sl@0
  1178
		break;
sl@0
  1179
	case 22:
sl@0
  1180
		PointerCapture_NextSetOfEventsL();
sl@0
  1181
		break;
sl@0
  1182
	case 23:
sl@0
  1183
		EventHandlerRemoval_NextSetOfEventsL();
sl@0
  1184
		break;	
sl@0
  1185
	// Note that case 24 (which is KTest24) does not use NextSetOfEventsL()	
sl@0
  1186
	case 25:
sl@0
  1187
		MismatchedCapture_NextSetOfEventsL();
sl@0
  1188
		break;
sl@0
  1189
	case 26:
sl@0
  1190
		PointerBufferPurge_NextSetOfEventsL();		
sl@0
  1191
		break;	
sl@0
  1192
	case 27:
sl@0
  1193
	    RawEventRepeatTest_NextSetOfEventsL();
sl@0
  1194
	    break;
sl@0
  1195
sl@0
  1196
#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA 	    
sl@0
  1197
    case 28:
sl@0
  1198
        KeyEventTranslation_NextSetOfEventsL();
sl@0
  1199
        break;
sl@0
  1200
    case 29:
sl@0
  1201
        KeyEventBlocking_NextSetOfEventsL();
sl@0
  1202
        break;
sl@0
  1203
    case 30:
sl@0
  1204
        KeyEventAppRestriction_NextSetOfEventsL();
sl@0
  1205
        break;
sl@0
  1206
    case 31:
sl@0
  1207
        KeyEventAppPriority_NextSetOfEventsL();
sl@0
  1208
        break;
sl@0
  1209
#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS	    
sl@0
  1210
    case 32:
sl@0
  1211
        SurfaceVisibilityChanged1_NextSetOfEventsL();
sl@0
  1212
        break;
sl@0
  1213
    case 33:
sl@0
  1214
        SurfaceVisibilityChanged2_NextSetOfEventsL();
sl@0
  1215
        break;
sl@0
  1216
    case 34:
sl@0
  1217
        SurfaceVisibilityChanged3_NextSetOfEventsL();
sl@0
  1218
        break;
sl@0
  1219
#endif // SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
sl@0
  1220
#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
sl@0
  1221
        
sl@0
  1222
	default:
sl@0
  1223
		AutoPanic(EAutoPanicWrongTest);
sl@0
  1224
		}
sl@0
  1225
	}
sl@0
  1226
sl@0
  1227
void CTEventTest::TriggerOomMessage(TTimeIntervalMinutes aPeriod)
sl@0
  1228
	{
sl@0
  1229
	TTime time;
sl@0
  1230
	if (aPeriod.Int()!=0) // adjust time to affect Oom message triggering
sl@0
  1231
		{
sl@0
  1232
		time.HomeTime();
sl@0
  1233
		User::SetHomeTime(time+aPeriod);
sl@0
  1234
		}
sl@0
  1235
	RBlankWindow win(TheClient->iWs);
sl@0
  1236
	win.Construct(*(TheClient->iGroup->WinTreeNode()),1);
sl@0
  1237
	win.SetColor(TRgb::Gray4(1));
sl@0
  1238
	win.SetExtent(TPoint(10,10),TheClient->iGroup->Size()-TSize(20,20));
sl@0
  1239
	TheClient->iWs.HeapSetFail(RHeap::EDeterministic,1);
sl@0
  1240
	win.Activate();
sl@0
  1241
	TheClient->iWs.Flush();
sl@0
  1242
	TheClient->iWs.HeapSetFail(RHeap::ENone,0);
sl@0
  1243
	if (aPeriod.Int()!=0)
sl@0
  1244
		{
sl@0
  1245
		time.HomeTime();
sl@0
  1246
		User::SetHomeTime(time-aPeriod);
sl@0
  1247
		}
sl@0
  1248
	win.Close();
sl@0
  1249
	}
sl@0
  1250
sl@0
  1251
TBool CTEventTest::SetClickType(TClickOutputModes aType)
sl@0
  1252
	{
sl@0
  1253
	TPckgBuf<TInt> intPkg;
sl@0
  1254
	intPkg()=aType;
sl@0
  1255
	TInt err=iClick.CommandReply(EClickCommandSetOutput,intPkg);
sl@0
  1256
	if (err!=KErrNone)
sl@0
  1257
		Failed();
sl@0
  1258
	return err;
sl@0
  1259
	}
sl@0
  1260
sl@0
  1261
void CTEventTest::CreateEventTestGroup()
sl@0
  1262
	{
sl@0
  1263
	iEventTestGroup=RWindowGroup(TheClient->iWs);
sl@0
  1264
	iEventTestGroup.Construct(123, EFalse);
sl@0
  1265
	iEventTestGroup.SetName(_L("Fred"));
sl@0
  1266
	}
sl@0
  1267
sl@0
  1268
void CTQueueClient::CreateEventTestGroupOnSecondScreenL()
sl@0
  1269
	{
sl@0
  1270
	const TInt KSndScreenNo=1;
sl@0
  1271
	iSndScreen=new(ELeave) CWsScreenDevice(iWs);
sl@0
  1272
	User::LeaveIfError(iSndScreen->Construct(KSndScreenNo));
sl@0
  1273
	iWinGp1 = new(ELeave) RWindowGroup(iWs);
sl@0
  1274
	User::LeaveIfError(iWinGp1->Construct((TUint32)iWinGp1,ETrue,iSndScreen));
sl@0
  1275
	iWinGp2 = new (ELeave) RWindowGroup(iWs);
sl@0
  1276
	User::LeaveIfError(iWinGp2->Construct((TUint32)iWinGp2,ETrue,iSndScreen));
sl@0
  1277
	}
sl@0
  1278
sl@0
  1279
void CTQueueClient::CloseEventTestGroupOnSecondScreen()
sl@0
  1280
	{
sl@0
  1281
	if(iWinGp1)
sl@0
  1282
		{
sl@0
  1283
		iWinGp1->Close();
sl@0
  1284
		delete iWinGp1;
sl@0
  1285
		iWinGp1=NULL;
sl@0
  1286
		}
sl@0
  1287
	if(iWinGp2)
sl@0
  1288
		{
sl@0
  1289
		iWinGp2->Close();
sl@0
  1290
		delete iWinGp2;
sl@0
  1291
		iWinGp2=NULL;
sl@0
  1292
		}
sl@0
  1293
	if(iSndScreen)
sl@0
  1294
		{
sl@0
  1295
		delete iSndScreen;
sl@0
  1296
		iSndScreen = NULL;
sl@0
  1297
		}
sl@0
  1298
	}
sl@0
  1299
sl@0
  1300
void CTEventTest::CloseEventTestGroup()
sl@0
  1301
	{
sl@0
  1302
	iEventTestGroup.Close();
sl@0
  1303
	}
sl@0
  1304
sl@0
  1305
void CTEventTest::CreateAndCloseEventTestGroup()
sl@0
  1306
//
sl@0
  1307
// Create and close a window group to test sending of group changed messages
sl@0
  1308
//
sl@0
  1309
	{
sl@0
  1310
	CreateEventTestGroup();
sl@0
  1311
	CloseEventTestGroup();
sl@0
  1312
	}
sl@0
  1313
sl@0
  1314
void CTEventTest::QueuePurge_NextSetOfEventsL()
sl@0
  1315
	{
sl@0
  1316
#if defined(LOGGING)
sl@0
  1317
	TLogMessageText logMessageText;
sl@0
  1318
	_LIT(KSet,"QueuePurge SetOfEvents: %d of 11");
sl@0
  1319
	logMessageText.Format(KSet,iEventSet);
sl@0
  1320
	TheClient->LogMessage(logMessageText);
sl@0
  1321
#endif
sl@0
  1322
	iTheClientFlush=TheClient->iWs.SetAutoFlush(ETrue);
sl@0
  1323
	iQuequeClientFlush=iQueueClient->iWs.SetAutoFlush(ETrue);
sl@0
  1324
	switch(iEventSet++)
sl@0
  1325
		{
sl@0
  1326
		case 0:
sl@0
  1327
			iTest->SimulateKey(TRawEvent::EKeyDown,32);
sl@0
  1328
			iTest->SimulateKey(TRawEvent::EKeyUp,32);
sl@0
  1329
			CreateAndCloseEventTestGroup();
sl@0
  1330
			SimulatePointer(TRawEvent::EButton1Down,10,20);
sl@0
  1331
			SimulatePointer(TRawEvent::EButton1Up,20,30);
sl@0
  1332
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  1333
			CreateAndCloseEventTestGroup();
sl@0
  1334
		//
sl@0
  1335
			AddExpectedEvent(EEventFocusGained);
sl@0
  1336
			AddExpectedKey(EEventKeyDown,32);
sl@0
  1337
			AddExpectedKey(EEventKeyUp,32);
sl@0
  1338
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  1339
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(10-EWinPositionX,20-EWinPositionY));
sl@0
  1340
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(20-EWinPositionX,30-EWinPositionY));
sl@0
  1341
			AddExpectedEvent(EEventSwitchOn);
sl@0
  1342
			break;
sl@0
  1343
		case 1:
sl@0
  1344
			{
sl@0
  1345
			for(TInt count=0;count<100;count++)
sl@0
  1346
				{
sl@0
  1347
				iTest->SimulateKey(TRawEvent::EKeyDown,'A'+(count%26));
sl@0
  1348
				iTest->SimulateKey(TRawEvent::EKeyUp,'A'+(count%26));
sl@0
  1349
				}
sl@0
  1350
			for(TInt count2=0;count2<EMaxEventQueueSize/3;count2++)
sl@0
  1351
				{
sl@0
  1352
				AddExpectedKey(EEventKeyDown,'A'+(count2%26));
sl@0
  1353
				AddExpectedKey(EEventKey,'A'+(count2%26),'a'+(count2%26));
sl@0
  1354
				AddExpectedKey(EEventKeyUp,'A'+(count2%26));
sl@0
  1355
				}
sl@0
  1356
			AddExpectedKey(EEventKeyDown,'A'+(99%26));
sl@0
  1357
			AddExpectedKey(EEventKeyUp,'A'+(99%26));
sl@0
  1358
			}
sl@0
  1359
			break;
sl@0
  1360
		case 2:
sl@0
  1361
			{
sl@0
  1362
			User::LeaveIfError(iQueueClient->iGroup->GroupWin()->EnableModifierChangedEvents(0xFFFFFFFF, EEventControlOnlyWhenVisible));
sl@0
  1363
			for(TInt count=0;count<20;count++)
sl@0
  1364
				{
sl@0
  1365
				iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  1366
				iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  1367
				iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftShift);
sl@0
  1368
				iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyRightShift);
sl@0
  1369
				iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyRightShift);
sl@0
  1370
				iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  1371
				iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftShift);
sl@0
  1372
				}
sl@0
  1373
			for(TInt count2=0;count2<60;count2++)
sl@0
  1374
				iTest->SimulateKey(TRawEvent::EKeyDown,'A');
sl@0
  1375
			AddExpectedEvent(EEventSwitchOn);
sl@0
  1376
			AddExpectedModifiersChanged(EModifierLeftShift|EModifierRightShift|EModifierShift,0);
sl@0
  1377
			for(TInt count3=0;count3<EMaxEventQueueSize-2;count3++)
sl@0
  1378
				AddExpectedKey(EEventKeyDown,'A');
sl@0
  1379
			iQueueClient->iGroup->GroupWin()->DisableModifierChangedEvents();
sl@0
  1380
			}
sl@0
  1381
			break;
sl@0
  1382
		case 3:
sl@0
  1383
			{
sl@0
  1384
			SimulatePointer(TRawEvent::EButton1Up,10,20);
sl@0
  1385
			SimulatePointer(TRawEvent::EButton2Up,11,22);
sl@0
  1386
			SimulatePointer(TRawEvent::EButton1Down,12,23);
sl@0
  1387
			SimulatePointer(TRawEvent::EPointerMove,13,24);
sl@0
  1388
			SimulatePointer(TRawEvent::EButton3Down,15,25);
sl@0
  1389
			SimulatePointer(TRawEvent::EButton1Up,14,24);
sl@0
  1390
			for(TInt count2=0;count2<60;count2++)
sl@0
  1391
				iTest->SimulateKey(TRawEvent::EKeyDown,'A');
sl@0
  1392
			SimulatePointer(TRawEvent::EButton3Up,15,25); // Should get stripped by unmatched purged down handling code
sl@0
  1393
			iTest->SimulateKey(TRawEvent::EKeyUp,'A');	// To stop repeats
sl@0
  1394
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(10-EWinPositionX,20-EWinPositionY));
sl@0
  1395
			AddExpectedPointer(TPointerEvent::EButton2Up, TPoint(11-EWinPositionX,22-EWinPositionY));
sl@0
  1396
			for(TInt count3=0;count3<EMaxEventQueueSize-2;count3++)
sl@0
  1397
				AddExpectedKey(EEventKeyDown,'A');
sl@0
  1398
			}
sl@0
  1399
			break;
sl@0
  1400
		case 4:
sl@0
  1401
			{
sl@0
  1402
			SimulatePointer(TRawEvent::EButton1Up,10,20);
sl@0
  1403
			SimulatePointer(TRawEvent::EButton2Up,11,22);
sl@0
  1404
			iTest->SimulateKey(TRawEvent::EKeyDown,'B');
sl@0
  1405
			SimulatePointer(TRawEvent::EButton1Down,12,23);
sl@0
  1406
			SimulatePointer(TRawEvent::EPointerMove,13,24);
sl@0
  1407
			iTest->SimulateKey(TRawEvent::EKeyUp,'B');
sl@0
  1408
			SimulatePointer(TRawEvent::EButton3Down,15,25);
sl@0
  1409
			SimulatePointer(TRawEvent::EButton1Up,14,24);
sl@0
  1410
			iQueueClient->iWs.PurgePointerEvents();
sl@0
  1411
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  1412
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(10-EWinPositionX,20-EWinPositionY));
sl@0
  1413
			AddExpectedPointer(TPointerEvent::EButton2Up, TPoint(11-EWinPositionX,22-EWinPositionY));
sl@0
  1414
			AddExpectedKey(EEventKeyDown,'B');
sl@0
  1415
			AddExpectedKey(EEventKey,'B','b');
sl@0
  1416
			AddExpectedKey(EEventKeyUp,'B');
sl@0
  1417
//			AddExpectedPointer(TPointerEvent::EButton3Down, TPoint(15-EWinPositionX,25-EWinPositionY));
sl@0
  1418
			AddExpectedEvent(EEventSwitchOn);	// To check pointer events purged okay
sl@0
  1419
			}
sl@0
  1420
			break;
sl@0
  1421
		case 5:
sl@0
  1422
			CreateEventTestGroup();
sl@0
  1423
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  1424
			break;
sl@0
  1425
		case 6:
sl@0
  1426
			CloseEventTestGroup();
sl@0
  1427
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  1428
			break;
sl@0
  1429
		case 7:
sl@0
  1430
			iQueueClient->iGroup->GroupWin()->DisableGroupChangeEvents();
sl@0
  1431
			CreateAndCloseEventTestGroup();
sl@0
  1432
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  1433
			AddExpectedEvent(EEventSwitchOn);
sl@0
  1434
			break;
sl@0
  1435
		case 8:
sl@0
  1436
			SimulatePointer(TRawEvent::EButton1Down,12,23);
sl@0
  1437
			iQueueClient->iWs.PurgePointerEvents();
sl@0
  1438
			SimulatePointer(TRawEvent::EButton1Up,13,24);
sl@0
  1439
			SimulatePointer(TRawEvent::EButton2Down,12,23);
sl@0
  1440
			iQueueClient->iWs.PurgePointerEvents();
sl@0
  1441
			SimulatePointer(TRawEvent::EButton2Up,13,24);
sl@0
  1442
			SimulatePointer(TRawEvent::EButton3Down,12,23);
sl@0
  1443
			iQueueClient->iWs.PurgePointerEvents();
sl@0
  1444
			SimulatePointer(TRawEvent::EButton3Up,13,24);
sl@0
  1445
//
sl@0
  1446
			SendEvent(EEventUser);
sl@0
  1447
			AddExpectedEvent(EEventUser);
sl@0
  1448
			break;
sl@0
  1449
		case 9:
sl@0
  1450
			{
sl@0
  1451
			for(TInt count5=0;count5<500;count5++)
sl@0
  1452
				{
sl@0
  1453
				RWindowGroup group(TheClient->iWs);
sl@0
  1454
				group.Construct(ENullWsHandle);
sl@0
  1455
				group.EnableReceiptOfFocus(EFalse);
sl@0
  1456
				group.Close();
sl@0
  1457
				SimulatePointer(TRawEvent::EButton1Up,10,20);
sl@0
  1458
				}
sl@0
  1459
			for(TInt count4=0;count4<EMaxEventQueueSize;count4++)
sl@0
  1460
				AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(10-EWinPositionX,20-EWinPositionY));
sl@0
  1461
			}
sl@0
  1462
			break;
sl@0
  1463
		case 10:
sl@0
  1464
			{
sl@0
  1465
			RWindowGroup *group=iQueueClient->iGroup->GroupWin();
sl@0
  1466
			User::LeaveIfError(group->EnableOnEvents(EEventControlOnlyWithKeyboardFocus));
sl@0
  1467
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  1468
			SimulatePointer(TRawEvent::EButton3Down,EWinPositionX,EWinPositionY);
sl@0
  1469
			AddExpectedEvent(EEventSwitchOn);
sl@0
  1470
			AddExpectedPointer(TPointerEvent::EButton3Down, TPoint(0,0));
sl@0
  1471
//
sl@0
  1472
			group->SetOrdinalPosition(-1);
sl@0
  1473
			TheClient->iWs.Finish();
sl@0
  1474
			iTest->SimulateEvent(TRawEvent::ESwitchOn);	// Shouldn't get it as in background this time
sl@0
  1475
			AddExpectedEvent(EEventFocusLost);
sl@0
  1476
			group->SetOrdinalPosition(0);
sl@0
  1477
			TheClient->iWs.Finish();
sl@0
  1478
			AddExpectedEvent(EEventFocusGained);
sl@0
  1479
//
sl@0
  1480
			User::LeaveIfError(group->EnableOnEvents(EEventControlOnlyWhenVisible));
sl@0
  1481
			User::LeaveIfError(group->EnableModifierChangedEvents(EModifierShift, EEventControlOnlyWhenVisible));
sl@0
  1482
			iTest->SimulateEvent(TRawEvent::ESwitchOn);	// Should get this as window still visible
sl@0
  1483
			AddExpectedEvent(EEventSwitchOn);
sl@0
  1484
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftShift);	// Should get modifier changed event as window still visible
sl@0
  1485
			AddExpectedModifiersChanged(EModifierShift,EModifierShift);
sl@0
  1486
			AddExpectedKey(EEventKeyDown,EStdKeyLeftShift);
sl@0
  1487
			SimulatePointer(TRawEvent::EButton1Down,EWinPositionX,EWinPositionY);
sl@0
  1488
			SimulatePointer(TRawEvent::EButton1Up,EWinPositionX,EWinPositionY);
sl@0
  1489
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(0,0));
sl@0
  1490
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(0,0));
sl@0
  1491
			iQueueClient->iWin->SetPos(TPoint(-EWinWidth,-EWinHeight));
sl@0
  1492
			TheClient->iWs.Finish();
sl@0
  1493
// The following two events shouldn't cause an on or mod changed event as the window is now hidden
sl@0
  1494
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  1495
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftShift);
sl@0
  1496
			AddExpectedKey(EEventKeyUp,EStdKeyLeftShift);
sl@0
  1497
//
sl@0
  1498
			iQueueClient->iWin->SetPos(TPoint(EWinPositionX,EWinPositionY));
sl@0
  1499
			TheClient->iWs.Finish();
sl@0
  1500
			}
sl@0
  1501
			break;
sl@0
  1502
		case 11:
sl@0
  1503
			{
sl@0
  1504
			RWindowGroup *group=iQueueClient->iGroup->GroupWin();
sl@0
  1505
			SendEvent(EEventUser);
sl@0
  1506
			AddExpectedEvent(EEventUser);
sl@0
  1507
sl@0
  1508
			if(iTest->IsFullRomL())
sl@0
  1509
				break;
sl@0
  1510
//
sl@0
  1511
// Test focus only messages when with and without focus
sl@0
  1512
//
sl@0
  1513
			User::LeaveIfError(group->EnableErrorMessages(EEventControlOnlyWithKeyboardFocus));
sl@0
  1514
			TriggerOomMessage(TTimeIntervalMinutes(3));
sl@0
  1515
			AddExpectedErrorMessage(TWsErrorMessage::EDrawingRegion,KErrNoMemory);
sl@0
  1516
			SendEvent(EEventUser);
sl@0
  1517
			AddExpectedEvent(EEventUser);
sl@0
  1518
			group->SetOrdinalPosition(1);
sl@0
  1519
			TriggerOomMessage(TTimeIntervalMinutes(3));
sl@0
  1520
			AddExpectedEvent(EEventFocusLost);
sl@0
  1521
			group->SetOrdinalPosition(0);
sl@0
  1522
			AddExpectedEvent(EEventFocusGained);
sl@0
  1523
			SendEvent(EEventUser+1);
sl@0
  1524
			AddExpectedEvent(EEventUser+1);
sl@0
  1525
//
sl@0
  1526
// Test focus only messages when with visible and invisible
sl@0
  1527
//
sl@0
  1528
			User::LeaveIfError(group->EnableErrorMessages(EEventControlOnlyWhenVisible));
sl@0
  1529
			TriggerOomMessage(TTimeIntervalMinutes(3));
sl@0
  1530
			AddExpectedErrorMessage(TWsErrorMessage::EDrawingRegion,KErrNoMemory);
sl@0
  1531
			iQueueClient->iWin->SetPos(TPoint(-EWinWidth,-EWinHeight));
sl@0
  1532
			TriggerOomMessage(TTimeIntervalMinutes(3));
sl@0
  1533
			SendEvent(EEventUser+2);
sl@0
  1534
			AddExpectedEvent(EEventUser+2);
sl@0
  1535
			iQueueClient->iWin->SetPos(TPoint(EWinPositionX,EWinPositionY));
sl@0
  1536
//
sl@0
  1537
// Check always mode sends an event
sl@0
  1538
//
sl@0
  1539
			User::LeaveIfError(group->EnableErrorMessages(EEventControlAlways));
sl@0
  1540
			TriggerOomMessage(TTimeIntervalMinutes(3));
sl@0
  1541
			AddExpectedErrorMessage(TWsErrorMessage::EDrawingRegion,KErrNoMemory);
sl@0
  1542
//
sl@0
  1543
			iQueueClient->iWin->SetPos(TPoint(-EWinWidth,-EWinHeight));
sl@0
  1544
			TriggerOomMessage(TTimeIntervalMinutes(3));
sl@0
  1545
			AddExpectedErrorMessage(TWsErrorMessage::EDrawingRegion,KErrNoMemory);
sl@0
  1546
			iQueueClient->iWin->SetPos(TPoint(EWinPositionX,EWinPositionY));
sl@0
  1547
//
sl@0
  1548
			group->SetOrdinalPosition(1);
sl@0
  1549
			AddExpectedEvent(EEventFocusLost);
sl@0
  1550
			TriggerOomMessage(TTimeIntervalMinutes(3));
sl@0
  1551
			AddExpectedErrorMessage(TWsErrorMessage::EDrawingRegion,KErrNoMemory);
sl@0
  1552
			group->SetOrdinalPosition(0);
sl@0
  1553
			AddExpectedEvent(EEventFocusGained);
sl@0
  1554
//
sl@0
  1555
// Check timing of OOM messages
sl@0
  1556
//
sl@0
  1557
			TriggerOomMessage(TTimeIntervalMinutes(3));
sl@0
  1558
			AddExpectedErrorMessage(TWsErrorMessage::EDrawingRegion,KErrNoMemory);
sl@0
  1559
			TriggerOomMessage(TTimeIntervalMinutes(0));
sl@0
  1560
			User::After(TTimeIntervalMicroSeconds32(1100000));	// 1.1 second
sl@0
  1561
			TriggerOomMessage(TTimeIntervalMinutes(0));
sl@0
  1562
			SendEvent(EEventUser+3);
sl@0
  1563
			AddExpectedEvent(EEventUser+3);
sl@0
  1564
			TriggerOomMessage(TTimeIntervalMinutes(3));	// Forward by a 2 minutes plus the 1.1 from previous test should trigger an OOM event
sl@0
  1565
			AddExpectedErrorMessage(TWsErrorMessage::EDrawingRegion,KErrNoMemory);
sl@0
  1566
			SendEvent(EEventUser+4);
sl@0
  1567
			AddExpectedEvent(EEventUser+4);
sl@0
  1568
			TriggerOomMessage(TTimeIntervalMinutes(-1)); // Clock going backwards should trigger an event
sl@0
  1569
			AddExpectedErrorMessage(TWsErrorMessage::EDrawingRegion,KErrNoMemory);
sl@0
  1570
			User::After(TTimeIntervalMicroSeconds32(800000));	// 8/10ths of a second
sl@0
  1571
			TriggerOomMessage(TTimeIntervalMinutes(0));	// Shouldn't trigger an event
sl@0
  1572
			SendEvent(EEventUser+5);
sl@0
  1573
			AddExpectedEvent(EEventUser+5);
sl@0
  1574
			}
sl@0
  1575
			break;
sl@0
  1576
		default:
sl@0
  1577
			TheClient->iWs.DebugInfo(EWsDebugSetEventQueueTest,ETrue);
sl@0
  1578
			TRAPD(err, EventQueueExpansionTestL());
sl@0
  1579
			if (err!=KErrNone)
sl@0
  1580
				{
sl@0
  1581
				iFailed=ETrue;
sl@0
  1582
				}
sl@0
  1583
			TheClient->iWs.DebugInfo(EWsDebugSetEventQueueTest,EFalse);
sl@0
  1584
			CActiveScheduler::Stop();
sl@0
  1585
			break;
sl@0
  1586
		}
sl@0
  1587
	TheClient->iWs.SetAutoFlush(iTheClientFlush);
sl@0
  1588
	iQueueClient->iWs.SetAutoFlush(iQuequeClientFlush);
sl@0
  1589
	}
sl@0
  1590
sl@0
  1591
// Used for testing PDEF112243.
sl@0
  1592
// Create RWsSession/RWindowGroup/RBlankWindow in a loop. In case of odd loop, 
sl@0
  1593
// close the session which causes the previous window to gain focus. Also go 
sl@0
  1594
// on adding events to the previous session. Along with some change in product
sl@0
  1595
// code and this test code we get some space/memory before globaleventqueue, 
sl@0
  1596
// which is the problem faced by licensee for this defect.
sl@0
  1597
void CTEventTest::EventQueueExpansionTestL()
sl@0
  1598
	{
sl@0
  1599
	const TInt numClients = 5;
sl@0
  1600
	TInt cliHanGrpWin = 777;
sl@0
  1601
	TInt cliHanBlkWin = 888;
sl@0
  1602
	TInt pushed=0;
sl@0
  1603
	RWsSession wsSession[numClients];
sl@0
  1604
	RWindowGroup groupWin[numClients];
sl@0
  1605
	RBlankWindow blankWin[numClients];
sl@0
  1606
	
sl@0
  1607
	for (TInt i = 0; i < numClients; i++)
sl@0
  1608
		{
sl@0
  1609
		User::LeaveIfError(wsSession[i].Connect());
sl@0
  1610
		CleanupClosePushL(wsSession[i]);
sl@0
  1611
		
sl@0
  1612
		groupWin[i] = RWindowGroup(wsSession[i]);
sl@0
  1613
		User::LeaveIfError(groupWin[i].Construct(cliHanGrpWin++));
sl@0
  1614
		CleanupClosePushL(groupWin[i]);
sl@0
  1615
		groupWin[i].DefaultOwningWindow();
sl@0
  1616
		
sl@0
  1617
		blankWin[i] = RBlankWindow(wsSession[i]);
sl@0
  1618
		User::LeaveIfError(blankWin[i].Construct(groupWin[i], cliHanBlkWin++));
sl@0
  1619
		if (i%2 == 0)
sl@0
  1620
			{
sl@0
  1621
			CleanupClosePushL(blankWin[i]);
sl@0
  1622
			pushed++;
sl@0
  1623
			}
sl@0
  1624
		blankWin[i].Activate();
sl@0
  1625
		
sl@0
  1626
		if (i%2 == 1)
sl@0
  1627
			{
sl@0
  1628
			CleanupStack::Pop(2, &wsSession[i]);
sl@0
  1629
			wsSession[i].Close();
sl@0
  1630
			
sl@0
  1631
			TRawEvent rawEvent;
sl@0
  1632
			for (TInt count=0; count < 40; count++)
sl@0
  1633
				{
sl@0
  1634
				rawEvent.Set(TRawEvent::EKeyDown,'A'+(i%26));
sl@0
  1635
				wsSession[i-1].SimulateRawEvent(rawEvent);
sl@0
  1636
sl@0
  1637
				rawEvent.Set(TRawEvent::EKeyUp,'A'+(i%26));
sl@0
  1638
				wsSession[i-1].SimulateRawEvent(rawEvent);
sl@0
  1639
				}
sl@0
  1640
			}
sl@0
  1641
		}
sl@0
  1642
	CleanupStack::PopAndDestroy(pushed*3, &wsSession[0]);
sl@0
  1643
	}
sl@0
  1644
sl@0
  1645
void CTEventTest::doSendEvent(TWsEvent &aEvent)
sl@0
  1646
	{
sl@0
  1647
	iQueueClient->iWs.SendEventToWindowGroup(iQueueClient->WindowGroupIdentifier(),aEvent);
sl@0
  1648
	}
sl@0
  1649
sl@0
  1650
void CTEventTest::SendKey(TInt aEventCode, TInt aScanCode, TInt aCode/*=0*/, TInt iRepeats/*=0*/)
sl@0
  1651
	{
sl@0
  1652
	TWsEvent event;
sl@0
  1653
	if (aEventCode==EEventKey && aCode==0)
sl@0
  1654
		aCode=aScanCode;
sl@0
  1655
	event.SetType(aEventCode);
sl@0
  1656
	event.Key()->iCode=aCode;
sl@0
  1657
	event.Key()->iScanCode=aScanCode;
sl@0
  1658
	event.Key()->iModifiers=0;
sl@0
  1659
	event.Key()->iRepeats=iRepeats;
sl@0
  1660
	doSendEvent(event);
sl@0
  1661
	}
sl@0
  1662
sl@0
  1663
void CTEventTest::SendEvent(TInt aEventCode)
sl@0
  1664
	{
sl@0
  1665
	TWsQTEvent event;
sl@0
  1666
	event.SetType(aEventCode);
sl@0
  1667
	doSendEvent(event);
sl@0
  1668
	}
sl@0
  1669
sl@0
  1670
void CTEventTest::SimulateAndCheck(TPoint aOrigin,TSize aScale,TInt aXOffset,TInt aYOffset,TPointerEvent::TType aEventType,TRect aPointerCursorArea)
sl@0
  1671
	{
sl@0
  1672
	TPoint ptCheck=PhysicalToLogical(TPoint(aOrigin.iX+aXOffset,aOrigin.iY+aYOffset)-aOrigin,aScale);
sl@0
  1673
	if (ptCheck.iX < aPointerCursorArea.iTl.iX)
sl@0
  1674
		{
sl@0
  1675
		ptCheck.iX=aPointerCursorArea.iTl.iX;
sl@0
  1676
		}
sl@0
  1677
	else if (ptCheck.iX > aPointerCursorArea.iBr.iX)
sl@0
  1678
		{
sl@0
  1679
		ptCheck.iX=aPointerCursorArea.iBr.iX;
sl@0
  1680
		}
sl@0
  1681
	if (ptCheck.iY < aPointerCursorArea.iTl.iY)
sl@0
  1682
		{
sl@0
  1683
		ptCheck.iY=aPointerCursorArea.iTl.iY;
sl@0
  1684
		}
sl@0
  1685
	else if (ptCheck.iY > aPointerCursorArea.iBr.iY)
sl@0
  1686
		{
sl@0
  1687
		ptCheck.iY=aPointerCursorArea.iBr.iY;
sl@0
  1688
		}
sl@0
  1689
	AddExpectedPointer(aEventType,TPoint(ptCheck.iX-EWinPositionX,ptCheck.iY-EWinPositionY));
sl@0
  1690
	}
sl@0
  1691
sl@0
  1692
void CTEventTest::CheckPointerCursorInDifferentScreenMode(TSizeMode aMode,TPoint aOrigin)
sl@0
  1693
	{
sl@0
  1694
	aMode.iOrigin=aOrigin;
sl@0
  1695
	iQueueClient->iScreen->SetCurrentScreenModeAttributes(aMode);
sl@0
  1696
	iQueueClient->iScreen->SetAppScreenMode(iCurrentMode);		//This makes the App pick up the new mode parameters
sl@0
  1697
	TheClient->iScreen->SetAppScreenMode(iCurrentMode);			//Ditto
sl@0
  1698
	iQueueClient->iScreen->SetScreenMode(iCurrentMode);			//This causes all the windows to be updated
sl@0
  1699
sl@0
  1700
	//.. Tests the general pointer cursor area setting and getting
sl@0
  1701
	RWsSession& ws=iQueueClient->iWs;
sl@0
  1702
	TRect rect=ws.PointerCursorArea(iCurrentMode); //ws.PointerCursorArea() by default gets first screen mode's pointer cursor area so use other overloaded function
sl@0
  1703
	TPoint origin=iQueueClient->iScreen->GetScreenModeOrigin(iCurrentMode);
sl@0
  1704
	TSize scale=iQueueClient->iScreen->GetScreenModeScale(iCurrentMode);
sl@0
  1705
	TSize fullScreenModeSize=iQueueClient->iScreen->SizeInPixels();
sl@0
  1706
	TRect rect1(PhysicalToLogical(TPoint(),scale),PhysicalToLogical(fullScreenModeSize.AsPoint()-origin,scale));
sl@0
  1707
	TRect rect2=rect1;
sl@0
  1708
	rect2.Shrink(20,20);
sl@0
  1709
	ws.SetPointerCursorArea(iCurrentMode,rect1);
sl@0
  1710
	TEST(ws.PointerCursorArea(iCurrentMode)==rect1);
sl@0
  1711
	ws.SetPointerCursorArea(iCurrentMode,rect2);
sl@0
  1712
	TEST(ws.PointerCursorArea(iCurrentMode)==rect2);
sl@0
  1713
	ws.SetPointerCursorArea(iCurrentMode,rect);
sl@0
  1714
	TEST(ws.PointerCursorArea(iCurrentMode)==rect);
sl@0
  1715
sl@0
  1716
	//.. Test events are restricted to correct pointer cursor area
sl@0
  1717
	TRect rectPointerCursorArea(10,10,51,51);
sl@0
  1718
	iQueueClient->iWs.SetPointerCursorArea(iCurrentMode,rectPointerCursorArea);
sl@0
  1719
	TPoint screenModeOrigin=iQueueClient->iScreen->GetDefaultScreenModeOrigin();
sl@0
  1720
sl@0
  1721
	SimulatePointer(TRawEvent::EButton1Down,screenModeOrigin.iX+5,screenModeOrigin.iY+5);
sl@0
  1722
	SimulatePointer(TRawEvent::EButton1Up,screenModeOrigin.iX+25,screenModeOrigin.iY+25);
sl@0
  1723
	SimulatePointer(TRawEvent::EButton1Down,screenModeOrigin.iX+50,screenModeOrigin.iY+50);
sl@0
  1724
	SimulatePointer(TRawEvent::EButton1Up,screenModeOrigin.iX+75,screenModeOrigin.iY+75);
sl@0
  1725
sl@0
  1726
	SimulatePointer(TRawEvent::EButton1Down,screenModeOrigin.iX+10,screenModeOrigin.iY+15);
sl@0
  1727
	SimulatePointer(TRawEvent::EButton1Up,screenModeOrigin.iX+20,screenModeOrigin.iY+5);
sl@0
  1728
	SimulatePointer(TRawEvent::EButton1Down,screenModeOrigin.iX+35,screenModeOrigin.iY+40);
sl@0
  1729
	SimulatePointer(TRawEvent::EButton1Up,screenModeOrigin.iX+45,screenModeOrigin.iY+70);
sl@0
  1730
sl@0
  1731
	SimulateAndCheck(screenModeOrigin,aMode.iScreenScale,5,5,TPointerEvent::EButton1Down,rectPointerCursorArea);
sl@0
  1732
	SimulateAndCheck(screenModeOrigin,aMode.iScreenScale,25,25,TPointerEvent::EButton1Up,rectPointerCursorArea);
sl@0
  1733
	SimulateAndCheck(screenModeOrigin,aMode.iScreenScale,50,50,TPointerEvent::EButton1Down,rectPointerCursorArea);
sl@0
  1734
	SimulateAndCheck(screenModeOrigin,aMode.iScreenScale,75,75,TPointerEvent::EButton1Up,rectPointerCursorArea);
sl@0
  1735
sl@0
  1736
	SimulateAndCheck(screenModeOrigin,aMode.iScreenScale,10,15,TPointerEvent::EButton1Down,rectPointerCursorArea);
sl@0
  1737
	SimulateAndCheck(screenModeOrigin,aMode.iScreenScale,20,5,TPointerEvent::EButton1Up,rectPointerCursorArea);
sl@0
  1738
	SimulateAndCheck(screenModeOrigin,aMode.iScreenScale,35,40,TPointerEvent::EButton1Down,rectPointerCursorArea);
sl@0
  1739
	SimulateAndCheck(screenModeOrigin,aMode.iScreenScale,45,70,TPointerEvent::EButton1Up,rectPointerCursorArea);
sl@0
  1740
	}
sl@0
  1741
sl@0
  1742
void CTEventTest::SendEventTest_NextSetOfEvents()
sl@0
  1743
	{
sl@0
  1744
	TTimeIntervalMicroSeconds32 initialTime,time;
sl@0
  1745
	TheClient->iWs.GetKeyboardRepeatRate(initialTime,time);
sl@0
  1746
	switch(iEventSet++)
sl@0
  1747
		{
sl@0
  1748
		case 0:
sl@0
  1749
			SendKey(EEventKeyDown,1);
sl@0
  1750
			SendKey(EEventKeyDown,2);
sl@0
  1751
			SendEvent(EEventUser);
sl@0
  1752
			SendKey(EEventKeyUp,1);
sl@0
  1753
			SendKey(EEventKeyUp,2);
sl@0
  1754
			SendEvent(EEventUser+1);
sl@0
  1755
			SendEvent(EEventUser+2);
sl@0
  1756
//
sl@0
  1757
			AddExpectedEvent(EEventFocusGained);
sl@0
  1758
			AddExpectedKey(EEventKeyDown,1);
sl@0
  1759
			AddExpectedKey(EEventKeyDown,2);
sl@0
  1760
			AddExpectedEvent(EEventUser);
sl@0
  1761
			AddExpectedKey(EEventKeyUp,1);
sl@0
  1762
			AddExpectedKey(EEventKeyUp,2);
sl@0
  1763
			AddExpectedEvent(EEventUser+1);
sl@0
  1764
			AddExpectedEvent(EEventUser+2);
sl@0
  1765
			break;
sl@0
  1766
		case 1:
sl@0
  1767
	#if defined(SCREEN_MODE_TESTING)
sl@0
  1768
			if (iNumScrModes>1)
sl@0
  1769
				{
sl@0
  1770
				iQueueClient->iGroup->GroupWin()->EnableScreenChangeEvents();
sl@0
  1771
sl@0
  1772
				if (SetClickType(EClickCheck))
sl@0
  1773
					return;
sl@0
  1774
				iAddToClick=ETrue;
sl@0
  1775
sl@0
  1776
				iQueueClient->iScreen->SetScreenMode(1);
sl@0
  1777
sl@0
  1778
				iAddToClick=EFalse;
sl@0
  1779
				SetClickType(EClickNone);
sl@0
  1780
sl@0
  1781
				AddExpectedEvent(EEventScreenDeviceChanged);
sl@0
  1782
				SendEvent(EEventUser);
sl@0
  1783
				AddExpectedEvent(EEventUser);
sl@0
  1784
				iQueueClient->iGroup->GroupWin()->DisableScreenChangeEvents();
sl@0
  1785
				if (iQueueClient->iScreen->ScreenModeEnforcement()==ESizeEnforcementPixelsAndRotation)
sl@0
  1786
					AddExpectedEvent(EEventFocusLost);
sl@0
  1787
				}
sl@0
  1788
	#endif
sl@0
  1789
			SendEvent(EEventUser+1);
sl@0
  1790
			AddExpectedEvent(EEventUser+1);
sl@0
  1791
			break;
sl@0
  1792
		case 2:
sl@0
  1793
	#if defined(SCREEN_MODE_TESTING)
sl@0
  1794
			if (iNumScrModes>1)
sl@0
  1795
				{
sl@0
  1796
				iQueueClient->iGroup->GroupWin()->EnableScreenChangeEvents();
sl@0
  1797
sl@0
  1798
				if (SetClickType(EClickCheck))
sl@0
  1799
					return;
sl@0
  1800
				iAddToClick=ETrue;
sl@0
  1801
sl@0
  1802
				iQueueClient->iScreen->SetScreenMode(0);
sl@0
  1803
				iQueueClient->iScreen->SetScreenMode(1);
sl@0
  1804
				iQueueClient->iScreen->SetScreenMode(0);
sl@0
  1805
sl@0
  1806
				iAddToClick=EFalse;
sl@0
  1807
				SetClickType(EClickNone);
sl@0
  1808
sl@0
  1809
				AddExpectedEvent(EEventScreenDeviceChanged);	// Only one event should get queued
sl@0
  1810
				if (iQueueClient->iScreen->ScreenModeEnforcement()==ESizeEnforcementPixelsAndRotation)
sl@0
  1811
					AddExpectedEvent(EEventFocusGained);
sl@0
  1812
				SendEvent(EEventUser+2);
sl@0
  1813
				AddExpectedEvent(EEventUser+2);
sl@0
  1814
				iQueueClient->iGroup->GroupWin()->DisableScreenChangeEvents();
sl@0
  1815
				}
sl@0
  1816
	#endif
sl@0
  1817
			SendEvent(EEventUser+3);
sl@0
  1818
			AddExpectedEvent(EEventUser+3);
sl@0
  1819
			break;
sl@0
  1820
		case 3:
sl@0
  1821
	#if defined(SCREEN_MODE_TESTING)
sl@0
  1822
			if (iNumScrModes>1)
sl@0
  1823
				{
sl@0
  1824
				iQueueClient->iGroup->GroupWin()->EnableScreenChangeEvents();
sl@0
  1825
				iQueueClient->iGroup->GroupWin()->DisableScreenChangeEvents();
sl@0
  1826
sl@0
  1827
				if (SetClickType(EClickCheck))
sl@0
  1828
					return;
sl@0
  1829
				iAddToClick=ETrue;
sl@0
  1830
sl@0
  1831
				iQueueClient->iScreen->SetScreenMode(0);
sl@0
  1832
sl@0
  1833
				iAddToClick=EFalse;
sl@0
  1834
				SetClickType(EClickNone);
sl@0
  1835
sl@0
  1836
				SendEvent(EEventUser+1);
sl@0
  1837
				AddExpectedEvent(EEventUser+1);
sl@0
  1838
				}
sl@0
  1839
	#endif
sl@0
  1840
			SendEvent(EEventUser+4);
sl@0
  1841
			AddExpectedEvent(EEventUser+4);
sl@0
  1842
			break;
sl@0
  1843
		case 4:
sl@0
  1844
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  1845
			TheClient->iWs.Flush();
sl@0
  1846
			User::After(initialTime.Int()+time.Int()/3);
sl@0
  1847
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  1848
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  1849
			AddExpectedKey(EEventKey,EStdKeySpace,' ');
sl@0
  1850
			AddExpectedKey(EEventKey,EStdKeySpace,' ',1);
sl@0
  1851
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  1852
			break;
sl@0
  1853
		case 5:			//To test sending a key event with iRepeats!=0
sl@0
  1854
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  1855
			TheClient->iWs.Flush();
sl@0
  1856
			User::After(initialTime.Int()+time.Int()/3);
sl@0
  1857
			SendKey(EEventKey,EStdKeyHome,EKeyHome,0);
sl@0
  1858
			User::After(initialTime.Int()+time.Int()/3);
sl@0
  1859
			SendKey(EEventKey,EStdKeyEnd,EKeyEnd,12345);
sl@0
  1860
			User::After(initialTime.Int()+time.Int()/3);
sl@0
  1861
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  1862
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  1863
			AddExpectedKey(EEventKey,EStdKeySpace,' ');
sl@0
  1864
			AddExpectedKey(EEventKey,EStdKeySpace,' ',1);
sl@0
  1865
			AddExpectedKey(EEventKey,EStdKeyHome,EKeyHome);
sl@0
  1866
			AddExpectedKey(EEventKey,EStdKeySpace,' ',1);
sl@0
  1867
			AddExpectedKey(EEventKey,EStdKeyEnd,EKeyEnd,1);
sl@0
  1868
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  1869
			break;
sl@0
  1870
		default:
sl@0
  1871
			CActiveScheduler::Stop();
sl@0
  1872
			break;
sl@0
  1873
		}
sl@0
  1874
	TheClient->iWs.Flush();
sl@0
  1875
	}
sl@0
  1876
sl@0
  1877
void CTEventTest::InvisibleWindow_NextSetOfEvents()
sl@0
  1878
	{
sl@0
  1879
	switch(iEventSet++)
sl@0
  1880
		{
sl@0
  1881
		case 0:
sl@0
  1882
			SimulatePointer(TRawEvent::EButton1Down,45,30);
sl@0
  1883
			SimulatePointer(TRawEvent::EButton1Up,45,30);
sl@0
  1884
			SimulatePointer(TRawEvent::EButton1Down,20,10);
sl@0
  1885
			SimulatePointer(TRawEvent::EButton1Up,20,10);
sl@0
  1886
			TheClient->iWs.Flush();
sl@0
  1887
			iQueueClient->iChildWin->BaseWin()->SetVisible(EFalse);
sl@0
  1888
			iQueueClient->iChildWin->BaseWin()->SetVisible(ETrue);
sl@0
  1889
			iQueueClient->iWs.Flush();
sl@0
  1890
			SimulatePointer(TRawEvent::EButton1Down,46,31);
sl@0
  1891
			SimulatePointer(TRawEvent::EButton1Up,46,31);
sl@0
  1892
			AddExpectedEvent(EEventFocusGained);
sl@0
  1893
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(20-EWinPositionX,10-EWinPositionY));
sl@0
  1894
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(20-EWinPositionX,10-EWinPositionY));
sl@0
  1895
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  1896
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  1897
			break;
sl@0
  1898
		case 1:
sl@0
  1899
			SimulatePointer(TRawEvent::EButton1Down,21,11);
sl@0
  1900
			SimulatePointer(TRawEvent::EButton1Up,21,11);
sl@0
  1901
			SimulatePointer(TRawEvent::EButton1Down,44,30);
sl@0
  1902
			SimulatePointer(TRawEvent::EButton1Up,44,30);
sl@0
  1903
			TheClient->iWs.Flush();
sl@0
  1904
			iQueueClient->iWin->BaseWin()->SetVisible(EFalse);
sl@0
  1905
			iQueueClient->iWin->BaseWin()->SetVisible(ETrue);
sl@0
  1906
			iQueueClient->iWs.Flush();
sl@0
  1907
			SimulatePointer(TRawEvent::EButton1Down,19,12);
sl@0
  1908
			SimulatePointer(TRawEvent::EButton1Up,19,12);
sl@0
  1909
			SimulatePointer(TRawEvent::EButton1Down,47,32);
sl@0
  1910
			SimulatePointer(TRawEvent::EButton1Up,47,32);
sl@0
  1911
			/*AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(44-EWinPositionX,30-EWinPositionY));
sl@0
  1912
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(44-EWinPositionX,30-EWinPositionY));*/
sl@0
  1913
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(19-EWinPositionX,12-EWinPositionY));
sl@0
  1914
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(19-EWinPositionX,12-EWinPositionY));
sl@0
  1915
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(47-EWinPositionX,32-EWinPositionY));
sl@0
  1916
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(47-EWinPositionX,32-EWinPositionY));
sl@0
  1917
			break;
sl@0
  1918
		default:
sl@0
  1919
			CActiveScheduler::Stop();
sl@0
  1920
			break;
sl@0
  1921
		}
sl@0
  1922
	TheClient->iWs.Flush();
sl@0
  1923
	}
sl@0
  1924
sl@0
  1925
#define TOP16A 0xAAAA0000
sl@0
  1926
#define TOP16B 0x55550000
sl@0
  1927
void CTEventTest::JavaAdditions_NextSetOfEvents()
sl@0
  1928
	{
sl@0
  1929
	switch(iEventSet++)
sl@0
  1930
		{
sl@0
  1931
		case 0:
sl@0
  1932
			SimulatePointer(TRawEvent::EButton1Down,45,30);
sl@0
  1933
			SimulatePointer(TRawEvent::EButton1Up,45,30);
sl@0
  1934
			TheClient->iWs.Flush();
sl@0
  1935
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerMoveEvents,EPointerGenerateSimulatedMove);
sl@0
  1936
			iQueueClient->iWs.Flush();
sl@0
  1937
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
  1938
			SimulateButton1DownWithSimulatedMove(46,31);
sl@0
  1939
#else
sl@0
  1940
			SimulatePointer(TRawEvent::EButton1Down,46,31);
sl@0
  1941
#endif			
sl@0
  1942
			SimulatePointer(TRawEvent::EButton1Up,46,31);
sl@0
  1943
			TheClient->iWs.Flush();
sl@0
  1944
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerMoveEvents,0);
sl@0
  1945
			iQueueClient->iWs.Flush();			
sl@0
  1946
			SimulatePointer(TRawEvent::EButton1Down,20,10);
sl@0
  1947
			SimulatePointer(TRawEvent::EButton1Up,20,10);
sl@0
  1948
			TheClient->iWs.Flush();
sl@0
  1949
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerMoveEvents,EPointerGenerateSimulatedMove);
sl@0
  1950
			iQueueClient->iWs.Flush();
sl@0
  1951
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
  1952
			SimulateButton1DownWithSimulatedMove(21,11);
sl@0
  1953
#else	
sl@0
  1954
			SimulatePointer(TRawEvent::EButton1Down,21,11);			
sl@0
  1955
#endif
sl@0
  1956
			SimulatePointer(TRawEvent::EButton1Up,21,11);
sl@0
  1957
			TheClient->iWs.Flush();
sl@0
  1958
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerMoveEvents,EPointerMoveEvents);
sl@0
  1959
			iQueueClient->iWs.Flush();				
sl@0
  1960
			SimulatePointer(TRawEvent::EButton1Down,22,12);
sl@0
  1961
			SimulatePointer(TRawEvent::EButton1Up,22,12);
sl@0
  1962
			TheClient->iWs.Flush();
sl@0
  1963
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerMoveEvents,EPointerGenerateSimulatedMove);
sl@0
  1964
			iQueueClient->iWs.Flush();
sl@0
  1965
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
  1966
			SimulateButton1DownWithSimulatedMove(23,13);
sl@0
  1967
#else			
sl@0
  1968
			SimulatePointer(TRawEvent::EButton1Down,23,13);
sl@0
  1969
#endif
sl@0
  1970
			SimulatePointer(TRawEvent::EButton1Up,23,13);
sl@0
  1971
			TheClient->iWs.Flush();
sl@0
  1972
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerMoveEvents,EPointerFilterMove);
sl@0
  1973
			iQueueClient->iWs.Flush();		
sl@0
  1974
			SimulatePointer(TRawEvent::EButton1Down,24,14);
sl@0
  1975
			SimulatePointer(TRawEvent::EButton1Up,24,14);
sl@0
  1976
			AddExpectedEvent(EEventFocusGained);
sl@0
  1977
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(45-EWinPositionX,30-EWinPositionY));
sl@0
  1978
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(45-EWinPositionX,30-EWinPositionY));
sl@0
  1979
			AddExpectedPointer(TPointerEvent::EMove, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  1980
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  1981
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  1982
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(20-EWinPositionX,10-EWinPositionY));
sl@0
  1983
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(20-EWinPositionX,10-EWinPositionY));
sl@0
  1984
			AddExpectedPointer(TPointerEvent::EMove, TPoint(21-EWinPositionX,11-EWinPositionY));
sl@0
  1985
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(21-EWinPositionX,11-EWinPositionY));
sl@0
  1986
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(21-EWinPositionX,11-EWinPositionY));
sl@0
  1987
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(22-EWinPositionX,12-EWinPositionY));
sl@0
  1988
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(22-EWinPositionX,12-EWinPositionY));
sl@0
  1989
			AddExpectedPointer(TPointerEvent::EMove, TPoint(23-EWinPositionX,13-EWinPositionY));
sl@0
  1990
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(23-EWinPositionX,13-EWinPositionY));
sl@0
  1991
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(23-EWinPositionX,13-EWinPositionY));
sl@0
  1992
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24-EWinPositionX,14-EWinPositionY));
sl@0
  1993
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,14-EWinPositionY));
sl@0
  1994
			break;
sl@0
  1995
		#if defined(__WINS__)
sl@0
  1996
		case 1:
sl@0
  1997
			{
sl@0
  1998
			RWindowGroup *group=iQueueClient->iGroup->GroupWin();
sl@0
  1999
			group->SetOrdinalPosition(0);
sl@0
  2000
			iTest->SimulateKey(TRawEvent::EKeyDown,'2'|TOP16A);
sl@0
  2001
			iTest->SimulateKey(TRawEvent::EKeyUp,'2');
sl@0
  2002
			TheClient->iWs.Flush();
sl@0
  2003
			iQueueClient->iWs.SetRemoveKeyCode(EFalse);
sl@0
  2004
			iQueueClient->iWs.Flush();
sl@0
  2005
			iTest->SimulateKey(TRawEvent::EKeyDown,'3'|TOP16B);
sl@0
  2006
			iTest->SimulateKey(TRawEvent::EKeyUp,'3');
sl@0
  2007
			TheClient->iWs.Flush();
sl@0
  2008
			iQueueClient->iWs.SetRemoveKeyCode(ETrue);
sl@0
  2009
			iQueueClient->iWs.Flush();
sl@0
  2010
			iTest->SimulateKey(TRawEvent::EKeyDown,'4'|TOP16B);
sl@0
  2011
			iTest->SimulateKey(TRawEvent::EKeyUp,'4');
sl@0
  2012
			AddExpectedKey(EEventKeyDown,'2');
sl@0
  2013
			AddExpectedKey(EEventKey,'2',TOP16A>>16);
sl@0
  2014
			AddExpectedKey(EEventKeyUp,'2');
sl@0
  2015
			AddExpectedKey(EEventKeyDown,'3'|TOP16B);
sl@0
  2016
			AddExpectedKey(EEventKey,'3',TOP16B>>16);
sl@0
  2017
			AddExpectedKey(EEventKeyUp,'3');
sl@0
  2018
			AddExpectedKey(EEventKeyDown,'4');
sl@0
  2019
			AddExpectedKey(EEventKey,'4',TOP16B>>16);
sl@0
  2020
			AddExpectedKey(EEventKeyUp,'4');
sl@0
  2021
			break;
sl@0
  2022
			}
sl@0
  2023
		#endif
sl@0
  2024
		default:
sl@0
  2025
			CActiveScheduler::Stop();
sl@0
  2026
			break;
sl@0
  2027
		}
sl@0
  2028
	TheClient->iWs.Flush();
sl@0
  2029
	}
sl@0
  2030
sl@0
  2031
void CTEventTest::WinCap_NextSetOfEvents()
sl@0
  2032
	{
sl@0
  2033
	switch(iEventSet++)
sl@0
  2034
		{
sl@0
  2035
		case 0:
sl@0
  2036
			//iQueueClient->SetChildCapture(RWindowBase::TCaptureEnabled);
sl@0
  2037
			SimulatePointer(TRawEvent::EButton1Down,35,27);
sl@0
  2038
			SimulatePointer(TRawEvent::EButton1Up,25,12);
sl@0
  2039
sl@0
  2040
sl@0
  2041
			AddExpectedEvent(EEventFocusGained);
sl@0
  2042
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(35-EWinPositionX,27-EWinPositionY));
sl@0
  2043
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(25-EWinPositionX,12-EWinPositionY));
sl@0
  2044
			break;
sl@0
  2045
sl@0
  2046
sl@0
  2047
		default:
sl@0
  2048
			CActiveScheduler::Stop();
sl@0
  2049
			break;
sl@0
  2050
		}
sl@0
  2051
	TheClient->iWs.Flush();
sl@0
  2052
	}
sl@0
  2053
sl@0
  2054
void CTEventTest::XyInputType_NextSetOfEvents()
sl@0
  2055
	{
sl@0
  2056
	switch(iEventSet++)
sl@0
  2057
		{
sl@0
  2058
		case 0:
sl@0
  2059
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerMoveEvents|EPointerFilterDrag,EPointerGenerateSimulatedMove);
sl@0
  2060
			iQueueClient->iWs.Flush();
sl@0
  2061
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
  2062
			SimulateButton1DownWithSimulatedMove(46,31);
sl@0
  2063
#else			
sl@0
  2064
			SimulatePointer(TRawEvent::EButton1Down,46,31);
sl@0
  2065
#endif
sl@0
  2066
			SimulatePointer(TRawEvent::EButton1Up,46,31);
sl@0
  2067
			AddExpectedEvent(EEventFocusGained);
sl@0
  2068
			AddExpectedPointer(TPointerEvent::EMove, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  2069
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  2070
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  2071
			break;		//Must do something
sl@0
  2072
		case 1:
sl@0
  2073
			{
sl@0
  2074
			// check if RWindowGroup::SimulatePointerEvent is working (DEF131563)
sl@0
  2075
			RWindowGroup& group = *iQueueClient->iGroup->GroupWin();
sl@0
  2076
			TRawEvent event;
sl@0
  2077
			event.Set(TRawEvent::EButton1Down, 10, 10);
sl@0
  2078
			group.SimulatePointerEvent(event);
sl@0
  2079
			event.Set(TRawEvent::EButton1Up, 10, 10);
sl@0
  2080
			group.SimulatePointerEvent(event);
sl@0
  2081
			if(!iIs3DPointer)
sl@0
  2082
				{
sl@0
  2083
				// simulated move will be generated
sl@0
  2084
				AddExpectedPointer(TPointerEvent::EMove, TPoint(10 - EWinPositionX, 10 - EWinPositionY));
sl@0
  2085
				}
sl@0
  2086
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(10 - EWinPositionX, 10 - EWinPositionY));
sl@0
  2087
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(10 - EWinPositionX, 10 - EWinPositionY));
sl@0
  2088
			}
sl@0
  2089
			break;
sl@0
  2090
		#if defined(__WINS__)
sl@0
  2091
		case 2:
sl@0
  2092
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
  2093
			SimulateButton1DownWithSimulatedMove(45,32);
sl@0
  2094
#else		
sl@0
  2095
			SimulatePointer(TRawEvent::EButton1Down,45,32);
sl@0
  2096
#endif
sl@0
  2097
			SimulatePointer(TRawEvent::EButton1Up,45,32);
sl@0
  2098
			TheClient->iWs.SimulateXyInputType(EXYInputNone);
sl@0
  2099
			SimulatePointer(TRawEvent::EButton1Down,44,32);
sl@0
  2100
			SimulatePointer(TRawEvent::EPointerMove,43,32);
sl@0
  2101
			SimulatePointer(TRawEvent::EButton1Up,43,31);
sl@0
  2102
			SimulatePointer(TRawEvent::EButton2Down,44,33);
sl@0
  2103
			SimulatePointer(TRawEvent::EButton2Up,44,33);
sl@0
  2104
			SimulatePointer(TRawEvent::EButton3Down,43,32);
sl@0
  2105
			SimulatePointer(TRawEvent::EButton3Up,43,32);
sl@0
  2106
			SimulatePointer(TRawEvent::EPointerSwitchOn,48,32);
sl@0
  2107
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2108
#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA)
sl@0
  2109
			SimulateButton1DownWithSimulatedMove(47,32);
sl@0
  2110
#else				
sl@0
  2111
			SimulatePointer(TRawEvent::EButton1Down,47,32);
sl@0
  2112
#endif
sl@0
  2113
			SimulatePointer(TRawEvent::EButton1Up,47,32);
sl@0
  2114
			AddExpectedPointer(TPointerEvent::EMove, TPoint(45-EWinPositionX,32-EWinPositionY));
sl@0
  2115
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(45-EWinPositionX,32-EWinPositionY));
sl@0
  2116
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(45-EWinPositionX,32-EWinPositionY));
sl@0
  2117
			AddExpectedPointer(TPointerEvent::EMove, TPoint(47-EWinPositionX,32-EWinPositionY));
sl@0
  2118
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(47-EWinPositionX,32-EWinPositionY));
sl@0
  2119
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(47-EWinPositionX,32-EWinPositionY));
sl@0
  2120
			break;
sl@0
  2121
		case 3:
sl@0
  2122
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerGenerateSimulatedMove,0);
sl@0
  2123
			iQueueClient->iWs.Flush();
sl@0
  2124
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2125
			SimulatePointer(TRawEvent::EButton1Down,49,32);
sl@0
  2126
			SimulatePointer(TRawEvent::EPointerMove,50,30);
sl@0
  2127
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  2128
			SimulatePointer(TRawEvent::EButton1Down,51,32);
sl@0
  2129
			SimulatePointer(TRawEvent::EPointerMove,52,30);
sl@0
  2130
			SimulatePointer(TRawEvent::EButton1Up,52,30);
sl@0
  2131
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2132
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(49-EWinPositionX,32-EWinPositionY));
sl@0
  2133
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(50-EWinPositionX,30-EWinPositionY));
sl@0
  2134
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(50-EWinPositionX,30-EWinPositionY));
sl@0
  2135
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(51-EWinPositionX,32-EWinPositionY));
sl@0
  2136
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(52-EWinPositionX,30-EWinPositionY));
sl@0
  2137
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(52-EWinPositionX,30-EWinPositionY));
sl@0
  2138
			break;
sl@0
  2139
		case 4:
sl@0
  2140
			SimulatePointer(TRawEvent::EButton1Down,49,31);
sl@0
  2141
			SimulatePointer(TRawEvent::EButton1Up,49,31);
sl@0
  2142
			TheClient->iWs.SimulateXyInputType(EXYInputMouse);
sl@0
  2143
			SimulatePointer(TRawEvent::EPointerMove,50,31);
sl@0
  2144
			SimulatePointer(TRawEvent::EButton1Down,50,31);
sl@0
  2145
			SimulatePointer(TRawEvent::EPointerMove,50,30);
sl@0
  2146
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  2147
			SimulatePointer(TRawEvent::EPointerMove,51,31);
sl@0
  2148
			SimulatePointer(TRawEvent::EButton1Down,51,31);
sl@0
  2149
			SimulatePointer(TRawEvent::EPointerMove,51,30);
sl@0
  2150
			SimulatePointer(TRawEvent::EButton1Up,51,30);
sl@0
  2151
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2152
			SimulatePointer(TRawEvent::EButton1Down,52,31);
sl@0
  2153
			SimulatePointer(TRawEvent::EButton1Up,52,31);
sl@0
  2154
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(49-EWinPositionX,31-EWinPositionY));
sl@0
  2155
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(49-EWinPositionX,31-EWinPositionY));
sl@0
  2156
			AddExpectedPointer(TPointerEvent::EMove, TPoint(50-EWinPositionX,31-EWinPositionY));
sl@0
  2157
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(50-EWinPositionX,31-EWinPositionY));
sl@0
  2158
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(50-EWinPositionX,30-EWinPositionY));
sl@0
  2159
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(50-EWinPositionX,30-EWinPositionY));
sl@0
  2160
			AddExpectedPointer(TPointerEvent::EMove, TPoint(51-EWinPositionX,31-EWinPositionY));
sl@0
  2161
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(51-EWinPositionX,31-EWinPositionY));
sl@0
  2162
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(51-EWinPositionX,30-EWinPositionY));
sl@0
  2163
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(51-EWinPositionX,30-EWinPositionY));
sl@0
  2164
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(52-EWinPositionX,31-EWinPositionY));
sl@0
  2165
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(52-EWinPositionX,31-EWinPositionY));
sl@0
  2166
			break;
sl@0
  2167
		case 5:
sl@0
  2168
			SimulatePointer(TRawEvent::EButton1Down,69,31);
sl@0
  2169
			SimulatePointer(TRawEvent::EButton1Up,69,31);
sl@0
  2170
			TheClient->iWs.SimulateXyInputType(EXYInputDeltaMouse);
sl@0
  2171
			SimulatePointer(TRawEvent::EPointerMove,-5,-5);
sl@0
  2172
			SimulatePointer(TRawEvent::EButton1Down,7,8);
sl@0
  2173
			SimulatePointer(TRawEvent::EPointerMove,10,-3);
sl@0
  2174
			SimulatePointer(TRawEvent::EButton1Up,-7,-8);
sl@0
  2175
			SimulatePointer(TRawEvent::EPointerMove,-4,9);
sl@0
  2176
			SimulatePointer(TRawEvent::EButton1Down,123,456);
sl@0
  2177
			SimulatePointer(TRawEvent::EPointerMove,15,13);
sl@0
  2178
			SimulatePointer(TRawEvent::EButton1Up,-2345,-6789);
sl@0
  2179
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2180
			SimulatePointer(TRawEvent::EButton1Down,62,31);
sl@0
  2181
			SimulatePointer(TRawEvent::EButton1Up,62,31);
sl@0
  2182
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(69-EWinPositionX,31-EWinPositionY));
sl@0
  2183
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(69-EWinPositionX,31-EWinPositionY));
sl@0
  2184
			AddExpectedPointer(TPointerEvent::EMove, TPoint(64-EWinPositionX,26-EWinPositionY));
sl@0
  2185
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(64-EWinPositionX,26-EWinPositionY));
sl@0
  2186
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(74-EWinPositionX,23-EWinPositionY));
sl@0
  2187
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(74-EWinPositionX,23-EWinPositionY));
sl@0
  2188
			AddExpectedPointer(TPointerEvent::EMove, TPoint(70-EWinPositionX,32-EWinPositionY));
sl@0
  2189
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(70-EWinPositionX,32-EWinPositionY));
sl@0
  2190
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(85-EWinPositionX,45-EWinPositionY));
sl@0
  2191
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(85-EWinPositionX,45-EWinPositionY));
sl@0
  2192
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(62-EWinPositionX,31-EWinPositionY));
sl@0
  2193
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(62-EWinPositionX,31-EWinPositionY));
sl@0
  2194
			break;
sl@0
  2195
		#endif
sl@0
  2196
		default:
sl@0
  2197
			CActiveScheduler::Stop();
sl@0
  2198
			break;
sl@0
  2199
		}
sl@0
  2200
	TheClient->iWs.Flush();
sl@0
  2201
	}
sl@0
  2202
sl@0
  2203
void CTEventTest::MovingPointerCursor_NextSetOfEventsL()
sl@0
  2204
	{
sl@0
  2205
	switch(iEventSet++)
sl@0
  2206
		{
sl@0
  2207
		case 0:
sl@0
  2208
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerFilterMove|EPointerFilterDrag,0);
sl@0
  2209
			iQueueClient->iWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  2210
			iQueueClient->iChildWin->BaseWin()->PointerFilter(EPointerFilterMove|EPointerFilterDrag,0);
sl@0
  2211
			iQueueClient->iChildWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  2212
			iQueueClient->iWs.Flush();
sl@0
  2213
			//AddExpectedEvent(EEventFocusGained);
sl@0
  2214
			break;
sl@0
  2215
		#if defined(__WINS__)
sl@0
  2216
		case 1:
sl@0
  2217
			TheClient->iWs.SimulateXyInputType(EXYInputMouse);
sl@0
  2218
			iQueueClient->iChildWin->BaseWin()->PointerFilter(EPointerFilterMove|EPointerFilterDrag,0);
sl@0
  2219
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerFilterMove|EPointerFilterDrag,0);
sl@0
  2220
			iQueueClient->iWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  2221
			iQueueClient->iChildWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  2222
			iQueueClient->iWs.Flush();
sl@0
  2223
			SimulatePointer(TRawEvent::EPointerMove,46,31);
sl@0
  2224
			SimulatePointer(TRawEvent::EButton1Down,46,31);
sl@0
  2225
			SimulatePointer(TRawEvent::EPointerMove,47,32);
sl@0
  2226
			SimulatePointer(TRawEvent::EButton1Up,47,32);
sl@0
  2227
			AddExpectedPointer(TPointerEvent::EMove, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  2228
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(46-EWinPositionX,31-EWinPositionY));
sl@0
  2229
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(47-EWinPositionX,32-EWinPositionY));
sl@0
  2230
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(47-EWinPositionX,32-EWinPositionY));
sl@0
  2231
			break;
sl@0
  2232
		case 2:
sl@0
  2233
			TheClient->iWs.SimulateXyInputType(EXYInputDeltaMouse);
sl@0
  2234
			TheClient->iWs.SetPointerCursorPosition(TPoint(62,24));
sl@0
  2235
			SimulatePointer(TRawEvent::EPointerMove,-5,-5);
sl@0
  2236
			TheClient->iWs.SetPointerCursorPosition(TPoint(60,20));
sl@0
  2237
			SimulatePointer(TRawEvent::EPointerMove,6,7);
sl@0
  2238
			SimulatePointer(TRawEvent::EButton1Down,27,38);
sl@0
  2239
			SimulatePointer(TRawEvent::EPointerMove,0,0);
sl@0
  2240
			TheClient->iWs.SetPointerCursorPosition(TPoint(55,25));
sl@0
  2241
			SimulatePointer(TRawEvent::EPointerMove,4,-13);
sl@0
  2242
			TheClient->iWs.SetPointerCursorPosition(TPoint(58,20));
sl@0
  2243
			SimulatePointer(TRawEvent::EButton1Up,45,-678);
sl@0
  2244
			TheClient->iWs.Flush();
sl@0
  2245
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerFilterEnterExit,0);
sl@0
  2246
			iQueueClient->iChildWin->BaseWin()->PointerFilter(EPointerFilterEnterExit,0);
sl@0
  2247
			iQueueClient->iWs.Flush();
sl@0
  2248
			TheClient->iWs.SetPointerCursorPosition(TPoint(80,45));
sl@0
  2249
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2250
			AddExpectedPointer(TPointerEvent::EMove, TPoint(57-EWinPositionX,19-EWinPositionY));
sl@0
  2251
			AddExpectedPointer(TPointerEvent::EMove, TPoint(66-EWinPositionX,27-EWinPositionY));
sl@0
  2252
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(66-EWinPositionX,27-EWinPositionY));
sl@0
  2253
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(66-EWinPositionX,27-EWinPositionY));
sl@0
  2254
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(59-EWinPositionX,12-EWinPositionY));
sl@0
  2255
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(58-EWinPositionX,20-EWinPositionY));
sl@0
  2256
			AddExpectedEnterExit(EEventPointerEnter, TPoint(58-EWinPositionX,20-EWinPositionY));
sl@0
  2257
			AddExpectedEnterExit(EEventPointerExit, TPoint(58-EWinPositionX,20-EWinPositionY));
sl@0
  2258
			AddExpectedEnterExit(EEventPointerEnter, TPoint(80-EWinPositionX,45-EWinPositionY));
sl@0
  2259
			break;
sl@0
  2260
		case 3:
sl@0
  2261
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerFilterEnterExit,EPointerFilterEnterExit);
sl@0
  2262
			iQueueClient->iChildWin->BaseWin()->PointerFilter(EPointerFilterEnterExit,EPointerFilterEnterExit);
sl@0
  2263
			iQueueClient->iWs.Flush();
sl@0
  2264
			TheClient->iWs.SetPointerCursorArea(TRect(0,0,70,240));
sl@0
  2265
			TheClient->iWs.SimulateXyInputType(EXYInputDeltaMouse);
sl@0
  2266
			TheClient->iWs.SetPointerCursorPosition(TPoint(65,30));
sl@0
  2267
			SimulatePointer(TRawEvent::EPointerMove,20,0);
sl@0
  2268
			TheClient->iWs.SetPointerCursorPosition(TPoint(75,32));
sl@0
  2269
			SimulatePointer(TRawEvent::EPointerMove,-1,20);
sl@0
  2270
			SimulatePointer(TRawEvent::EButton1Down,29,37);
sl@0
  2271
			SimulatePointer(TRawEvent::EPointerMove,25,-13);
sl@0
  2272
			SimulatePointer(TRawEvent::EButton1Up,47,-648);
sl@0
  2273
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2274
			AddExpectedPointer(TPointerEvent::EMove, TPoint(69-EWinPositionX,30-EWinPositionY));
sl@0
  2275
			AddExpectedPointer(TPointerEvent::EMove, TPoint(68-EWinPositionX,52-EWinPositionY));
sl@0
  2276
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(68-EWinPositionX,52-EWinPositionY));
sl@0
  2277
			AddExpectedPointer(TPointerEvent::EDrag, TPoint(69-EWinPositionX,39-EWinPositionY));
sl@0
  2278
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(69-EWinPositionX,39-EWinPositionY));
sl@0
  2279
			break;
sl@0
  2280
		case 4:
sl@0
  2281
			TheClient->iWs.SetPointerCursorArea(TRect(EWinPositionX+2,EWinPositionY+2,EWinPositionX+99,EWinPositionY+49));
sl@0
  2282
			TheClient->iWs.SimulateXyInputType(EXYInputDeltaMouse);
sl@0
  2283
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,30));
sl@0
  2284
			SimulatePointer(TRawEvent::EPointerMove,0,-34);
sl@0
  2285
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,30));
sl@0
  2286
			SimulatePointer(TRawEvent::EPointerMove,0,0);
sl@0
  2287
			SimulatePointer(TRawEvent::EPointerMove,-77,-35);
sl@0
  2288
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,30));
sl@0
  2289
			SimulatePointer(TRawEvent::EPointerMove,0,0);
sl@0
  2290
			SimulatePointer(TRawEvent::EPointerMove,-78,0);
sl@0
  2291
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,30));
sl@0
  2292
			SimulatePointer(TRawEvent::EPointerMove,0,0);
sl@0
  2293
			SimulatePointer(TRawEvent::EPointerMove,-79,36);
sl@0
  2294
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,30));
sl@0
  2295
			SimulatePointer(TRawEvent::EPointerMove,0,0);
sl@0
  2296
			SimulatePointer(TRawEvent::EPointerMove,0,37);
sl@0
  2297
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,30));
sl@0
  2298
			SimulatePointer(TRawEvent::EPointerMove,0,0);
sl@0
  2299
			SimulatePointer(TRawEvent::EPointerMove,80,38);
sl@0
  2300
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,30));
sl@0
  2301
			SimulatePointer(TRawEvent::EPointerMove,0,0);
sl@0
  2302
			SimulatePointer(TRawEvent::EPointerMove,81,0);
sl@0
  2303
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,30));
sl@0
  2304
			SimulatePointer(TRawEvent::EPointerMove,0,0);
sl@0
  2305
			SimulatePointer(TRawEvent::EPointerMove,82,-39);
sl@0
  2306
			TheClient->iWs.SetPointerCursorPosition(TPoint(2,2));
sl@0
  2307
			SimulatePointer(TRawEvent::EPointerMove,30,30);
sl@0
  2308
			TheClient->iWs.SetPointerCursorPosition(TPoint(1,30));
sl@0
  2309
			SimulatePointer(TRawEvent::EPointerMove,1,0);
sl@0
  2310
			TheClient->iWs.SetPointerCursorPosition(TPoint(2,88));
sl@0
  2311
			SimulatePointer(TRawEvent::EPointerMove,30,-30);
sl@0
  2312
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,88));
sl@0
  2313
			SimulatePointer(TRawEvent::EPointerMove,0,-1);
sl@0
  2314
			TheClient->iWs.SetPointerCursorPosition(TPoint(123,88));
sl@0
  2315
			SimulatePointer(TRawEvent::EPointerMove,-30,-30);
sl@0
  2316
			TheClient->iWs.SetPointerCursorPosition(TPoint(123,30));
sl@0
  2317
			SimulatePointer(TRawEvent::EPointerMove,-1,0);
sl@0
  2318
			TheClient->iWs.SetPointerCursorPosition(TPoint(123,2));
sl@0
  2319
			SimulatePointer(TRawEvent::EPointerMove,-30,30);
sl@0
  2320
			TheClient->iWs.SetPointerCursorPosition(TPoint(56,1));
sl@0
  2321
			SimulatePointer(TRawEvent::EPointerMove,0,1);
sl@0
  2322
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2323
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,2));
sl@0
  2324
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,30-EWinPositionY));
sl@0
  2325
			AddExpectedPointer(TPointerEvent::EMove, TPoint(2,2));
sl@0
  2326
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,30-EWinPositionY));
sl@0
  2327
			AddExpectedPointer(TPointerEvent::EMove, TPoint(2,30-EWinPositionY));
sl@0
  2328
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,30-EWinPositionY));
sl@0
  2329
			AddExpectedPointer(TPointerEvent::EMove, TPoint(2,48));
sl@0
  2330
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,30-EWinPositionY));
sl@0
  2331
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,48));
sl@0
  2332
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,30-EWinPositionY));
sl@0
  2333
			AddExpectedPointer(TPointerEvent::EMove, TPoint(98,48));
sl@0
  2334
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,30-EWinPositionY));
sl@0
  2335
			AddExpectedPointer(TPointerEvent::EMove, TPoint(98,30-EWinPositionY));
sl@0
  2336
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,30-EWinPositionY));
sl@0
  2337
			AddExpectedPointer(TPointerEvent::EMove, TPoint(98,2));
sl@0
  2338
			AddExpectedPointer(TPointerEvent::EMove, TPoint(32,32));
sl@0
  2339
			AddExpectedPointer(TPointerEvent::EMove, TPoint(3,30-EWinPositionY));
sl@0
  2340
			AddExpectedPointer(TPointerEvent::EMove, TPoint(32,18));
sl@0
  2341
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,47));
sl@0
  2342
			AddExpectedPointer(TPointerEvent::EMove, TPoint(68,18));
sl@0
  2343
			AddExpectedPointer(TPointerEvent::EMove, TPoint(97,30-EWinPositionY));
sl@0
  2344
			AddExpectedPointer(TPointerEvent::EMove, TPoint(68,32));
sl@0
  2345
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,3));
sl@0
  2346
			break;
sl@0
  2347
		case 5:
sl@0
  2348
			TheClient->iWs.SetPointerCursorArea(TRect(0,0,EWinPositionX+100,EWinPositionY+50));
sl@0
  2349
			TheClient->iWs.SimulateXyInputType(EXYInputDeltaMouse);
sl@0
  2350
			TheClient->iWs.SetPointerCursorPosition(TPoint(57,31));
sl@0
  2351
			TheClient->iWs.SetPointerCursorArea(TRect(0,35,EWinPositionX+100,EWinPositionY+50));
sl@0
  2352
			SimulatePointer(TRawEvent::EPointerMove,1,0);
sl@0
  2353
			TheClient->iWs.SetPointerCursorPosition(TPoint(10,55));
sl@0
  2354
			TheClient->iWs.SetPointerCursorArea(TRect(15,0,EWinPositionX+100,50));
sl@0
  2355
			SimulatePointer(TRawEvent::EPointerMove,1,1);
sl@0
  2356
			TheClient->iWs.SetPointerCursorPosition(TPoint(57,31));
sl@0
  2357
			TheClient->iWs.SetPointerCursorArea(TRect(0,0,50,EWinPositionY+50));
sl@0
  2358
			SimulatePointer(TRawEvent::EPointerMove,0,1);
sl@0
  2359
			TheClient->iWs.SetPointerCursorPosition(TPoint(10,10));
sl@0
  2360
			TheClient->iWs.SetPointerCursorArea(TRect(15,15,EWinPositionX+100,EWinPositionY+50));
sl@0
  2361
			SimulatePointer(TRawEvent::EPointerMove,1,-1);
sl@0
  2362
			TheClient->iWs.SetPointerCursorPosition(TPoint(57,31));
sl@0
  2363
			TheClient->iWs.SetPointerCursorArea(TRect(0,0,EWinPositionX+100,30));
sl@0
  2364
			SimulatePointer(TRawEvent::EPointerMove,-1,0);
sl@0
  2365
			TheClient->iWs.SetPointerCursorPosition(TPoint(100,10));
sl@0
  2366
			TheClient->iWs.SetPointerCursorArea(TRect(0,15,95,EWinPositionY+50));
sl@0
  2367
			SimulatePointer(TRawEvent::EPointerMove,-1,-1);
sl@0
  2368
			TheClient->iWs.SetPointerCursorPosition(TPoint(57,31));
sl@0
  2369
			TheClient->iWs.SetPointerCursorArea(TRect(60,0,EWinPositionX+100,EWinPositionY+50));
sl@0
  2370
			SimulatePointer(TRawEvent::EPointerMove,0,-1);
sl@0
  2371
			TheClient->iWs.SetPointerCursorPosition(TPoint(100,55));
sl@0
  2372
			TheClient->iWs.SetPointerCursorArea(TRect(0,0,95,50));
sl@0
  2373
			SimulatePointer(TRawEvent::EPointerMove,1,-1);
sl@0
  2374
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2375
			AddExpectedPointer(TPointerEvent::EMove, TPoint(58-EWinPositionX,35-EWinPositionY));
sl@0
  2376
			AddExpectedPointer(TPointerEvent::EMove, TPoint(16-EWinPositionX,49-EWinPositionY));
sl@0
  2377
			AddExpectedPointer(TPointerEvent::EMove, TPoint(49-EWinPositionX,32-EWinPositionY));
sl@0
  2378
			AddExpectedPointer(TPointerEvent::EMove, TPoint(16-EWinPositionX,15-EWinPositionY));
sl@0
  2379
			AddExpectedPointer(TPointerEvent::EMove, TPoint(56-EWinPositionX,29-EWinPositionY));
sl@0
  2380
			AddExpectedPointer(TPointerEvent::EMove, TPoint(93-EWinPositionX,15-EWinPositionY));
sl@0
  2381
			AddExpectedPointer(TPointerEvent::EMove, TPoint(60-EWinPositionX,30-EWinPositionY));
sl@0
  2382
			AddExpectedPointer(TPointerEvent::EMove, TPoint(94-EWinPositionX,48-EWinPositionY));
sl@0
  2383
			break;
sl@0
  2384
		#endif
sl@0
  2385
		default:
sl@0
  2386
			TheClient->iWs.SetPointerCursorArea(TRect(0,0,95,50));
sl@0
  2387
			CActiveScheduler::Stop();
sl@0
  2388
			break;
sl@0
  2389
		}
sl@0
  2390
	TheClient->iWs.Flush();
sl@0
  2391
	}
sl@0
  2392
sl@0
  2393
void CTEventTest::RotatedMode_NextSetOfEventsL()
sl@0
  2394
	{
sl@0
  2395
#if defined(LOGGING)
sl@0
  2396
	TLogMessageText logMessageText;
sl@0
  2397
	_LIT(KSet,"RotatedMode SetOfEvents: %d  Max=4");
sl@0
  2398
	logMessageText.Format(KSet,iEventSet);
sl@0
  2399
	INFO_PRINTF1(logMessageText);
sl@0
  2400
#endif
sl@0
  2401
	switch(iEventSet++)
sl@0
  2402
		{
sl@0
  2403
		case 0:
sl@0
  2404
			{
sl@0
  2405
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerFilterMove|EPointerFilterDrag,0);
sl@0
  2406
			iQueueClient->iWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  2407
			iQueueClient->iWs.Flush();
sl@0
  2408
			TheClient->iWs.SetPointerCursorArea(TRect(10,10,51,51));
sl@0
  2409
			SimulatePointer(TRawEvent::EButton1Down,5,5);
sl@0
  2410
			SimulatePointer(TRawEvent::EButton1Up,25,5);
sl@0
  2411
			SimulatePointer(TRawEvent::EButton1Down,55,5);
sl@0
  2412
			SimulatePointer(TRawEvent::EButton1Up,55,35);
sl@0
  2413
			SimulatePointer(TRawEvent::EButton1Down,55,55);
sl@0
  2414
			SimulatePointer(TRawEvent::EButton1Up,25,55);
sl@0
  2415
			SimulatePointer(TRawEvent::EButton1Down,5,55);
sl@0
  2416
			SimulatePointer(TRawEvent::EButton1Up,5,35);
sl@0
  2417
			AddExpectedEvent(EEventFocusGained);
sl@0
  2418
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(10-EWinPositionX,10-EWinPositionY));
sl@0
  2419
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(25-EWinPositionX,10-EWinPositionY));
sl@0
  2420
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(50-EWinPositionX,10-EWinPositionY));
sl@0
  2421
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(50-EWinPositionX,35-EWinPositionY));
sl@0
  2422
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(50-EWinPositionX,50-EWinPositionY));
sl@0
  2423
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(25-EWinPositionX,50-EWinPositionY));
sl@0
  2424
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(10-EWinPositionX,50-EWinPositionY));
sl@0
  2425
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(10-EWinPositionX,35-EWinPositionY));
sl@0
  2426
			}
sl@0
  2427
			break;
sl@0
  2428
		case 1:
sl@0
  2429
			{
sl@0
  2430
			TInt enforc=TheClient->iScreen->ScreenModeEnforcement();
sl@0
  2431
			iBlankWin->SetVisible(ETrue);
sl@0
  2432
		#if defined(LOGGING)
sl@0
  2433
			_LIT(KSet1,"AUTO  Rotating Events :1st ");
sl@0
  2434
			INFO_PRINTF1(KSet1);
sl@0
  2435
		#endif
sl@0
  2436
			INFO_PRINTF1(_L(" Set of Events"));
sl@0
  2437
			if (iScreenModeTests&EDoRot90)
sl@0
  2438
				{
sl@0
  2439
				TheClient->iScreen->SetScreenMode(1);
sl@0
  2440
				TheClient->iWs.Flush();
sl@0
  2441
				iTest->DelayIfFullRomL();
sl@0
  2442
				INFO_PRINTF1(_L(" Screen mode 1."));
sl@0
  2443
				TPoint screenModeOrigin=TheClient->iScreen->GetDefaultScreenModeOrigin();
sl@0
  2444
			#if defined(__WINS__)
sl@0
  2445
				iTest->SimulatePointer(TRawEvent::EButton1Down,20+screenModeOrigin.iX,20+screenModeOrigin.iY);
sl@0
  2446
				iTest->SimulatePointer(TRawEvent::EButton1Up,20+screenModeOrigin.iX,20+screenModeOrigin.iY);
sl@0
  2447
			#else
sl@0
  2448
				// simulate pointer at (20,20) on rotated screen by providing physical coordinates
sl@0
  2449
				iTest->SimulatePointer(TRawEvent::EButton1Down,iPhysicalScreenSize.iWidth-1-20+screenModeOrigin.iX,20+screenModeOrigin.iY);
sl@0
  2450
				iTest->SimulatePointer(TRawEvent::EButton1Up,iPhysicalScreenSize.iWidth-1-20+screenModeOrigin.iX,20+screenModeOrigin.iY);
sl@0
  2451
			#endif
sl@0
  2452
				INFO_PRINTF1(_L(" Sent Up and Down 90"));
sl@0
  2453
				}
sl@0
  2454
			if (iScreenModeTests&EDoRot180)
sl@0
  2455
				{
sl@0
  2456
				TheClient->iScreen->SetCurrentRotations(0,CFbsBitGc::EGraphicsOrientationRotated180);
sl@0
  2457
				TheClient->iScreen->SetScreenMode(0);
sl@0
  2458
				INFO_PRINTF1(_L(" Screen mode 0"));
sl@0
  2459
				TheClient->iWs.Flush();
sl@0
  2460
				iTest->DelayIfFullRomL();
sl@0
  2461
				INFO_PRINTF1(_L(" Upside Down"));
sl@0
  2462
			#if defined(__WINS__)
sl@0
  2463
				iTest->SimulatePointer(TRawEvent::EButton1Down,22,22);
sl@0
  2464
				iTest->SimulatePointer(TRawEvent::EButton1Up,22,22);
sl@0
  2465
			#else
sl@0
  2466
				// simulate pointer at (22,22) on rotated screen by providing physical coordinates
sl@0
  2467
				iTest->SimulatePointer(TRawEvent::EButton1Down,iPhysicalScreenSize.iWidth-1-22,iPhysicalScreenSize.iHeight-1-22);
sl@0
  2468
				iTest->SimulatePointer(TRawEvent::EButton1Up,iPhysicalScreenSize.iWidth-1-22,iPhysicalScreenSize.iHeight-1-22);
sl@0
  2469
			#endif
sl@0
  2470
				INFO_PRINTF1(_L(" Sent Up and Down 180"));
sl@0
  2471
				}
sl@0
  2472
			TheClient->iScreen->SetCurrentRotations(0,CFbsBitGc::EGraphicsOrientationNormal);
sl@0
  2473
			TheClient->iScreen->SetScreenMode(0);
sl@0
  2474
			TheClient->iWs.Flush();
sl@0
  2475
			iTest->DelayIfFullRomL();
sl@0
  2476
			INFO_PRINTF1(_L(" Normal Screen mode"));
sl@0
  2477
			if (iScreenModeTests&EDoRot0)
sl@0
  2478
				{
sl@0
  2479
				SimulatePointer(TRawEvent::EButton1Down,24,24);
sl@0
  2480
				SimulatePointer(TRawEvent::EButton1Up,24,24);
sl@0
  2481
				}
sl@0
  2482
			if (iScreenModeTests&EDoRot90)
sl@0
  2483
				{
sl@0
  2484
				if (enforc>ESizeEnforcementNone)
sl@0
  2485
					{
sl@0
  2486
					AddExpectedEvent(EEventFocusLost);
sl@0
  2487
					AddExpectedEvent(EEventFocusGained);
sl@0
  2488
					}
sl@0
  2489
				else
sl@0
  2490
					{
sl@0
  2491
                    AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(20-EWinPositionX,20-EWinPositionY-iYOffset));
sl@0
  2492
                    AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(20-EWinPositionX,20-EWinPositionY-iYOffset));
sl@0
  2493
                    }
sl@0
  2494
				}
sl@0
  2495
			if (iScreenModeTests&EDoRot180)
sl@0
  2496
				{
sl@0
  2497
                AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(22-EWinPositionX,22-EWinPositionY-iYOffset));
sl@0
  2498
                AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(22-EWinPositionX,22-EWinPositionY-iYOffset));
sl@0
  2499
				}
sl@0
  2500
			if (iScreenModeTests&EDoRot0)
sl@0
  2501
				{
sl@0
  2502
				AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24-EWinPositionX,24-EWinPositionY));
sl@0
  2503
				AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,24-EWinPositionY));
sl@0
  2504
				}
sl@0
  2505
			INFO_PRINTF1(_L(" Added Expected"));
sl@0
  2506
			User::After(EPointerCursorUpdateGap);
sl@0
  2507
			iBlankWin->SetVisible(EFalse);
sl@0
  2508
			}
sl@0
  2509
			break;
sl@0
  2510
	#if defined(__WINS__)
sl@0
  2511
		case 2:
sl@0
  2512
			{
sl@0
  2513
			TInt enforc=TheClient->iScreen->ScreenModeEnforcement();
sl@0
  2514
			//INFO_PRINTF1("AUTO  Rotating Events ");
sl@0
  2515
			//INFO_PRINTF1(" :2nd Set of Events");
sl@0
  2516
			TheClient->iWs.SimulateXyInputType(EXYInputDeltaMouse);
sl@0
  2517
			TheClient->iWs.SetPointerCursorPosition(TPoint(24+EWinPositionX,24+EWinPositionY));
sl@0
  2518
			if (iScreenModeTests&EDoRot90)
sl@0
  2519
				{
sl@0
  2520
				TheClient->iScreen->SetScreenMode(1);
sl@0
  2521
				TheClient->iWs.Flush();
sl@0
  2522
				iTest->DelayIfFullRomL();
sl@0
  2523
				SimulatePointer(TRawEvent::EPointerMove,1,2);
sl@0
  2524
				SimulatePointer(TRawEvent::EButton1Down,56,89);
sl@0
  2525
				SimulatePointer(TRawEvent::EPointerMove,2,-1);
sl@0
  2526
				SimulatePointer(TRawEvent::EButton1Up,234,456);
sl@0
  2527
				}
sl@0
  2528
			else
sl@0
  2529
				TheClient->iWs.SetPointerCursorPosition(TPoint(27+EWinPositionX,25+EWinPositionY));
sl@0
  2530
			if (iScreenModeTests&EDoRot180)
sl@0
  2531
				{
sl@0
  2532
				TheClient->iScreen->SetCurrentRotations(0,CFbsBitGc::EGraphicsOrientationRotated180);
sl@0
  2533
				TheClient->iScreen->SetScreenMode(0);
sl@0
  2534
				TheClient->iWs.Flush();
sl@0
  2535
				iTest->DelayIfFullRomL();
sl@0
  2536
				SimulatePointer(TRawEvent::EPointerMove,-3,4);
sl@0
  2537
				SimulatePointer(TRawEvent::EButton1Down,156,289);
sl@0
  2538
				SimulatePointer(TRawEvent::EPointerMove,-4,-3);
sl@0
  2539
				SimulatePointer(TRawEvent::EButton1Up,2234,3456);
sl@0
  2540
				}
sl@0
  2541
			else
sl@0
  2542
				TheClient->iWs.SetPointerCursorPosition(TPoint(20+EWinPositionX,26+EWinPositionY));
sl@0
  2543
			TheClient->iScreen->SetCurrentRotations(0,CFbsBitGc::EGraphicsOrientationNormal);
sl@0
  2544
			TheClient->iScreen->SetScreenMode(0);
sl@0
  2545
			TheClient->iWs.Flush();
sl@0
  2546
			iTest->DelayIfFullRomL();
sl@0
  2547
			if (iScreenModeTests&EDoRot0)
sl@0
  2548
				{
sl@0
  2549
				SimulatePointer(TRawEvent::EButton1Down,24,24);
sl@0
  2550
				SimulatePointer(TRawEvent::EButton1Up,24,24);
sl@0
  2551
				}
sl@0
  2552
			TheClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2553
			TheClient->iWs.Flush();
sl@0
  2554
			if (iScreenModeTests&EDoRot90)
sl@0
  2555
				{
sl@0
  2556
				if (enforc>ESizeEnforcementNone)
sl@0
  2557
					{
sl@0
  2558
					AddExpectedEvent(EEventFocusLost);
sl@0
  2559
					AddExpectedEvent(EEventFocusGained);
sl@0
  2560
					}
sl@0
  2561
				else
sl@0
  2562
					{
sl@0
  2563
					AddExpectedPointer(TPointerEvent::EMove, TPoint(25,26));
sl@0
  2564
					AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(25,26));
sl@0
  2565
					AddExpectedPointer(TPointerEvent::EDrag, TPoint(27,25));
sl@0
  2566
					AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(27,25));
sl@0
  2567
					}
sl@0
  2568
				}
sl@0
  2569
			if (iScreenModeTests&EDoRot180)
sl@0
  2570
				{
sl@0
  2571
				AddExpectedPointer(TPointerEvent::EMove, TPoint(24,29));
sl@0
  2572
				AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24,29));
sl@0
  2573
				AddExpectedPointer(TPointerEvent::EDrag, TPoint(20,26));
sl@0
  2574
				AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(20,26));
sl@0
  2575
				}
sl@0
  2576
			if (iScreenModeTests&EDoRot0)
sl@0
  2577
				{
sl@0
  2578
				AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(20,26));
sl@0
  2579
				AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(20,26));
sl@0
  2580
				}
sl@0
  2581
			}
sl@0
  2582
			break;
sl@0
  2583
		case 3:
sl@0
  2584
			{
sl@0
  2585
		#if defined(LOGGING)
sl@0
  2586
			_LIT(KSet2,"AUTO  Rotating Events ");
sl@0
  2587
			INFO_PRINTF1(KSet2);
sl@0
  2588
		#endif
sl@0
  2589
			INFO_PRINTF1(_L(" :3rd Set of Events"));
sl@0
  2590
			if (iScreenModeTests&EDoScale)
sl@0
  2591
				{
sl@0
  2592
				INFO_PRINTF1(_L(" :Screen Scalling Supported"));
sl@0
  2593
				iBlankWin->SetVisible(ETrue);
sl@0
  2594
				iCurrentMode=iNumScrModes;
sl@0
  2595
				--iCurrentMode;
sl@0
  2596
				iTheClientFlush=TheClient->iWs.SetAutoFlush(ETrue);
sl@0
  2597
				iQuequeClientFlush=iQueueClient->iWs.SetAutoFlush(ETrue);
sl@0
  2598
				iQueueClient->iScreen->SetScreenMode(iCurrentMode);
sl@0
  2599
				TheClient->iScreen->SetAppScreenMode(iCurrentMode);
sl@0
  2600
				iQueueClient->iScreen->SetAppScreenMode(iCurrentMode);
sl@0
  2601
				iSizeMode=iQueueClient->iScreen->GetCurrentScreenModeAttributes();
sl@0
  2602
				TSizeMode testMode=iSizeMode;
sl@0
  2603
				for (TInt xScale=2;xScale<4;xScale++)
sl@0
  2604
					{
sl@0
  2605
				INFO_PRINTF1(_L(" :New X-Scale Value"));
sl@0
  2606
					for (TInt yScale=2;yScale<4;yScale++)
sl@0
  2607
						{
sl@0
  2608
						INFO_PRINTF1(_L(" :New Y-Scale Value"));
sl@0
  2609
						testMode.iScreenScale.SetSize(xScale,yScale);
sl@0
  2610
						CheckPointerCursorInDifferentScreenMode(testMode,TPoint(20,30));
sl@0
  2611
						}
sl@0
  2612
					}
sl@0
  2613
				User::After(EPointerCursorUpdateGap);
sl@0
  2614
				iBlankWin->SetVisible(EFalse);
sl@0
  2615
				break;
sl@0
  2616
				}
sl@0
  2617
			}
sl@0
  2618
		case 4:
sl@0
  2619
			{
sl@0
  2620
			if (iScreenModeTests&EDoScale)
sl@0
  2621
				{
sl@0
  2622
				TSizeMode testMode=iSizeMode;
sl@0
  2623
				iBlankWin->SetVisible(ETrue);
sl@0
  2624
				for (TInt xScale=2;xScale<4;xScale++)
sl@0
  2625
					{
sl@0
  2626
					for (TInt yScale=2;yScale<4;yScale++)
sl@0
  2627
						{
sl@0
  2628
						testMode.iScreenScale.SetSize(xScale,yScale);
sl@0
  2629
						CheckPointerCursorInDifferentScreenMode(testMode,TPoint(30,20));
sl@0
  2630
						}
sl@0
  2631
					}
sl@0
  2632
				User::After(EPointerCursorUpdateGap);
sl@0
  2633
				iBlankWin->SetVisible(EFalse);
sl@0
  2634
				break;
sl@0
  2635
				}
sl@0
  2636
			}
sl@0
  2637
	#endif
sl@0
  2638
		default:
sl@0
  2639
		#if defined(__WINS__)
sl@0
  2640
			if (iScreenModeTests&EDoScale)
sl@0
  2641
				{
sl@0
  2642
				iQueueClient->iScreen->SetScreenMode(iCurrentMode);
sl@0
  2643
				iQueueClient->iScreen->SetCurrentScreenModeAttributes(iSizeMode);
sl@0
  2644
				iQueueClient->iScreen->SetAppScreenMode(0);
sl@0
  2645
				TheClient->iScreen->SetAppScreenMode(0);
sl@0
  2646
				iQueueClient->iScreen->SetScreenMode(0);
sl@0
  2647
				iBlankWin->SetVisible(EFalse);
sl@0
  2648
				TheClient->iWs.SetAutoFlush(iTheClientFlush);
sl@0
  2649
				iQueueClient->iWs.SetAutoFlush(iQuequeClientFlush);
sl@0
  2650
				}
sl@0
  2651
		#endif
sl@0
  2652
			User::After(500000);		//0.5secs, to allow other screen devices to respond to the flip events
sl@0
  2653
			CActiveScheduler::Stop();
sl@0
  2654
			break;
sl@0
  2655
		}
sl@0
  2656
	TheClient->iWs.Flush();
sl@0
  2657
	}
sl@0
  2658
sl@0
  2659
sl@0
  2660
void CTEventTest::ScreenScaling_NextSetOfEventsL()
sl@0
  2661
	{
sl@0
  2662
#if defined(LOGGING)
sl@0
  2663
	TLogMessageText logMessageText;
sl@0
  2664
	_LIT(KSet,"ScreenScaling SetOfEvents: %d (Last=3)");
sl@0
  2665
	logMessageText.Format(KSet,iEventSet);
sl@0
  2666
	INFO_PRINTF1(logMessageText);
sl@0
  2667
#endif
sl@0
  2668
	if(! (iScreenModeTests & EDoScale))
sl@0
  2669
		{
sl@0
  2670
		User::After(500000);
sl@0
  2671
		CActiveScheduler::Stop();
sl@0
  2672
		return;
sl@0
  2673
		}
sl@0
  2674
	switch(iEventSet++)
sl@0
  2675
		{
sl@0
  2676
		case 0:
sl@0
  2677
			{
sl@0
  2678
			iTheClientFlush=TheClient->iWs.SetAutoFlush(ETrue);
sl@0
  2679
			iQuequeClientFlush=iQueueClient->iWs.SetAutoFlush(ETrue);
sl@0
  2680
			iBlankWin->SetVisible(ETrue);
sl@0
  2681
sl@0
  2682
			TInt mode = TheClient->iScreen->CurrentScreenMode();
sl@0
  2683
sl@0
  2684
			iSizeMode = iQueueClient->iScreen->GetCurrentScreenModeAttributes();
sl@0
  2685
sl@0
  2686
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerFilterMove|EPointerFilterDrag,0);
sl@0
  2687
			iQueueClient->iWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  2688
sl@0
  2689
			TSizeMode szMode2 = iSizeMode;
sl@0
  2690
sl@0
  2691
			szMode2.iScreenScale.SetSize(2,2);
sl@0
  2692
sl@0
  2693
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(szMode2);
sl@0
  2694
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2695
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2696
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2697
sl@0
  2698
			TPoint theScreenOrigin(iQueueClient->iScreen->GetScreenModeOrigin(mode));
sl@0
  2699
sl@0
  2700
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2701
				20+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2702
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2703
				20+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2704
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(iSizeMode);
sl@0
  2705
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2706
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2707
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2708
sl@0
  2709
			AddExpectedEvent(EEventFocusGained);
sl@0
  2710
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(10-EWinPositionX,10-EWinPositionY));
sl@0
  2711
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(10-EWinPositionX,10-EWinPositionY));
sl@0
  2712
sl@0
  2713
			break;
sl@0
  2714
			}
sl@0
  2715
		case 1:
sl@0
  2716
			{
sl@0
  2717
			TSizeMode szMode2 = iSizeMode;
sl@0
  2718
			TInt mode = TheClient->iScreen->CurrentScreenMode();
sl@0
  2719
sl@0
  2720
			szMode2.iScreenScale.SetSize(2,2);
sl@0
  2721
			szMode2.iOrigin.SetXY(20,20);
sl@0
  2722
sl@0
  2723
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(szMode2);
sl@0
  2724
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2725
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2726
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2727
sl@0
  2728
			TPoint theScreenOrigin(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2729
sl@0
  2730
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2731
				30+theScreenOrigin.iX, 30+theScreenOrigin.iY);
sl@0
  2732
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2733
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2734
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2735
				40+theScreenOrigin.iX, 60+theScreenOrigin.iY);
sl@0
  2736
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2737
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2738
sl@0
  2739
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(15-EWinPositionX,15-EWinPositionY));
sl@0
  2740
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(13-EWinPositionX,10-EWinPositionY));
sl@0
  2741
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(20-EWinPositionX,30-EWinPositionY));
sl@0
  2742
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(13-EWinPositionX,10-EWinPositionY));
sl@0
  2743
sl@0
  2744
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(iSizeMode);
sl@0
  2745
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2746
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2747
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2748
sl@0
  2749
			theScreenOrigin = TPoint(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2750
sl@0
  2751
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2752
				30+theScreenOrigin.iX, 30+theScreenOrigin.iY);
sl@0
  2753
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2754
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2755
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2756
				40+theScreenOrigin.iX, 50+theScreenOrigin.iY);
sl@0
  2757
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2758
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2759
sl@0
  2760
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(30-EWinPositionX,30-EWinPositionY));
sl@0
  2761
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(26-EWinPositionX,20-EWinPositionY));
sl@0
  2762
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(40-EWinPositionX,50-EWinPositionY));
sl@0
  2763
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(26-EWinPositionX,20-EWinPositionY));
sl@0
  2764
			break;
sl@0
  2765
			}
sl@0
  2766
		case 2:
sl@0
  2767
			{
sl@0
  2768
			TInt mode = TheClient->iScreen->CurrentScreenMode();
sl@0
  2769
			TRect	theRect = TheClient->iWs.PointerCursorArea();
sl@0
  2770
sl@0
  2771
			TSizeMode szMode2 = iSizeMode;
sl@0
  2772
sl@0
  2773
			//-----------  scaling 2X2
sl@0
  2774
			szMode2.iScreenScale.SetSize(2,2);
sl@0
  2775
sl@0
  2776
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(szMode2);
sl@0
  2777
			iQueueClient->iWs.SetPointerCursorArea(mode, TRect(24,10,52,52));
sl@0
  2778
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2779
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2780
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2781
sl@0
  2782
sl@0
  2783
			TPoint theScreenOrigin(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2784
sl@0
  2785
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2786
				20+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2787
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2788
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2789
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2790
				50+theScreenOrigin.iX, 30+theScreenOrigin.iY);
sl@0
  2791
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2792
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2793
sl@0
  2794
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2795
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2796
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(25-EWinPositionX,15-EWinPositionY));
sl@0
  2797
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2798
			//------------------------  scaling 1X2
sl@0
  2799
			szMode2.iScreenScale.SetSize(1,2);
sl@0
  2800
sl@0
  2801
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(szMode2);
sl@0
  2802
			iQueueClient->iWs.SetPointerCursorArea(mode, TRect(24,10,52,52));
sl@0
  2803
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2804
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2805
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2806
sl@0
  2807
			theScreenOrigin = TPoint(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2808
sl@0
  2809
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2810
				20+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2811
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2812
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2813
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2814
				50+theScreenOrigin.iX, 30+theScreenOrigin.iY);
sl@0
  2815
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2816
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2817
sl@0
  2818
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2819
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(26-EWinPositionX,10-EWinPositionY));
sl@0
  2820
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(50-EWinPositionX,15-EWinPositionY));
sl@0
  2821
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(26-EWinPositionX,10-EWinPositionY));
sl@0
  2822
			//------------------------  scaling 2X1
sl@0
  2823
			szMode2.iScreenScale.SetSize(2,1);
sl@0
  2824
sl@0
  2825
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(szMode2);
sl@0
  2826
			iQueueClient->iWs.SetPointerCursorArea(mode, TRect(24,10,52,52));
sl@0
  2827
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2828
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2829
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2830
sl@0
  2831
			theScreenOrigin = TPoint(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2832
sl@0
  2833
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2834
				20+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2835
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2836
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2837
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2838
				50+theScreenOrigin.iX, 30+theScreenOrigin.iY);
sl@0
  2839
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2840
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2841
sl@0
  2842
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24-EWinPositionX,20-EWinPositionY));
sl@0
  2843
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,20-EWinPositionY));
sl@0
  2844
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(25-EWinPositionX,30-EWinPositionY));
sl@0
  2845
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,20-EWinPositionY));
sl@0
  2846
			//------------------------  scaling 3X1
sl@0
  2847
sl@0
  2848
			szMode2.iScreenScale.SetSize(3,1);
sl@0
  2849
sl@0
  2850
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(szMode2);
sl@0
  2851
			iQueueClient->iWs.SetPointerCursorArea(mode, TRect(24,10,52,52));
sl@0
  2852
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2853
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2854
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2855
sl@0
  2856
			theScreenOrigin = TPoint(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2857
sl@0
  2858
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2859
				21+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2860
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2861
				30+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2862
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2863
				75+theScreenOrigin.iX, 30+theScreenOrigin.iY);
sl@0
  2864
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2865
				30+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2866
sl@0
  2867
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24-EWinPositionX,20-EWinPositionY));
sl@0
  2868
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,20-EWinPositionY));
sl@0
  2869
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(25-EWinPositionX,30-EWinPositionY));
sl@0
  2870
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,20-EWinPositionY));
sl@0
  2871
			//------------------------  scaling 3X2
sl@0
  2872
sl@0
  2873
			szMode2.iScreenScale.SetSize(3,2);
sl@0
  2874
sl@0
  2875
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(szMode2);
sl@0
  2876
			iQueueClient->iWs.SetPointerCursorArea(mode, TRect(24,10,52,52));
sl@0
  2877
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2878
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2879
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2880
sl@0
  2881
			theScreenOrigin = TPoint(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2882
sl@0
  2883
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2884
				21+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2885
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2886
				30+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2887
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2888
				75+theScreenOrigin.iX, 30+theScreenOrigin.iY);
sl@0
  2889
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2890
				30+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2891
sl@0
  2892
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2893
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2894
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(25-EWinPositionX,15-EWinPositionY));
sl@0
  2895
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2896
			//------------------------  scaling 3X3
sl@0
  2897
			szMode2.iScreenScale.SetSize(3,3);
sl@0
  2898
sl@0
  2899
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(szMode2);
sl@0
  2900
			iQueueClient->iWs.SetPointerCursorArea(mode, TRect(24,10,52,52));
sl@0
  2901
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2902
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2903
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2904
sl@0
  2905
			theScreenOrigin = TPoint(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2906
sl@0
  2907
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2908
				21+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2909
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2910
				30+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2911
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2912
				75+theScreenOrigin.iX, 33+theScreenOrigin.iY);
sl@0
  2913
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2914
				30+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2915
sl@0
  2916
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2917
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2918
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(25-EWinPositionX,11-EWinPositionY));
sl@0
  2919
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(24-EWinPositionX,10-EWinPositionY));
sl@0
  2920
			//------------------------
sl@0
  2921
			iQueueClient->iWs.SetPointerCursorArea(mode, theRect);
sl@0
  2922
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(iSizeMode);
sl@0
  2923
			TheClient->iScreen->SetAppScreenMode(mode);
sl@0
  2924
			iQueueClient->iScreen->SetAppScreenMode(mode);
sl@0
  2925
			iQueueClient->iScreen->SetScreenMode(mode);
sl@0
  2926
			break;
sl@0
  2927
			}
sl@0
  2928
		case 3:
sl@0
  2929
			{
sl@0
  2930
			iQueueClient->iWs.SetAutoFlush(ETrue);
sl@0
  2931
			TInt theCurMode = iQueueClient->iScreen->CurrentScreenMode();
sl@0
  2932
			TPoint theScreenOrigin;
sl@0
  2933
			if (iNumScrModes>2)
sl@0
  2934
				{
sl@0
  2935
				TheClient->iScreen->SetAppScreenMode(2);
sl@0
  2936
				iQueueClient->iScreen->SetAppScreenMode(2);
sl@0
  2937
				TheClient->iScreen->SetScreenMode(2);
sl@0
  2938
sl@0
  2939
				theScreenOrigin=iQueueClient->iScreen->GetDefaultScreenModeOrigin();
sl@0
  2940
				SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2941
					30+theScreenOrigin.iX,30+theScreenOrigin.iY);
sl@0
  2942
				SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2943
					26+theScreenOrigin.iX,20+theScreenOrigin.iY);
sl@0
  2944
				SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2945
					40+theScreenOrigin.iX,60+theScreenOrigin.iY);
sl@0
  2946
				SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2947
					26+theScreenOrigin.iX,20+theScreenOrigin.iY);
sl@0
  2948
sl@0
  2949
				AddExpectedPointer(TPointerEvent::EButton1Down,
sl@0
  2950
					TPoint(15-EWinPositionX,15-EWinPositionY));
sl@0
  2951
				AddExpectedPointer(TPointerEvent::EButton1Up,
sl@0
  2952
					TPoint(13-EWinPositionX,10-EWinPositionY));
sl@0
  2953
				AddExpectedPointer(TPointerEvent::EButton1Down,
sl@0
  2954
					TPoint(20-EWinPositionX,30-EWinPositionY));
sl@0
  2955
				AddExpectedPointer(TPointerEvent::EButton1Up,
sl@0
  2956
					TPoint(13-EWinPositionX,10-EWinPositionY));
sl@0
  2957
				}
sl@0
  2958
sl@0
  2959
			TheClient->iScreen->SetAppScreenMode(0);
sl@0
  2960
			iQueueClient->iScreen->SetAppScreenMode(0);
sl@0
  2961
			iQueueClient->iScreen->SetScreenMode(0);
sl@0
  2962
			iTest->DelayIfFullRomL();
sl@0
  2963
sl@0
  2964
			theScreenOrigin = TPoint(iQueueClient->iScreen->GetDefaultScreenModeOrigin());
sl@0
  2965
sl@0
  2966
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2967
				30+theScreenOrigin.iX, 30+theScreenOrigin.iY);
sl@0
  2968
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2969
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2970
			SimulatePointer(TRawEvent::EButton1Down,
sl@0
  2971
				40+theScreenOrigin.iX, 50+theScreenOrigin.iY);
sl@0
  2972
			SimulatePointer(TRawEvent::EButton1Up,
sl@0
  2973
				26+theScreenOrigin.iX, 20+theScreenOrigin.iY);
sl@0
  2974
sl@0
  2975
		#if defined(__WINS__)
sl@0
  2976
			iQueueClient->iWs.SimulateXyInputType(EXYInputDeltaMouse);
sl@0
  2977
			iQueueClient->iWs.SetPointerCursorPosition(TPoint(24+theScreenOrigin.iX,24+theScreenOrigin.iY));
sl@0
  2978
			SimulatePointer(TRawEvent::EPointerMove,1,2);
sl@0
  2979
			iQueueClient->iWs.SimulateXyInputType(EXYInputPointer);
sl@0
  2980
		#endif
sl@0
  2981
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(30-EWinPositionX,30-EWinPositionY));
sl@0
  2982
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(26-EWinPositionX,20-EWinPositionY));
sl@0
  2983
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(40-EWinPositionX,50-EWinPositionY));
sl@0
  2984
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(26-EWinPositionX,20-EWinPositionY));
sl@0
  2985
sl@0
  2986
		#if defined(__WINS__)
sl@0
  2987
			AddExpectedPointer(TPointerEvent::EMove, TPoint(25-EWinPositionX,26-EWinPositionY));
sl@0
  2988
		#endif
sl@0
  2989
sl@0
  2990
			iQueueClient->iScreen->SetAppScreenMode(theCurMode);
sl@0
  2991
			TheClient->iScreen->SetScreenMode(theCurMode);
sl@0
  2992
			break;
sl@0
  2993
			}
sl@0
  2994
		default:
sl@0
  2995
			User::After(EPointerCursorUpdateGap);
sl@0
  2996
			iBlankWin->SetVisible(EFalse);
sl@0
  2997
			TheClient->iWs.SetAutoFlush(iTheClientFlush);
sl@0
  2998
			iQueueClient->iWs.SetAutoFlush(iQuequeClientFlush);
sl@0
  2999
			iQueueClient->iScreen->SetCurrentScreenModeAttributes(iSizeMode);
sl@0
  3000
			User::After(500000);		//0.5secs, to allow other screen devices to respond to the flip events
sl@0
  3001
			CActiveScheduler::Stop();
sl@0
  3002
			break;
sl@0
  3003
		}
sl@0
  3004
	}
sl@0
  3005
sl@0
  3006
void CTEventTest::AnimEvent_NextSetOfEventsL()
sl@0
  3007
	{
sl@0
  3008
#if defined(LOGGING)
sl@0
  3009
	TLogMessageText logMessageText;
sl@0
  3010
	_LIT(KSet,"AnimEvent SetOfEvents: %d  (Max=4)");
sl@0
  3011
	logMessageText.Format(KSet,iEventSet);
sl@0
  3012
	INFO_PRINTF1(logMessageText);
sl@0
  3013
#endif
sl@0
  3014
	switch(iEventSet++)
sl@0
  3015
		{
sl@0
  3016
		case 0:
sl@0
  3017
			iAnim=REventAnim::NewL(iQueueClient->iWin->BaseWin(), iAnimDll);
sl@0
  3018
			AddExpectedEvent(EEventFocusGained);
sl@0
  3019
			AddExpectedKeyAnim(TRawEvent::EKeyDown,32,ETrue);
sl@0
  3020
			AddExpectedKeyAnim(TRawEvent::EKeyUp,32,ETrue);
sl@0
  3021
			AddExpectedKeyAnim(TRawEvent::EKeyDown,33,EFalse);
sl@0
  3022
			AddExpectedKeyAnim(TRawEvent::EKeyUp,33,EFalse);
sl@0
  3023
			iTest->SimulateKey(TRawEvent::EKeyDown,32);
sl@0
  3024
			iTest->SimulateKey(TRawEvent::EKeyUp,32);
sl@0
  3025
			iTest->SimulateKey(TRawEvent::EKeyDown,33);
sl@0
  3026
			iTest->SimulateKey(TRawEvent::EKeyUp,33);
sl@0
  3027
			TheClient->iWs.Flush();
sl@0
  3028
			if (iAnim->TestFail(4))
sl@0
  3029
				Failed();
sl@0
  3030
			break;
sl@0
  3031
		case 1:
sl@0
  3032
			iQueueClient->iWin->BaseWin()->PointerFilter(EPointerFilterMove|EPointerFilterDrag,0);
sl@0
  3033
			iQueueClient->iWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  3034
			iQueueClient->iWs.Flush();
sl@0
  3035
			TheClient->iWs.SetPointerCursorArea(TRect(10,10,51,51));
sl@0
  3036
			AddExpectedPointerAnim(TRawEvent::EButton1Down, TPoint(10,10));
sl@0
  3037
			AddExpectedPointerAnim(TRawEvent::EButton1Up, TPoint(25,10));
sl@0
  3038
			AddExpectedPointerAnim(TRawEvent::EButton1Down, TPoint(50,10));
sl@0
  3039
			AddExpectedPointerAnim(TRawEvent::EButton1Up, TPoint(50,35));
sl@0
  3040
			AddExpectedPointerAnim(TRawEvent::EButton1Down, TPoint(50,50));
sl@0
  3041
			AddExpectedPointerAnim(TRawEvent::EButton1Up, TPoint(25,50));
sl@0
  3042
			AddExpectedPointerAnim(TRawEvent::EButton1Down, TPoint(10,50));
sl@0
  3043
			AddExpectedPointerAnim(TRawEvent::EButton1Up, TPoint(10,35));
sl@0
  3044
			AddExpectedPointerAnim(TRawEvent::EButton1Down, TPoint(30,30),EFalse);
sl@0
  3045
			AddExpectedPointerAnim(TRawEvent::EButton1Up, TPoint(30,30),EFalse);
sl@0
  3046
			SimulatePointer(TRawEvent::EButton1Down,5,5);
sl@0
  3047
			SimulatePointer(TRawEvent::EButton1Up,25,5);
sl@0
  3048
			SimulatePointer(TRawEvent::EButton1Down,55,5);
sl@0
  3049
			SimulatePointer(TRawEvent::EButton1Up,55,35);
sl@0
  3050
			SimulatePointer(TRawEvent::EButton1Down,55,55);
sl@0
  3051
			SimulatePointer(TRawEvent::EButton1Up,25,55);
sl@0
  3052
			SimulatePointer(TRawEvent::EButton1Down,5,55);
sl@0
  3053
			SimulatePointer(TRawEvent::EButton1Up,5,35);
sl@0
  3054
			SimulatePointer(TRawEvent::EButton1Down,30,30);
sl@0
  3055
			SimulatePointer(TRawEvent::EButton1Up,30,30);
sl@0
  3056
			TheClient->iWs.Flush();
sl@0
  3057
			if (iAnim->TestFail(10))
sl@0
  3058
				Failed();
sl@0
  3059
			break;
sl@0
  3060
		case 2:
sl@0
  3061
			{
sl@0
  3062
		#if defined(LOGGING)
sl@0
  3063
			_LIT(KLog," :2nd Set of Events  Modes=0x%x");
sl@0
  3064
			logMessageText.Format(KLog,iScreenModeTests);
sl@0
  3065
			INFO_PRINTF1(logMessageText);
sl@0
  3066
		#endif
sl@0
  3067
			TInt enforc=TheClient->iScreen->ScreenModeEnforcement();
sl@0
  3068
			iBlankWin->SetVisible(ETrue);
sl@0
  3069
			TInt expectedEvents=0;
sl@0
  3070
			if (iScreenModeTests&EDoRot90 && enforc==ESizeEnforcementNone)
sl@0
  3071
				{
sl@0
  3072
				INFO_PRINTF1(_L(" :Rotation 90"));
sl@0
  3073
				TheClient->iScreen->SetScreenMode(1);
sl@0
  3074
				TheClient->iWs.Flush();
sl@0
  3075
				iTest->DelayIfFullRomL();
sl@0
  3076
                AddExpectedPointerAnim(TRawEvent::EButton1Down, TPoint(20,20-iYOffset));
sl@0
  3077
                AddExpectedPointerAnim(TRawEvent::EButton1Up, TPoint(20,20-iYOffset));
sl@0
  3078
				expectedEvents+=2;
sl@0
  3079
				TPoint screenModeOrigin=TheClient->iScreen->GetDefaultScreenModeOrigin();
sl@0
  3080
			#if defined(__WINS__)
sl@0
  3081
				iTest->SimulatePointer(TRawEvent::EButton1Down,20+screenModeOrigin.iX,20+screenModeOrigin.iY);
sl@0
  3082
				iTest->SimulatePointer(TRawEvent::EButton1Up,20+screenModeOrigin.iX,20+screenModeOrigin.iY);
sl@0
  3083
			#else
sl@0
  3084
				// simulate pointer at (20,20) on rotated screen by providing physical coordinates
sl@0
  3085
				iTest->SimulatePointer(TRawEvent::EButton1Down,iPhysicalScreenSize.iWidth-1-20+screenModeOrigin.iX,20+screenModeOrigin.iY);
sl@0
  3086
				iTest->SimulatePointer(TRawEvent::EButton1Up,iPhysicalScreenSize.iWidth-1-20+screenModeOrigin.iX,20+screenModeOrigin.iY);
sl@0
  3087
			#endif
sl@0
  3088
				}
sl@0
  3089
			if (iScreenModeTests&EDoRot180)
sl@0
  3090
				{
sl@0
  3091
				INFO_PRINTF1(_L(" :Rotation 180"));
sl@0
  3092
				TheClient->iScreen->SetCurrentRotations(0,CFbsBitGc::EGraphicsOrientationRotated180);
sl@0
  3093
				TheClient->iScreen->SetScreenMode(0);
sl@0
  3094
				TheClient->iWs.Flush();
sl@0
  3095
				iTest->DelayIfFullRomL();
sl@0
  3096
                AddExpectedPointerAnim(TRawEvent::EButton1Down, TPoint(22,22-iYOffset));
sl@0
  3097
                AddExpectedPointerAnim(TRawEvent::EButton1Up, TPoint(22,22-iYOffset));
sl@0
  3098
               
sl@0
  3099
				expectedEvents+=2;
sl@0
  3100
			#if defined(__WINS__)
sl@0
  3101
				iTest->SimulatePointer(TRawEvent::EButton1Down,22,22);
sl@0
  3102
				iTest->SimulatePointer(TRawEvent::EButton1Up,22,22);
sl@0
  3103
			#else
sl@0
  3104
				// simulate pointer at (22,22) on rotated screen by providing physical coordinates
sl@0
  3105
				iTest->SimulatePointer(TRawEvent::EButton1Down,iPhysicalScreenSize.iWidth-1-22,iPhysicalScreenSize.iHeight-1-22);
sl@0
  3106
				iTest->SimulatePointer(TRawEvent::EButton1Up,iPhysicalScreenSize.iWidth-1-22,iPhysicalScreenSize.iHeight-1-22);
sl@0
  3107
			#endif
sl@0
  3108
				}
sl@0
  3109
			TheClient->iScreen->SetCurrentRotations(0,CFbsBitGc::EGraphicsOrientationNormal);
sl@0
  3110
			TheClient->iScreen->SetScreenMode(0);
sl@0
  3111
			TheClient->iWs.Flush();
sl@0
  3112
			iTest->DelayIfFullRomL();
sl@0
  3113
			if (iScreenModeTests&EDoRot0)
sl@0
  3114
				{
sl@0
  3115
				INFO_PRINTF1(_L(" :Rotation 0"));
sl@0
  3116
				AddExpectedPointerAnim(TRawEvent::EButton1Down, TPoint(24,24),EFalse);
sl@0
  3117
				AddExpectedPointerAnim(TRawEvent::EButton1Up, TPoint(24,24),EFalse);
sl@0
  3118
				expectedEvents+=2;
sl@0
  3119
				SimulatePointer(TRawEvent::EButton1Down,24,24);
sl@0
  3120
				SimulatePointer(TRawEvent::EButton1Up,24,24);
sl@0
  3121
				}
sl@0
  3122
		#if defined(LOGGING)
sl@0
  3123
			_LIT(KNumEvents," :Expected Number of Events=%d  Actual=%d");
sl@0
  3124
			logMessageText.Format(KNumEvents,expectedEvents,iAnim->GetNumEvents());
sl@0
  3125
			INFO_PRINTF1(logMessageText);
sl@0
  3126
			_LIT(KError," :Error Value %d ('0'=OK)");
sl@0
  3127
			logMessageText.Format(KError,iAnim->GetError());
sl@0
  3128
			INFO_PRINTF1(logMessageText);
sl@0
  3129
		#endif
sl@0
  3130
			if (iAnim->TestFail(expectedEvents))
sl@0
  3131
				Failed();
sl@0
  3132
			User::After(EPointerCursorUpdateGap);
sl@0
  3133
			iBlankWin->SetVisible(EFalse);
sl@0
  3134
			INFO_PRINTF1(_L(" :Finished 2nd Set"));
sl@0
  3135
			}
sl@0
  3136
			break;
sl@0
  3137
		case 3:
sl@0
  3138
			iAnim->Destroy(); iAnim=NULL;
sl@0
  3139
			// Create an EventPostingAnim, key down & key up events are simulated.
sl@0
  3140
			// The event posting anim sees the key events in turn, and creates duplicates.
sl@0
  3141
			// Test checks that each simulated event is received twice. 
sl@0
  3142
			TRAPD(err, iAnim=REventAnim::NewL(iQueueClient->iWin->BaseWin(), iAnimDll, REventAnimBase::EEventPostingAnim));
sl@0
  3143
			if (err!=KErrNone)
sl@0
  3144
				{
sl@0
  3145
				Failed();
sl@0
  3146
				return;
sl@0
  3147
				}
sl@0
  3148
			AddExpectedKeyAnim(TRawEvent::EKeyDown,32,ETrue);
sl@0
  3149
			AddExpectedKeyAnim(TRawEvent::EKeyDown,32,EFalse);
sl@0
  3150
			AddExpectedKeyAnim(TRawEvent::EKeyUp,32,ETrue);
sl@0
  3151
			AddExpectedKeyAnim(TRawEvent::EKeyUp,32,EFalse);
sl@0
  3152
			
sl@0
  3153
			iTest->SimulateKey(TRawEvent::EKeyDown,32);
sl@0
  3154
			iTest->SimulateKey(TRawEvent::EKeyUp,32);
sl@0
  3155
			break;
sl@0
  3156
		case 4:
sl@0
  3157
			// Simulate a key down event, which calls anim's offer raw event
sl@0
  3158
			// which inturn calls post key event with old and new API
sl@0
  3159
			// Test checks the repeat count for old and new API are as expected.
sl@0
  3160
			AddExpectedKeyAnim(TRawEvent::EKeyDown,45,ETrue);
sl@0
  3161
			
sl@0
  3162
			TKeyEvent event;
sl@0
  3163
			event.iCode='J';
sl@0
  3164
			event.iScanCode=0;
sl@0
  3165
			event.iModifiers=0;
sl@0
  3166
			event.iRepeats=0;
sl@0
  3167
			AddExpectedKey(1, event.iScanCode, event.iCode, event.iRepeats, event.iModifiers);
sl@0
  3168
			event.iRepeats=2;
sl@0
  3169
			AddExpectedKey(1, event.iScanCode, event.iCode, event.iRepeats, event.iModifiers);
sl@0
  3170
			
sl@0
  3171
			iTest->SimulateKey(TRawEvent::EKeyDown,45);
sl@0
  3172
			break;
sl@0
  3173
		default:
sl@0
  3174
			iAnim->Destroy();
sl@0
  3175
			iAnim=NULL;
sl@0
  3176
			CActiveScheduler::Stop();
sl@0
  3177
			break;
sl@0
  3178
		}
sl@0
  3179
	TheClient->iWs.Flush();
sl@0
  3180
	}
sl@0
  3181
sl@0
  3182
void CTEventTest::FocusChanged_NextSetOfEventsL()
sl@0
  3183
	{
sl@0
  3184
#if defined(LOGGING)
sl@0
  3185
	TLogMessageText logMessageText;
sl@0
  3186
	_LIT(KSet,"FocusChanged SetOfEvents: %d ");
sl@0
  3187
	logMessageText.Format(KSet,iEventSet);
sl@0
  3188
	INFO_PRINTF1(logMessageText);
sl@0
  3189
#endif
sl@0
  3190
	switch(iEventSet++)
sl@0
  3191
		{
sl@0
  3192
		case 0:
sl@0
  3193
			{
sl@0
  3194
			_LIT(AutoFocusTest,"FocusEvents");
sl@0
  3195
			iQueueClient->EnableFocusChangeEvents();
sl@0
  3196
			iEventTestGroup2=new(ELeave) CTWindowGroup(TheClient);
sl@0
  3197
			iEventTestGroup2->ConstructL();
sl@0
  3198
			iEventTestGroup2->GroupWin()->SetName(AutoFocusTest);
sl@0
  3199
			AddExpectedEvent(EEventFocusGained);
sl@0
  3200
			AddExpectedEvent(EEventFocusLost);
sl@0
  3201
			AddExpectedEvent(EEventFocusGroupChanged);
sl@0
  3202
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  3203
			}
sl@0
  3204
			break;
sl@0
  3205
		case 1:
sl@0
  3206
			iEventTestGroup2->GroupWin()->EnableReceiptOfFocus(EFalse);
sl@0
  3207
			AddExpectedEvent(EEventFocusGained);
sl@0
  3208
			AddExpectedEvent(EEventFocusGroupChanged);
sl@0
  3209
			break;
sl@0
  3210
		case 2:
sl@0
  3211
			iEventTestGroup2->GroupWin()->EnableReceiptOfFocus(ETrue);
sl@0
  3212
			AddExpectedEvent(EEventFocusLost);
sl@0
  3213
			AddExpectedEvent(EEventFocusGroupChanged);
sl@0
  3214
			break;
sl@0
  3215
		case 3:
sl@0
  3216
			iEventTestGroup2->GroupWin()->SetOrdinalPosition(999);
sl@0
  3217
			AddExpectedEvent(EEventFocusGained);
sl@0
  3218
			AddExpectedEvent(EEventFocusGroupChanged);
sl@0
  3219
			break;
sl@0
  3220
		case 4:
sl@0
  3221
			iEventTestGroup2->GroupWin()->SetOrdinalPosition(0);
sl@0
  3222
			AddExpectedEvent(EEventFocusLost);
sl@0
  3223
			AddExpectedEvent(EEventFocusGroupChanged);
sl@0
  3224
			break;
sl@0
  3225
		case 5:
sl@0
  3226
			delete iEventTestGroup2;
sl@0
  3227
			iEventTestGroup2=NULL;
sl@0
  3228
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  3229
			AddExpectedEvent(EEventFocusGroupChanged);
sl@0
  3230
			break;
sl@0
  3231
		default:
sl@0
  3232
			CActiveScheduler::Stop();
sl@0
  3233
			break;
sl@0
  3234
		}
sl@0
  3235
	TheClient->iWs.Flush();
sl@0
  3236
	}
sl@0
  3237
sl@0
  3238
	
sl@0
  3239
void CTEventTest::StopEvents_NextSetOfEventsL()
sl@0
  3240
	{
sl@0
  3241
	// we are not running tests 0,1,2 as they currently fail
sl@0
  3242
	if(iEventSet==0)
sl@0
  3243
		{
sl@0
  3244
		iEventSet=3;
sl@0
  3245
		AddExpectedEvent(EEventFocusGained);
sl@0
  3246
		}
sl@0
  3247
	TInt retVal	= KErrNone;
sl@0
  3248
				
sl@0
  3249
	switch(iEventSet++)
sl@0
  3250
		{
sl@0
  3251
		case 0: // doesn't work if shell gets the off events - will fail on User::LeaveIfError(....
sl@0
  3252
			iQueueClient->iWs.Flush();
sl@0
  3253
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iGroup->WinTreeNode()));
sl@0
  3254
			iTest->SimulateEvent(TRawEvent::ESwitchOff);
sl@0
  3255
			TheClient->iWs.Flush();
sl@0
  3256
			retVal = iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iWin->WinTreeNode());
sl@0
  3257
			TEST(retVal==KErrAlreadyExists);
sl@0
  3258
			if (retVal!=KErrAlreadyExists)
sl@0
  3259
				INFO_PRINTF3(_L("iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iWin->WinTreeNode()) return value - Expected: %d, Actual: %d"), KErrAlreadyExists, retVal);
sl@0
  3260
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(EFalse,iQueueClient->iGroup->WinTreeNode()));
sl@0
  3261
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iGroup->WinTreeNode()));
sl@0
  3262
			iTest->SimulateEvent(TRawEvent::ESwitchOff);
sl@0
  3263
			TheClient->iWs.Flush();
sl@0
  3264
			retVal = iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iGroup->WinTreeNode());
sl@0
  3265
			TEST(retVal==KErrAlreadyExists);
sl@0
  3266
			if (retVal!=KErrAlreadyExists)
sl@0
  3267
				INFO_PRINTF3(_L("iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iGroup->WinTreeNode()) return value - Expected: %d, Actual: %d"), KErrAlreadyExists, retVal);
sl@0
  3268
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(EFalse));
sl@0
  3269
			AddExpectedEvent(EEventFocusGained);
sl@0
  3270
			AddExpectedEvent(EEventSwitchOff);
sl@0
  3271
			AddExpectedEvent(EEventSwitchOff);
sl@0
  3272
			break;
sl@0
  3273
			
sl@0
  3274
		case 1: // doesn't work if shell gets the off events - will fail on User::LeaveIfError(....
sl@0
  3275
			{
sl@0
  3276
			TKeyEvent event; 
sl@0
  3277
			iQueueClient->iWs.Flush();
sl@0
  3278
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iGroup->WinTreeNode()));
sl@0
  3279
			event.iCode=EKeyOff;
sl@0
  3280
			event.iScanCode=EKeyOff;
sl@0
  3281
			event.iModifiers=0;
sl@0
  3282
			event.iRepeats=0;
sl@0
  3283
			TheClient->iWs.SimulateKeyEvent(event);
sl@0
  3284
			TheClient->iWs.Flush();
sl@0
  3285
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(EFalse));
sl@0
  3286
			AddExpectedEvent(EEventKeySwitchOff);
sl@0
  3287
			}
sl@0
  3288
			break;
sl@0
  3289
		
sl@0
  3290
		case 2: // doesn't work if shell gets the off events - will fail on User::LeaveIfError(....
sl@0
  3291
			{
sl@0
  3292
			TKeyEvent event;
sl@0
  3293
			event.iCode=EKeyOff;
sl@0
  3294
			event.iScanCode=EKeyOff;
sl@0
  3295
			event.iModifiers=0;
sl@0
  3296
			event.iRepeats=0;
sl@0
  3297
			iQueueClient->iWs.Flush();
sl@0
  3298
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iGroup->WinTreeNode()));
sl@0
  3299
			iTest->SimulateEvent(TRawEvent::ESwitchOff);
sl@0
  3300
			TheClient->iWs.SimulateKeyEvent(event);
sl@0
  3301
			iTest->SimulateEvent(TRawEvent::ECaseClose);
sl@0
  3302
			TheClient->iWs.Flush();
sl@0
  3303
			retVal = iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iWin->WinTreeNode());
sl@0
  3304
			TEST(retVal==KErrAlreadyExists);
sl@0
  3305
			if (retVal!=KErrAlreadyExists)
sl@0
  3306
				INFO_PRINTF3(_L("iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iWin->WinTreeNode()) return value - Expected: %d, Actual: %d"), KErrAlreadyExists, retVal);
sl@0
  3307
			iTest->SimulateEvent(TRawEvent::ESwitchOff);
sl@0
  3308
			iTest->SimulateEvent(TRawEvent::ECaseClose);
sl@0
  3309
			TheClient->iWs.SimulateKeyEvent(event);
sl@0
  3310
			TheClient->iWs.Flush();
sl@0
  3311
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(EFalse,iQueueClient->iGroup->WinTreeNode()));
sl@0
  3312
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iWin->WinTreeNode()));
sl@0
  3313
			iTest->SimulateEvent(TRawEvent::ECaseClose);
sl@0
  3314
			iTest->SimulateEvent(TRawEvent::ESwitchOff);
sl@0
  3315
			TheClient->iWs.SimulateKeyEvent(event);
sl@0
  3316
			TheClient->iWs.Flush();
sl@0
  3317
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(EFalse));
sl@0
  3318
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(ETrue,iQueueClient->iChildWin->WinTreeNode()));
sl@0
  3319
			iTest->SimulateEvent(TRawEvent::ESwitchOff);
sl@0
  3320
			TheClient->iWs.SimulateKeyEvent(event);
sl@0
  3321
			iTest->SimulateEvent(TRawEvent::ECaseClose);
sl@0
  3322
			TheClient->iWs.Flush();
sl@0
  3323
			User::LeaveIfError(iQueueClient->iWs.RequestOffEvents(EFalse));
sl@0
  3324
			AddExpectedEvent(EEventSwitchOff);
sl@0
  3325
			AddExpectedEvent(EEventKeySwitchOff);
sl@0
  3326
			AddExpectedEvent(EEventCaseClosed);
sl@0
  3327
			AddExpectedEvent(EEventSwitchOff);
sl@0
  3328
			AddExpectedEvent(EEventCaseClosed);
sl@0
  3329
			AddExpectedEvent(EEventKeySwitchOff);
sl@0
  3330
			AddExpectedEvent(EEventCaseClosed,iQueueClient->iWin);
sl@0
  3331
			AddExpectedEvent(EEventSwitchOff,iQueueClient->iWin);
sl@0
  3332
			AddExpectedEvent(EEventKeySwitchOff,iQueueClient->iWin);
sl@0
  3333
			AddExpectedEvent(EEventSwitchOff,iQueueClient->iChildWin);
sl@0
  3334
			AddExpectedEvent(EEventKeySwitchOff,iQueueClient->iChildWin);
sl@0
  3335
			AddExpectedEvent(EEventCaseClosed,iQueueClient->iChildWin);
sl@0
  3336
			}
sl@0
  3337
			break;
sl@0
  3338
			
sl@0
  3339
		case 3: 
sl@0
  3340
			iQueueClient->iWs.Flush();
sl@0
  3341
			//User::LeaveIfError(iQueueClient->iGroup->WinTreeNode()->EnableOnEvents(EEventControlAlways));
sl@0
  3342
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  3343
			iTest->SimulateEvent(TRawEvent::ECaseOpen);
sl@0
  3344
			TheClient->iWs.Flush();
sl@0
  3345
			User::LeaveIfError(iQueueClient->iWin->WinTreeNode()->EnableOnEvents(EEventControlAlways));
sl@0
  3346
			iTest->SimulateEvent(TRawEvent::ECaseOpen);
sl@0
  3347
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  3348
			TheClient->iWs.Flush();
sl@0
  3349
			iQueueClient->iWin->WinTreeNode()->DisableOnEvents();
sl@0
  3350
			AddExpectedEvent(EEventSwitchOn);
sl@0
  3351
			//AddExpectedEvent(EEventSwitchOn);
sl@0
  3352
			AddExpectedEvent(EEventCaseOpened);
sl@0
  3353
			AddExpectedEvent(EEventCaseOpened,iQueueClient->iWin);
sl@0
  3354
			AddExpectedEvent(EEventCaseOpened);
sl@0
  3355
			AddExpectedEvent(EEventSwitchOn,iQueueClient->iWin);
sl@0
  3356
			AddExpectedEvent(EEventSwitchOn);
sl@0
  3357
			break;
sl@0
  3358
			
sl@0
  3359
		case 4:
sl@0
  3360
			iQueueClient->iWs.Flush();
sl@0
  3361
			// switch off the device
sl@0
  3362
			iTest->SimulateEvent(TRawEvent::ESwitchOff);
sl@0
  3363
			// switch it back on. 
sl@0
  3364
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  3365
			TheClient->iWs.Flush();	
sl@0
  3366
			// TRawEvent::ESwitchOff never actually comes back. The tests will hang if we look for one
sl@0
  3367
			AddExpectedEvent(EEventSwitchOn);
sl@0
  3368
			break;
sl@0
  3369
			
sl@0
  3370
		case 5:
sl@0
  3371
			{
sl@0
  3372
			TKeyEvent event; 
sl@0
  3373
			iQueueClient->iWs.Flush();
sl@0
  3374
			event.iCode=EKeyOff;
sl@0
  3375
			event.iScanCode=EKeyOff;
sl@0
  3376
			event.iModifiers=0;
sl@0
  3377
			event.iRepeats=0;
sl@0
  3378
			// switch off the device - this one seems to send it to standby rather than off
sl@0
  3379
			TheClient->iWs.SimulateKeyEvent(event);
sl@0
  3380
			// switch it back on or no further tests will complete
sl@0
  3381
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  3382
			TheClient->iWs.Flush();	
sl@0
  3383
			// again we would expect EEventKeySwitchOff but it doesn't come back. The tests will hang if we look for one
sl@0
  3384
			AddExpectedEvent(EEventSwitchOn);
sl@0
  3385
			}
sl@0
  3386
			break;
sl@0
  3387
		
sl@0
  3388
		case 6:
sl@0
  3389
			iQueueClient->iWs.Flush();
sl@0
  3390
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  3391
			iTest->SimulateEvent(TRawEvent::ECaseOpen);
sl@0
  3392
			TheClient->iWs.Flush();
sl@0
  3393
			User::LeaveIfError(iQueueClient->iWin->WinTreeNode()->EnableOnEvents(EEventControlAlways));
sl@0
  3394
			iTest->SimulateEvent(TRawEvent::ECaseOpen);
sl@0
  3395
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  3396
			TheClient->iWs.Flush();
sl@0
  3397
			iQueueClient->iWin->WinTreeNode()->DisableOnEvents();
sl@0
  3398
			AddExpectedEvent(EEventSwitchOn);
sl@0
  3399
			AddExpectedEvent(EEventCaseOpened);
sl@0
  3400
			AddExpectedEvent(EEventCaseOpened,iQueueClient->iWin);
sl@0
  3401
			AddExpectedEvent(EEventCaseOpened);
sl@0
  3402
			AddExpectedEvent(EEventSwitchOn,iQueueClient->iWin);
sl@0
  3403
			AddExpectedEvent(EEventSwitchOn);
sl@0
  3404
			break;
sl@0
  3405
					
sl@0
  3406
		default:
sl@0
  3407
			CActiveScheduler::Stop();
sl@0
  3408
			break;
sl@0
  3409
		}
sl@0
  3410
	TheClient->iWs.Flush();
sl@0
  3411
	}
sl@0
  3412
	
sl@0
  3413
void CTEventTest::VirtualKeyboard_NextSetOfEventsL()
sl@0
  3414
	{
sl@0
  3415
	const TInt noVirtualKeys=10;
sl@0
  3416
	const TInt keyWidth=2*EWinWidth/noVirtualKeys/3;
sl@0
  3417
	const TInt keyHeight=EWinHeight/2;
sl@0
  3418
	const TInt keySpacing=EWinWidth/noVirtualKeys;
sl@0
  3419
	const TInt baseChar='1';
sl@0
  3420
	TInt startX=1;
sl@0
  3421
	TInt ii;
sl@0
  3422
	switch(iEventSet++)
sl@0
  3423
		{
sl@0
  3424
		case 0:
sl@0
  3425
			iQueueClient->iWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  3426
			for (ii=0;ii<noVirtualKeys;++ii)
sl@0
  3427
				{
sl@0
  3428
				iQueueClient->iWin->BaseWin()->AddKeyRect(TRect(startX,1,startX+keyWidth,keyHeight),baseChar+ii,EFalse);
sl@0
  3429
				startX+=keySpacing;
sl@0
  3430
				}
sl@0
  3431
			iQueueClient->iWs.Flush();
sl@0
  3432
			iTest->SimulatePointerDownUp(EWinPositionX+1,EWinPositionY+1+iYOffset);
sl@0
  3433
			//TheClient->iWs.Flush();
sl@0
  3434
			AddExpectedEvent(EEventFocusGained);
sl@0
  3435
			AddExpectedKeyDownUp(baseChar);
sl@0
  3436
			break;
sl@0
  3437
		case 1:
sl@0
  3438
			startX=3;
sl@0
  3439
			for (ii=0;ii<noVirtualKeys-2;++ii)		//Can't do all 10 as this will overflow the event buffer
sl@0
  3440
				{
sl@0
  3441
				iTest->SimulatePointerDownUp(startX+EWinPositionX+1,EWinPositionY+keyHeight-1+iYOffset);
sl@0
  3442
				AddExpectedKeyDownUp(baseChar+ii);
sl@0
  3443
				startX+=keySpacing;
sl@0
  3444
				}
sl@0
  3445
			break;
sl@0
  3446
		case 2:
sl@0
  3447
			SimulatePointerDownUpWin(keySpacing+1,1);
sl@0
  3448
			//SimulatePointerDownUp(EWinPositionX+keySpacing+1,EWinPositionY+1);
sl@0
  3449
			iTest->SimulatePointerDownUp(EWinPositionX+keyWidth,EWinPositionY+1+iYOffset);
sl@0
  3450
			iTest->SimulatePointerDownUp(EWinPositionX+1,EWinPositionY+keyHeight-1+iYOffset);
sl@0
  3451
			iTest->SimulatePointerDownUp(EWinPositionX+keyWidth,EWinPositionY+keyHeight-1+iYOffset);
sl@0
  3452
			AddExpectedKeyDownUp(baseChar+1);
sl@0
  3453
			AddExpectedKeyDownUp(baseChar);
sl@0
  3454
			AddExpectedKeyDownUp(baseChar);
sl@0
  3455
			AddExpectedKeyDownUp(baseChar);
sl@0
  3456
			break;
sl@0
  3457
		case 3:
sl@0
  3458
			SimulatePointerDownUpWin(keySpacing+3,4);
sl@0
  3459
			SimulatePointerDownUpWin(0,0);		//No Pointer event get through even if there are gaps
sl@0
  3460
			SimulatePointerDownUpWin(1,0);
sl@0
  3461
			SimulatePointerDownUpWin(0,1);
sl@0
  3462
			SimulatePointerDownUpWin(keyWidth+1,0);
sl@0
  3463
			SimulatePointerDownUpWin(keyWidth,0);
sl@0
  3464
			SimulatePointerDownUpWin(keyWidth+1,1);
sl@0
  3465
			SimulatePointerDownUpWin(0,keyHeight);
sl@0
  3466
			SimulatePointerDownUpWin(1,keyHeight);
sl@0
  3467
			SimulatePointerDownUpWin(0,keyHeight-1);
sl@0
  3468
			SimulatePointerDownUpWin(keyWidth+1,keyHeight);
sl@0
  3469
			SimulatePointerDownUpWin(keyWidth,keyHeight);
sl@0
  3470
			SimulatePointerDownUpWin(keyWidth+1,keyHeight-1);
sl@0
  3471
			SimulatePointerDownUpWin(2*keySpacing+3,4);
sl@0
  3472
			AddExpectedKeyDownUp(baseChar+1);
sl@0
  3473
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+0,EWinPositionY+0));		//No Pointer event get through even if there are gaps
sl@0
  3474
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+1,EWinPositionY+0));
sl@0
  3475
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+0,EWinPositionY+1));
sl@0
  3476
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+keyWidth+1,EWinPositionY+0));
sl@0
  3477
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+keyWidth,EWinPositionY+0));
sl@0
  3478
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+keyWidth+1,EWinPositionY+1));
sl@0
  3479
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+0,EWinPositionY+keyHeight));
sl@0
  3480
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+1,EWinPositionY+keyHeight));
sl@0
  3481
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+0,EWinPositionY+keyHeight-1));
sl@0
  3482
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+keyWidth+1,EWinPositionY+keyHeight));
sl@0
  3483
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+keyWidth,EWinPositionY+keyHeight));
sl@0
  3484
			AddExpectedPointerDownUpScr(TPoint(EWinPositionX+keyWidth+1,EWinPositionY+keyHeight-1));
sl@0
  3485
			AddExpectedKeyDownUp(baseChar+2);
sl@0
  3486
			break;
sl@0
  3487
		case 4:
sl@0
  3488
			SimulatePointerWin(TRawEvent::EButton1Down,keySpacing+2,6);
sl@0
  3489
			SimulatePointerWin(TRawEvent::EButton1Up,2*keySpacing+1,5);
sl@0
  3490
			SimulatePointerWin(TRawEvent::EButton1Down,2*keySpacing+2,7);
sl@0
  3491
			SimulatePointer(TRawEvent::EButton1Up,0,0);
sl@0
  3492
			AddExpectedKeyDownUp(baseChar+1);
sl@0
  3493
			AddExpectedKeyDownUp(baseChar+2);
sl@0
  3494
			break;
sl@0
  3495
		default:
sl@0
  3496
			CActiveScheduler::Stop();
sl@0
  3497
			break;
sl@0
  3498
		}
sl@0
  3499
	TheClient->iWs.Flush();
sl@0
  3500
	}
sl@0
  3501
sl@0
  3502
TInt CTEventTest::ClickCommandReply(TInt aCommand,TInt aData)
sl@0
  3503
	{
sl@0
  3504
	TPckgBuf<TInt> intPkg;
sl@0
  3505
	intPkg()=aData;
sl@0
  3506
	return iClick.CommandReply(aCommand,intPkg);
sl@0
  3507
	}
sl@0
  3508
sl@0
  3509
TInt CTEventTest::CreateGroupWindow(RWindowGroup& aWinGp,TClients aClient,TInt& aWinGpId)
sl@0
  3510
	{
sl@0
  3511
	ClickCommandReply(EClickCreateGroupWin,aClient);
sl@0
  3512
	TInt err=aWinGp.Construct(ENullWsHandle,EFalse);
sl@0
  3513
	if (!err)
sl@0
  3514
		{
sl@0
  3515
		aWinGpId=aWinGp.Identifier();
sl@0
  3516
		ClickCommandReply(EClickCheckGpWinId,aWinGpId);
sl@0
  3517
		}
sl@0
  3518
	return err;
sl@0
  3519
	}
sl@0
  3520
sl@0
  3521
void CTEventTest::CloseGroupWindow(RWindowGroup& aWinGp,TInt aWinGpId)
sl@0
  3522
	{
sl@0
  3523
	ClickCommandReply(EClickCloseGroupWin,aWinGpId);
sl@0
  3524
	aWinGp.Close();
sl@0
  3525
	}
sl@0
  3526
sl@0
  3527
void CTEventTest::CloseWindow(RWindowBase& aWin,TInt aHandle,TInt aWinGpId)
sl@0
  3528
	{
sl@0
  3529
	TPckgBuf<TWindowCloseData> winClose;
sl@0
  3530
	winClose().iClientHandle=aHandle;
sl@0
  3531
	winClose().iWindowGroupId=aWinGpId;
sl@0
  3532
	iClick.CommandReply(EClickCloseWin,winClose);
sl@0
  3533
	aWin.Close();
sl@0
  3534
	}
sl@0
  3535
sl@0
  3536
/**
sl@0
  3537
@SYMTestCaseID		GRAPHICS-WSERV-0447
sl@0
  3538
sl@0
  3539
@SYMCR				CR1164
sl@0
  3540
sl@0
  3541
@SYMTestCaseDesc	Tests that Key Click Plug-in gets new event Information
sl@0
  3542
sl@0
  3543
@SYMTestPriority	High
sl@0
  3544
sl@0
  3545
@SYMTestStatus		Implemented
sl@0
  3546
sl@0
  3547
@SYMTestActions		Do things that cause the new events to be sent into plug-in.
sl@0
  3548
Creating destroying windows, pointer events.  Provide test plug-in with information it needs to check events.
sl@0
  3549
sl@0
  3550
@SYMTestExpectedResults When Test Plug-in is querried to see if events match what was expected it says that they were.
sl@0
  3551
*/
sl@0
  3552
void CTEventTest::KeyClicks_NextSetOfEvents()
sl@0
  3553
	{
sl@0
  3554
#if defined(LOGGING)
sl@0
  3555
	TLogMessageText logMessageText;
sl@0
  3556
	_LIT(KSet,"KeyClicks SetOfEvents: %d (last=13)");
sl@0
  3557
	logMessageText.Format(KSet,iEventSet);
sl@0
  3558
	INFO_PRINTF1(logMessageText);
sl@0
  3559
#endif
sl@0
  3560
	TInt events=-1;
sl@0
  3561
	switch(iEventSet++)
sl@0
  3562
		{
sl@0
  3563
		case 0:
sl@0
  3564
			if (SetClickType(EClickCheck))
sl@0
  3565
				return;
sl@0
  3566
			iAddToClick=ETrue;
sl@0
  3567
			iQueueClient->iWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  3568
			iQueueClient->iChildWin->BaseWin()->SetPointerGrab(EFalse);
sl@0
  3569
			AddExpectedEvent(EEventFocusGained);
sl@0
  3570
			AddExpectedKeyDownUp(EStdKeySpace,EKeySpace);
sl@0
  3571
			iQueueClient->iWs.Flush();
sl@0
  3572
			iTest->SimulateKeyDownUp(EStdKeySpace);		//3 events
sl@0
  3573
			events=3;
sl@0
  3574
			break;
sl@0
  3575
		case 1:
sl@0
  3576
			AddExpectedKeyDownUp(EStdKeyEnter,EKeyEnter);
sl@0
  3577
			AddExpectedKeyDownUp('0');
sl@0
  3578
			AddExpectedKeyDownUp('A','a');
sl@0
  3579
			AddExpectedKeyDownUp('X','x');
sl@0
  3580
			AddExpectedKey(EEventKeyDown,EStdKeyLeftShift,0,0,EModifierLeftShift|EModifierShift);
sl@0
  3581
			AddExpectedKey(EEventKeyUp,EStdKeyLeftShift);
sl@0
  3582
			iQueueClient->iWs.Flush();
sl@0
  3583
			iTest->SimulateKeyDownUp(EStdKeyEnter);		//3 events
sl@0
  3584
			iTest->SimulateKeyDownUp('0');		//3 events
sl@0
  3585
			iTest->SimulateKeyDownUp('A');		//3 events
sl@0
  3586
			iTest->SimulateKeyDownUp('X');		//3 events
sl@0
  3587
			iTest->SimulateKeyDownUp(EStdKeyLeftShift);		//2 events
sl@0
  3588
			events=14;
sl@0
  3589
			break;
sl@0
  3590
		case 2:
sl@0
  3591
			AddExpectedKey(EEventKeyDown,EStdKeyRightShift,0,0,EModifierRightShift|EModifierShift);
sl@0
  3592
			AddExpectedKeyDownUp('B','B',0,EModifierRightShift|EModifierShift|EModifierAutorepeatable);
sl@0
  3593
			AddExpectedKeyDownUp('W','W',0,EModifierRightShift|EModifierShift|EModifierAutorepeatable);
sl@0
  3594
			AddExpectedKey(EEventKeyUp,EStdKeyRightShift);
sl@0
  3595
			iQueueClient->iWs.Flush();
sl@0
  3596
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyRightShift);		//1 event
sl@0
  3597
			iTest->SimulateKeyDownUp('B');		//3 events
sl@0
  3598
			iTest->SimulateKeyDownUp('W');		//3 events
sl@0
  3599
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyRightShift);		//1 event
sl@0
  3600
			events=8;
sl@0
  3601
			break;
sl@0
  3602
		case 3:
sl@0
  3603
			AddExpectedKey(EEventKeyDown,'C');
sl@0
  3604
			AddExpectedKey(EEventKey,'C','c');
sl@0
  3605
			AddExpectedKey(EEventKeyDown,'V');
sl@0
  3606
			AddExpectedKey(EEventKey,'V','v');
sl@0
  3607
			AddExpectedKey(EEventKeyUp,'C');
sl@0
  3608
			AddExpectedKey(EEventKeyUp,'V');
sl@0
  3609
			iQueueClient->iWs.Flush();
sl@0
  3610
			iTest->SimulateKey(TRawEvent::EKeyDown,'C');		//2 events
sl@0
  3611
			iTest->SimulateKey(TRawEvent::EKeyDown,'V');		//2 events
sl@0
  3612
			iTest->SimulateKey(TRawEvent::EKeyUp,'C');		//1 event
sl@0
  3613
			iTest->SimulateKey(TRawEvent::EKeyUp,'V');		//1 event
sl@0
  3614
			events=6;
sl@0
  3615
			break;
sl@0
  3616
		case 4:
sl@0
  3617
			{
sl@0
  3618
			AddExpectedKey(EEventKeyDown,'D');
sl@0
  3619
			AddExpectedKey(EEventKey,'D','d');
sl@0
  3620
			AddExpectedKey(EEventKey,'D','d',1);
sl@0
  3621
			AddExpectedKey(EEventKeyUp,'D');
sl@0
  3622
			iQueueClient->iWs.Flush();
sl@0
  3623
			iTest->SimulateKey(TRawEvent::EKeyDown,'D');		//2 events
sl@0
  3624
			TTimeIntervalMicroSeconds32 initialTime,time;
sl@0
  3625
			TheClient->iWs.GetKeyboardRepeatRate(initialTime,time);
sl@0
  3626
			User::After(initialTime.Int()+time.Int()/4);		//1 event
sl@0
  3627
			iTest->SimulateKey(TRawEvent::EKeyUp,'D');		//1 event
sl@0
  3628
			events=4;
sl@0
  3629
			}
sl@0
  3630
			break;
sl@0
  3631
		case 5:
sl@0
  3632
			AddExpectedPointerDownUpScr(TPoint(40,25));
sl@0
  3633
			AddExpectedPointerDownUpScr(TPoint(95,30));
sl@0
  3634
			AddExpectedPointer(TPointerEvent::EButton1Down,TPoint(20-EWinPositionX,50-EWinPositionY));
sl@0
  3635
			AddExpectedPointer(TPointerEvent::EDrag,TPoint(45-EWinPositionX,42-EWinPositionY));
sl@0
  3636
			AddExpectedPointer(TPointerEvent::EButton1Up,TPoint(45-EWinPositionX,42-EWinPositionY));
sl@0
  3637
			AddExpectedPointer(TPointerEvent::EButton1Down,TPoint(98-EWinPositionX,15-EWinPositionY));
sl@0
  3638
			AddExpectedPointerClick(TPointerEvent::EDrag,TPoint(68-EWinPositionX,39-EWinPositionY));
sl@0
  3639
			AddExpectedPointer(TPointerEvent::EDrag,TPoint(41-EWinPositionX,42-EWinPositionY));
sl@0
  3640
			AddExpectedPointer(TPointerEvent::EButton1Up,TPoint(50-EWinPositionX,58-EWinPositionY));
sl@0
  3641
			iQueueClient->iWs.Flush();
sl@0
  3642
			iTest->SimulatePointerDownUp(40,25+iYOffset);		//2 events
sl@0
  3643
			iTest->SimulatePointerDownUp(95,30+iYOffset);		//2 events
sl@0
  3644
			SimulatePointer(TRawEvent::EButton1Down,20,50);		//1 event
sl@0
  3645
			SimulatePointer(TRawEvent::EPointerMove,45,42);		//1 event
sl@0
  3646
			SimulatePointer(TRawEvent::EButton1Up,45,42);		//1 event
sl@0
  3647
			SimulatePointer(TRawEvent::EButton1Down,98,15);		//1 event
sl@0
  3648
			SimulatePointer(TRawEvent::EPointerMove,68,39);		//1 event
sl@0
  3649
			SimulatePointer(TRawEvent::EPointerMove,41,42);		//1 event
sl@0
  3650
			SimulatePointer(TRawEvent::EButton1Up,50,58);		//1 event
sl@0
  3651
			events=11;
sl@0
  3652
			break;
sl@0
  3653
		case 6:
sl@0
  3654
			AddExpectedKey(EEventKeyDown,'E');
sl@0
  3655
			AddExpectedKey(EEventKey,'E','e');
sl@0
  3656
			AddExpectedPointerDownUpScr(TPoint(41,24));
sl@0
  3657
			AddExpectedKey(EEventKeyUp,'E');
sl@0
  3658
			AddExpectedPointer(TPointerEvent::EButton1Down,TPoint(23-EWinPositionX,52-EWinPositionY));
sl@0
  3659
			AddExpectedKeyDownUp('1');
sl@0
  3660
			AddExpectedPointer(TPointerEvent::EButton1Up,TPoint(44-EWinPositionX,45-EWinPositionY));
sl@0
  3661
			AddExpectedPointer(TPointerEvent::EButton1Down,TPoint(33-EWinPositionX,53-EWinPositionY));
sl@0
  3662
			AddExpectedKey(EEventKeyDown,'F');
sl@0
  3663
			AddExpectedKey(EEventKey,'F','f');
sl@0
  3664
			AddExpectedPointer(TPointerEvent::EButton1Up,TPoint(34-EWinPositionX,47-EWinPositionY));
sl@0
  3665
			AddExpectedKey(EEventKeyUp,'F');
sl@0
  3666
			iQueueClient->iWs.Flush();
sl@0
  3667
			iTest->SimulateKey(TRawEvent::EKeyDown,'E');		//2 events
sl@0
  3668
			iTest->SimulatePointerDownUp(41,24+iYOffset);		//2 events
sl@0
  3669
			iTest->SimulateKey(TRawEvent::EKeyUp,'E');		//1 event
sl@0
  3670
			SimulatePointer(TRawEvent::EButton1Down,23,52);		//1 event
sl@0
  3671
			iTest->SimulateKeyDownUp('1');		//3 events
sl@0
  3672
			SimulatePointer(TRawEvent::EButton1Up,44,45);		//1 event
sl@0
  3673
			SimulatePointer(TRawEvent::EButton1Down,33,53);		//1 event
sl@0
  3674
			iTest->SimulateKey(TRawEvent::EKeyDown,'F');		//2 events
sl@0
  3675
			SimulatePointer(TRawEvent::EButton1Up,34,47);		//1 event
sl@0
  3676
			iTest->SimulateKey(TRawEvent::EKeyUp,'F');		//1 event
sl@0
  3677
			events=15;
sl@0
  3678
			break;
sl@0
  3679
		case 7:
sl@0
  3680
			AddExpectedKeyDownUp('2');
sl@0
  3681
			iAddToClick=EFalse;
sl@0
  3682
			AddExpectedKeyDownUp('G','g');
sl@0
  3683
			iAddToClick=ETrue;
sl@0
  3684
			AddExpectedPointerDownUpScr(TPoint(42,26));
sl@0
  3685
			AddExpectedKeyDownUp('U','u');
sl@0
  3686
			iQueueClient->iWs.Flush();
sl@0
  3687
			iTest->SimulateKeyDownUp('2');		//3 events
sl@0
  3688
			TheClient->iWs.Flush();
sl@0
  3689
			iQueueClient->iGroup->GroupWin()->DisableKeyClick(ETrue);
sl@0
  3690
			iQueueClient->iWs.Flush();
sl@0
  3691
			iTest->SimulateKeyDownUp('G');
sl@0
  3692
			iTest->SimulatePointerDownUp(42,26+iYOffset);		//2 events
sl@0
  3693
			TheClient->iWs.Flush();
sl@0
  3694
			iQueueClient->iGroup->GroupWin()->DisableKeyClick(EFalse);
sl@0
  3695
			iQueueClient->iWs.Flush();
sl@0
  3696
			iTest->SimulateKeyDownUp('U');		//3 events
sl@0
  3697
			events=8;
sl@0
  3698
			break;
sl@0
  3699
		case 8:
sl@0
  3700
			{
sl@0
  3701
			TPckgBuf<TPointerEventInfo> pointerEventInfo;
sl@0
  3702
			pointerEventInfo().iClientHandle=reinterpret_cast<TInt>(iQueueClient->iChildWin);
sl@0
  3703
			pointerEventInfo().iWinGpId=iQueueClient->iGroup->GroupWin()->Identifier();
sl@0
  3704
			pointerEventInfo().iWinOrigin=iQueueClient->ChildTopLeft();
sl@0
  3705
			pointerEventInfo().iParentOrigin.SetXY(EWinPositionX,EWinPositionY);
sl@0
  3706
			iClick.CommandReply(EClickPointerEvent,pointerEventInfo);
sl@0
  3707
			AddExpectedKeyDownUp('3');
sl@0
  3708
			AddExpectedPointerDownUpScr(TPoint(43,26));
sl@0
  3709
			AddExpectedKeyDownUp('H','h');
sl@0
  3710
			iAddToClick=EFalse;
sl@0
  3711
			AddExpectedPointerDownUpScr(TPoint(43,27));
sl@0
  3712
			AddExpectedKeyDownUp('4');
sl@0
  3713
			AddExpectedPointerDownUpScr(TPoint(42,27));
sl@0
  3714
			AddExpectedKeyDownUp('I','i');
sl@0
  3715
			iAddToClick=ETrue;
sl@0
  3716
			AddExpectedPointerDownUpScr(TPoint(44,27));
sl@0
  3717
			AddExpectedKeyDownUp('5');
sl@0
  3718
			AddExpectedPointerDownUpScr(TPoint(44,26));
sl@0
  3719
			iQueueClient->iWs.Flush();
sl@0
  3720
			iTest->SimulateKeyDownUp('3');		//3 events
sl@0
  3721
			iTest->SimulatePointerDownUp(43,26+iYOffset);		//2 events
sl@0
  3722
			iClick.SetPenClick(EFalse);
sl@0
  3723
			iTest->SimulateKeyDownUp('H');		//3 events
sl@0
  3724
			iTest->SimulatePointerDownUp(43,27+iYOffset);
sl@0
  3725
			iClick.SetKeyClick(EFalse);
sl@0
  3726
			iTest->SimulateKeyDownUp('4');
sl@0
  3727
			iTest->SimulatePointerDownUp(42,27+iYOffset);
sl@0
  3728
			iClick.SetPenClick(ETrue);
sl@0
  3729
			iTest->SimulateKeyDownUp('I');
sl@0
  3730
			iTest->SimulatePointerDownUp(44,27+iYOffset);		//2 events
sl@0
  3731
			iClick.SetKeyClick(ETrue);
sl@0
  3732
			iTest->SimulateKeyDownUp('5');		//3 events
sl@0
  3733
			iTest->SimulatePointerDownUp(44,26+iYOffset);		//2 events
sl@0
  3734
			pointerEventInfo().iClientHandle=0;
sl@0
  3735
			pointerEventInfo().iWinGpId=0;
sl@0
  3736
			iClick.CommandReply(EClickPointerEvent,pointerEventInfo);
sl@0
  3737
			events=15;
sl@0
  3738
			}
sl@0
  3739
			break;
sl@0
  3740
		case 9:
sl@0
  3741
			{
sl@0
  3742
			RWindowGroup winGp(iQueueClient->iWs);
sl@0
  3743
			TInt winGpId;
sl@0
  3744
			TInt ii;
sl@0
  3745
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  3746
			for (ii=0;ii<2;++ii)	//events x2
sl@0
  3747
				{
sl@0
  3748
				if (CreateGroupWindow(winGp,EQueueClient,winGpId))		//1 event
sl@0
  3749
					Failed();
sl@0
  3750
				CloseGroupWindow(winGp,winGpId);		//1 event
sl@0
  3751
				iQueueClient->iWs.Flush();
sl@0
  3752
				}
sl@0
  3753
			events=4;
sl@0
  3754
			}
sl@0
  3755
			break;
sl@0
  3756
		case 10:
sl@0
  3757
			{
sl@0
  3758
			RWindowGroup winGp(TheClient->iWs);
sl@0
  3759
			RWindowGroup winGp1(iQueueClient->iWs);
sl@0
  3760
			RWindowGroup winGp2(iQueueClient->iWs);
sl@0
  3761
			TInt winGpId;
sl@0
  3762
			TInt winGpId1;
sl@0
  3763
			TInt winGpId2;
sl@0
  3764
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  3765
			if (CreateGroupWindow(winGp,ETheClient,winGpId))		//1 event
sl@0
  3766
				Failed();
sl@0
  3767
			CloseGroupWindow(winGp,winGpId);		//1 event
sl@0
  3768
			TheClient->iWs.Flush();
sl@0
  3769
			if (CreateGroupWindow(winGp1,EQueueClient,winGpId1))		//1 event
sl@0
  3770
				Failed();
sl@0
  3771
			if (CreateGroupWindow(winGp2,EQueueClient,winGpId2))		//1 event
sl@0
  3772
				Failed();
sl@0
  3773
			if (CreateGroupWindow(winGp,ETheClient,winGpId))		//1 event
sl@0
  3774
				Failed();
sl@0
  3775
			CloseGroupWindow(winGp2,winGpId2);		//1 event
sl@0
  3776
			iQueueClient->iWs.Flush();
sl@0
  3777
			CloseGroupWindow(winGp,winGpId);		//1 event
sl@0
  3778
			TheClient->iWs.Flush();
sl@0
  3779
			CloseGroupWindow(winGp1,winGpId1);		//1 event
sl@0
  3780
			iQueueClient->iWs.Flush();
sl@0
  3781
			events=8;
sl@0
  3782
			}
sl@0
  3783
			break;
sl@0
  3784
		case 11:
sl@0
  3785
			{
sl@0
  3786
			RWindowGroup winGp(iQueueClient->iWs);
sl@0
  3787
			TInt winGpId;
sl@0
  3788
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  3789
			if (CreateGroupWindow(winGp,EQueueClient,winGpId))		//1 event
sl@0
  3790
				Failed();
sl@0
  3791
			RWindow win(iQueueClient->iWs);
sl@0
  3792
			const TInt handle=79;
sl@0
  3793
			if (win.Construct(winGp,handle))
sl@0
  3794
				Failed();
sl@0
  3795
			win.Activate();
sl@0
  3796
			CloseWindow(win,handle,winGpId);		//1 event
sl@0
  3797
			iQueueClient->iWs.Flush();
sl@0
  3798
			CloseGroupWindow(winGp,winGpId);		//1 event
sl@0
  3799
			iQueueClient->iWs.Flush();
sl@0
  3800
			events=3;
sl@0
  3801
			}
sl@0
  3802
			break;
sl@0
  3803
		case 12:
sl@0
  3804
			{
sl@0
  3805
			RWindowGroup winGp1(iQueueClient->iWs);
sl@0
  3806
			RWindowGroup winGp2(TheClient->iWs);
sl@0
  3807
			TInt winGpId1;
sl@0
  3808
			TInt winGpId2;
sl@0
  3809
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  3810
			if (CreateGroupWindow(winGp2,ETheClient,winGpId2))		//1 event
sl@0
  3811
				Failed();
sl@0
  3812
			if (CreateGroupWindow(winGp1,EQueueClient,winGpId1))		//1 event
sl@0
  3813
				Failed();
sl@0
  3814
			RWindow win1(iQueueClient->iWs);
sl@0
  3815
			RWindow win2(iQueueClient->iWs);
sl@0
  3816
			RWindow win(TheClient->iWs);
sl@0
  3817
			const TInt handle1a=80;
sl@0
  3818
			const TInt handle1b=81;
sl@0
  3819
			const TInt handle2a=82;
sl@0
  3820
			const TInt handle2b=83;
sl@0
  3821
			const TInt handle=84;
sl@0
  3822
			if (win1.Construct(winGp1,handle1a))
sl@0
  3823
				Failed();
sl@0
  3824
			win1.Activate();
sl@0
  3825
			if (win2.Construct(win1,handle2a))
sl@0
  3826
				Failed();
sl@0
  3827
			win2.Activate();
sl@0
  3828
			if (win.Construct(winGp2,handle))
sl@0
  3829
				Failed();
sl@0
  3830
			win.Activate();
sl@0
  3831
			CloseWindow(win2,handle2a,winGpId1);		//1 event
sl@0
  3832
			iQueueClient->iWs.Flush();
sl@0
  3833
			if (win2.Construct(winGp1,handle2b))
sl@0
  3834
				Failed();
sl@0
  3835
			win2.Activate();
sl@0
  3836
			CloseWindow(win1,handle1a,winGpId1);		//1 event
sl@0
  3837
			iQueueClient->iWs.Flush();
sl@0
  3838
			CloseWindow(win,handle,winGpId2);		//1 event
sl@0
  3839
			TheClient->iWs.Flush();
sl@0
  3840
			if (win1.Construct(win2,handle1b))
sl@0
  3841
				Failed();
sl@0
  3842
			win1.Activate();
sl@0
  3843
			CloseWindow(win1,handle1b,winGpId1);		//1 event
sl@0
  3844
			iQueueClient->iWs.Flush();
sl@0
  3845
			CloseGroupWindow(winGp2,winGpId2);		//1 event
sl@0
  3846
			TheClient->iWs.Flush();
sl@0
  3847
			CloseWindow(win2,handle2b,winGpId1);		//1 event
sl@0
  3848
			iQueueClient->iWs.Flush();
sl@0
  3849
			CloseGroupWindow(winGp1,winGpId1);		//1 event
sl@0
  3850
			iQueueClient->iWs.Flush();
sl@0
  3851
			events=9;
sl@0
  3852
			}
sl@0
  3853
			break;
sl@0
  3854
		case 13:
sl@0
  3855
			{
sl@0
  3856
			TPckgBuf<TPointerEventInfo> pointerEventInfo;
sl@0
  3857
			pointerEventInfo().iClientHandle=reinterpret_cast<TInt>(iQueueClient->iWin);
sl@0
  3858
			pointerEventInfo().iWinGpId=iQueueClient->iGroup->GroupWin()->Identifier();
sl@0
  3859
			pointerEventInfo().iWinOrigin.SetXY(EWinPositionX,EWinPositionY);
sl@0
  3860
			pointerEventInfo().iParentOrigin.SetXY(0,0);
sl@0
  3861
			iClick.CommandReply(EClickPointerEvent,pointerEventInfo);
sl@0
  3862
			AddExpectedPointerDownUpScr(TPoint(43,18));
sl@0
  3863
			AddExpectedPointerDownUpScr(TPoint(43,17));
sl@0
  3864
			AddExpectedPointerDownUpScr(TPoint(42,52));
sl@0
  3865
			AddExpectedPointerDownUpScr(TPoint(24,27));
sl@0
  3866
			AddExpectedPointerDownUpScr(TPoint(94,26));
sl@0
  3867
			iQueueClient->iWs.Flush();
sl@0
  3868
			iTest->SimulatePointerDownUp(43,18+iYOffset);		//2 events
sl@0
  3869
			iTest->SimulatePointerDownUp(43,17+iYOffset);		//2 events
sl@0
  3870
			iTest->SimulatePointerDownUp(42,52+iYOffset);		//2 events
sl@0
  3871
			iTest->SimulatePointerDownUp(24,27+iYOffset);		//2 events
sl@0
  3872
			iTest->SimulatePointerDownUp(94,26+iYOffset);		//2 events
sl@0
  3873
			pointerEventInfo().iClientHandle=0;
sl@0
  3874
			pointerEventInfo().iWinGpId=0;
sl@0
  3875
			iClick.CommandReply(EClickPointerEvent,pointerEventInfo);
sl@0
  3876
			events=10;
sl@0
  3877
			}
sl@0
  3878
			break;
sl@0
  3879
		default:
sl@0
  3880
			iAddToClick=EFalse;
sl@0
  3881
			if (!SetClickType(EClickNone))
sl@0
  3882
				CActiveScheduler::Stop();
sl@0
  3883
			return;
sl@0
  3884
		}
sl@0
  3885
	TInt failedAt=iClick.CommandReply(EClickFailed,TPtrC8(NULL,0));
sl@0
  3886
	TInt eventsDone=iClick.CommandReply(EClickEvents,TPtrC8(NULL,0));
sl@0
  3887
	if (failedAt!=0 || eventsDone!=events)		//iEventSet (already incremented)
sl@0
  3888
		{
sl@0
  3889
	#if defined(LOGGING)
sl@0
  3890
		_LIT(KeyClickFailed,"KeyClick Failed EventSet=%d FailedAt=%d TotalEvents=%d EventsDone=%d");
sl@0
  3891
		logMessageText.Format(KeyClickFailed,iEventSet-1,failedAt,events,eventsDone);
sl@0
  3892
		INFO_PRINTF1(logMessageText);
sl@0
  3893
	#endif
sl@0
  3894
		Failed();
sl@0
  3895
		}
sl@0
  3896
	iClick.CommandReply(EClickReset,TPtrC8(NULL,0));
sl@0
  3897
	}
sl@0
  3898
sl@0
  3899
void CTEventTest::CaptureLong_NextSetOfEventsL()
sl@0
  3900
	{
sl@0
  3901
	#if defined(LOGGING)
sl@0
  3902
		TLogMessageText logMessageText;
sl@0
  3903
		_LIT(KSet,"CaptureLong SetOfEvents: %d of 23");
sl@0
  3904
		logMessageText.Format(KSet,iEventSet);
sl@0
  3905
		INFO_PRINTF1(logMessageText);
sl@0
  3906
	#endif
sl@0
  3907
sl@0
  3908
	switch(iEventSet++)
sl@0
  3909
		{
sl@0
  3910
		case 0:
sl@0
  3911
			iQueueClient->iWs.Flush();
sl@0
  3912
			iTest->SimulateKeyDownUp('A');
sl@0
  3913
			AddExpectedEvent(EEventFocusGained);
sl@0
  3914
			AddExpectedKeyDownUp('A','a');
sl@0
  3915
			break;
sl@0
  3916
		case 1:
sl@0
  3917
			// Test CaptureLongKey() with modifier value EModifierShift and flag value ELongCaptureNormal
sl@0
  3918
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(' ','a',EModifierShift,EModifierShift,2,ELongCaptureNormal);
sl@0
  3919
			iQueueClient->iWs.Flush();
sl@0
  3920
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftShift);
sl@0
  3921
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  3922
			TheClient->iWs.Flush();
sl@0
  3923
			DelayForRepeatEvents(1, 3);
sl@0
  3924
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  3925
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftShift);
sl@0
  3926
			AddExpectedKey(EEventKeyDown,EStdKeyLeftShift);
sl@0
  3927
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  3928
			AddExpectedKey(EEventKey,EStdKeySpace,' ',0,EModifierLeftShift|EModifierShift|EModifierAutorepeatable);
sl@0
  3929
			AddExpectedKey(EEventKey,EStdKeySpace,'a',1,EModifierLongKey|EModifierLeftShift|EModifierShift|EModifierAutorepeatable);
sl@0
  3930
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  3931
			AddExpectedKey(EEventKeyUp,EStdKeyLeftShift);
sl@0
  3932
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  3933
			break;
sl@0
  3934
		case 2:	
sl@0
  3935
			// Test CaptureLongKey() with modifier value EModifierFunc and flag value ELongCaptureWaitShort
sl@0
  3936
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(EKeyEnter,'a',EModifierFunc,EModifierFunc,2,ELongCaptureWaitShort);
sl@0
  3937
			iQueueClient->iWs.Flush();
sl@0
  3938
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftFunc);
sl@0
  3939
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyEnter);
sl@0
  3940
			TheClient->iWs.Flush();
sl@0
  3941
			DelayForRepeatEvents(1, 3);
sl@0
  3942
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyEnter);
sl@0
  3943
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftFunc);
sl@0
  3944
			iTest->SimulateKeyDownUp(EStdKeySpace);
sl@0
  3945
			AddExpectedKey(EEventKeyDown,EStdKeyLeftFunc);
sl@0
  3946
			AddExpectedKey(EEventKeyDown,EStdKeyEnter);
sl@0
  3947
			AddExpectedKey(EEventKey,EStdKeyEnter,'a',1,EModifierLongKey|EModifierLeftFunc|EModifierFunc|EModifierAutorepeatable);
sl@0
  3948
			AddExpectedKey(EEventKeyUp,EStdKeyEnter);
sl@0
  3949
			AddExpectedKey(EEventKeyUp,EStdKeyLeftFunc);
sl@0
  3950
			AddExpectedKeyDownUp(EStdKeySpace,' ');
sl@0
  3951
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  3952
			break;
sl@0
  3953
		case 3:
sl@0
  3954
			// Test CaptureLongKey() with modifier values EModifierFunc|EModifierAlt and flag values ELongCaptureNormal|ELongCaptureRepeatEvents)
sl@0
  3955
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(EKeyEnter,'a',EModifierFunc|EModifierAlt,EModifierFunc|EModifierAlt,2,ELongCaptureNormal|ELongCaptureRepeatEvents);
sl@0
  3956
			iQueueClient->iWs.Flush();
sl@0
  3957
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftFunc);
sl@0
  3958
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftAlt);
sl@0
  3959
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyEnter);
sl@0
  3960
			TheClient->iWs.Flush();
sl@0
  3961
			DelayForRepeatEvents(5, 1);
sl@0
  3962
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyEnter);
sl@0
  3963
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftAlt);
sl@0
  3964
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftFunc);
sl@0
  3965
			AddExpectedKey(EEventKeyDown,EStdKeyLeftFunc);
sl@0
  3966
			AddExpectedKey(EEventKeyDown,EStdKeyLeftAlt);
sl@0
  3967
			AddExpectedKey(EEventKeyDown,EStdKeyEnter);
sl@0
  3968
			AddExpectedKey(EEventKey,EStdKeyEnter,EKeyEnter,0,EModifierLeftFunc|EModifierFunc|EModifierLeftAlt|EModifierAlt|EModifierAutorepeatable);
sl@0
  3969
			AddExpectedKey(EEventKey,EStdKeyEnter,'a',2,EModifierLongKey|EModifierLeftFunc|EModifierFunc|EModifierLeftAlt|EModifierAlt|EModifierAutorepeatable);
sl@0
  3970
			AddExpectedKey(EEventKeyUp,EStdKeyEnter);
sl@0
  3971
			AddExpectedKey(EEventKeyUp,EStdKeyLeftAlt);
sl@0
  3972
			AddExpectedKey(EEventKeyUp,EStdKeyLeftFunc);
sl@0
  3973
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  3974
			break;
sl@0
  3975
		case 4:
sl@0
  3976
			iQueueClient->iWs.Flush();
sl@0
  3977
			iTest->SimulateKey(TRawEvent::EKeyDown,'Z');
sl@0
  3978
			TheClient->iWs.Flush();
sl@0
  3979
			DelayForRepeatEvents(3, 1);
sl@0
  3980
			iTest->SimulateKey(TRawEvent::EKeyDown,'Y');
sl@0
  3981
			TheClient->iWs.Flush();
sl@0
  3982
			DelayForRepeatEvents(2, 1);
sl@0
  3983
			iTest->SimulateKey(TRawEvent::EKeyUp,'Z');
sl@0
  3984
			iTest->SimulateKey(TRawEvent::EKeyUp,'Y');
sl@0
  3985
			AddExpectedKey(EEventKeyDown,'Z');
sl@0
  3986
			AddExpectedKey(EEventKey,'Z','z');
sl@0
  3987
			AddExpectedKey(EEventKey,'Z','z',1);
sl@0
  3988
			AddExpectedKey(EEventKeyDown,'Y');
sl@0
  3989
			AddExpectedKey(EEventKey,'Y','y');
sl@0
  3990
			AddExpectedKey(EEventKey,'Y','y',1);
sl@0
  3991
			AddExpectedKey(EEventKeyUp,'Z');
sl@0
  3992
			AddExpectedKey(EEventKeyUp,'Y');
sl@0
  3993
			break;
sl@0
  3994
		case 5:
sl@0
  3995
			iQueueClient->iWs.Flush();
sl@0
  3996
			iTest->SimulateKey(TRawEvent::EKeyDown,'Z');
sl@0
  3997
			TheClient->iWs.Flush();
sl@0
  3998
			DelayForRepeatEvents(3, 1);
sl@0
  3999
			iTest->SimulateKey(TRawEvent::EKeyDown,'Y');
sl@0
  4000
			TheClient->iWs.Flush();
sl@0
  4001
			DelayForRepeatEvents(5, 2);
sl@0
  4002
			iTest->SimulateKey(TRawEvent::EKeyUp,'Y');
sl@0
  4003
			TheClient->iWs.Flush();
sl@0
  4004
			DelayForRepeatEvents(2, 1);
sl@0
  4005
			iTest->SimulateKey(TRawEvent::EKeyUp,'Z');
sl@0
  4006
			AddExpectedKey(EEventKeyDown,'Z');
sl@0
  4007
			AddExpectedKey(EEventKey,'Z','z');
sl@0
  4008
			AddExpectedKey(EEventKey,'Z','z',1);
sl@0
  4009
			AddExpectedKey(EEventKeyDown,'Y');
sl@0
  4010
			AddExpectedKey(EEventKey,'Y','y');
sl@0
  4011
			AddExpectedKey(EEventKey,'Y','y',1);
sl@0
  4012
			AddExpectedKey(EEventKeyUp,'Y');
sl@0
  4013
			AddExpectedKey(EEventKey,'Z','z',1);
sl@0
  4014
			AddExpectedKey(EEventKeyUp,'Z');
sl@0
  4015
			break;
sl@0
  4016
		case 6:
sl@0
  4017
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(' ','b',0,0,2,ELongCaptureNormal);
sl@0
  4018
			iQueueClient->iWs.Flush();
sl@0
  4019
			iTest->SimulateKey(TRawEvent::EKeyDown,'X');
sl@0
  4020
			TheClient->iWs.Flush();
sl@0
  4021
			DelayForRepeatEvents(3, 1);
sl@0
  4022
			iTest->SimulateKeyDownUp(EStdKeySpace);
sl@0
  4023
			TheClient->iWs.Flush();
sl@0
  4024
			if(!iTest->IsFullRomL())
sl@0
  4025
				{
sl@0
  4026
				DelayForRepeatEvents(2, 1);
sl@0
  4027
				}
sl@0
  4028
			iTest->SimulateKey(TRawEvent::EKeyUp,'X');
sl@0
  4029
			AddExpectedKey(EEventKeyDown,'X');
sl@0
  4030
			AddExpectedKey(EEventKey,'X','x');
sl@0
  4031
			AddExpectedKey(EEventKey,'X','x',1);
sl@0
  4032
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  4033
			AddExpectedKey(EEventKey,EStdKeySpace,' ');
sl@0
  4034
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  4035
			if(!iTest->IsFullRomL())
sl@0
  4036
				{
sl@0
  4037
				AddExpectedKey(EEventKey,'X','x',1);
sl@0
  4038
				}
sl@0
  4039
			AddExpectedKey(EEventKeyUp,'X');
sl@0
  4040
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4041
			break;
sl@0
  4042
		case 7:
sl@0
  4043
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(' ','b',0,0,2,ELongCaptureNormal|ELongCaptureRepeatEvents);
sl@0
  4044
			iQueueClient->iWs.Flush();
sl@0
  4045
			iTest->SimulateKey(TRawEvent::EKeyDown,'X');
sl@0
  4046
			TheClient->iWs.Flush();
sl@0
  4047
			DelayForRepeatEvents(5, 1);
sl@0
  4048
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  4049
			TheClient->iWs.Flush();
sl@0
  4050
			DelayForRepeatEvents(1, 3);
sl@0
  4051
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  4052
			TheClient->iWs.Flush();
sl@0
  4053
			User::ResetInactivityTime();
sl@0
  4054
			DelayForRepeatEvents(4, 1);
sl@0
  4055
			iTest->SimulateKey(TRawEvent::EKeyUp,'X');
sl@0
  4056
			AddExpectedKey(EEventKeyDown,'X');
sl@0
  4057
			AddExpectedKey(EEventKey,'X','x');
sl@0
  4058
			AddExpectedKey(EEventKey,'X','x',1);
sl@0
  4059
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  4060
			AddExpectedKey(EEventKey,EStdKeySpace,' ');
sl@0
  4061
			AddExpectedKey(EEventKey,EStdKeySpace,'b',1);
sl@0
  4062
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  4063
			AddExpectedKey(EEventKey,'X','x',1);
sl@0
  4064
			AddExpectedKey(EEventKeyUp,'X');
sl@0
  4065
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4066
			break;
sl@0
  4067
		case 8:
sl@0
  4068
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(' ','c',0,0,2,ELongCaptureRepeatEvents);
sl@0
  4069
			iQueueClient->iWs.Flush();
sl@0
  4070
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  4071
			TheClient->iWs.Flush();
sl@0
  4072
			DelayForRepeatEvents(5, 1);
sl@0
  4073
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  4074
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  4075
			AddExpectedKey(EEventKey,EStdKeySpace,'c',1);
sl@0
  4076
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  4077
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4078
			break;
sl@0
  4079
		case 9:
sl@0
  4080
			{
sl@0
  4081
			TInt captureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(EKeyEscape,'e',0,0,2,ELongCaptureNormal|ELongCaptureRepeatEvents);
sl@0
  4082
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(' ','d',0,0,2,ELongCaptureNormal|ELongCaptureRepeatEvents);
sl@0
  4083
			iQueueClient->iWs.Flush();
sl@0
  4084
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  4085
			TheClient->iWs.Flush();
sl@0
  4086
			DelayForRepeatEvents(5, 2);
sl@0
  4087
			iTest->SimulateKeyDownUp(EStdKeyEscape);
sl@0
  4088
			TheClient->iWs.Flush();
sl@0
  4089
			DelayForRepeatEvents(3, 1);
sl@0
  4090
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  4091
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  4092
			AddExpectedKey(EEventKey,EStdKeySpace,' ');
sl@0
  4093
			AddExpectedKey(EEventKey,EStdKeySpace,'d',1);
sl@0
  4094
			AddExpectedKey(EEventKeyDown,EStdKeyEscape);
sl@0
  4095
			AddExpectedKey(EEventKey,EStdKeyEscape,EKeyEscape);
sl@0
  4096
			AddExpectedKey(EEventKeyUp,EStdKeyEscape);
sl@0
  4097
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  4098
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4099
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(captureKey);
sl@0
  4100
			}
sl@0
  4101
			break;
sl@0
  4102
		case 10:
sl@0
  4103
			//Cancel a long capture key event whilst a repeat is underway
sl@0
  4104
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(' ','a',0,0,2,ELongCaptureNormal|ELongCaptureRepeatEvents);
sl@0
  4105
			iQueueClient->iWs.Flush();
sl@0
  4106
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  4107
			TheClient->iWs.Flush();
sl@0
  4108
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4109
			DelayForRepeatEvents(5, 1);
sl@0
  4110
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  4111
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  4112
			AddExpectedKey(EEventKey,EStdKeySpace,' ');
sl@0
  4113
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  4114
			break;
sl@0
  4115
		case 11:
sl@0
  4116
			// Cancel a key up/down capture whilst a repeat is underway.
sl@0
  4117
			// This should have no effect since only key press events are
sl@0
  4118
			// repeated.
sl@0
  4119
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureKeyUpAndDowns('X',0,0);
sl@0
  4120
			iQueueClient->iWs.Flush();
sl@0
  4121
			iTest->SimulateKey(TRawEvent::EKeyDown,'X');
sl@0
  4122
			TheClient->iWs.Flush();
sl@0
  4123
			iQueueClient->iGroup->GroupWin()->CancelCaptureKeyUpAndDowns(iCaptureKey);
sl@0
  4124
			DelayForRepeatEvents(5, 1);
sl@0
  4125
			iTest->SimulateKey(TRawEvent::EKeyUp,'X');
sl@0
  4126
			AddExpectedKey(EEventKeyDown,'X');
sl@0
  4127
			AddExpectedKey(EEventKey,'X','x');
sl@0
  4128
			AddExpectedKey(EEventKey,'X','x',2);
sl@0
  4129
			AddExpectedKey(EEventKeyUp,'X');
sl@0
  4130
			break;
sl@0
  4131
		case 12:
sl@0
  4132
			//Cancel a capture key event whilst a repeat is underway
sl@0
  4133
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureKey('y',0,0);
sl@0
  4134
			iQueueClient->iWs.Flush();
sl@0
  4135
			iTest->SimulateKey(TRawEvent::EKeyDown,'Y');
sl@0
  4136
			TheClient->iWs.Flush();
sl@0
  4137
			iQueueClient->iGroup->GroupWin()->CancelCaptureKey(iCaptureKey);
sl@0
  4138
			DelayForRepeatEvents(5, 1);
sl@0
  4139
			iTest->SimulateKey(TRawEvent::EKeyUp,'Y');
sl@0
  4140
			AddExpectedKey(EEventKeyDown,'Y');
sl@0
  4141
			AddExpectedKey(EEventKey,'Y','y');
sl@0
  4142
			AddExpectedKey(EEventKeyUp,'Y');
sl@0
  4143
			break;
sl@0
  4144
		case 13:
sl@0
  4145
			//Variation on case 12 i.e. change in the timing of the CancelCaptureKey call
sl@0
  4146
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureKey('z',0,0);
sl@0
  4147
			iQueueClient->iWs.Flush();
sl@0
  4148
			iTest->SimulateKey(TRawEvent::EKeyDown,'Z');
sl@0
  4149
			TheClient->iWs.Flush();
sl@0
  4150
			DelayForRepeatEvents(5, 2);
sl@0
  4151
			iQueueClient->iGroup->GroupWin()->CancelCaptureKey(iCaptureKey);
sl@0
  4152
			DelayForRepeatEvents(5, 2);
sl@0
  4153
			iTest->SimulateKey(TRawEvent::EKeyUp,'Z');
sl@0
  4154
			AddExpectedKey(EEventKeyDown,'Z');
sl@0
  4155
			AddExpectedKey(EEventKey,'Z','z');
sl@0
  4156
			AddExpectedKey(EEventKey,'Z','z',2);
sl@0
  4157
			AddExpectedKey(EEventKeyUp,'Z');
sl@0
  4158
			break;
sl@0
  4159
		case 14:
sl@0
  4160
			{
sl@0
  4161
	    	// Cancel long capture key event when normal capture key is scheduled for different
sl@0
  4162
	    	// window group.
sl@0
  4163
			iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureLongKey(' ','a',0,0,2,ELongCaptureNormal);
sl@0
  4164
			TInt shortCaptKey = TheClient->iGroup->GroupWin()->CaptureKey(' ',0,0);
sl@0
  4165
sl@0
  4166
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  4167
			TheClient->iWs.Flush();
sl@0
  4168
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4169
			DelayForRepeatEvents(1, 3);
sl@0
  4170
sl@0
  4171
			TheClient->iGroup->GroupWin()->CancelCaptureKey(shortCaptKey);
sl@0
  4172
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  4173
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  4174
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  4175
			}
sl@0
  4176
			break;
sl@0
  4177
		case 15:
sl@0
  4178
			// @SYMPREQ 417-61800: Check that long key events are marked with
sl@0
  4179
			// EModifierLongKey and short events are not.
sl@0
  4180
			iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureLongKey('m', 'm', 0, 0, 0, ELongCaptureNormal);
sl@0
  4181
			iQueueClient->iWs.Flush();
sl@0
  4182
			iTest->SimulateKey(TRawEvent::EKeyDown, 'M');
sl@0
  4183
			TheClient->iWs.Flush();
sl@0
  4184
			DelayForRepeatEvents(1, 3);
sl@0
  4185
			iTest->SimulateKey(TRawEvent::EKeyUp, 'M');
sl@0
  4186
			AddExpectedKey(EEventKeyDown, 'M', 0, 0, 0);
sl@0
  4187
			AddExpectedKey(EEventKey, 'M', 'm', 0, EModifierAutorepeatable);
sl@0
  4188
			AddExpectedKey(EEventKey, 'M', 'm', 1, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4189
			AddExpectedKey(EEventKeyUp, 'M', 0, 0, 0);
sl@0
  4190
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4191
			break;
sl@0
  4192
		case 16:
sl@0
  4193
			CheckLongkeyCaptureWithPriority(ELongkeyCaptureDiffPriority);
sl@0
  4194
			break;
sl@0
  4195
		case 17:
sl@0
  4196
			CheckLongkeyCaptureWithPriority(ELongkeyCaptureSamePriority);
sl@0
  4197
			break;
sl@0
  4198
		case 18:
sl@0
  4199
			// Test CaptureLongKey() with flag value ELongCaptureWaitShort
sl@0
  4200
			// when key is not held down long enough to generate a long event.
sl@0
  4201
			// Verify that short event is delivered when the key is released.
sl@0
  4202
			iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureLongKey('p', 'p', 0, 0, 0, ELongCaptureWaitShort);
sl@0
  4203
			iQueueClient->iWs.Flush();
sl@0
  4204
			iTest->SimulateKey(TRawEvent::EKeyDown, 'P');
sl@0
  4205
			TheClient->iWs.Flush();
sl@0
  4206
			User::After(iKeyBoardRepeatInitialDelay.Int() / 2);
sl@0
  4207
			iTest->SimulateKey(TRawEvent::EKeyUp, 'P');
sl@0
  4208
			TheClient->iWs.Flush();
sl@0
  4209
			iTest->SimulateKeyDownUp(EStdKeySpace);
sl@0
  4210
			AddExpectedKey(EEventKeyDown, 'P');
sl@0
  4211
			AddExpectedKey(EEventKey, 'P', 'p', 0, EModifierAutorepeatable);
sl@0
  4212
			AddExpectedKey(EEventKeyUp, 'P');
sl@0
  4213
			AddExpectedKeyDownUp(EStdKeySpace, ' ');
sl@0
  4214
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4215
			break;
sl@0
  4216
		case 19:
sl@0
  4217
			{
sl@0
  4218
			// Cancel a capture key event whilst a repeat is underway for a
sl@0
  4219
			// different capture. This should not cancel repeating.
sl@0
  4220
			iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureKey('q', 0, 0);
sl@0
  4221
			TInt captureKey2 = iQueueClient->iGroup->GroupWin()->CaptureKey('r', 0, 0);
sl@0
  4222
			iQueueClient->iWs.Flush();
sl@0
  4223
			iTest->SimulateKey(TRawEvent::EKeyDown, 'Q');
sl@0
  4224
			TheClient->iWs.Flush();
sl@0
  4225
			iQueueClient->iGroup->GroupWin()->CancelCaptureKey(captureKey2);
sl@0
  4226
			DelayForRepeatEvents(5, 1);
sl@0
  4227
			iTest->SimulateKey(TRawEvent::EKeyUp, 'Q');
sl@0
  4228
			AddExpectedKey(EEventKeyDown, 'Q');
sl@0
  4229
			AddExpectedKey(EEventKey, 'Q', 'q', 0, EModifierAutorepeatable);
sl@0
  4230
			AddExpectedKey(EEventKey, 'Q', 'q', 2, EModifierAutorepeatable);
sl@0
  4231
			AddExpectedKey(EEventKeyUp, 'Q');
sl@0
  4232
			iQueueClient->iGroup->GroupWin()->CancelCaptureKey(iCaptureKey);
sl@0
  4233
			}
sl@0
  4234
			break;
sl@0
  4235
		case 20:
sl@0
  4236
			{
sl@0
  4237
			// Cancel a long capture key event whilst a repeat is underway for
sl@0
  4238
			// a different capture. This should not cancel repeating.
sl@0
  4239
			iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureLongKey('s', 's', 0, 0, 2, ELongCaptureNormal|ELongCaptureRepeatEvents);
sl@0
  4240
			TInt captureKey2 = iQueueClient->iGroup->GroupWin()->CaptureLongKey('t', 't', 0, 0, 2, ELongCaptureNormal|ELongCaptureRepeatEvents);
sl@0
  4241
			iQueueClient->iWs.Flush();
sl@0
  4242
			iTest->SimulateKey(TRawEvent::EKeyDown, 'S');
sl@0
  4243
			TheClient->iWs.Flush();
sl@0
  4244
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(captureKey2);
sl@0
  4245
			DelayForRepeatEvents(5, 1);
sl@0
  4246
			iTest->SimulateKey(TRawEvent::EKeyUp, 'S');
sl@0
  4247
			AddExpectedKey(EEventKeyDown, 'S');
sl@0
  4248
			AddExpectedKey(EEventKey, 'S', 's', 0, EModifierAutorepeatable);
sl@0
  4249
			AddExpectedKey(EEventKey, 'S', 's', 2, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4250
			AddExpectedKey(EEventKeyUp, 'S');
sl@0
  4251
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4252
			}
sl@0
  4253
			break;
sl@0
  4254
		case 21:
sl@0
  4255
			{
sl@0
  4256
			// Test CaptureLongKey() with a user specified initial repeat time.
sl@0
  4257
			// Simulate holding down the key for a period shorter than the
sl@0
  4258
			// specified delay. Verify that a long key event is NOT generated.
sl@0
  4259
			// (Note that the period is longer than the default initial repeat
sl@0
  4260
			// time, thus proving that CaptureLongKey() has honoured the delay
sl@0
  4261
			// argument.)
sl@0
  4262
			TTimeIntervalMicroSeconds32 delay(iKeyBoardRepeatInitialDelay.Int() * 4);
sl@0
  4263
			iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureLongKey(delay, 'u', 'u', 0, 0, 0, ELongCaptureNormal);
sl@0
  4264
			iQueueClient->iWs.Flush();
sl@0
  4265
			iTest->SimulateKey(TRawEvent::EKeyDown, 'U');
sl@0
  4266
			TheClient->iWs.Flush();
sl@0
  4267
			User::After(delay.Int() / 2);
sl@0
  4268
			iTest->SimulateKey(TRawEvent::EKeyUp, 'U');
sl@0
  4269
			TheClient->iWs.Flush();
sl@0
  4270
			iTest->SimulateKeyDownUp(EStdKeySpace);
sl@0
  4271
			AddExpectedKey(EEventKeyDown, 'U');
sl@0
  4272
			AddExpectedKey(EEventKey, 'U', 'u', 0, EModifierAutorepeatable);
sl@0
  4273
			AddExpectedKey(EEventKeyUp, 'U');
sl@0
  4274
			AddExpectedKeyDownUp(EStdKeySpace, ' ');
sl@0
  4275
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4276
			}
sl@0
  4277
			break;
sl@0
  4278
		case 22:
sl@0
  4279
			{
sl@0
  4280
			// Test CaptureLongKey() with a user specified initial repeat time.
sl@0
  4281
			// Simulate holding down the key for a period longer than the
sl@0
  4282
			// specified delay. Verify that a long key event is generated.
sl@0
  4283
			// (Note that the period is shorter than the default initial repeat
sl@0
  4284
			// time, thus proving that CaptureLongKey() has honoured the delay
sl@0
  4285
			// argument.)
sl@0
  4286
			TTimeIntervalMicroSeconds32 delay(iKeyBoardRepeatInitialDelay.Int() / 4);
sl@0
  4287
			iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureLongKey(delay, 'v', 'v', 0, 0, 0, ELongCaptureNormal);
sl@0
  4288
			iQueueClient->iWs.Flush();
sl@0
  4289
			iTest->SimulateKey(TRawEvent::EKeyDown, 'V');
sl@0
  4290
			TheClient->iWs.Flush();
sl@0
  4291
			User::After(delay.Int() * 2);
sl@0
  4292
			iTest->SimulateKey(TRawEvent::EKeyUp, 'V');
sl@0
  4293
			TheClient->iWs.Flush();
sl@0
  4294
			iTest->SimulateKeyDownUp(EStdKeySpace);
sl@0
  4295
			AddExpectedKey(EEventKeyDown, 'V');
sl@0
  4296
			AddExpectedKey(EEventKey, 'V', 'v', 0, EModifierAutorepeatable);
sl@0
  4297
			AddExpectedKey(EEventKey, 'V', 'v', 1, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4298
			AddExpectedKey(EEventKeyUp, 'V');
sl@0
  4299
			AddExpectedKeyDownUp(EStdKeySpace, ' ');
sl@0
  4300
			iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4301
			}
sl@0
  4302
			break;
sl@0
  4303
		default:
sl@0
  4304
			CActiveScheduler::Stop();
sl@0
  4305
			break;
sl@0
  4306
		}
sl@0
  4307
	TheClient->iWs.Flush();
sl@0
  4308
	}
sl@0
  4309
sl@0
  4310
/** Function used for checking CaptureLongKey() works fine with different priorities.
sl@0
  4311
sl@0
  4312
If two window groups have requested capture of the same key with different priorities, 
sl@0
  4313
then the event should be delivered to the group that specified higher priority 
sl@0
  4314
(even if it is in the background).
sl@0
  4315
sl@0
  4316
If two window groups have requested capture of the same key with same priorities,
sl@0
  4317
then the event should be delivered to the group that requested capture most recently.
sl@0
  4318
sl@0
  4319
@param aTestType Enum value specifying test with same priority or with different priority
sl@0
  4320
*/
sl@0
  4321
void CTEventTest::CheckLongkeyCaptureWithPriority(TLongkeyCapPriorityTests aTestType)
sl@0
  4322
	{
sl@0
  4323
	TInt ordinalPriority = TheClient->iGroup->GroupWin()->OrdinalPriority();
sl@0
  4324
	TInt ordinalPosition = TheClient->iGroup->GroupWin()->OrdinalPosition();
sl@0
  4325
	// Bring other window group to foreground and request capture with lower/same priority
sl@0
  4326
	// And request capture from iQueueClient group window with higher priority
sl@0
  4327
	TheClient->iGroup->GroupWin()->SetOrdinalPosition(0, 10);
sl@0
  4328
	TInt capKeyFrontWin = TheClient->iGroup->GroupWin()->CaptureLongKey('m', 'm', 0, 0, (aTestType == ELongkeyCaptureDiffPriority ? KLongKeyCaptureLowPriority : KLongKeyCaptureHighPriority), ELongCaptureNormal);
sl@0
  4329
	iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureLongKey('m', 'm', 0, 0, KLongKeyCaptureHighPriority, ELongCaptureNormal);
sl@0
  4330
	iQueueClient->iWs.Flush();
sl@0
  4331
	iTest->SimulateKey(TRawEvent::EKeyDown, 'M');
sl@0
  4332
	TheClient->iWs.Flush();
sl@0
  4333
	DelayForRepeatEvents(1, 3);
sl@0
  4334
	iTest->SimulateKey(TRawEvent::EKeyUp, 'M');
sl@0
  4335
	AddExpectedEvent(EEventFocusLost);
sl@0
  4336
	//Note: Button down/up events along with immediate key events are not delivered to iQueueCLient's window group
sl@0
  4337
	//as they are sent to foreground/focused window group
sl@0
  4338
	AddExpectedKey(EEventKey, 'M', 'm', 1, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4339
	iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  4340
	TheClient->iGroup->GroupWin()->CancelCaptureLongKey(capKeyFrontWin);
sl@0
  4341
	TheClient->iGroup->GroupWin()->SetOrdinalPosition(ordinalPosition, ordinalPriority);
sl@0
  4342
	AddExpectedEvent(EEventFocusGained);
sl@0
  4343
	}
sl@0
  4344
sl@0
  4345
/** Function used for delaying current thread so that repeat events can be generated.
sl@0
  4346
sl@0
  4347
It uses iKeyBoardRepeatInitialDelay and iKeyBoardRepeatNextDelay variables to get the desired delay.
sl@0
  4348
The idea is to wait for initial delay + some extra value so that first repeat is generated.
sl@0
  4349
For more than one repeat events, wait will be initial delay + next delay + some extra value, and so on.
sl@0
  4350
sl@0
  4351
The extra value is taken as fraction of iKeyBoardRepeatNextDelay.
sl@0
  4352
sl@0
  4353
@param aNumeratorFracVal Numerator value of the fraction.
sl@0
  4354
@param aDenominatorFracVal Denominator value of the fraction.
sl@0
  4355
*/
sl@0
  4356
void CTEventTest::DelayForRepeatEvents(TInt aNumeratorFracVal, TInt aDenominatorFracVal)
sl@0
  4357
	{
sl@0
  4358
	if (!aNumeratorFracVal || !aDenominatorFracVal)
sl@0
  4359
		return;
sl@0
  4360
	User::After(iKeyBoardRepeatInitialDelay.Int() + (iKeyBoardRepeatNextDelay.Int()*aNumeratorFracVal/aDenominatorFracVal));
sl@0
  4361
	}
sl@0
  4362
sl@0
  4363
#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA  	
sl@0
  4364
void CTEventTest::KeyEventTranslation_NextSetOfEventsL()
sl@0
  4365
	{
sl@0
  4366
	TTimeIntervalMicroSeconds32 initialTime;
sl@0
  4367
	TTimeIntervalMicroSeconds32 time;
sl@0
  4368
	TheClient->iWs.GetKeyboardRepeatRate(initialTime, time);
sl@0
  4369
sl@0
  4370
	RWindowGroup* wg = iQueueClient->iGroup->GroupWin();
sl@0
  4371
sl@0
  4372
	#if defined(LOGGING)
sl@0
  4373
		TLogMessageText logMessageText;
sl@0
  4374
		_LIT(KSet,"KeyEventTranslation SetOfEvents: %d of 5");
sl@0
  4375
		logMessageText.Format(KSet,iEventSet);
sl@0
  4376
		INFO_PRINTF1(logMessageText);
sl@0
  4377
	#endif
sl@0
  4378
sl@0
  4379
	switch (iEventSet++)
sl@0
  4380
		{
sl@0
  4381
		case 0:
sl@0
  4382
			iQueueClient->iWs.Flush();
sl@0
  4383
			iTest->SimulateKeyDownUp('A');
sl@0
  4384
			AddExpectedEvent(EEventFocusGained);
sl@0
  4385
			AddExpectedKeyDownUp('A','a');
sl@0
  4386
			break;
sl@0
  4387
		case 1:
sl@0
  4388
			// Test key event translation using CaptureKey()
sl@0
  4389
			iCaptureKey = wg->CaptureKey(EKeyDevice0, 0, 0);
sl@0
  4390
			TEST(iCaptureKey >= 0);
sl@0
  4391
			iQueueClient->iWs.Flush();
sl@0
  4392
			iTest->SimulateKeyDownUp(EStdKeyDevice1);
sl@0
  4393
			TheClient->iWs.Flush();
sl@0
  4394
			AddExpectedKey(EEventKeyDown, EStdKeyDevice1, 0, 0);
sl@0
  4395
			AddExpectedKey(EEventKey, EStdKeyDevice1, EKeyDevice0, 0);
sl@0
  4396
			AddExpectedKey(EEventKeyUp, EStdKeyDevice1, 0, 0);
sl@0
  4397
			wg->CancelCaptureKey(iCaptureKey);
sl@0
  4398
			break;
sl@0
  4399
		case 2:
sl@0
  4400
			// Test key event translation using CaptureKeyUpAndDowns()
sl@0
  4401
			iCaptureKey = wg->CaptureKeyUpAndDowns(EStdKeyDevice0, 0, 0);
sl@0
  4402
			TEST(iCaptureKey >= 0);
sl@0
  4403
			iQueueClient->iWs.Flush();
sl@0
  4404
			iTest->SimulateKeyDownUp(EStdKeyDevice1);
sl@0
  4405
			TheClient->iWs.Flush();
sl@0
  4406
			AddExpectedKey(EEventKeyDown, EStdKeyDevice0, 0, 0);
sl@0
  4407
			AddExpectedKey(EEventKey, EStdKeyDevice1, EKeyDevice1, 0);
sl@0
  4408
			AddExpectedKey(EEventKeyUp, EStdKeyDevice0, 0, 0);
sl@0
  4409
			wg->CancelCaptureKeyUpAndDowns(iCaptureKey);
sl@0
  4410
			break;
sl@0
  4411
		case 3:
sl@0
  4412
			// Test key event translation using CaptureLongKey()
sl@0
  4413
			iCaptureKey = wg->CaptureLongKey(EKeyDevice0, EKeyDevice0, 0, 0, 0, ELongCaptureNormal);
sl@0
  4414
			TEST(iCaptureKey >= 0);
sl@0
  4415
			iQueueClient->iWs.Flush();
sl@0
  4416
sl@0
  4417
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyDevice1);
sl@0
  4418
			TheClient->iWs.Flush();
sl@0
  4419
			User::After(initialTime.Int() + time.Int() / 3);
sl@0
  4420
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyDevice1);
sl@0
  4421
			TheClient->iWs.Flush();
sl@0
  4422
sl@0
  4423
			AddExpectedKey(EEventKeyDown, EStdKeyDevice1, 0, 0);
sl@0
  4424
			AddExpectedKey(EEventKey, EStdKeyDevice1, EKeyDevice1, 0, EModifierAutorepeatable);
sl@0
  4425
			AddExpectedKey(EEventKey, EStdKeyDevice1, EKeyDevice0, 1, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4426
			AddExpectedKey(EEventKeyUp, EStdKeyDevice1, 0, 0);
sl@0
  4427
sl@0
  4428
			wg->CancelCaptureLongKey(iCaptureKey);
sl@0
  4429
			break;
sl@0
  4430
		case 4:
sl@0
  4431
			// Negative test: check that the capture key code listed in the
sl@0
  4432
			// translation table of the Key Routing Plug-in is not translated
sl@0
  4433
			// in the absence of any capture request for the mapped key.
sl@0
  4434
			iTest->SimulateKeyDownUp(EStdKeyDevice1);
sl@0
  4435
			TheClient->iWs.Flush();
sl@0
  4436
			AddExpectedKey(EEventKeyDown, EStdKeyDevice1, 0, 0);
sl@0
  4437
			AddExpectedKey(EEventKey, EStdKeyDevice1, EKeyDevice1, 0);
sl@0
  4438
			AddExpectedKey(EEventKeyUp, EStdKeyDevice1, 0, 0);
sl@0
  4439
			break;
sl@0
  4440
		default:
sl@0
  4441
			CActiveScheduler::Stop();
sl@0
  4442
			break;
sl@0
  4443
		}
sl@0
  4444
sl@0
  4445
	TheClient->iWs.Flush();
sl@0
  4446
	}
sl@0
  4447
sl@0
  4448
void CTEventTest::KeyEventBlocking_NextSetOfEventsL()
sl@0
  4449
	{
sl@0
  4450
	TTimeIntervalMicroSeconds32 initialTime;
sl@0
  4451
	TTimeIntervalMicroSeconds32 time;
sl@0
  4452
	TheClient->iWs.GetKeyboardRepeatRate(initialTime, time);
sl@0
  4453
sl@0
  4454
	RWindowGroup* wg = iQueueClient->iGroup->GroupWin();
sl@0
  4455
sl@0
  4456
	#if defined(LOGGING)
sl@0
  4457
		TLogMessageText logMessageText;
sl@0
  4458
		_LIT(KSet,"KeyEventBlocking SetOfEvents: %d of 5");
sl@0
  4459
		logMessageText.Format(KSet,iEventSet);
sl@0
  4460
		INFO_PRINTF1(logMessageText);
sl@0
  4461
	#endif
sl@0
  4462
sl@0
  4463
	switch (iEventSet++)
sl@0
  4464
		{
sl@0
  4465
		case 0:
sl@0
  4466
			iQueueClient->iWs.Flush();
sl@0
  4467
			iTest->SimulateKeyDownUp('A');
sl@0
  4468
			AddExpectedEvent(EEventFocusGained);
sl@0
  4469
			AddExpectedKeyDownUp('A','a');
sl@0
  4470
			break;
sl@0
  4471
		case 1:
sl@0
  4472
			// Simulate pressing a blocked key (Device3) while no
sl@0
  4473
			// key capture is in effect.
sl@0
  4474
			iTest->SimulateKeyDownUp(EStdKeyDevice3);
sl@0
  4475
			iTest->SimulateKeyDownUp('B');
sl@0
  4476
			TheClient->iWs.Flush();
sl@0
  4477
			AddExpectedKeyDownUp('B','b');
sl@0
  4478
			break;
sl@0
  4479
		case 2:
sl@0
  4480
			// Use RWindowGroup::CaptureKey() to capture EKeyDevice3
sl@0
  4481
			// and simulate pressing the blocked key again.
sl@0
  4482
			iCaptureKey = wg->CaptureKey(EKeyDevice3, 0, 0);
sl@0
  4483
			TEST(iCaptureKey >= 0);
sl@0
  4484
			iQueueClient->iWs.Flush();
sl@0
  4485
			iTest->SimulateKeyDownUp(EStdKeyDevice3);
sl@0
  4486
			iTest->SimulateKeyDownUp('B');
sl@0
  4487
			TheClient->iWs.Flush();
sl@0
  4488
			AddExpectedKey(EEventKey, EStdKeyDevice3, EKeyDevice3, 0);
sl@0
  4489
			AddExpectedKeyDownUp('B','b');
sl@0
  4490
			wg->CancelCaptureKey(iCaptureKey);
sl@0
  4491
			break;
sl@0
  4492
		case 3:
sl@0
  4493
			// Repeat using CaptureKeyUpAndDowns()
sl@0
  4494
			iCaptureKey = wg->CaptureKeyUpAndDowns(EStdKeyDevice3, 0, 0);
sl@0
  4495
			TEST(iCaptureKey >= 0);
sl@0
  4496
			iQueueClient->iWs.Flush();
sl@0
  4497
			iTest->SimulateKeyDownUp(EStdKeyDevice3);
sl@0
  4498
			iTest->SimulateKeyDownUp('B');
sl@0
  4499
			TheClient->iWs.Flush();
sl@0
  4500
			AddExpectedKey(EEventKeyDown, EStdKeyDevice3, 0, 0);
sl@0
  4501
			AddExpectedKey(EEventKeyUp, EStdKeyDevice3, 0, 0);
sl@0
  4502
			AddExpectedKeyDownUp('B','b');
sl@0
  4503
			wg->CancelCaptureKeyUpAndDowns(iCaptureKey);
sl@0
  4504
			break;
sl@0
  4505
		case 4:
sl@0
  4506
			// Repeat using CaptureLongKey()
sl@0
  4507
			iCaptureKey = wg->CaptureLongKey(EKeyDevice3, EKeyDevice3, 0, 0, 0, ELongCaptureNormal);
sl@0
  4508
			TEST(iCaptureKey >= 0);
sl@0
  4509
			iQueueClient->iWs.Flush();
sl@0
  4510
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyDevice3);
sl@0
  4511
			TheClient->iWs.Flush();
sl@0
  4512
			User::After(initialTime.Int() + time.Int() / 3);
sl@0
  4513
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyDevice3);
sl@0
  4514
			iTest->SimulateKeyDownUp('B');
sl@0
  4515
			TheClient->iWs.Flush();
sl@0
  4516
			AddExpectedKey(EEventKey, EStdKeyDevice3, EKeyDevice3, 1, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4517
			AddExpectedKeyDownUp('B','b');
sl@0
  4518
			wg->CancelCaptureLongKey(iCaptureKey);
sl@0
  4519
			break;
sl@0
  4520
		default:
sl@0
  4521
			CActiveScheduler::Stop();
sl@0
  4522
			break;
sl@0
  4523
		}
sl@0
  4524
sl@0
  4525
	TheClient->iWs.Flush();
sl@0
  4526
	}
sl@0
  4527
sl@0
  4528
void CTEventTest::KeyEventAppRestriction_NextSetOfEventsL()
sl@0
  4529
	{
sl@0
  4530
	TTimeIntervalMicroSeconds32 initialTime;
sl@0
  4531
	TTimeIntervalMicroSeconds32 time;
sl@0
  4532
	TheClient->iWs.GetKeyboardRepeatRate(initialTime, time);
sl@0
  4533
sl@0
  4534
	RWindowGroup* wg = iQueueClient->iGroup->GroupWin();
sl@0
  4535
sl@0
  4536
	#if defined(LOGGING)
sl@0
  4537
		TLogMessageText logMessageText;
sl@0
  4538
		_LIT(KSet,"KeyEventAppRestriction SetOfEvents: %d of 4");
sl@0
  4539
		logMessageText.Format(KSet,iEventSet);
sl@0
  4540
		INFO_PRINTF1(logMessageText);
sl@0
  4541
	#endif
sl@0
  4542
sl@0
  4543
	switch (iEventSet++)
sl@0
  4544
		{
sl@0
  4545
		case 0:
sl@0
  4546
			// Make window group non-focusable so that it receives only
sl@0
  4547
			// keys that are captured and not those that are default-routed.
sl@0
  4548
			wg->EnableReceiptOfFocus(EFalse);
sl@0
  4549
			iQueueClient->iWs.Flush();
sl@0
  4550
			AddExpectedEvent(EEventFocusGained);
sl@0
  4551
			AddExpectedEvent(EEventFocusLost);
sl@0
  4552
			break;
sl@0
  4553
		case 1:
sl@0
  4554
			// Using RWindowGroup::CaptureKey(), attempt to capture a key
sl@0
  4555
			// that is restricted by UID to another application.
sl@0
  4556
			iCaptureKey = wg->CaptureKey(EKeyF20, 0, 0);
sl@0
  4557
			TEST(iCaptureKey == KErrPermissionDenied);
sl@0
  4558
			// Now capture a key that is restricted to the current
sl@0
  4559
			// application's UID and simulate pressing the restricted key.
sl@0
  4560
			iCaptureKey = wg->CaptureKey(EKeyF21, 0, 0);
sl@0
  4561
			TEST(iCaptureKey >= 0);
sl@0
  4562
			iQueueClient->iWs.Flush();
sl@0
  4563
			// Can't use SimulateKeyDownUp() here due to its check that scan
sl@0
  4564
			// codes are not in the range corresponding to lower case letters
sl@0
  4565
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF21);
sl@0
  4566
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF21);
sl@0
  4567
			TheClient->iWs.Flush();
sl@0
  4568
			AddExpectedKey(EEventKey, EStdKeyF21, EKeyF21, 0);
sl@0
  4569
			wg->CancelCaptureKey(iCaptureKey);
sl@0
  4570
			break;
sl@0
  4571
		case 2:
sl@0
  4572
			// Repeat using CaptureKeyUpAndDowns()
sl@0
  4573
			iCaptureKey = wg->CaptureKeyUpAndDowns(EStdKeyF20, 0, 0);
sl@0
  4574
			TEST(iCaptureKey == KErrPermissionDenied);
sl@0
  4575
			iCaptureKey = wg->CaptureKeyUpAndDowns(EStdKeyF21, 0, 0);
sl@0
  4576
			TEST(iCaptureKey >= 0);
sl@0
  4577
			iQueueClient->iWs.Flush();
sl@0
  4578
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF21);
sl@0
  4579
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF21);
sl@0
  4580
			TheClient->iWs.Flush();
sl@0
  4581
			AddExpectedKey(EEventKeyDown, EStdKeyF21, 0, 0);
sl@0
  4582
			AddExpectedKey(EEventKeyUp, EStdKeyF21, 0, 0);
sl@0
  4583
			wg->CancelCaptureKeyUpAndDowns(iCaptureKey);
sl@0
  4584
			break;
sl@0
  4585
		case 3:
sl@0
  4586
			// Repeat using CaptureLongKey()
sl@0
  4587
			iCaptureKey = wg->CaptureLongKey(EKeyF20, EKeyF20, 0, 0, 0, ELongCaptureNormal);
sl@0
  4588
			TEST(iCaptureKey == KErrPermissionDenied);
sl@0
  4589
			iCaptureKey = wg->CaptureLongKey(EKeyF21, EKeyF21, 0, 0, 0, ELongCaptureNormal);
sl@0
  4590
			TEST(iCaptureKey >= 0);
sl@0
  4591
			iQueueClient->iWs.Flush();
sl@0
  4592
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF21);
sl@0
  4593
			TheClient->iWs.Flush();
sl@0
  4594
			User::After(initialTime.Int() + time.Int() / 3);
sl@0
  4595
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF21);
sl@0
  4596
			TheClient->iWs.Flush();
sl@0
  4597
			AddExpectedKey(EEventKey, EStdKeyF21, EKeyF21, 1, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4598
			wg->CancelCaptureLongKey(iCaptureKey);
sl@0
  4599
			break;
sl@0
  4600
		default:
sl@0
  4601
			CActiveScheduler::Stop();
sl@0
  4602
			break;
sl@0
  4603
		}
sl@0
  4604
sl@0
  4605
	TheClient->iWs.Flush();
sl@0
  4606
	}
sl@0
  4607
sl@0
  4608
void CTEventTest::KeyEventAppPriority_NextSetOfEventsL()
sl@0
  4609
	{
sl@0
  4610
	TTimeIntervalMicroSeconds32 initialTime;
sl@0
  4611
	TTimeIntervalMicroSeconds32 time;
sl@0
  4612
	TheClient->iWs.GetKeyboardRepeatRate(initialTime, time);
sl@0
  4613
sl@0
  4614
	RWindowGroup* wg = iQueueClient->iGroup->GroupWin();
sl@0
  4615
	TInt handle1 = 0;
sl@0
  4616
	TInt handle2 = 0;
sl@0
  4617
	TInt handle3 = 0;
sl@0
  4618
	TInt handle4 = 0;
sl@0
  4619
	TInt handle5 = 0;
sl@0
  4620
	TInt handle6 = 0;
sl@0
  4621
sl@0
  4622
	#if defined(LOGGING)
sl@0
  4623
		TLogMessageText logMessageText;
sl@0
  4624
		_LIT(KSet,"KeyEventAppPriority SetOfEvents: %d of 5");
sl@0
  4625
		logMessageText.Format(KSet,iEventSet);
sl@0
  4626
		INFO_PRINTF1(logMessageText);
sl@0
  4627
	#endif
sl@0
  4628
sl@0
  4629
	switch (iEventSet++)
sl@0
  4630
		{
sl@0
  4631
		case 0:
sl@0
  4632
			SpawnCaptureAppL(iCaptureApp1);
sl@0
  4633
			iQueueClient->iWs.Flush();
sl@0
  4634
			AddExpectedEvent(EEventFocusGained);
sl@0
  4635
			AddExpectedEvent(EEventFocusLost);
sl@0
  4636
			break;
sl@0
  4637
		case 1:
sl@0
  4638
			// Use RWindowGroup::CaptureKey() to capture EKeyF22
sl@0
  4639
			// and EKeyF23 with priority 0. Simulate pressing both
sl@0
  4640
			// keys. Since the current application has precedence by UID
sl@0
  4641
			// for capture of EKeyF22, it should receive that key
sl@0
  4642
			// but should not receive EKeyF23.
sl@0
  4643
			handle1 = wg->CaptureKey(EKeyF22, 0, 0);
sl@0
  4644
			handle2 = wg->CaptureKey(EKeyF23, 0, 0);
sl@0
  4645
			TEST(handle1 >= 0);
sl@0
  4646
			TEST(handle2 >= 0);
sl@0
  4647
			iQueueClient->iWs.Flush();
sl@0
  4648
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF22);
sl@0
  4649
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF22);
sl@0
  4650
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF23);
sl@0
  4651
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF23);
sl@0
  4652
			TheClient->iWs.Flush();
sl@0
  4653
			AddExpectedKey(EEventKey, EStdKeyF22, EKeyF22, 0);
sl@0
  4654
			wg->CancelCaptureKey(handle1);
sl@0
  4655
			wg->CancelCaptureKey(handle2);
sl@0
  4656
			break;
sl@0
  4657
		case 2:
sl@0
  4658
			// Repeat using CaptureKeyUpAndDowns()
sl@0
  4659
			handle1 = wg->CaptureKeyUpAndDowns(EStdKeyF22, 0, 0);
sl@0
  4660
			handle2 = wg->CaptureKeyUpAndDowns(EStdKeyF23, 0, 0);
sl@0
  4661
			TEST(handle1 >= 0);
sl@0
  4662
			TEST(handle2 >= 0);
sl@0
  4663
			iQueueClient->iWs.Flush();
sl@0
  4664
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF22);
sl@0
  4665
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF22);
sl@0
  4666
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF23);
sl@0
  4667
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF23);
sl@0
  4668
			TheClient->iWs.Flush();
sl@0
  4669
			AddExpectedKey(EEventKeyDown, EStdKeyF22, 0, 0);
sl@0
  4670
			AddExpectedKey(EEventKeyUp, EStdKeyF22, 0, 0);
sl@0
  4671
			wg->CancelCaptureKeyUpAndDowns(handle1);
sl@0
  4672
			wg->CancelCaptureKeyUpAndDowns(handle2);
sl@0
  4673
			break;
sl@0
  4674
		case 3:
sl@0
  4675
			// Repeat using CaptureLongKey()
sl@0
  4676
			handle1 = wg->CaptureLongKey(EKeyF22, EKeyF22, 0, 0, 0, ELongCaptureNormal);
sl@0
  4677
			handle2 = wg->CaptureLongKey(EKeyF23, EKeyF23, 0, 0, 0, ELongCaptureNormal);
sl@0
  4678
			TEST(handle1 >= 0);
sl@0
  4679
			TEST(handle2 >= 0);
sl@0
  4680
			iQueueClient->iWs.Flush();
sl@0
  4681
sl@0
  4682
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF22);
sl@0
  4683
			TheClient->iWs.Flush();
sl@0
  4684
			User::After(initialTime.Int() + time.Int() / 3);
sl@0
  4685
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF22);
sl@0
  4686
sl@0
  4687
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF23);
sl@0
  4688
			TheClient->iWs.Flush();
sl@0
  4689
			User::After(initialTime.Int() + time.Int() / 3);
sl@0
  4690
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF23);
sl@0
  4691
			TheClient->iWs.Flush();
sl@0
  4692
sl@0
  4693
			AddExpectedKey(EEventKey, EStdKeyF22, EKeyF22, 1, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4694
			wg->CancelCaptureLongKey(handle1);
sl@0
  4695
			wg->CancelCaptureLongKey(handle2);
sl@0
  4696
			break;
sl@0
  4697
		case 4:
sl@0
  4698
			// Repeat with additional capture requests for improved code
sl@0
  4699
			// coverage. (Also verifies that UID-based precedence works even
sl@0
  4700
			// when another app makes the most recent capture request.)
sl@0
  4701
			// Spawn a second capture app so that requests occur in the
sl@0
  4702
			// following order:
sl@0
  4703
			// 1. CaptureApp1, priority 1 (outstanding)
sl@0
  4704
			// 2. Current App, priority 0, precedence by UID
sl@0
  4705
			// 3. CaptureApp2, priority 1
sl@0
  4706
			// Note that all three capture types are tested together here.
sl@0
  4707
			handle1 = wg->CaptureKey(EKeyF22, 0, 0);
sl@0
  4708
			handle2 = wg->CaptureKey(EKeyF23, 0, 0);
sl@0
  4709
			handle3 = wg->CaptureKeyUpAndDowns(EStdKeyF22, 0, 0);
sl@0
  4710
			handle4 = wg->CaptureKeyUpAndDowns(EStdKeyF23, 0, 0);
sl@0
  4711
			handle5 = wg->CaptureLongKey(EKeyF22, EKeyF22, 0, 0, 0, ELongCaptureNormal);
sl@0
  4712
			handle6 = wg->CaptureLongKey(EKeyF23, EKeyF23, 0, 0, 0, ELongCaptureNormal);
sl@0
  4713
			TEST(handle1 >= 0);
sl@0
  4714
			TEST(handle2 >= 0);
sl@0
  4715
			TEST(handle3 >= 0);
sl@0
  4716
			TEST(handle4 >= 0);
sl@0
  4717
			TEST(handle5 >= 0);
sl@0
  4718
			TEST(handle6 >= 0);
sl@0
  4719
			iQueueClient->iWs.Flush();
sl@0
  4720
sl@0
  4721
			SpawnCaptureAppL(iCaptureApp2);
sl@0
  4722
sl@0
  4723
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF22);
sl@0
  4724
			TheClient->iWs.Flush();
sl@0
  4725
			User::After(initialTime.Int() + time.Int() / 3);
sl@0
  4726
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF22);
sl@0
  4727
sl@0
  4728
			iTest->SimulateKey(TRawEvent::EKeyDown, EStdKeyF23);
sl@0
  4729
			TheClient->iWs.Flush();
sl@0
  4730
			User::After(initialTime.Int() + time.Int() / 3);
sl@0
  4731
			iTest->SimulateKey(TRawEvent::EKeyUp, EStdKeyF23);
sl@0
  4732
			TheClient->iWs.Flush();
sl@0
  4733
sl@0
  4734
			AddExpectedKey(EEventKeyDown, EStdKeyF22, 0, 0);
sl@0
  4735
			AddExpectedKey(EEventKey, EStdKeyF22, EKeyF22, 0);
sl@0
  4736
			AddExpectedKey(EEventKey, EStdKeyF22, EKeyF22, 1, EModifierLongKey | EModifierAutorepeatable);
sl@0
  4737
			AddExpectedKey(EEventKeyUp, EStdKeyF22, 0, 0);
sl@0
  4738
			wg->CancelCaptureKey(handle1);
sl@0
  4739
			wg->CancelCaptureKey(handle2);
sl@0
  4740
			wg->CancelCaptureKeyUpAndDowns(handle3);
sl@0
  4741
			wg->CancelCaptureKeyUpAndDowns(handle4);
sl@0
  4742
			wg->CancelCaptureLongKey(handle5);
sl@0
  4743
			wg->CancelCaptureLongKey(handle6);
sl@0
  4744
			break;
sl@0
  4745
		default:
sl@0
  4746
			iCaptureApp1.Kill(KErrNone);
sl@0
  4747
			iCaptureApp2.Kill(KErrNone);
sl@0
  4748
			iCaptureApp1.Close();
sl@0
  4749
			iCaptureApp2.Close();
sl@0
  4750
			CActiveScheduler::Stop();
sl@0
  4751
			break;
sl@0
  4752
		}
sl@0
  4753
sl@0
  4754
	TheClient->iWs.Flush();
sl@0
  4755
	}
sl@0
  4756
sl@0
  4757
/**
sl@0
  4758
Spawn another application that will capture the keys EKeyF22 and
sl@0
  4759
EKeyF23 with high priority.
sl@0
  4760
sl@0
  4761
@param aProcess		Process to create
sl@0
  4762
*/
sl@0
  4763
void CTEventTest::SpawnCaptureAppL(RProcess& aProcess)
sl@0
  4764
	{
sl@0
  4765
	_LIT(KCaptureApp, "tevent_captureapp.exe");
sl@0
  4766
	TInt error = aProcess.Create(KCaptureApp, KNullDesC);
sl@0
  4767
	if (error != KErrNone)
sl@0
  4768
		{
sl@0
  4769
#if defined(LOGGING)
sl@0
  4770
		TLogMessageText logMessageText;
sl@0
  4771
		_LIT(KLog, "Cannot create capture app - error %d");
sl@0
  4772
		logMessageText.Format(KLog, error);
sl@0
  4773
		INFO_PRINTF1(logMessageText);
sl@0
  4774
#endif
sl@0
  4775
		User::Leave(error);
sl@0
  4776
		}
sl@0
  4777
sl@0
  4778
	// Make rendezvous request to capture app
sl@0
  4779
	TRequestStatus status;
sl@0
  4780
	aProcess.Rendezvous(status);
sl@0
  4781
	aProcess.Resume();
sl@0
  4782
sl@0
  4783
	// Wait for capture app to make its capture requests
sl@0
  4784
	User::WaitForRequest(status);
sl@0
  4785
	TEST(status.Int() == KErrNone);
sl@0
  4786
	}
sl@0
  4787
#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA  	
sl@0
  4788
sl@0
  4789
#define PASSWORD_START_OF_DAY 4
sl@0
  4790
void CTEventTest::Password_NextSetOfEvents()
sl@0
  4791
	{
sl@0
  4792
	switch(iEventSet++)
sl@0
  4793
		{
sl@0
  4794
		case 0:
sl@0
  4795
			iQueueClient->iWin->BaseWin()->PasswordWindow(EPasswordAlwaysTriggerNow);
sl@0
  4796
			iQueueClient->iWs.PasswordEntered();
sl@0
  4797
			iTest->SimulateKeyDownUp('2');
sl@0
  4798
			iQueueClient->iWs.Flush();
sl@0
  4799
			AddExpectedEvent(EEventFocusGained);
sl@0
  4800
			AddExpectedEvent(EEventPassword);
sl@0
  4801
			AddExpectedKeyDownUp('2');
sl@0
  4802
			break;
sl@0
  4803
		case 1:
sl@0
  4804
			iQueueClient->iWin->BaseWin()->PasswordWindow(EPasswordOnceADayTriggerNow);
sl@0
  4805
			iQueueClient->iWs.PasswordEntered();
sl@0
  4806
			iTest->SimulateKeyDownUp('3');
sl@0
  4807
			iQueueClient->iWs.Flush();
sl@0
  4808
			AddExpectedEvent(EEventPassword);
sl@0
  4809
			AddExpectedKeyDownUp('3');
sl@0
  4810
			break;
sl@0
  4811
		case 2:
sl@0
  4812
			{
sl@0
  4813
			TTime time;
sl@0
  4814
			time.HomeTime();
sl@0
  4815
			TInt day=time.DayNoInMonth();
sl@0
  4816
			if (day==0)
sl@0
  4817
				day=5;
sl@0
  4818
			time-=TTimeIntervalDays(day);
sl@0
  4819
			time+=TTimeIntervalHours(PASSWORD_START_OF_DAY);
sl@0
  4820
			User::SetHomeTime(time);
sl@0
  4821
			iQueueClient->iWin->BaseWin()->PasswordWindow(EPasswordOnceADayTriggerNow);
sl@0
  4822
			iQueueClient->iWs.PasswordEntered();
sl@0
  4823
			iTest->SimulateKeyDownUp('3');
sl@0
  4824
			iQueueClient->iWs.Flush();
sl@0
  4825
			AddExpectedEvent(EEventPassword);
sl@0
  4826
			AddExpectedKeyDownUp('3');
sl@0
  4827
			time+=TTimeIntervalDays(day);
sl@0
  4828
			time-=TTimeIntervalHours(PASSWORD_START_OF_DAY);
sl@0
  4829
			User::SetHomeTime(time);
sl@0
  4830
			}
sl@0
  4831
			break;
sl@0
  4832
		case 3:
sl@0
  4833
			{
sl@0
  4834
			TTime time;
sl@0
  4835
			time.HomeTime();
sl@0
  4836
			TInt day=time.DayNoInMonth();
sl@0
  4837
			time-=TTimeIntervalDays(day);
sl@0
  4838
			time+=TTimeIntervalHours(PASSWORD_START_OF_DAY);
sl@0
  4839
			User::SetHomeTime(time);
sl@0
  4840
			iQueueClient->iWin->BaseWin()->PasswordWindow(EPasswordOnceADay);
sl@0
  4841
			iQueueClient->iWs.PasswordEntered();
sl@0
  4842
			iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
  4843
			iTest->SimulateKeyDownUp('3');
sl@0
  4844
			iQueueClient->iWs.Flush();
sl@0
  4845
			AddExpectedEvent(EEventPassword);
sl@0
  4846
			AddExpectedEvent(EEventSwitchOn);
sl@0
  4847
			AddExpectedKeyDownUp('3');
sl@0
  4848
			time+=TTimeIntervalDays(day);
sl@0
  4849
			time-=TTimeIntervalHours(PASSWORD_START_OF_DAY);
sl@0
  4850
			User::SetHomeTime(time);
sl@0
  4851
			}
sl@0
  4852
			break;
sl@0
  4853
		default:
sl@0
  4854
			CActiveScheduler::Stop();
sl@0
  4855
			break;
sl@0
  4856
		}
sl@0
  4857
	TheClient->iWs.Flush();
sl@0
  4858
	}
sl@0
  4859
sl@0
  4860
void CTEventTest::GroupListChanged_NextSetOfEventsL()
sl@0
  4861
	{
sl@0
  4862
	_LIT(WindowGroup1,"WindowGroupName1");
sl@0
  4863
	_LIT(WindowGroup2,"WindowGroupName2");
sl@0
  4864
	switch(iEventSet++)
sl@0
  4865
		{
sl@0
  4866
		case 0:
sl@0
  4867
			{
sl@0
  4868
			_LIT(TestGroup3,"GroupListEvents3");
sl@0
  4869
			iQueueClient->EnableGroupListChangeEvents();
sl@0
  4870
			iEventTestGroup3=new(ELeave) CTWindowGroup(TheClient);
sl@0
  4871
			iEventTestGroup3->ConstructL();
sl@0
  4872
			iEventTestGroup3->GroupWin()->SetName(TestGroup3);
sl@0
  4873
			AddExpectedEvent(EEventFocusGained);
sl@0
  4874
			AddExpectedEvent(EEventFocusLost);
sl@0
  4875
			AddExpectedEvent(EEventWindowGroupListChanged);
sl@0
  4876
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4877
			}
sl@0
  4878
			break;
sl@0
  4879
		case 1:
sl@0
  4880
			{
sl@0
  4881
			_LIT(TestGroup4,"GroupListEvents4");
sl@0
  4882
			iEventTestGroup4=new(ELeave) CTWindowGroup(TheClient);
sl@0
  4883
			iEventTestGroup4->ConstructL();
sl@0
  4884
			iEventTestGroup4->GroupWin()->SetName(TestGroup4);
sl@0
  4885
			AddExpectedEvent(EEventWindowGroupListChanged);
sl@0
  4886
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4887
			}
sl@0
  4888
			break;
sl@0
  4889
		case 2:
sl@0
  4890
			iEventTestGroup3->GroupWin()->SetOrdinalPosition(0);
sl@0
  4891
			AddExpectedEvent(EEventWindowGroupListChanged);
sl@0
  4892
			break;
sl@0
  4893
		case 3:
sl@0
  4894
			iEventTestGroup3->GroupWin()->SetOrdinalPosition(999);
sl@0
  4895
			AddExpectedEvent(EEventWindowGroupListChanged);
sl@0
  4896
			break;
sl@0
  4897
		case 4:
sl@0
  4898
			iEventTestGroup4->GroupWin()->SetOrdinalPosition(999);
sl@0
  4899
			AddExpectedEvent(EEventFocusGained);
sl@0
  4900
			AddExpectedEvent(EEventWindowGroupListChanged);
sl@0
  4901
            // Testcase for defect INC135635
sl@0
  4902
			// Since iWin has OrdinalPosition Zero (the front) clicking on it won't generate an 
sl@0
  4903
			// EEventWindowGroupListChanged event as there is no change in the order of the windows
sl@0
  4904
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(20-EWinPositionX,11-EWinPositionY));
sl@0
  4905
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(20-EWinPositionX,11-EWinPositionY));
sl@0
  4906
			SimulatePointer(TRawEvent::EButton1Down,20,11);
sl@0
  4907
			SimulatePointer(TRawEvent::EButton1Up,20,11);
sl@0
  4908
			break;
sl@0
  4909
		case 5:
sl@0
  4910
			iEventTestGroup3->GroupWin()->SetOrdinalPosition(999);
sl@0
  4911
			AddExpectedEvent(EEventWindowGroupListChanged);
sl@0
  4912
			break;
sl@0
  4913
		case 6:
sl@0
  4914
			iEventTestGroup3->GroupWin()->SetOrdinalPosition(99);
sl@0
  4915
			SimulatePointer(TRawEvent::EButton1Down,20,11);
sl@0
  4916
			iEventTestGroup3->GroupWin()->SetName(WindowGroup1);
sl@0
  4917
			AddExpectedPointer(TPointerEvent::EButton1Down, TPoint(20-EWinPositionX,11-EWinPositionY));
sl@0
  4918
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4919
			break;
sl@0
  4920
		case 7:
sl@0
  4921
			iEventTestGroup3->GroupWin()->SetName(WindowGroup2);
sl@0
  4922
			SimulatePointer(TRawEvent::EButton1Up,10,20);
sl@0
  4923
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4924
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(10-EWinPositionX,20-EWinPositionY));
sl@0
  4925
			break;
sl@0
  4926
		case 8:
sl@0
  4927
			iEventTestGroup3->GroupWin()->SetName(WindowGroup1);
sl@0
  4928
			SimulatePointer(TRawEvent::EButton2Down,20,30);
sl@0
  4929
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4930
			AddExpectedPointer(TPointerEvent::EButton2Down, TPoint(20-EWinPositionX,30-EWinPositionY));
sl@0
  4931
			break;
sl@0
  4932
		case 9:
sl@0
  4933
			SimulatePointer(TRawEvent::EButton1Up,15,15);
sl@0
  4934
			iEventTestGroup3->GroupWin()->SetName(WindowGroup2);
sl@0
  4935
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(15-EWinPositionX,15-EWinPositionY));
sl@0
  4936
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4937
			break;
sl@0
  4938
		case 10:
sl@0
  4939
			SimulatePointer(TRawEvent::EButton2Down,25,20);
sl@0
  4940
			iEventTestGroup3->GroupWin()->SetName(WindowGroup2);
sl@0
  4941
			SimulatePointer(TRawEvent::EButton1Up,15,20);
sl@0
  4942
			iEventTestGroup3->GroupWin()->SetName(WindowGroup1);
sl@0
  4943
			AddExpectedPointer(TPointerEvent::EButton2Down, TPoint(25-EWinPositionX,20-EWinPositionY));
sl@0
  4944
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(15-EWinPositionX,20-EWinPositionY));
sl@0
  4945
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4946
			break;
sl@0
  4947
		case 11:
sl@0
  4948
			iEventTestGroup3->GroupWin()->SetName(WindowGroup1);
sl@0
  4949
			SimulatePointer(TRawEvent::EButton2Down,12,12);
sl@0
  4950
			iEventTestGroup3->GroupWin()->SetName(WindowGroup2);
sl@0
  4951
			SimulatePointer(TRawEvent::EButton1Up,12,12);
sl@0
  4952
			AddExpectedPointer(TPointerEvent::EButton2Down, TPoint(12-EWinPositionX,12-EWinPositionY));
sl@0
  4953
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4954
			AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(12-EWinPositionX,12-EWinPositionY));
sl@0
  4955
			break;
sl@0
  4956
		case 12:
sl@0
  4957
			delete iEventTestGroup3;
sl@0
  4958
			iEventTestGroup3=NULL;
sl@0
  4959
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4960
			AddExpectedEvent(EEventWindowGroupListChanged);
sl@0
  4961
			break;
sl@0
  4962
		case 13:
sl@0
  4963
			delete iEventTestGroup4;
sl@0
  4964
			iEventTestGroup4=NULL;
sl@0
  4965
			AddExpectedEvent(EEventWindowGroupsChanged);
sl@0
  4966
			AddExpectedEvent(EEventWindowGroupListChanged);
sl@0
  4967
			break;
sl@0
  4968
		default:
sl@0
  4969
			CActiveScheduler::Stop();
sl@0
  4970
			break;
sl@0
  4971
		}
sl@0
  4972
	TheClient->iWs.Flush();
sl@0
  4973
	}
sl@0
  4974
sl@0
  4975
TInt CTEventTest::KeyRepeatTime() const
sl@0
  4976
	{
sl@0
  4977
	TTimeIntervalMicroSeconds32 initialTime;
sl@0
  4978
	TTimeIntervalMicroSeconds32 time;
sl@0
  4979
	TheClient->iWs.GetKeyboardRepeatRate(initialTime,time);
sl@0
  4980
	return(initialTime.Int());
sl@0
  4981
	}
sl@0
  4982
sl@0
  4983
void CTEventTest::RepeatableKeysL()
sl@0
  4984
	{
sl@0
  4985
	// repeatable key event
sl@0
  4986
	TKeyEvent repKeyEvent; 
sl@0
  4987
	repKeyEvent.iCode='J';
sl@0
  4988
	repKeyEvent.iScanCode=0;
sl@0
  4989
	repKeyEvent.iModifiers=EModifierAutorepeatable;
sl@0
  4990
	repKeyEvent.iRepeats=0;
sl@0
  4991
	
sl@0
  4992
	// non-repeatable key event
sl@0
  4993
	TKeyEvent keyEvent; 
sl@0
  4994
	keyEvent.iCode='J';
sl@0
  4995
	keyEvent.iScanCode=0;
sl@0
  4996
	keyEvent.iModifiers=0;
sl@0
  4997
	keyEvent.iRepeats=0;
sl@0
  4998
	
sl@0
  4999
	switch(iEventSet++)
sl@0
  5000
		{
sl@0
  5001
		case 0:
sl@0
  5002
			{
sl@0
  5003
			TheClient->iWs.SimulateKeyEvent(repKeyEvent);	// Create a repeatable key event
sl@0
  5004
			TheClient->iWs.SimulateKeyEvent(repKeyEvent);	// Create a repeatable key event
sl@0
  5005
			TheClient->iWs.SimulateKeyEvent(keyEvent);		// Create a non-repeatable key event
sl@0
  5006
			TheClient->iWs.Flush();							// Send events
sl@0
  5007
			AddExpectedEvent(EEventFocusGained);			// Always get a focus gain at start
sl@0
  5008
			AddExpectedKey(1, repKeyEvent.iScanCode, repKeyEvent.iCode, repKeyEvent.iRepeats, repKeyEvent.iModifiers);// Expect the event that was created above
sl@0
  5009
			AddExpectedKey(1, repKeyEvent.iScanCode, repKeyEvent.iCode, repKeyEvent.iRepeats, repKeyEvent.iModifiers);// Expect the event that was created above
sl@0
  5010
			AddExpectedKey(1, keyEvent.iScanCode, keyEvent.iCode, keyEvent.iRepeats, keyEvent.iModifiers);// Expect the event that was created above
sl@0
  5011
			break;
sl@0
  5012
			}
sl@0
  5013
		case 1:
sl@0
  5014
			{
sl@0
  5015
			TheClient->iWs.SimulateKeyEvent(repKeyEvent);	// Create a repeatable key event
sl@0
  5016
			TheClient->iWs.SimulateKeyEvent(keyEvent);		// Create a non-repeatable key event
sl@0
  5017
			TheClient->iWs.Flush();
sl@0
  5018
			iTest->SimulateKey(TRawEvent::EKeyDown, 'A');	// Create a raw event
sl@0
  5019
			TheClient->iWs.Flush();
sl@0
  5020
			User::After(KeyRepeatTime()*3/2);
sl@0
  5021
			iTest->SimulateKey(TRawEvent::EKeyUp, 'A');		// Create a raw event
sl@0
  5022
			TheClient->iWs.Flush();
sl@0
  5023
			AddExpectedKey(1, repKeyEvent.iScanCode, repKeyEvent.iCode, repKeyEvent.iRepeats, repKeyEvent.iModifiers);// Expect the event that was created above
sl@0
  5024
			AddExpectedKey(1, keyEvent.iScanCode, keyEvent.iCode, keyEvent.iRepeats, keyEvent.iModifiers);// Expect the event that was created above
sl@0
  5025
			AddExpectedKey(EEventKeyDown, 'A');
sl@0
  5026
			AddExpectedKey(EEventKey,'A','a');
sl@0
  5027
			AddExpectedKey(EEventKey,'A','a',1);
sl@0
  5028
			AddExpectedKey(EEventKeyUp, 'A');
sl@0
  5029
			break;
sl@0
  5030
			}
sl@0
  5031
		case 2:
sl@0
  5032
			{
sl@0
  5033
			iTest->SimulateKey(TRawEvent::EKeyDown, 'A');	// Create a raw event
sl@0
  5034
			TheClient->iWs.Flush();
sl@0
  5035
			User::After(KeyRepeatTime()*3/2);
sl@0
  5036
			TheClient->iWs.SimulateKeyEvent(repKeyEvent);	// Create a repeatable key event
sl@0
  5037
			TheClient->iWs.SimulateKeyEvent(keyEvent);		// Create a non-repeatable key event
sl@0
  5038
			TheClient->iWs.Flush();							// Send event
sl@0
  5039
			iTest->SimulateKey(TRawEvent::EKeyUp, 'A');		// Create a raw event
sl@0
  5040
			TheClient->iWs.Flush();
sl@0
  5041
			AddExpectedKey(EEventKeyDown, 'A');
sl@0
  5042
			AddExpectedKey(EEventKey,'A','a');
sl@0
  5043
			AddExpectedKey(EEventKey,'A','a',1);
sl@0
  5044
			AddExpectedKey(1, repKeyEvent.iScanCode, repKeyEvent.iCode, repKeyEvent.iRepeats, repKeyEvent.iModifiers);// Expect the event that was created above
sl@0
  5045
			AddExpectedKey(1, keyEvent.iScanCode, keyEvent.iCode, keyEvent.iRepeats, keyEvent.iModifiers);// Expect the event that was created above
sl@0
  5046
			AddExpectedKey(EEventKeyUp, 'A');
sl@0
  5047
			break;
sl@0
  5048
			}
sl@0
  5049
		default:
sl@0
  5050
			CActiveScheduler::Stop();
sl@0
  5051
			break;
sl@0
  5052
		}
sl@0
  5053
	TheClient->iWs.Flush();
sl@0
  5054
	}
sl@0
  5055
sl@0
  5056
CTBlankWindow* CTEventTest::NewBlueForgroundWindowL()
sl@0
  5057
	{
sl@0
  5058
	CTBlankWindow* window;
sl@0
  5059
	window=new (ELeave) CTBlankWindow;
sl@0
  5060
	CleanupStack::PushL(window);
sl@0
  5061
	window->ConstructL(*iQueueClient->iGroup);
sl@0
  5062
	User::LeaveIfError(window->BaseWin()->SetRequiredDisplayMode(EColor256));
sl@0
  5063
	CleanupStack::Pop(window);
sl@0
  5064
sl@0
  5065
	window->SetColor(KRgbBlue);
sl@0
  5066
	window->SetExt(TPoint(40, 40), TSize(40,40));
sl@0
  5067
	window->BaseWin()->SetOrdinalPosition(0);
sl@0
  5068
	return window;
sl@0
  5069
	}
sl@0
  5070
sl@0
  5071
CTBlankWindow* CTEventTest::NewBlueForgroundWindow()
sl@0
  5072
	{
sl@0
  5073
	CTBlankWindow* window = NULL;
sl@0
  5074
	TRAPD(err, window=NewBlueForgroundWindowL());
sl@0
  5075
	if (err != KErrNone)
sl@0
  5076
		Failed();
sl@0
  5077
	return window;
sl@0
  5078
	}
sl@0
  5079
sl@0
  5080
#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
sl@0
  5081
#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
sl@0
  5082
static void CreateSurfaceAttributes(RSurfaceManager::TSurfaceCreationAttributesBuf& aBuffer , const TSize& aSize)
sl@0
  5083
    {
sl@0
  5084
    RSurfaceManager::TSurfaceCreationAttributes& b = aBuffer();
sl@0
  5085
                
sl@0
  5086
    b.iSize.iWidth = aSize.iWidth;
sl@0
  5087
    b.iSize.iHeight = aSize.iHeight;
sl@0
  5088
    b.iBuffers = 1;              // number of buffers in the surface
sl@0
  5089
    b.iPixelFormat = EUidPixelFormatARGB_8888;
sl@0
  5090
    b.iStride = aSize.iWidth * 4;        // Number of bytes between start of one line and start of next
sl@0
  5091
    b.iOffsetToFirstBuffer = 0; // way of reserving space before the surface pixel data
sl@0
  5092
    b.iAlignment = 4;           // alignment, 1,2,4,8 byte aligned
sl@0
  5093
    b.iContiguous = EFalse;
sl@0
  5094
    b.iMappable = ETrue;
sl@0
  5095
    }
sl@0
  5096
sl@0
  5097
static const TInt KFullyVisible = TWsVisibilityChangedEvent::EPartiallyVisible | TWsVisibilityChangedEvent::EFullyVisible;
sl@0
  5098
sl@0
  5099
void CTEventTest::SurfaceVisibilityChanged1_NextSetOfEventsL()
sl@0
  5100
    {    
sl@0
  5101
    switch(iEventSet++)
sl@0
  5102
        {
sl@0
  5103
        case 0:
sl@0
  5104
            {
sl@0
  5105
            //Setup
sl@0
  5106
            LOG_MESSAGE(_L("case 0"));
sl@0
  5107
            TInt err = iSurfaceManager.Open();
sl@0
  5108
            if (err != KErrNone)
sl@0
  5109
                {
sl@0
  5110
                RDebug::Printf("RSurfaceManager::Open() failed", err);
sl@0
  5111
                User::Leave(err);
sl@0
  5112
                }
sl@0
  5113
            
sl@0
  5114
            iVisWins1=NewBlueForgroundWindowL();
sl@0
  5115
            iVisWins1->Activate();
sl@0
  5116
            iVisWins1->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5117
sl@0
  5118
            AddExpectedEvent(EEventFocusGained);
sl@0
  5119
            AddExpectedVisibilityChange(KFullyVisible, iVisWins1);
sl@0
  5120
            break;
sl@0
  5121
            }
sl@0
  5122
        case 1:
sl@0
  5123
            {
sl@0
  5124
            LOG_MESSAGE(_L("case 1"));
sl@0
  5125
            iVisWins2=NewBlueForgroundWindowL(); // will cover iVisWins1
sl@0
  5126
            iVisWins2->BlankWin()->SetColor();  //remove colour to ensure window does not draw to UI layer
sl@0
  5127
            iVisWins2->Activate();
sl@0
  5128
            
sl@0
  5129
            AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible, iVisWins1);
sl@0
  5130
            break;
sl@0
  5131
            }
sl@0
  5132
        case 2:
sl@0
  5133
            {
sl@0
  5134
            // This case contains the actual test GRAPHICS-WSERV-2669-0015
sl@0
  5135
            LOG_MESSAGE(_L("case 2"));
sl@0
  5136
            RSurfaceManager::TSurfaceCreationAttributesBuf surfaceBuf;
sl@0
  5137
            CreateSurfaceAttributes(surfaceBuf, iVisWins2->BaseWin()->Size());
sl@0
  5138
            
sl@0
  5139
            iSurfaceId = TSurfaceId::CreateNullId();
sl@0
  5140
            TInt err = iSurfaceManager.CreateSurface(surfaceBuf, iSurfaceId);
sl@0
  5141
            if (err != KErrNone)
sl@0
  5142
                {
sl@0
  5143
                RDebug::Printf("RSurfaceManager::CreateSurface() error: %d", err);
sl@0
  5144
                TEST(EFalse);
sl@0
  5145
                }
sl@0
  5146
         
sl@0
  5147
            err = iVisWins2->BaseWin()->SetBackgroundSurface(iSurfaceId);
sl@0
  5148
            if (err != KErrNone)
sl@0
  5149
                {
sl@0
  5150
                RDebug::Printf("RWindow::SetBackgroundSurface() error: %d", err);
sl@0
  5151
                TEST(EFalse);
sl@0
  5152
                }
sl@0
  5153
            
sl@0
  5154
            iVisWins2->BaseWin()->SetSurfaceTransparency(ETrue); //iVisWins1 will become visible
sl@0
  5155
            
sl@0
  5156
            AddExpectedVisibilityChange(KFullyVisible, iVisWins1);
sl@0
  5157
            break;
sl@0
  5158
            }
sl@0
  5159
        default:
sl@0
  5160
            LOG_MESSAGE(_L("default"));
sl@0
  5161
            if (!iSurfaceId.IsNull())
sl@0
  5162
                {
sl@0
  5163
                iSurfaceManager.CloseSurface(iSurfaceId);
sl@0
  5164
                iSurfaceId = TSurfaceId::CreateNullId();
sl@0
  5165
                }
sl@0
  5166
            iSurfaceManager.Close();
sl@0
  5167
            delete iVisWins1;
sl@0
  5168
            iVisWins1 = NULL;
sl@0
  5169
            delete iVisWins2;
sl@0
  5170
            iVisWins2 = NULL;
sl@0
  5171
            CActiveScheduler::Stop();
sl@0
  5172
            break;
sl@0
  5173
        }
sl@0
  5174
    TheClient->iWs.Flush();
sl@0
  5175
    }
sl@0
  5176
sl@0
  5177
void CTEventTest::SurfaceVisibilityChanged2_NextSetOfEventsL()
sl@0
  5178
    {
sl@0
  5179
    switch (iEventSet++)
sl@0
  5180
        {
sl@0
  5181
        case 0:
sl@0
  5182
            {
sl@0
  5183
            //Win1 - bottom window
sl@0
  5184
            //Win2 - middle window with semi-transparent background surface, which totally obscures win1
sl@0
  5185
            LOG_MESSAGE(_L("case 0"));
sl@0
  5186
            TInt err = iSurfaceManager.Open();
sl@0
  5187
            if (err != KErrNone)
sl@0
  5188
                {
sl@0
  5189
                RDebug::Printf("RSurfaceManager::Open() failed", err);
sl@0
  5190
                User::Leave(err);
sl@0
  5191
                }
sl@0
  5192
            
sl@0
  5193
            iVisWins1 = NewBlueForgroundWindowL();
sl@0
  5194
            iVisWins1->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5195
sl@0
  5196
            iVisWins2 = NewBlueForgroundWindowL();
sl@0
  5197
            iVisWins2->BlankWin()->SetColor(); //remove colour to ensure window does not draw to UI layer
sl@0
  5198
            iVisWins2->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5199
            
sl@0
  5200
            iVisWins1->Activate(); //obscured
sl@0
  5201
            iVisWins2->Activate(); //visible
sl@0
  5202
            
sl@0
  5203
            // Create surface for background window    
sl@0
  5204
            RSurfaceManager::TSurfaceCreationAttributesBuf surfaceBuf;
sl@0
  5205
            CreateSurfaceAttributes(surfaceBuf, iVisWins2->BaseWin()->Size());
sl@0
  5206
sl@0
  5207
            iSurfaceId = TSurfaceId::CreateNullId();
sl@0
  5208
            err = iSurfaceManager.CreateSurface(surfaceBuf, iSurfaceId);
sl@0
  5209
            if (err != KErrNone)
sl@0
  5210
                {
sl@0
  5211
                RDebug::Printf("RSurfaceManager::CreateSurface() error: %d", err);
sl@0
  5212
                TEST(EFalse);
sl@0
  5213
                }
sl@0
  5214
sl@0
  5215
            err = iVisWins2->BaseWin()->SetBackgroundSurface(iSurfaceId);
sl@0
  5216
            if (err != KErrNone)
sl@0
  5217
                {
sl@0
  5218
                RDebug::Printf("RWindow::SetBackgroundSurface() error: %d", err);
sl@0
  5219
                TEST(EFalse);
sl@0
  5220
                }
sl@0
  5221
sl@0
  5222
            iVisWins2->BaseWin()->SetSurfaceTransparency(ETrue); //win1 and win2 both visible
sl@0
  5223
sl@0
  5224
            AddExpectedEvent(EEventFocusGained);
sl@0
  5225
            AddExpectedVisibilityChange(KFullyVisible, iVisWins2);
sl@0
  5226
            AddExpectedVisibilityChange(KFullyVisible, iVisWins1);
sl@0
  5227
            break;
sl@0
  5228
            }
sl@0
  5229
        case 1:
sl@0
  5230
            {
sl@0
  5231
            //Win3 - opaque top window which obscures win2 and win1
sl@0
  5232
            LOG_MESSAGE(_L("case 1"));
sl@0
  5233
            iVisWins3 = NewBlueForgroundWindowL();
sl@0
  5234
            iVisWins3->SetColor(KRgbRed);
sl@0
  5235
            iVisWins3->Activate();
sl@0
  5236
sl@0
  5237
            AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible, iVisWins2);
sl@0
  5238
            AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible, iVisWins1);
sl@0
  5239
            break;
sl@0
  5240
            }
sl@0
  5241
        case 2:
sl@0
  5242
            {
sl@0
  5243
            //This case contains the actual test GRAPHICS-WSERV-2669-0016
sl@0
  5244
            LOG_MESSAGE(_L("case 2"));
sl@0
  5245
            delete iVisWins3;
sl@0
  5246
            iVisWins3 = NULL;
sl@0
  5247
sl@0
  5248
            AddExpectedVisibilityChange(KFullyVisible, iVisWins2);
sl@0
  5249
            AddExpectedVisibilityChange(KFullyVisible, iVisWins1);
sl@0
  5250
            break;
sl@0
  5251
            }
sl@0
  5252
        default:
sl@0
  5253
            LOG_MESSAGE(_L("default"));
sl@0
  5254
            if (!iSurfaceId.IsNull())
sl@0
  5255
                {
sl@0
  5256
                iSurfaceManager.CloseSurface(iSurfaceId);
sl@0
  5257
                iSurfaceId = TSurfaceId::CreateNullId();
sl@0
  5258
                }
sl@0
  5259
            iSurfaceManager.Close();
sl@0
  5260
            delete iVisWins1;
sl@0
  5261
            iVisWins1 = NULL;
sl@0
  5262
            delete iVisWins2;
sl@0
  5263
            iVisWins2 = NULL;
sl@0
  5264
            delete iVisWins3;
sl@0
  5265
            iVisWins3 = NULL;
sl@0
  5266
            CActiveScheduler::Stop();
sl@0
  5267
            return;
sl@0
  5268
        }
sl@0
  5269
    TheClient->iWs.Flush();
sl@0
  5270
    }
sl@0
  5271
sl@0
  5272
TInt CTEventTest::GenerateAnEvent(TAny* aEventTest)
sl@0
  5273
    {
sl@0
  5274
    CTEventTest* self = static_cast<CTEventTest*>(aEventTest);
sl@0
  5275
    self->LogMessage(((TText8*)__FILE__), __LINE__,_L("Negative test passed OK - no event was generated."));
sl@0
  5276
    //Now we must generate an event to get CTQueueTestEvent out of its wait loop 
sl@0
  5277
    self->SimulateRepeatEvent(32);
sl@0
  5278
    self->AddExpectedKey(EEventKey, 32);
sl@0
  5279
    return KErrNone;
sl@0
  5280
    }
sl@0
  5281
sl@0
  5282
void CTEventTest::SurfaceVisibilityChanged3_NextSetOfEventsL()
sl@0
  5283
    {
sl@0
  5284
    switch (iEventSet++)
sl@0
  5285
        {
sl@0
  5286
        case 0:
sl@0
  5287
            {
sl@0
  5288
            //Win1 - Bottom window
sl@0
  5289
            //Win2 - Top window with semi-transparent background surface. Does not overlap win1.
sl@0
  5290
            LOG_MESSAGE(_L("case 0"));
sl@0
  5291
            TInt err = iSurfaceManager.Open();
sl@0
  5292
            if (err != KErrNone)
sl@0
  5293
                {
sl@0
  5294
                RDebug::Printf("RSurfaceManager::Open() failed", err);
sl@0
  5295
                User::Leave(err);
sl@0
  5296
                }
sl@0
  5297
            iTimeOutCallback = CPeriodic::NewL(CActive::EPriorityIdle);
sl@0
  5298
            
sl@0
  5299
            iVisWins1 = NewBlueForgroundWindowL();
sl@0
  5300
            iVisWins1->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5301
sl@0
  5302
            iVisWins2 = NewBlueForgroundWindowL();
sl@0
  5303
            iVisWins2->BlankWin()->SetColor(); //remove colour to ensure window does not draw to UI layer
sl@0
  5304
            TPoint newPos(iVisWins1->Position() + iVisWins1->Size());
sl@0
  5305
            iVisWins2->SetPos(newPos); //to not overlap win1 
sl@0
  5306
            
sl@0
  5307
            iVisWins1->Activate(); //upper left
sl@0
  5308
            iVisWins2->Activate(); //lower right
sl@0
  5309
            
sl@0
  5310
            // Create surface for background window    
sl@0
  5311
            RSurfaceManager::TSurfaceCreationAttributesBuf surfaceBuf;
sl@0
  5312
            CreateSurfaceAttributes(surfaceBuf, iVisWins2->BaseWin()->Size());
sl@0
  5313
sl@0
  5314
            iSurfaceId = TSurfaceId::CreateNullId();
sl@0
  5315
            err = iSurfaceManager.CreateSurface(surfaceBuf, iSurfaceId);
sl@0
  5316
            if (err != KErrNone)
sl@0
  5317
                {
sl@0
  5318
                RDebug::Printf("RSurfaceManager::CreateSurface() error: %d", err);
sl@0
  5319
                TEST(EFalse);
sl@0
  5320
                }
sl@0
  5321
sl@0
  5322
            err = iVisWins2->BaseWin()->SetBackgroundSurface(iSurfaceId);
sl@0
  5323
            if (err != KErrNone)
sl@0
  5324
                {
sl@0
  5325
                RDebug::Printf("RWindow::SetBackgroundSurface() error: %d", err);
sl@0
  5326
                TEST(EFalse);
sl@0
  5327
                }
sl@0
  5328
sl@0
  5329
            iVisWins2->BaseWin()->SetSurfaceTransparency(ETrue);
sl@0
  5330
sl@0
  5331
            AddExpectedEvent(EEventFocusGained);
sl@0
  5332
            AddExpectedVisibilityChange(KFullyVisible, iVisWins1);            
sl@0
  5333
            break;
sl@0
  5334
            }
sl@0
  5335
        case 1:
sl@0
  5336
            {
sl@0
  5337
            //This case contains the actual test GRAPHICS-WSERV-2669-0017
sl@0
  5338
            LOG_MESSAGE(_L("case 1"));
sl@0
  5339
            iVisWins2->SetPos(iVisWins1->Position()); //Win2 now overlaps Win1, but because Win2 has 
sl@0
  5340
                                                      //a transparent surface Win1 is still fully visible
sl@0
  5341
sl@0
  5342
            //Because we don't expect any events we need to generate one to avoid waiting forever.
sl@0
  5343
            TCallBack timeout(GenerateAnEvent, this);
sl@0
  5344
            iTimeOutCallback->Start(1000000, 10000000, timeout);
sl@0
  5345
            break;
sl@0
  5346
            }
sl@0
  5347
        default:            
sl@0
  5348
            LOG_MESSAGE(_L("default"));
sl@0
  5349
            iTimeOutCallback->Cancel();
sl@0
  5350
            delete iTimeOutCallback;
sl@0
  5351
            iTimeOutCallback = NULL;
sl@0
  5352
            if (!iSurfaceId.IsNull())
sl@0
  5353
                {
sl@0
  5354
                iSurfaceManager.CloseSurface(iSurfaceId);
sl@0
  5355
                iSurfaceId = TSurfaceId::CreateNullId();
sl@0
  5356
                }
sl@0
  5357
            iSurfaceManager.Close();
sl@0
  5358
            delete iVisWins1;
sl@0
  5359
            iVisWins1 = NULL;
sl@0
  5360
            delete iVisWins2;
sl@0
  5361
            iVisWins2 = NULL;
sl@0
  5362
            CActiveScheduler::Stop();
sl@0
  5363
            return;
sl@0
  5364
        }
sl@0
  5365
    TheClient->iWs.Flush();
sl@0
  5366
    }
sl@0
  5367
#endif //TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
sl@0
  5368
#endif //SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
sl@0
  5369
sl@0
  5370
void CTEventTest::VisibilityChanged_NextSetOfEventsL()
sl@0
  5371
	{
sl@0
  5372
	const TInt fullyVisible = TWsVisibilityChangedEvent::EPartiallyVisible | TWsVisibilityChangedEvent::EFullyVisible;
sl@0
  5373
sl@0
  5374
	switch(iEventSet++)
sl@0
  5375
		{
sl@0
  5376
		case 0: //only this case can leave
sl@0
  5377
			{
sl@0
  5378
			iQueueClient->iWin->BackedUpWin()->MaintainBackup();
sl@0
  5379
			iVisWins1=NewBlueForgroundWindowL();
sl@0
  5380
			iVisWins2=NewBlueForgroundWindowL();
sl@0
  5381
sl@0
  5382
			iVisWins1->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5383
			iVisWins1->Activate();
sl@0
  5384
			iVisWins2->SetColor(KRgbGreen);
sl@0
  5385
			iVisWins2->SetExt(TPoint(80, 80), TSize(120,120));
sl@0
  5386
			iVisWins2->Activate();
sl@0
  5387
sl@0
  5388
			AddExpectedEvent(EEventFocusGained);
sl@0
  5389
			AddExpectedVisibilityChange(fullyVisible);
sl@0
  5390
			}
sl@0
  5391
			break;
sl@0
  5392
		case 1:
sl@0
  5393
			iVisWins1->BaseWin()->SetVisible(EFalse);
sl@0
  5394
			AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible);
sl@0
  5395
			break;
sl@0
  5396
		case 2:
sl@0
  5397
			iVisWins1->BaseWin()->SetVisible(ETrue);
sl@0
  5398
			AddExpectedVisibilityChange(fullyVisible);
sl@0
  5399
			break;
sl@0
  5400
		case 3:
sl@0
  5401
			iVisWins2->SetExt(TPoint(0,0), TSize(120,120));
sl@0
  5402
			AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible);
sl@0
  5403
			break;
sl@0
  5404
		case 4:
sl@0
  5405
			iVisWins2->BaseWin()->SetVisible(EFalse);
sl@0
  5406
			AddExpectedVisibilityChange(fullyVisible);
sl@0
  5407
			break;
sl@0
  5408
		case 5:
sl@0
  5409
			iVisWins2->BaseWin()->SetVisible(ETrue);
sl@0
  5410
			AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible);
sl@0
  5411
			break;
sl@0
  5412
		case 6:
sl@0
  5413
			iVisWins2->SetExt(TPoint(60,60), TSize(120,120));
sl@0
  5414
			AddExpectedVisibilityChange(TWsVisibilityChangedEvent::EPartiallyVisible);
sl@0
  5415
			break;
sl@0
  5416
		case 7:
sl@0
  5417
			iVisWins1->SetExt(TPoint(80,80), TSize(40,40));
sl@0
  5418
			AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible);
sl@0
  5419
			break;
sl@0
  5420
		case 8:
sl@0
  5421
			iVisWins1->BaseWin()->SetOrdinalPosition(0);
sl@0
  5422
			AddExpectedVisibilityChange(fullyVisible);
sl@0
  5423
sl@0
  5424
			if(TransparencySupportedL() != KErrNone)
sl@0
  5425
				{
sl@0
  5426
				iEventSet += 2; //we shall skip set 9,10 as they work with transparency
sl@0
  5427
				}
sl@0
  5428
			break;
sl@0
  5429
		case 9:
sl@0
  5430
			{
sl@0
  5431
			TDisplayMode mode = EColor256;
sl@0
  5432
			iTransWin=CTransWindow::NewL(iQueueClient->iGroup, TRgb(255, 0, 0, 128), TRect(0,0,200,200), &mode);
sl@0
  5433
			iTransWin->CTWin::DrawNow();
sl@0
  5434
			// it gets put at ordinal position 0
sl@0
  5435
			iVisWins2->BaseWin()->SetOrdinalPosition(1);
sl@0
  5436
			AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible);
sl@0
  5437
			}
sl@0
  5438
			break;
sl@0
  5439
		case 10:
sl@0
  5440
			iVisWins1->BaseWin()->SetOrdinalPosition(1);
sl@0
  5441
			AddExpectedVisibilityChange(fullyVisible);
sl@0
  5442
			break;
sl@0
  5443
		case 11:
sl@0
  5444
			{
sl@0
  5445
			delete iVisWins1;
sl@0
  5446
			iVisWins1=NULL;
sl@0
  5447
			iVisWins1=NewBlueForgroundWindow();
sl@0
  5448
sl@0
  5449
			iVisWins1->Activate();
sl@0
  5450
			iVisWins1->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5451
sl@0
  5452
			AddExpectedVisibilityChange(fullyVisible);
sl@0
  5453
			}
sl@0
  5454
			break;
sl@0
  5455
		case 12:
sl@0
  5456
			{
sl@0
  5457
			delete iVisWins1;
sl@0
  5458
			iVisWins1=NULL;
sl@0
  5459
			iVisWins1=NewBlueForgroundWindow();
sl@0
  5460
sl@0
  5461
			iVisWins1->Activate();
sl@0
  5462
			iVisWins1->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5463
			iVisWins1->BaseWin()->SetVisible(EFalse);
sl@0
  5464
sl@0
  5465
			AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible);
sl@0
  5466
			}
sl@0
  5467
			break;
sl@0
  5468
		case 13:
sl@0
  5469
			{
sl@0
  5470
			delete iVisWins1;
sl@0
  5471
			iVisWins1=NULL;
sl@0
  5472
			iVisWins1=NewBlueForgroundWindow();
sl@0
  5473
sl@0
  5474
			iVisWins1->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5475
			iVisWins1->Activate();
sl@0
  5476
sl@0
  5477
			AddExpectedVisibilityChange(fullyVisible);
sl@0
  5478
			}
sl@0
  5479
			break;
sl@0
  5480
		case 14:
sl@0
  5481
			{
sl@0
  5482
			delete iVisWins1;
sl@0
  5483
			iVisWins1=NULL;
sl@0
  5484
			iVisWins1=NewBlueForgroundWindow();
sl@0
  5485
sl@0
  5486
			iVisWins1->Activate();
sl@0
  5487
			iVisWins1->BaseWin()->SetVisible(EFalse);
sl@0
  5488
			iVisWins1->BaseWin()->EnableVisibilityChangeEvents();
sl@0
  5489
sl@0
  5490
			AddExpectedVisibilityChange(TWsVisibilityChangedEvent::ENotVisible);
sl@0
  5491
			}
sl@0
  5492
			break;
sl@0
  5493
		default:
sl@0
  5494
			delete iVisWins1;
sl@0
  5495
			delete iVisWins2;
sl@0
  5496
			iVisWins1 = NULL;
sl@0
  5497
			iVisWins2 = NULL;
sl@0
  5498
			delete iTransWin;
sl@0
  5499
			iTransWin = NULL;
sl@0
  5500
			CActiveScheduler::Stop();
sl@0
  5501
			break;
sl@0
  5502
		}
sl@0
  5503
	TheClient->iWs.Flush();
sl@0
  5504
	}
sl@0
  5505
sl@0
  5506
void CTEventTest::CheckTimeStamp_NextSetOfEventsL()
sl@0
  5507
	{
sl@0
  5508
	iQueueClient->EventQueue()->SetCheckTimeStamp(ETrue);
sl@0
  5509
	switch(iEventSet++)
sl@0
  5510
		{
sl@0
  5511
	case 0:
sl@0
  5512
		iTest->SimulateKey(TRawEvent::EKeyDown, 'A');	// Create a raw event
sl@0
  5513
		iTest->SimulateKey(TRawEvent::EKeyUp, 'A');	// Create a raw event
sl@0
  5514
		AddExpectedEvent(EEventFocusGained);
sl@0
  5515
		AddExpectedKey(EEventKeyDown,'A');
sl@0
  5516
		AddExpectedKey(EEventKey,'A','a');
sl@0
  5517
		AddExpectedKey(EEventKeyUp,'A','a');
sl@0
  5518
		break;
sl@0
  5519
	case 1:
sl@0
  5520
		{
sl@0
  5521
		_LIT8(KMsgParam,"CheckTimeStamp");
sl@0
  5522
		TBuf8<0x20> params(KMsgParam);
sl@0
  5523
		TInt err = TheClient->iWs.SendMessageToWindowGroup(iQueueClient->WindowGroupIdentifier(),TUid::Uid(123),params);
sl@0
  5524
		AddExpectedEvent(EEventMessageReady);
sl@0
  5525
		}
sl@0
  5526
		break;
sl@0
  5527
	default:
sl@0
  5528
		CActiveScheduler::Stop();
sl@0
  5529
		break;
sl@0
  5530
		}
sl@0
  5531
	TheClient->iWs.Flush();
sl@0
  5532
	}
sl@0
  5533
sl@0
  5534
/**
sl@0
  5535
 * @SYMTestCaseID GRAPHICS-WSERV-0001
sl@0
  5536
 *
sl@0
  5537
 * @SYMPREQ PREQ525
sl@0
  5538
 *
sl@0
  5539
 * @SYMTestCaseDesc Test Capture priority of different top most windows in a Group.
sl@0
  5540
 *
sl@0
  5541
 * @SYMTestPriority Critical
sl@0
  5542
 *
sl@0
  5543
 * @SYMTestStatus Implemented
sl@0
  5544
 *
sl@0
  5545
 * @SYMTestActions Create two different top client windows under one parent window
sl@0
  5546
 *	in a same window group. Add pointer event by clicking various position on the
sl@0
  5547
 *	window and Simulate the pointer event. Change the pointer capture flag, capture
sl@0
  5548
 *	priority and simulate the pointer event.
sl@0
  5549
 *
sl@0
  5550
 * @SYMTestExpectedResults In general the expected event and the window server event should
sl@0
  5551
 *	match same event handle, type and pointer position for following cases.
sl@0
  5552
 *	When pointer capture is disabled and capture priorities are 0, the pointer position on window1
sl@0
  5553
 *	window2 or parent window are same as expected.
sl@0
  5554
 *	When pointer capture is enabled and capture priorities are 0, the pointer position on window2(which is top most now)
sl@0
  5555
 *	is same as expected.
sl@0
  5556
 *	When pointer capture is enabled and capture priorities of win1 is greater than win2
sl@0
  5557
 *	the pointer position on win1 and win2 are same as expected.
sl@0
  5558
 *	The combination of above cases should match the general expexted result.
sl@0
  5559
 *
sl@0
  5560
 */
sl@0
  5561
void CTEventTest::PointerCapture_NextSetOfEventsL()
sl@0
  5562
	{
sl@0
  5563
#if defined(LOGGING)
sl@0
  5564
	TLogMessageText logMessageText;
sl@0
  5565
	_LIT(KSet,"Pointer Capture SetOfEvents: %d (last=9)");
sl@0
  5566
	logMessageText.Format(KSet,iEventSet);
sl@0
  5567
	INFO_PRINTF1(logMessageText);
sl@0
  5568
#endif
sl@0
  5569
	switch(iEventSet++)
sl@0
  5570
		{
sl@0
  5571
		case 0:			//Create two top client windows of same group
sl@0
  5572
			iVisWins1=new (ELeave) CTBlankWindow;
sl@0
  5573
			iVisWins2=new (ELeave) CTBlankWindow;
sl@0
  5574
			iVisWins1->ConstructL(*iQueueClient->iGroup);
sl@0
  5575
			iVisWins2->ConstructL(*iQueueClient->iGroup);
sl@0
  5576
			iVisWins1->SetColor(KRgbBlue);
sl@0
  5577
			iVisWins1->SetExt(iQueueClient->ChildTopLeft(),iQueueClient->ChildSize());
sl@0
  5578
			iVisWins1->Activate();
sl@0
  5579
			iVisWins2->SetColor(KRgbGreen);
sl@0
  5580
			iVisWins2->SetExt(iQueueClient->ChildTopLeft()+TPoint(15,15),iQueueClient->ChildSize());
sl@0
  5581
			iVisWins2->Activate();
sl@0
  5582
			iQueueClient->iWs.Flush();
sl@0
  5583
			AddExpectedEvent(EEventFocusGained);
sl@0
  5584
			break;
sl@0
  5585
		case 1:			//Pointer capture are disabled and priorities are 0
sl@0
  5586
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureDisabled);
sl@0
  5587
			iVisWins1->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5588
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureDisabled);
sl@0
  5589
			iVisWins2->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5590
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25));	//Pointer on the first window
sl@0
  5591
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25));
sl@0
  5592
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));	//Pointer on the second window(overlaping on first window)
sl@0
  5593
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5594
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));	//Pointer on the second window
sl@0
  5595
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5596
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25));	//Pointer on the parent window
sl@0
  5597
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25));
sl@0
  5598
			iQueueClient->iWs.Flush();
sl@0
  5599
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5600
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5601
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5602
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5603
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5604
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5605
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5606
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5607
			break;
sl@0
  5608
		case 2:			//Pointer capture are enabled and priorities are 0
sl@0
  5609
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5610
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5611
			iVisWins1->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5612
			iVisWins2->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5613
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25),(TInt)iVisWins2);	//Pointer on the first window
sl@0
  5614
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5615
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));	//Pointer on the second window(overlaping on first window)
sl@0
  5616
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5617
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));	//Pointer on the second window
sl@0
  5618
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5619
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25),(TInt)iVisWins2);	//Pointer on the parent window
sl@0
  5620
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5621
			iQueueClient->iWs.Flush();
sl@0
  5622
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5623
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5624
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5625
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5626
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5627
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5628
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5629
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5630
			break;
sl@0
  5631
		case 3:			//Pointer capture are enabled and priorities of win1 is higher than win2
sl@0
  5632
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5633
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5634
			iVisWins1->BaseWin()->SetPointerCapturePriority(1);
sl@0
  5635
			iVisWins2->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5636
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25));
sl@0
  5637
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25));
sl@0
  5638
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));
sl@0
  5639
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5640
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));
sl@0
  5641
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5642
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5643
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5644
			iQueueClient->iWs.Flush();
sl@0
  5645
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5646
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5647
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5648
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5649
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5650
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5651
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5652
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5653
			break;
sl@0
  5654
		case 4:			//Pointer capture are enabled and priorities of win1 is equal to win2
sl@0
  5655
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5656
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5657
			iVisWins1->BaseWin()->SetPointerCapturePriority(1);
sl@0
  5658
			iVisWins2->BaseWin()->SetPointerCapturePriority(1);
sl@0
  5659
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5660
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5661
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));
sl@0
  5662
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5663
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));
sl@0
  5664
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5665
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5666
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5667
			iQueueClient->iWs.Flush();
sl@0
  5668
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5669
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5670
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5671
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5672
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5673
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5674
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5675
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5676
			break;
sl@0
  5677
		case 5:			//Pointer capture are enabled and priorities of win2 is higher than win1
sl@0
  5678
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5679
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5680
			iVisWins1->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5681
			iVisWins2->BaseWin()->SetPointerCapturePriority(1);
sl@0
  5682
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5683
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5684
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));
sl@0
  5685
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5686
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));
sl@0
  5687
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5688
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5689
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5690
			iQueueClient->iWs.Flush();
sl@0
  5691
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5692
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5693
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5694
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5695
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5696
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5697
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5698
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5699
			break;
sl@0
  5700
		case 6:			//Pointer capture are enabled for all groups and priorities of win1 is higher than win2
sl@0
  5701
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled|RWindowBase::TCaptureFlagAllGroups);
sl@0
  5702
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled|RWindowBase::TCaptureFlagAllGroups);
sl@0
  5703
			iVisWins1->BaseWin()->SetPointerCapturePriority(1);
sl@0
  5704
			iVisWins2->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5705
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25));
sl@0
  5706
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25));
sl@0
  5707
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));
sl@0
  5708
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5709
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));
sl@0
  5710
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5711
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5712
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5713
			iQueueClient->iWs.Flush();
sl@0
  5714
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5715
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5716
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5717
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5718
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5719
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5720
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5721
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5722
			break;
sl@0
  5723
		case 7:			//Pointer capture are enabled and priorities of iWin is higher than the other windows
sl@0
  5724
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5725
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5726
			iVisWins1->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5727
			iVisWins2->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5728
			iQueueClient->iWin->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5729
			iQueueClient->iWin->BaseWin()->SetPointerCapturePriority(1);
sl@0
  5730
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(80,20));	//Pointer on the parent window
sl@0
  5731
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(80,20));
sl@0
  5732
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5733
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5734
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));
sl@0
  5735
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5736
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));
sl@0
  5737
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5738
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25));
sl@0
  5739
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25));
sl@0
  5740
			iQueueClient->iWs.Flush();
sl@0
  5741
			SimulatePointer(TRawEvent::EButton1Down,80,20);
sl@0
  5742
			SimulatePointer(TRawEvent::EButton1Up,80,20);
sl@0
  5743
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5744
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5745
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5746
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5747
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5748
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5749
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5750
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5751
			break;
sl@0
  5752
		case 8:			//Pointer capture are enabled and priorities of iWin is 0
sl@0
  5753
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5754
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5755
			iVisWins1->BaseWin()->SetPointerCapturePriority(1);
sl@0
  5756
			iVisWins2->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5757
			iQueueClient->iWin->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled);
sl@0
  5758
			iQueueClient->iWin->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5759
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(80,20),(TInt)iVisWins2);	//Pointer on the parent window
sl@0
  5760
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(80,20),(TInt)iVisWins2);
sl@0
  5761
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25));
sl@0
  5762
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25));
sl@0
  5763
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));
sl@0
  5764
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5765
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));
sl@0
  5766
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5767
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5768
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25),(TInt)iVisWins2);
sl@0
  5769
			iQueueClient->iWs.Flush();
sl@0
  5770
			SimulatePointer(TRawEvent::EButton1Down,80,20);
sl@0
  5771
			SimulatePointer(TRawEvent::EButton1Up,80,20);
sl@0
  5772
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5773
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5774
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5775
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5776
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5777
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5778
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5779
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5780
			break;
sl@0
  5781
		case 9:			//Pointer capture are enabled and with different groups
sl@0
  5782
			iVisWins1->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled|RWindowBase::TCaptureFlagAllGroups);
sl@0
  5783
			iVisWins2->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled|RWindowBase::TCaptureFlagAllGroups);
sl@0
  5784
			iVisWins1->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5785
			iVisWins2->BaseWin()->SetPointerCapturePriority(0);
sl@0
  5786
			iQueueClient->iWin->BaseWin()->SetPointerCapture(RWindowBase::TCaptureEnabled|RWindowBase::TCaptureFlagAllGroups);
sl@0
  5787
			iQueueClient->iWin->BaseWin()->SetPointerCapturePriority(1);
sl@0
  5788
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(25,150),(TInt)iVisWins2);
sl@0
  5789
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(25,150),(TInt)iVisWins2);
sl@0
  5790
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(150,25),(TInt)iVisWins2);
sl@0
  5791
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(150,25),(TInt)iVisWins2);
sl@0
  5792
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(80,20));	//Pointer on the parent window
sl@0
  5793
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(80,20));
sl@0
  5794
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5795
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(35,25),(TInt)iVisWins2);
sl@0
  5796
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(60,50));
sl@0
  5797
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(60,50));
sl@0
  5798
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(50,30));
sl@0
  5799
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(50,30));
sl@0
  5800
			AddExpectedPointerCapture(TPointerEvent::EButton1Down,TPoint(75,25));
sl@0
  5801
			AddExpectedPointerCapture(TPointerEvent::EButton1Up,TPoint(75,25));
sl@0
  5802
			iQueueClient->iWs.Flush();
sl@0
  5803
			SimulatePointer(TRawEvent::EButton1Down,25,150);
sl@0
  5804
			SimulatePointer(TRawEvent::EButton1Up,25,150);
sl@0
  5805
			SimulatePointer(TRawEvent::EButton1Down,150,25);
sl@0
  5806
			SimulatePointer(TRawEvent::EButton1Up,150,25);
sl@0
  5807
			SimulatePointer(TRawEvent::EButton1Down,80,20);
sl@0
  5808
			SimulatePointer(TRawEvent::EButton1Up,80,20);
sl@0
  5809
			SimulatePointer(TRawEvent::EButton1Down,35,25);
sl@0
  5810
			SimulatePointer(TRawEvent::EButton1Up,35,25);
sl@0
  5811
			SimulatePointer(TRawEvent::EButton1Down,60,50);
sl@0
  5812
			SimulatePointer(TRawEvent::EButton1Up,60,50);
sl@0
  5813
			SimulatePointer(TRawEvent::EButton1Down,50,30);
sl@0
  5814
			SimulatePointer(TRawEvent::EButton1Up,50,30);
sl@0
  5815
			SimulatePointer(TRawEvent::EButton1Down,75,25);
sl@0
  5816
			SimulatePointer(TRawEvent::EButton1Up,75,25);
sl@0
  5817
			break;
sl@0
  5818
		default:
sl@0
  5819
			delete iVisWins1;
sl@0
  5820
			delete iVisWins2;
sl@0
  5821
			iVisWins1=NULL;
sl@0
  5822
			iVisWins2=NULL;
sl@0
  5823
			CActiveScheduler::Stop();
sl@0
  5824
			break;
sl@0
  5825
		}
sl@0
  5826
	TheClient->iWs.Flush();
sl@0
  5827
	}
sl@0
  5828
sl@0
  5829
/**
sl@0
  5830
PDEF110849
sl@0
  5831
Allocate a pointer buffer, send it some events and then disconnect.
sl@0
  5832
Now fill the event queue, causing a purge.
sl@0
  5833
The purge will call void CWsPointerBuffer::DiscardPointerMoveBuffer(TUint aHandle)
sl@0
  5834
in which an access violation occurred because iCurrentBuffer had not been set to NULL.
sl@0
  5835
*/
sl@0
  5836
void CTEventTest::PointerBufferPurge_NextSetOfEventsL()
sl@0
  5837
	{
sl@0
  5838
#if defined(LOGGING)
sl@0
  5839
	TLogMessageText logMessageText;
sl@0
  5840
	_LIT(KSet,"PointerBufferPurge SetOfEvents: %d of 1");
sl@0
  5841
	logMessageText.Format(KSet,iEventSet);
sl@0
  5842
	TheClient->LogMessage(logMessageText);
sl@0
  5843
#endif
sl@0
  5844
	iTheClientFlush=TheClient->iWs.SetAutoFlush(ETrue);
sl@0
  5845
	iQuequeClientFlush=iQueueClient->iWs.SetAutoFlush(ETrue);
sl@0
  5846
	switch(iEventSet++)
sl@0
  5847
		{
sl@0
  5848
		case 0:
sl@0
  5849
			{
sl@0
  5850
			RWindowBase& win = *iQueueClient->iWin->BaseWin();
sl@0
  5851
			
sl@0
  5852
			// Cause a connect to happen
sl@0
  5853
			RDebug::Print(_L("PointerBufferPurge - AllocPointerMoveBuffer()"));
sl@0
  5854
			win.AllocPointerMoveBuffer(10, 0);
sl@0
  5855
			
sl@0
  5856
			// Allow pen events to be received
sl@0
  5857
			RDebug::Print(_L("PointerBufferPurge - EnablePointerMoveBuffer()"));
sl@0
  5858
			win.EnablePointerMoveBuffer();
sl@0
  5859
			
sl@0
  5860
			// Simulate some pen events
sl@0
  5861
			RDebug::Print(_L("PointerBufferPurge - Events"));
sl@0
  5862
			SimulatePointer(TRawEvent::EPointerMove,10,20);
sl@0
  5863
			SimulatePointer(TRawEvent::EButton1Down,10,20);
sl@0
  5864
			SimulatePointer(TRawEvent::EPointerMove,11,21);
sl@0
  5865
			SimulatePointer(TRawEvent::EButton1Up,11,21);
sl@0
  5866
	
sl@0
  5867
			// Disconnect
sl@0
  5868
			RDebug::Print(_L("PointerBufferPurge - FreePointerMoveBuffer()"));
sl@0
  5869
			win.FreePointerMoveBuffer();
sl@0
  5870
			
sl@0
  5871
			// Send sufficient events to cause a purge to happen
sl@0
  5872
			for (TInt i=0; i<EMaxEventQueueSize; i++)
sl@0
  5873
				{
sl@0
  5874
				RDebug::Print(_L("PointerBufferPurge - Purge Loop %d"), i);
sl@0
  5875
				SimulatePointer(TRawEvent::EButton1Up,15,25);
sl@0
  5876
				}
sl@0
  5877
	
sl@0
  5878
			// Expected events
sl@0
  5879
			// - We only expect the focus and button up events because the other events have been purged
sl@0
  5880
			// - button up events which are not paired with button down take precedence 
sl@0
  5881
			// - but even some of our button up events will have been purged - hence the lower count
sl@0
  5882
			
sl@0
  5883
			AddExpectedEvent(EEventFocusGained);
sl@0
  5884
			
sl@0
  5885
			for (TInt i=0; i<EMaxEventQueueSize-1; i++)
sl@0
  5886
				{
sl@0
  5887
				AddExpectedPointer(TPointerEvent::EButton1Up, TPoint(15-EWinPositionX,25-EWinPositionY));
sl@0
  5888
				}
sl@0
  5889
				
sl@0
  5890
			break;
sl@0
  5891
			}
sl@0
  5892
		default:
sl@0
  5893
			CActiveScheduler::Stop();
sl@0
  5894
		break;
sl@0
  5895
		}
sl@0
  5896
	TheClient->iWs.SetAutoFlush(iTheClientFlush);
sl@0
  5897
	iQueueClient->iWs.SetAutoFlush(iQuequeClientFlush);
sl@0
  5898
	}
sl@0
  5899
sl@0
  5900
/**
sl@0
  5901
 * @SYMTestCaseID GRAPHICS-WSERV-0025
sl@0
  5902
 *
sl@0
  5903
 * @SYMDEF DEF085009
sl@0
  5904
 *
sl@0
  5905
 * @SYMTestCaseDesc Test removal of event handlers mid-way through processing an event.
sl@0
  5906
 *
sl@0
  5907
 * @SYMTestPriority Critical
sl@0
  5908
 *
sl@0
  5909
 * @SYMTestStatus Implemented
sl@0
  5910
 *
sl@0
  5911
 * @SYMTestActions The following tests use RRemovable anim to replicate the removal of
sl@0
  5912
 * event handlers mid-way through processing an event (where an event is offered to each of the
sl@0
  5913
 * listed event handlers).
sl@0
  5914
 *
sl@0
  5915
 * RRemovableAnim is an anim which removes itself from the event handler list
sl@0
  5916
 * after receiving n events, where n is the 'lifetime' of the anim measured in events received.
sl@0
  5917
 * By setting the lifetimes of a number of these anims, we replicate the removal of event handlers
sl@0
  5918
 * mid-way through processing an event.
sl@0
  5919
 *
sl@0
  5920
 * Event set 0:
sl@0
  5921
 *  Sends 2 events e1,e2 and expects them be received by wserv event processing.
sl@0
  5922
 *
sl@0
  5923
 * Event set 1: (Simple scenario)
sl@0
  5924
 *  Adds 3 removable anims to event handler list
sl@0
  5925
 *  Sets lifetimes as {1000,2,5}
sl@0
  5926
 *  Sends 6 events
sl@0
  5927
 *  Expected events to be received by anims: {6,2,5}
sl@0
  5928
 *
sl@0
  5929
 * Event set 2: (Manual removal and reset state)
sl@0
  5930
 *  Manually remove all anims from event handler list
sl@0
  5931
 *  Sends 2 events
sl@0
  5932
 *  No events expected to be received by anims
sl@0
  5933
 *  Resets all anims ready for next test
sl@0
  5934
 *
sl@0
  5935
 * Event set 3: (Removal of multiple anims on receipt of same event)
sl@0
  5936
 *  Adds 10 removable anims in event handler list
sl@0
  5937
 *  Set lifetimes: {1,5,9,3,8,8,8,10,5,2}
sl@0
  5938
 *  Sends 12 events:
sl@0
  5939
 *  Expected number of received events for anims: {1,5,9,3,8,8,8,10,5,2}
sl@0
  5940
 *
sl@0
  5941
 * Event set 4: (Manual removal and reset state)
sl@0
  5942
 *  Manually remove all anims from event handler list
sl@0
  5943
 *  Sends 2 events
sl@0
  5944
 *  No events expected to be received by anims
sl@0
  5945
 *  Resets all anims ready for next test
sl@0
  5946
 *
sl@0
  5947
 * Event set 5: (Addition of anims to non-empty event handler list, part 1)
sl@0
  5948
 *  Adds 6 removable anims in the event handler list
sl@0
  5949
 *  Set lifetimes: {1,1,1,5,5,5}
sl@0
  5950
 *  Sends 2 events:
sl@0
  5951
 *  Expected number of received events for anims: {1,1,1,2,2,2}
sl@0
  5952
 *
sl@0
  5953
 * Event set 6: (Addition of anims to non-empty event handler list, part 2)
sl@0
  5954
 *  Readds first 3 anims to event handler list
sl@0
  5955
 *  Sets lifetimes of these three anims {13,24,6}
sl@0
  5956
 *  Sends 5 events:
sl@0
  5957
 *  Expected number of received events for anims: {5,5,5,3,3,3}
sl@0
  5958
 *
sl@0
  5959
 * Event set 7: (Addition of anims to non-empty event handler list, part 3)
sl@0
  5960
 *  Sends 16 events:
sl@0
  5961
 *  Expected number of received events for anims: {8,16,1,0,0,0}
sl@0
  5962
 *
sl@0
  5963
 * Event set 8: (Manual Removal and reset state)
sl@0
  5964
 *  Manually remove all anims from event handler list
sl@0
  5965
 *  Sends 2 events
sl@0
  5966
 *  No events expected to be received by anims
sl@0
  5967
 *  Resets all anims ready for next test
sl@0
  5968
 *
sl@0
  5969
 * Event set 9: (Creating anims which again generate events.)
sl@0
  5970
 *  Create 3 anims. One anims generates events in its OfferrawEvent function.
sl@0
  5971
 *	Check the funtionality of ProcessRawEvent in Wserv when it is called
sl@0
  5972
 *	recursively. Also check the fix for defect INC095892.
sl@0
  5973
 *
sl@0
  5974
 * @SYMTestExpectedResults
sl@0
  5975
 *  All events should be received by wserv event processing
sl@0
  5976
 *  Each anim should only receive events when (number of events received by anim) <= (lifetime of anim)
sl@0
  5977
 */
sl@0
  5978
void CTEventTest::EventHandlerRemoval_NextSetOfEventsL()
sl@0
  5979
	{
sl@0
  5980
#if defined(LOGGING)
sl@0
  5981
	INFO_PRINTF1(_L("EventHandlerRemoval SetOfEvents: (Max=8)"));
sl@0
  5982
#endif
sl@0
  5983
	switch(iEventSet++)
sl@0
  5984
		{
sl@0
  5985
		case 0:
sl@0
  5986
		#if defined(LOGGING)
sl@0
  5987
			INFO_PRINTF1(_L("AUTO  Event Handler Removal Anim Events"));
sl@0
  5988
		#endif
sl@0
  5989
		#if defined(DETAILED)
sl@0
  5990
			INFO_PRINTF1(_L("No anims in event handler list"));
sl@0
  5991
			INFO_PRINTF1(_L(" Send 2 events"));
sl@0
  5992
			INFO_PRINTF1(_L(" - Expected to be received by wserv event processing"));
sl@0
  5993
		#endif
sl@0
  5994
			// Always get a focus gain at start
sl@0
  5995
			AddExpectedEvent(EEventFocusGained);
sl@0
  5996
			// All expected to be received by wserv event processing
sl@0
  5997
			AddExpectedKey(EEventKeyDown,32,ETrue);
sl@0
  5998
			AddExpectedKey(EEventKeyUp,32,ETrue);
sl@0
  5999
			// Send 2 events - none expected to be received by anims,
sl@0
  6000
			iTest->SimulateKey(TRawEvent::EKeyDown,32);
sl@0
  6001
			iTest->SimulateKey(TRawEvent::EKeyUp,32);
sl@0
  6002
			// Flush events to wserv
sl@0
  6003
			TheClient->iWs.Flush();
sl@0
  6004
			// Create all anims for all tests in first event set because
sl@0
  6005
			// first event set is only place where leaving functions can be called
sl@0
  6006
			EventHandlerRemoval_CreateAnimsL(10);
sl@0
  6007
			break;
sl@0
  6008
		case 1:
sl@0
  6009
			{
sl@0
  6010
		#if defined(DETAILED)
sl@0
  6011
			INFO_PRINTF1(_L(" Add 3 removable anims to event handler list"));
sl@0
  6012
			INFO_PRINTF1(_L(" Set lifetimes for anims: {1000,2,5}"));
sl@0
  6013
			INFO_PRINTF1(_L(" Send 6 events"));
sl@0
  6014
			INFO_PRINTF1(_L(" - Expected number of received events for anims: {6,2,5}"));
sl@0
  6015
			INFO_PRINTF1(_L(" All events expected to be received by wserv event processing"));
sl@0
  6016
		#endif
sl@0
  6017
			const TInt KLifetimes [] = {1000,2,5};
sl@0
  6018
			EventHandlerRemoval_PrepareAnims(KLifetimes, 3);
sl@0
  6019
			EventHandlerRemoval_CreateExpectedEvents(6,3);
sl@0
  6020
			// Flush events to wserv
sl@0
  6021
			TheClient->iWs.Flush();
sl@0
  6022
			// Check each anim has received the expected events
sl@0
  6023
			EventHandlerRemoval_CheckExpectedEventsReceivedByAnims();
sl@0
  6024
			}
sl@0
  6025
			break;
sl@0
  6026
		case 2:
sl@0
  6027
			{
sl@0
  6028
			// Remove all anims, check removal was successful
sl@0
  6029
			// and reset all anims ready for next test
sl@0
  6030
			EventHandlerRemoval_RemoveAndResetAllAnims();
sl@0
  6031
			}
sl@0
  6032
			break;
sl@0
  6033
		case 3:
sl@0
  6034
			{
sl@0
  6035
		#if defined(DETAILED)
sl@0
  6036
			INFO_PRINTF1(_L(" Add 10 removable anims in event handler list"));
sl@0
  6037
			INFO_PRINTF1(_L(" Set lifetimes: {1,5,9,3,8,8,8,10,5,2}"));
sl@0
  6038
			INFO_PRINTF1(_L(" Send 12 events"));
sl@0
  6039
			INFO_PRINTF1(_L(" - Expected number of received events for anims:{1,5,9,3,8,8,8,10,5,2}"));
sl@0
  6040
			INFO_PRINTF1(_L(" All expected to be received by wserv event processing"));
sl@0
  6041
		#endif
sl@0
  6042
			const TInt KLifetimes [] = {1,5,9,3,8,8,8,10,5,2};
sl@0
  6043
sl@0
  6044
			// Create anims, set lifetimes, add to event handlers and add to iRemovableAnims array
sl@0
  6045
			EventHandlerRemoval_PrepareAnims(KLifetimes, 10);
sl@0
  6046
			EventHandlerRemoval_CreateExpectedEvents(12,10);
sl@0
  6047
			// Flush events to wserv
sl@0
  6048
			TheClient->iWs.Flush();
sl@0
  6049
			// Check each anim has received the expected events
sl@0
  6050
			EventHandlerRemoval_CheckExpectedEventsReceivedByAnims();
sl@0
  6051
			}
sl@0
  6052
			break;
sl@0
  6053
		case 4:
sl@0
  6054
			{
sl@0
  6055
			// Remove all anims, check removal was successful
sl@0
  6056
			// and reset all anims ready for next test
sl@0
  6057
			EventHandlerRemoval_RemoveAndResetAllAnims();
sl@0
  6058
			}
sl@0
  6059
			break;
sl@0
  6060
		case 5:
sl@0
  6061
			{
sl@0
  6062
		#if defined(DETAILED)
sl@0
  6063
			INFO_PRINTF1(_L(" Add 6 removable anims in event handler list"));
sl@0
  6064
			INFO_PRINTF1(_L(" Set lifetimes: {1,1,1,5,5,5}"));
sl@0
  6065
			INFO_PRINTF1(_L(" Send 2 events"));
sl@0
  6066
			INFO_PRINTF1(_L(" - Expected number of received events for anims:{1,1,1,2,2,2}"));
sl@0
  6067
			INFO_PRINTF1(_L(" All expected to be received by wserv event processing"));
sl@0
  6068
		#endif
sl@0
  6069
			const TInt KLifetimes [] = {1,1,1,5,5,5};
sl@0
  6070
sl@0
  6071
			// Create anims, set lifetimes, add to event handlers and add to iRemovableAnims array
sl@0
  6072
			EventHandlerRemoval_PrepareAnims(KLifetimes, 6);
sl@0
  6073
			EventHandlerRemoval_CreateExpectedEvents(2, 6);
sl@0
  6074
			// Flush events to wserv
sl@0
  6075
			TheClient->iWs.Flush();
sl@0
  6076
			// Check each anim has received the expected events
sl@0
  6077
			EventHandlerRemoval_CheckExpectedEventsReceivedByAnims();
sl@0
  6078
			}
sl@0
  6079
			break;
sl@0
  6080
		case 6:
sl@0
  6081
			{
sl@0
  6082
		#if defined(DETAILED)
sl@0
  6083
			INFO_PRINTF1(_L(" Readds first 3 removable anims to event handler list"));
sl@0
  6084
			INFO_PRINTF1(_L(" Set lifetimes of these three anims {13,24,6}"));
sl@0
  6085
			INFO_PRINTF1(_L(" Send 5 events"));
sl@0
  6086
			INFO_PRINTF1(_L(" - Expected number of received events for anims: {5,5,5,3,3,3}"));
sl@0
  6087
			INFO_PRINTF1(_L(" All expected to be received by wserv event processing"));
sl@0
  6088
		#endif
sl@0
  6089
			const TInt KLifetimes [] = {13,24,6};
sl@0
  6090
sl@0
  6091
			// Create anims, set lifetimes, add to event handlers and add to iRemovableAnims array
sl@0
  6092
			EventHandlerRemoval_PrepareAnims(KLifetimes, 3);
sl@0
  6093
			EventHandlerRemoval_CreateExpectedEvents(5, 6);
sl@0
  6094
			// Flush events to wserv
sl@0
  6095
			TheClient->iWs.Flush();
sl@0
  6096
			// Check each anim has received the expected events
sl@0
  6097
			EventHandlerRemoval_CheckExpectedEventsReceivedByAnims();
sl@0
  6098
			}
sl@0
  6099
			break;
sl@0
  6100
		case 7:
sl@0
  6101
			{
sl@0
  6102
		#if defined(DETAILED)
sl@0
  6103
			INFO_PRINTF1(_L(" Send 16 events"));
sl@0
  6104
			INFO_PRINTF1(_L(" - Expected number of received events for anims:{8,16,1,0,0,0}"));
sl@0
  6105
			INFO_PRINTF1(_L(" All expected to be received by wserv event processing"));
sl@0
  6106
		#endif
sl@0
  6107
			EventHandlerRemoval_CreateExpectedEvents(16, 3);
sl@0
  6108
			// Flush events to wserv
sl@0
  6109
			TheClient->iWs.Flush();
sl@0
  6110
			// Check each anim has received the expected events
sl@0
  6111
			EventHandlerRemoval_CheckExpectedEventsReceivedByAnims();
sl@0
  6112
			}
sl@0
  6113
			break;
sl@0
  6114
		case 8:
sl@0
  6115
			{
sl@0
  6116
			// Remove all anims, check removal was successful
sl@0
  6117
			// and reset all anims ready for next test
sl@0
  6118
			EventHandlerRemoval_RemoveAndResetAllAnims();
sl@0
  6119
			}
sl@0
  6120
			break;
sl@0
  6121
		case 9:
sl@0
  6122
			EventHandlerRemoval_CheckRecursionOfProcessRawEvent();
sl@0
  6123
			break;
sl@0
  6124
		case 10:
sl@0
  6125
			EventHandlerRemoval_AddEventHandlerMultipleTimes();
sl@0
  6126
			break;
sl@0
  6127
		default:
sl@0
  6128
		#if defined(DETAILED)
sl@0
  6129
			INFO_PRINTF1(_L(" Test postamble"));
sl@0
  6130
			INFO_PRINTF1(_L(" Destroy anims"));
sl@0
  6131
		#endif
sl@0
  6132
			// Destroy anims
sl@0
  6133
			EventHandlerRemoval_DestroyAllAnims();
sl@0
  6134
			iRemovableAnims->Close();
sl@0
  6135
			delete iRemovableAnims;
sl@0
  6136
			iRemovableAnims = NULL;
sl@0
  6137
			CActiveScheduler::Stop();
sl@0
  6138
			break;
sl@0
  6139
		}
sl@0
  6140
	TheClient->iWs.Flush();
sl@0
  6141
	}
sl@0
  6142
sl@0
  6143
/**
sl@0
  6144
 * Creates an array of aAnimCount anims on heap
sl@0
  6145
 * Assigns array to iRemovableAnims for use in rest of tests
sl@0
  6146
 */
sl@0
  6147
void CTEventTest::EventHandlerRemoval_CreateAnimsL(TInt aAnimCount)
sl@0
  6148
	{
sl@0
  6149
	RPointerArray<RRemovableAnim>* removableAnims = new (ELeave) RPointerArray<RRemovableAnim>();
sl@0
  6150
	CleanupStack::PushL(removableAnims);
sl@0
  6151
	for (TInt animIndex = 0; animIndex < aAnimCount; animIndex++)
sl@0
  6152
		{
sl@0
  6153
		RRemovableAnim* anim = RRemovableAnim::NewLC(iQueueClient->iWin->BaseWin(), iAnimDll);
sl@0
  6154
		removableAnims->AppendL(anim);
sl@0
  6155
		}
sl@0
  6156
	CleanupStack::Pop(aAnimCount, (*removableAnims)[0]);
sl@0
  6157
	CleanupStack::Pop(removableAnims);
sl@0
  6158
	iRemovableAnims = removableAnims;
sl@0
  6159
	}
sl@0
  6160
sl@0
  6161
/**
sl@0
  6162
 * Sets lifetimes of anims as specified in aLifeTimes
sl@0
  6163
 * Adds anims to event handler list
sl@0
  6164
 */
sl@0
  6165
void CTEventTest::EventHandlerRemoval_PrepareAnims(const TInt* aLifetimes, TInt aAnimCount)
sl@0
  6166
	{
sl@0
  6167
	for (TInt animIndex = 0; animIndex < aAnimCount; animIndex++)
sl@0
  6168
		{
sl@0
  6169
		RRemovableAnim* anim = (*iRemovableAnims)[animIndex];
sl@0
  6170
		anim->SetEventHandlerLifetime(aLifetimes[animIndex]);
sl@0
  6171
		anim->AddToEventHandlers();
sl@0
  6172
		}
sl@0
  6173
	}
sl@0
  6174
sl@0
  6175
/**
sl@0
  6176
 * Creates aEventCount key events to be used in test
sl@0
  6177
 * Adds the expected event aEvent to the first aLiveAnimCount anims
sl@0
  6178
 * Adds expected events observed by the rest of wserv
sl@0
  6179
 * Simulates events on wserv
sl@0
  6180
 */
sl@0
  6181
void CTEventTest::EventHandlerRemoval_CreateExpectedEvents(TInt aEventCount, TInt aLiveAnimCount)
sl@0
  6182
	{
sl@0
  6183
	RArray<TRawEvent> events;
sl@0
  6184
sl@0
  6185
	// Add expected events to anims
sl@0
  6186
	for (TInt eventCount = 0; eventCount < aEventCount; eventCount++)
sl@0
  6187
		{
sl@0
  6188
		TRawEvent rawEvent;
sl@0
  6189
		TInt scanCode = 33 + eventCount;
sl@0
  6190
		// Alternate key down, key up events.
sl@0
  6191
		if (eventCount%2 == 0)
sl@0
  6192
			{
sl@0
  6193
			rawEvent.Set(TRawEvent::EKeyDown, scanCode);
sl@0
  6194
			}
sl@0
  6195
		else
sl@0
  6196
			{
sl@0
  6197
			rawEvent.Set(TRawEvent::EKeyUp, scanCode);
sl@0
  6198
			}
sl@0
  6199
 		EventHandlerRemoval_AddExpectedEvent(rawEvent, aLiveAnimCount);
sl@0
  6200
		events.Append(rawEvent);
sl@0
  6201
		}
sl@0
  6202
sl@0
  6203
	// Simulates expected events
sl@0
  6204
	for (TInt eventCount = 0; eventCount < aEventCount; eventCount++)
sl@0
  6205
		{
sl@0
  6206
		TRawEvent event = events[eventCount];
sl@0
  6207
		iTest->SimulateKey(event.Type(), event.ScanCode());
sl@0
  6208
		}
sl@0
  6209
sl@0
  6210
	events.Close();
sl@0
  6211
	}
sl@0
  6212
sl@0
  6213
/**
sl@0
  6214
 * Adds the expected event aEvent to the first aLiveAnimCount anims
sl@0
  6215
 * Adds expected event observed by the rest of wserv
sl@0
  6216
 */
sl@0
  6217
void CTEventTest::EventHandlerRemoval_AddExpectedEvent(TRawEvent aEvent, TInt aLiveAnimCount)
sl@0
  6218
	{
sl@0
  6219
	// Add event to each of the anims
sl@0
  6220
	for (TInt animIndex = 0; animIndex < aLiveAnimCount; animIndex++)
sl@0
  6221
		{
sl@0
  6222
		TInt err = (*iRemovableAnims)[animIndex]->AddExpectedEvent(aEvent);
sl@0
  6223
		}
sl@0
  6224
	TInt eventType = (aEvent.Type() == TRawEvent::EKeyDown ? EEventKeyDown : EEventKeyUp);
sl@0
  6225
	AddExpectedKey(eventType, aEvent.ScanCode(), ETrue);
sl@0
  6226
	}
sl@0
  6227
sl@0
  6228
/**
sl@0
  6229
 * Checks each anim has received the expected events
sl@0
  6230
 */
sl@0
  6231
void CTEventTest::EventHandlerRemoval_CheckExpectedEventsReceivedByAnims()
sl@0
  6232
	{
sl@0
  6233
	for (TInt animIndex = iRemovableAnims->Count() - 1; animIndex >= 0; animIndex--)
sl@0
  6234
		{
sl@0
  6235
		if (!(*iRemovableAnims)[animIndex]->TestPassed())
sl@0
  6236
			{
sl@0
  6237
			Failed();
sl@0
  6238
			break;
sl@0
  6239
			}
sl@0
  6240
		}
sl@0
  6241
	}
sl@0
  6242
sl@0
  6243
sl@0
  6244
/**
sl@0
  6245
 * Create three anims. In the first anim's Offer raw event generate two more events
sl@0
  6246
 * which will call recursively the process raw event at the server side.
sl@0
  6247
 * The second and third anims are just removable anims. To simulate the scenario 
sl@0
  6248
 * for the defect INC095892. If teh fix for this is defect is not supplied then
sl@0
  6249
 * wserv would panic for this test case.
sl@0
  6250
 */
sl@0
  6251
void CTEventTest::EventHandlerRemoval_CheckRecursionOfProcessRawEvent()
sl@0
  6252
	{
sl@0
  6253
	iTheClientFlush=TheClient->iWs.SetAutoFlush(ETrue);
sl@0
  6254
	iQuequeClientFlush=iQueueClient->iWs.SetAutoFlush(ETrue);
sl@0
  6255
	
sl@0
  6256
	// Create 3 anims	
sl@0
  6257
	RRemovableAnim* eventRecurAnim = RRemovableAnim::NewLC(iQueueClient->iWin->BaseWin(), iAnimDll);
sl@0
  6258
	RRemovableAnim* removableAnim = RRemovableAnim::NewLC(iQueueClient->iWin->BaseWin(), iAnimDll);
sl@0
  6259
	RRemovableAnim* eventAnim = RRemovableAnim::NewLC(iQueueClient->iWin->BaseWin(), iAnimDll);
sl@0
  6260
sl@0
  6261
	// Add these anim as event handlers and set thier respective life time
sl@0
  6262
	eventRecurAnim->AddToEventHandlers();
sl@0
  6263
	eventRecurAnim->SetEventHandlerLifetime(4);
sl@0
  6264
	
sl@0
  6265
	removableAnim->AddToEventHandlers();
sl@0
  6266
	removableAnim->SetEventHandlerLifetime(1);
sl@0
  6267
	
sl@0
  6268
	eventAnim->AddToEventHandlers();
sl@0
  6269
	eventAnim->SetEventHandlerLifetime(2);
sl@0
  6270
sl@0
  6271
	TRawEvent rawEvent1;
sl@0
  6272
	TRawEvent rawEvent2;
sl@0
  6273
	TRawEvent rawEvent3;
sl@0
  6274
	rawEvent1.Set(TRawEvent::EKeyDown, 60);
sl@0
  6275
	rawEvent2.Set(TRawEvent::EKeyUp, 34);
sl@0
  6276
	rawEvent3.Set(TRawEvent::EKeyUp, 35);
sl@0
  6277
	
sl@0
  6278
	eventRecurAnim->AddExpectedEvent(rawEvent2);
sl@0
  6279
	eventRecurAnim->AddExpectedEvent(rawEvent3);
sl@0
  6280
	
sl@0
  6281
	removableAnim->AddExpectedEvent(rawEvent2);
sl@0
  6282
	
sl@0
  6283
	eventAnim->AddExpectedEvent(rawEvent2);
sl@0
  6284
	eventAnim->AddExpectedEvent(rawEvent3);
sl@0
  6285
sl@0
  6286
	// Add these events to iQueueClient for testing	
sl@0
  6287
	AddExpectedKey(EEventKeyUp, 34, ETrue);
sl@0
  6288
	AddExpectedKey(EEventKeyUp, 35, ETrue);
sl@0
  6289
sl@0
  6290
	iTest->SimulateKey(rawEvent1.Type(), rawEvent1.ScanCode());
sl@0
  6291
	
sl@0
  6292
	CleanupStack::PopAndDestroy(3, eventRecurAnim);
sl@0
  6293
	
sl@0
  6294
	TheClient->iWs.SetAutoFlush(iTheClientFlush);
sl@0
  6295
	iQueueClient->iWs.SetAutoFlush(iQuequeClientFlush);
sl@0
  6296
	}
sl@0
  6297
sl@0
  6298
/**
sl@0
  6299
 * Manually removes all anims from event handlers array
sl@0
  6300
 */
sl@0
  6301
void CTEventTest::EventHandlerRemoval_ManuallyRemoveAllAnims()
sl@0
  6302
	{
sl@0
  6303
	// Manually remove all anims from event handler list
sl@0
  6304
	for (TInt animIndex = iRemovableAnims->Count() - 1; animIndex >= 0; animIndex--)
sl@0
  6305
		{
sl@0
  6306
		(*iRemovableAnims)[animIndex]->RemoveFromEventHandlers();
sl@0
  6307
		}
sl@0
  6308
	}
sl@0
  6309
sl@0
  6310
/**
sl@0
  6311
 * Manually removes all anims from event handlers array
sl@0
  6312
 */
sl@0
  6313
void CTEventTest::EventHandlerRemoval_ResetAllAnims()
sl@0
  6314
	{
sl@0
  6315
	// Manually remove all anims from event handler list
sl@0
  6316
	for (TInt animIndex = iRemovableAnims->Count() - 1; animIndex >= 0; animIndex--)
sl@0
  6317
		{
sl@0
  6318
		(*iRemovableAnims)[animIndex]->Reset();
sl@0
  6319
		(*iRemovableAnims)[animIndex]->SetEventHandlerLifetime(0);
sl@0
  6320
		}
sl@0
  6321
	}
sl@0
  6322
sl@0
  6323
/**
sl@0
  6324
 *  Manually removes all anims from event handler list
sl@0
  6325
 *  Sends 2 events
sl@0
  6326
 *  Checks that no events have been received by anims
sl@0
  6327
 *  Resets all anims ready for next test
sl@0
  6328
 */
sl@0
  6329
void CTEventTest::EventHandlerRemoval_RemoveAndResetAllAnims()
sl@0
  6330
	{
sl@0
  6331
#if defined(DETAILED)
sl@0
  6332
	INFO_PRINTF1(_L(" Manually remove all anims from event handler list"));
sl@0
  6333
	INFO_PRINTF1(_L(" Send 2 events: none expected to be received by anims"));
sl@0
  6334
	INFO_PRINTF1(_L(" All expected to be received by wserv event processing"));
sl@0
  6335
#endif
sl@0
  6336
	// Manually remove all anims from event handler list
sl@0
  6337
	EventHandlerRemoval_ManuallyRemoveAllAnims();
sl@0
  6338
	// All expected to be received by wserv event processing
sl@0
  6339
	AddExpectedKey(EEventKeyDown,32,ETrue);
sl@0
  6340
	AddExpectedKey(EEventKeyUp,32,ETrue);
sl@0
  6341
	// Send 2 events - none expected to be received by anims,
sl@0
  6342
	iTest->SimulateKey(TRawEvent::EKeyDown,32);
sl@0
  6343
	iTest->SimulateKey(TRawEvent::EKeyUp,32);
sl@0
  6344
	// Flush events to wserv
sl@0
  6345
	TheClient->iWs.Flush();
sl@0
  6346
	// Check the anims have not received any events
sl@0
  6347
	EventHandlerRemoval_CheckExpectedEventsReceivedByAnims();
sl@0
  6348
#if defined(DETAILED)
sl@0
  6349
	INFO_PRINTF1(_L(" Cleanup before next step"));
sl@0
  6350
#endif
sl@0
  6351
	// Reset anims
sl@0
  6352
	EventHandlerRemoval_ResetAllAnims();
sl@0
  6353
	}
sl@0
  6354
sl@0
  6355
/**
sl@0
  6356
 * Destroys all anims in iRemovableAnims
sl@0
  6357
 * Resets iRemovableAnims
sl@0
  6358
 */
sl@0
  6359
void CTEventTest::EventHandlerRemoval_DestroyAllAnims()
sl@0
  6360
	{
sl@0
  6361
	if (iRemovableAnims)
sl@0
  6362
		{
sl@0
  6363
		// Destroy anims
sl@0
  6364
		for (TInt animIndex = iRemovableAnims->Count() - 1; animIndex >= 0; animIndex--)
sl@0
  6365
			{
sl@0
  6366
			RRemovableAnim* anim = (*iRemovableAnims)[animIndex];
sl@0
  6367
			if (anim)
sl@0
  6368
				{
sl@0
  6369
				anim->Destroy();
sl@0
  6370
				}
sl@0
  6371
			}
sl@0
  6372
		iRemovableAnims->Reset();
sl@0
  6373
		}
sl@0
  6374
	}
sl@0
  6375
sl@0
  6376
/**
sl@0
  6377
SYMTestCaseID			GRAPHICS-WSERV-0496
sl@0
  6378
sl@0
  6379
@SYMDEF					DEF133776
sl@0
  6380
sl@0
  6381
@SYMTestCaseDesc		Cancels key captures using all combinations of 
sl@0
  6382
 RWindowGroup::Capture...() and RWindowGroup::Cancel...() APIs.
sl@0
  6383
sl@0
  6384
@SYMTestPriority 		High
sl@0
  6385
sl@0
  6386
@SYMTestStatus 			Implemented
sl@0
  6387
sl@0
  6388
@SYMTestActions 		Call each of the RWindowGroup::Capture***() APIs followed by
sl@0
  6389
 each of the RWindowGroup::CancelCapture***() APIs.
sl@0
  6390
 RWindowGroup::Capture***() APIs:
sl@0
  6391
 	CaptureKey(TUint, TUint, TUint)
sl@0
  6392
 	CaptureKey(TUint, TUint, TUint, TInt)
sl@0
  6393
 	CaptureKeyUpAndDowns(TUint, TUint, TUint)
sl@0
  6394
 	CaptureKeyUpAndDowns(TUint, TUint, TUint, TInt)
sl@0
  6395
 	CaptureLongKey(TUint, TUint, TUint, TUint, TInt, TUint)
sl@0
  6396
  	CaptureLongKey(TTimeIntervalMicroSeconds32, TUint, TUint, TUint, TUint, TInt, TUint)
sl@0
  6397
 RWindowGroup::CancelCapture***() APIs:
sl@0
  6398
	CancelCaptureKey()
sl@0
  6399
	CancelCaptureKeyUpAndDowns()
sl@0
  6400
	CancelCaptureLongKey()
sl@0
  6401
sl@0
  6402
@SYMTestExpectedResults WServ should handle matched and mismatched Cancel 
sl@0
  6403
 and Capture calls without panicking.
sl@0
  6404
 */
sl@0
  6405
void CTEventTest::MismatchedCapture_NextSetOfEventsL()
sl@0
  6406
	{
sl@0
  6407
	if (iEventSet == 0)
sl@0
  6408
		AddExpectedEvent(EEventFocusGained);
sl@0
  6409
	
sl@0
  6410
	if (iEventSet < (EMaxCaptureKeyApis*EMaxCancelCaptureKeyApis))
sl@0
  6411
		{
sl@0
  6412
		TestCaptureAndCancelCapturePair(static_cast<TCaptureKeyApis>(iEventSet%EMaxCaptureKeyApis), static_cast<TCancelCaptureKeyApis>(iEventSet/EMaxCaptureKeyApis));
sl@0
  6413
		iEventSet++;
sl@0
  6414
		}	
sl@0
  6415
	else
sl@0
  6416
		{
sl@0
  6417
		CActiveScheduler::Stop();				
sl@0
  6418
		}
sl@0
  6419
	}
sl@0
  6420
sl@0
  6421
/** Helper function that applies a key capture and then cancels it using the
sl@0
  6422
passed capture and cancel RWindowGroup APIs.
sl@0
  6423
sl@0
  6424
@param aCaptureApi Enum value specifying the capture API to use
sl@0
  6425
@param aCancelCaptureApi Enum value specifying the cancel capture API to use
sl@0
  6426
 */
sl@0
  6427
void CTEventTest::TestCaptureAndCancelCapturePair(TCaptureKeyApis aCaptureApi, TCancelCaptureKeyApis aCancelCaptureApi)
sl@0
  6428
	{		
sl@0
  6429
#if defined(LOGGING)
sl@0
  6430
	_LIT(KCaptureKey, "CaptureKey");
sl@0
  6431
	_LIT(KCaptureKeyKeyUpAndDowns, "CaptureKeyKeyUpAndDowns");
sl@0
  6432
	_LIT(KCaptureLongKey, "CaptureLongKey");	
sl@0
  6433
	_LIT(KCancelCaptureKey, "CancelCaptureKey");
sl@0
  6434
	_LIT(KCancelCaptureKeyKeyUpAndDowns, "CancelCaptureKeyKeyUpAndDowns");
sl@0
  6435
	_LIT(KCancelCaptureLongKey, "CancelCaptureLongKey");
sl@0
  6436
	_LIT(KLog,"TestCaptureAndCancelCapturePair: %S, %S");
sl@0
  6437
	TPtrC captures[EMaxCaptureKeyApis] = {KCaptureKey(), KCaptureKey(), KCaptureKeyKeyUpAndDowns(), KCaptureKeyKeyUpAndDowns(), KCaptureLongKey(), KCaptureLongKey()};
sl@0
  6438
	TPtrC cancelCaptures[EMaxCancelCaptureKeyApis] = {KCancelCaptureKey(), KCancelCaptureKeyKeyUpAndDowns(), KCancelCaptureLongKey()};
sl@0
  6439
	TLogMessageText logMessageText;	
sl@0
  6440
	logMessageText.Format(KLog, &captures[aCaptureApi], &cancelCaptures[aCancelCaptureApi]);
sl@0
  6441
	INFO_PRINTF1(logMessageText);
sl@0
  6442
#endif // LOGGING	
sl@0
  6443
	
sl@0
  6444
	// Start a key capture using one of the six RWindowGroup Capture***() APIs
sl@0
  6445
	switch (aCaptureApi)
sl@0
  6446
		{
sl@0
  6447
		case ECaptureKey1:
sl@0
  6448
		case ECaptureKey2:
sl@0
  6449
			// Test RWindowGroup::CaptureKey()
sl@0
  6450
			if (aCaptureApi == ECaptureKey1) 				
sl@0
  6451
				iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureKey('A',0,0);
sl@0
  6452
			else
sl@0
  6453
				iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureKey('A',0,0,1); // priority 1 (default priority is 0)
sl@0
  6454
			iTest->SimulateKey(TRawEvent::EKeyDown, 'A');
sl@0
  6455
			TheClient->iWs.Flush();
sl@0
  6456
			User::After(KeyRepeatTime()*3/2);
sl@0
  6457
			iTest->SimulateKey(TRawEvent::EKeyUp, 'A');
sl@0
  6458
			TheClient->iWs.Flush();
sl@0
  6459
			AddExpectedKey(EEventKeyDown, 'A');
sl@0
  6460
			AddExpectedKey(EEventKey,'A','a');
sl@0
  6461
			AddExpectedKey(EEventKey,'A','a',1);			
sl@0
  6462
			AddExpectedKey(EEventKeyUp, 'A');
sl@0
  6463
			break;				
sl@0
  6464
			
sl@0
  6465
		case ECaptureKeyUpAndDowns1:
sl@0
  6466
		case ECaptureKeyUpAndDowns2:
sl@0
  6467
			// Test RWindowGroup::CaptureKeyUpAndDowns()
sl@0
  6468
			if (aCaptureApi == ECaptureKeyUpAndDowns1)			
sl@0
  6469
				iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureKeyUpAndDowns(EStdKeySpace,0,0);
sl@0
  6470
			else
sl@0
  6471
				iCaptureKey=iQueueClient->iGroup->GroupWin()->CaptureKeyUpAndDowns(EStdKeySpace,0,0,1); // priority 1 (default priority is 0)
sl@0
  6472
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  6473
			TheClient->iWs.Flush();			
sl@0
  6474
			User::After(KeyRepeatTime()*3/2);
sl@0
  6475
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  6476
			TheClient->iWs.Flush();
sl@0
  6477
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  6478
			AddExpectedKey(EEventKey,EStdKeySpace,' ');
sl@0
  6479
			AddExpectedKey(EEventKey,EStdKeySpace,' ',1);
sl@0
  6480
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  6481
			break;	
sl@0
  6482
			
sl@0
  6483
		case ECaptureLongKey1:
sl@0
  6484
		case ECaptureLongKey2:
sl@0
  6485
			{
sl@0
  6486
			// Test RWindowGroup::CaptureLongKey()
sl@0
  6487
			TTimeIntervalMicroSeconds32 repeat = KeyRepeatTime();
sl@0
  6488
			if (aCaptureApi == ECaptureLongKey1)
sl@0
  6489
				{
sl@0
  6490
				iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureLongKey(' ', 'a', 0, 0, 2, ELongCaptureNormal);	
sl@0
  6491
				}
sl@0
  6492
			else
sl@0
  6493
				{
sl@0
  6494
				repeat = KeyRepeatTime()/2;
sl@0
  6495
				iCaptureKey = iQueueClient->iGroup->GroupWin()->CaptureLongKey(repeat, ' ', 'a', 0, 0, 2, ELongCaptureNormal);
sl@0
  6496
				}					
sl@0
  6497
			iQueueClient->iWs.Flush();
sl@0
  6498
			iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeySpace);
sl@0
  6499
			TheClient->iWs.Flush();
sl@0
  6500
			User::After(KeyRepeatTime()*3/2);
sl@0
  6501
			iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeySpace);
sl@0
  6502
			TheClient->iWs.Flush();
sl@0
  6503
			AddExpectedKey(EEventKeyDown,EStdKeySpace);
sl@0
  6504
			AddExpectedKey(EEventKey,EStdKeySpace,' ');
sl@0
  6505
			AddExpectedKey(EEventKey,EStdKeySpace,'a',1);
sl@0
  6506
			AddExpectedKey(EEventKeyUp,EStdKeySpace);
sl@0
  6507
			}
sl@0
  6508
			break;
sl@0
  6509
				
sl@0
  6510
		default:
sl@0
  6511
			INFO_PRINTF1(_L("Unexpected TCaptureKeyApis value passed to CTEventTest::TestCaptureAndCancelCapturePair()"));
sl@0
  6512
			TEST(EFalse);
sl@0
  6513
			break;
sl@0
  6514
		}	
sl@0
  6515
	
sl@0
  6516
	if (iCaptureKey)
sl@0
  6517
		{
sl@0
  6518
		// End a capture using one of the three RWindowGroup CancelCapture***() APIs,
sl@0
  6519
		// for each Capture***() API each one of these will be called, therefore there will
sl@0
  6520
		// be one correct CancelCapture***() APIs called and two incorrect CancelCapture***() 
sl@0
  6521
		// APIs called for each Capture***() API.
sl@0
  6522
		switch (aCancelCaptureApi)
sl@0
  6523
			{
sl@0
  6524
			case ECancelCaptureKey:
sl@0
  6525
				iQueueClient->iGroup->GroupWin()->CancelCaptureKey(iCaptureKey);
sl@0
  6526
				break;
sl@0
  6527
			case ECancelCaptureKeyUpAndDowns:
sl@0
  6528
				iQueueClient->iGroup->GroupWin()->CancelCaptureKeyUpAndDowns(iCaptureKey);
sl@0
  6529
				break;
sl@0
  6530
			case ECancelCaptureLongKey:
sl@0
  6531
				iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  6532
				break;
sl@0
  6533
			default:
sl@0
  6534
				INFO_PRINTF1(_L("Unexpected TCancelCaptureKeyApis value passed to CTEventTest::TestCaptureAndCancelCapturePair()"));
sl@0
  6535
				TEST(EFalse);
sl@0
  6536
				break;
sl@0
  6537
			}
sl@0
  6538
		
sl@0
  6539
		// If an mistmatched CancelCapture***() API was called, call the correct one now
sl@0
  6540
		// to make sure the Capture/CancelCapture state is clean before the next test starts
sl@0
  6541
		if ((aCaptureApi/2) != aCancelCaptureApi)
sl@0
  6542
			{
sl@0
  6543
			switch (aCaptureApi)				
sl@0
  6544
				{
sl@0
  6545
				case ECaptureKey1:
sl@0
  6546
				case ECaptureKey2:
sl@0
  6547
					iQueueClient->iGroup->GroupWin()->CancelCaptureKey(iCaptureKey);
sl@0
  6548
					break;
sl@0
  6549
				case ECaptureKeyUpAndDowns1:
sl@0
  6550
				case ECaptureKeyUpAndDowns2:
sl@0
  6551
					iQueueClient->iGroup->GroupWin()->CancelCaptureKeyUpAndDowns(iCaptureKey);
sl@0
  6552
					break;
sl@0
  6553
				case ECaptureLongKey1:
sl@0
  6554
				case ECaptureLongKey2:
sl@0
  6555
					iQueueClient->iGroup->GroupWin()->CancelCaptureLongKey(iCaptureKey);
sl@0
  6556
					break;
sl@0
  6557
				}
sl@0
  6558
			}
sl@0
  6559
		}
sl@0
  6560
		
sl@0
  6561
	TheClient->iWs.Flush();
sl@0
  6562
	}	
sl@0
  6563
sl@0
  6564
/*void CTEventTest::_NextSetOfEvents()		//Template for these functions
sl@0
  6565
	{
sl@0
  6566
	switch(iEventSet++)
sl@0
  6567
		{
sl@0
  6568
		case 0:
sl@0
  6569
			iQueueClient->iWin->WinTreeNode()->;		//Set up window
sl@0
  6570
			iQueueClient->iWin->BaseWin()->;
sl@0
  6571
			iQueueClient->iGroup->GroupWin()->;
sl@0
  6572
			iQueueClient->iWs.Flush();					//Make take effect
sl@0
  6573
			SimulateEvent(TRawEvent::);					//Create an event
sl@0
  6574
			TheClient->iWs.Flush();						//Send event
sl@0
  6575
			AddExpectedEvent(EEventFocusGained);		//Always get a focus gain at start
sl@0
  6576
			AddExpectedEvent();							//Expect the event that was created above
sl@0
  6577
			break;
sl@0
  6578
		case 1:
sl@0
  6579
			iQueueClient->iWs.Flush();
sl@0
  6580
			SimulateEvent(TRawEvent::);
sl@0
  6581
			TheClient->iWs.Flush();
sl@0
  6582
			AddExpectedEvent();
sl@0
  6583
			break;
sl@0
  6584
		default:
sl@0
  6585
			CActiveScheduler::Stop();
sl@0
  6586
			break;
sl@0
  6587
		}
sl@0
  6588
	TheClient->iWs.Flush();
sl@0
  6589
	}*/
sl@0
  6590
sl@0
  6591
/**
sl@0
  6592
	@SYMTestCaseID GRAPHICS-WSERV-CODEBASE-WSERV-0051
sl@0
  6593
  
sl@0
  6594
	@SYMPREQ PGM027
sl@0
  6595
  
sl@0
  6596
	@SYMTestCaseDesc Tests SetKeyboardRepeatRate API. 
sl@0
  6597
   
sl@0
  6598
	@SYMTestPriority 1 
sl@0
  6599
  
sl@0
  6600
	@SYMTestStatus Implemented
sl@0
  6601
   
sl@0
  6602
	@SYMTestActions This test tryes to call SetKeyboardRepeatRate with invalid time values\n
sl@0
  6603
			
sl@0
  6604
	@SYMTestExpectedResults KeyRepeatRateNegTest should tests the API SetKeyboardRepeatRate return value\n
sl@0
  6605
	The test should pass and API should return KErrArgument.
sl@0
  6606
sl@0
  6607
 */
sl@0
  6608
void CTEventTest::KeyRepeatRateNegTest(TInt aInitialRepeat, TInt aRepeat)
sl@0
  6609
	{
sl@0
  6610
	((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-CODEBASE-WSERV-0051"));
sl@0
  6611
	TInt ret=TheClient->iWs.SetKeyboardRepeatRate(TTimeIntervalMicroSeconds32(aInitialRepeat), TTimeIntervalMicroSeconds32(aRepeat));
sl@0
  6612
	TEST(ret==KErrArgument);
sl@0
  6613
	TRAPD(err,((CTEventTestStep*)iStep)->RecordTestResultL());
sl@0
  6614
   	if (err!=KErrNone)
sl@0
  6615
    		INFO_PRINTF1(_L("Failed to record test result"));
sl@0
  6616
	}
sl@0
  6617
sl@0
  6618
void CTEventTest::RunTestsL(TBool aNeedChildWindows/*=EFalse*/)
sl@0
  6619
	{
sl@0
  6620
	iQueueClient=new(ELeave) CTQueueClient(this);
sl@0
  6621
	iQueueClient->SetScreenNumber(iTest->iScreenNumber);
sl@0
  6622
	iQueueClient->ConstructL(aNeedChildWindows);
sl@0
  6623
	iEventSet=0;
sl@0
  6624
	TRAPD(err,NextSetOfEventsL());
sl@0
  6625
	if (err!=KErrNone)
sl@0
  6626
		{
sl@0
  6627
		iFailed=ETrue;
sl@0
  6628
		return;
sl@0
  6629
		}
sl@0
  6630
//
sl@0
  6631
	CActiveScheduler::Start();
sl@0
  6632
//
sl@0
  6633
	TInt eventsLeft=iQueueClient->EventQueue()->EventsLeft();
sl@0
  6634
	if (eventsLeft>0)
sl@0
  6635
		iFailed=ETrue;
sl@0
  6636
	delete iVisWins1;
sl@0
  6637
	iVisWins1 = NULL;
sl@0
  6638
	delete iVisWins2;
sl@0
  6639
	iVisWins2 = NULL;
sl@0
  6640
	delete iQueueClient;
sl@0
  6641
	iQueueClient=NULL;
sl@0
  6642
	}
sl@0
  6643
sl@0
  6644
void CTEventTest::RunTestsRestoreAreaL(TBool aNeedChildWindows)
sl@0
  6645
	{
sl@0
  6646
	TRect area(TheClient->iWs.PointerCursorArea());
sl@0
  6647
	RunTestsL(aNeedChildWindows);
sl@0
  6648
	TheClient->iWs.SetPointerCursorArea(area);
sl@0
  6649
	}
sl@0
  6650
sl@0
  6651
/*void CTEventTest::QueuePurgingL()
sl@0
  6652
	{
sl@0
  6653
	RunTestsL(EFalse);
sl@0
  6654
	}
sl@0
  6655
sl@0
  6656
void CTEventTest::SendEventL()
sl@0
  6657
	{
sl@0
  6658
	RunTestsL(EFalse);
sl@0
  6659
	}
sl@0
  6660
sl@0
  6661
void CTEventTest::InvisibleWindowL()
sl@0
  6662
	{
sl@0
  6663
	RunTestsL(ETrue);
sl@0
  6664
	}
sl@0
  6665
sl@0
  6666
void CTEventTest::JavaAdditionsL()
sl@0
  6667
	{
sl@0
  6668
	RunTestsL(EFalse);
sl@0
  6669
	}*/
sl@0
  6670
sl@0
  6671
void CTEventTest::WindowCapBugL()
sl@0
  6672
	{
sl@0
  6673
	RunTestsL(ETrue);
sl@0
  6674
	}
sl@0
  6675
sl@0
  6676
/*void CTEventTest::XyInputTypeL()
sl@0
  6677
	{
sl@0
  6678
	RunTestsL(EFalse);
sl@0
  6679
	}
sl@0
  6680
sl@0
  6681
void CTEventTest::MovingPointerCursorL()
sl@0
  6682
	{
sl@0
  6683
	RunTestsRestoreAreaL(ETrue);
sl@0
  6684
	}
sl@0
  6685
sl@0
  6686
void CTEventTest::RotatedModeL()
sl@0
  6687
	{
sl@0
  6688
	RunTestsRestoreAreaL(EFalse);
sl@0
  6689
	}*/
sl@0
  6690
sl@0
  6691
/**
sl@0
  6692
* This test creates one anim and calls AddToEventHandlers() twenty times.
sl@0
  6693
* it shouldn't add the same anim to event handler if anim is already in handler.
sl@0
  6694
*/
sl@0
  6695
void CTEventTest::EventHandlerRemoval_AddEventHandlerMultipleTimes()
sl@0
  6696
	{
sl@0
  6697
	iTheClientFlush=TheClient->iWs.SetAutoFlush(ETrue);
sl@0
  6698
	iQuequeClientFlush=iQueueClient->iWs.SetAutoFlush(ETrue);
sl@0
  6699
sl@0
  6700
	RRemovableAnim* eventTestAnim = RRemovableAnim::NewLC(iQueueClient->iWin->BaseWin(), iAnimDll);
sl@0
  6701
sl@0
  6702
	// Call AddToEventHandlers() on same anim 20 times, it should add this anim in event handler only once
sl@0
  6703
	for (TInt count = 0; count < 20; count++)
sl@0
  6704
		eventTestAnim->AddToEventHandlers();
sl@0
  6705
	eventTestAnim->SetEventHandlerLifetime(1);
sl@0
  6706
sl@0
  6707
	TRawEvent rawEvent1;
sl@0
  6708
	rawEvent1.Set(TRawEvent::EKeyUp, 34);
sl@0
  6709
sl@0
  6710
	eventTestAnim->AddExpectedEvent(rawEvent1);
sl@0
  6711
sl@0
  6712
	// Add these events to iQueueClient for testing
sl@0
  6713
	AddExpectedKey(EEventKeyUp, 34, ETrue);
sl@0
  6714
sl@0
  6715
	iTest->SimulateKey(TRawEvent::EKeyUp, 34);
sl@0
  6716
sl@0
  6717
	CleanupStack::PopAndDestroy(eventTestAnim);
sl@0
  6718
	TheClient->iWs.SetAutoFlush(iTheClientFlush);
sl@0
  6719
	iQueueClient->iWs.SetAutoFlush(iQuequeClientFlush);
sl@0
  6720
	}
sl@0
  6721
sl@0
  6722
void CTEventTest::EventQueuePtrCrashTest()
sl@0
  6723
// Code designed to hit the defect reported in INC109199 & INC105430, needs a very specific sequence of
sl@0
  6724
// events and client disconnections to hit the exact problem state.
sl@0
  6725
	{
sl@0
  6726
	const TInt KNumTestEvents=6;
sl@0
  6727
	const TInt KMaxNumTestEvents=16;
sl@0
  6728
	// Number of iterations needs to be as high as the queue granularity to make sure at least
sl@0
  6729
	// once around we actually hit the code to change the queue size
sl@0
  6730
	const TInt KNumEvTestIterations=4;
sl@0
  6731
	const TInt KNumBaseTestSessions=KNumEvTestIterations+1;
sl@0
  6732
	const TInt KNumMainTestSessions=13;
sl@0
  6733
	const TInt KMaxNumSessions=KNumBaseTestSessions+KNumMainTestSessions+KNumEvTestIterations;
sl@0
  6734
	RWsSession wsSessions[KMaxNumSessions];
sl@0
  6735
	RWindowGroup wGroups[KMaxNumSessions];
sl@0
  6736
	for(TInt iterationLoop=0;iterationLoop<KNumEvTestIterations;iterationLoop++)
sl@0
  6737
		{
sl@0
  6738
		const TInt numTestSessions=KNumBaseTestSessions+KNumMainTestSessions+iterationLoop;
sl@0
  6739
	#if defined(LOGGING)
sl@0
  6740
		_LIT(KLog1,"EventQueuePtrCrashTest: Test Creating %d Clients");
sl@0
  6741
		LOG_MESSAGE2(KLog1,numTestSessions);
sl@0
  6742
	#endif
sl@0
  6743
		for(TInt testSessionIndex=0;testSessionIndex<numTestSessions;testSessionIndex++)
sl@0
  6744
			{
sl@0
  6745
			RWsSession& ws=wsSessions[testSessionIndex];
sl@0
  6746
			User::LeaveIfError(ws.Connect());
sl@0
  6747
			wGroups[testSessionIndex]=RWindowGroup(ws);
sl@0
  6748
			RWindowGroup& group=wGroups[testSessionIndex];
sl@0
  6749
			User::LeaveIfError(group.Construct(testSessionIndex+1,EFalse)); 
sl@0
  6750
			if (testSessionIndex>=KNumBaseTestSessions)
sl@0
  6751
				{
sl@0
  6752
				TWsEvent event;
sl@0
  6753
				for(TInt evLoop=0;evLoop<KNumTestEvents;evLoop++)
sl@0
  6754
					{
sl@0
  6755
					event.SetType(1001+evLoop);
sl@0
  6756
					ws.SendEventToWindowGroup(group.Identifier(),event);
sl@0
  6757
					}
sl@0
  6758
				if (testSessionIndex==(numTestSessions-1))
sl@0
  6759
					{
sl@0
  6760
					for(TInt eventIndex=0;eventIndex<KMaxNumTestEvents;eventIndex++)
sl@0
  6761
						{
sl@0
  6762
						event.SetType(1001+eventIndex);
sl@0
  6763
						ws.SendEventToAllWindowGroups(event);
sl@0
  6764
						}
sl@0
  6765
					}
sl@0
  6766
				}
sl@0
  6767
			}
sl@0
  6768
	#if defined(LOGGING)
sl@0
  6769
		_LIT(KLog2,"EventQueuePtrCrashTest: Closing Clients");
sl@0
  6770
		LOG_MESSAGE(KLog2);
sl@0
  6771
	#endif
sl@0
  6772
		TInt closeLoop=0;
sl@0
  6773
		while(closeLoop<KNumBaseTestSessions)
sl@0
  6774
			{
sl@0
  6775
			wsSessions[closeLoop++].Close();
sl@0
  6776
			}
sl@0
  6777
		RWsSession extraSession1;
sl@0
  6778
		User::LeaveIfError(extraSession1.Connect());
sl@0
  6779
		extraSession1.Close();
sl@0
  6780
		while(closeLoop<numTestSessions)
sl@0
  6781
			{
sl@0
  6782
			wsSessions[closeLoop++].Close();
sl@0
  6783
			}
sl@0
  6784
		}
sl@0
  6785
	}
sl@0
  6786
sl@0
  6787
/**
sl@0
  6788
Test queue size of the new queue can be initialized to be at least EMinQueueSize.
sl@0
  6789
@param aEventReadyCancel whether there is inactive client. This parameter can be specified
sl@0
  6790
		to test different code path for expanding spaces for new queue. If the value is false, 
sl@0
  6791
		the space for the new queue is gained from current global queue or by growing global queue size. 
sl@0
  6792
		Otherwise, there are inactive clients which	cancel their listening to event, in addition, 
sl@0
  6793
		memory allocation is simulated to be failed when growing global queue size, 
sl@0
  6794
		so that space is gained by purging events from inactive clients. 
sl@0
  6795
*/
sl@0
  6796
void CTEventTest::InitializeQueueSizeTestL(TBool aEventReadyCancel)
sl@0
  6797
	{
sl@0
  6798
	const TInt numEvents = 50;
sl@0
  6799
	const TInt maxClients = 3; 
sl@0
  6800
	const TInt oneSecond = 1000000;
sl@0
  6801
	RWsSession wsSession[maxClients];
sl@0
  6802
	RWindowGroup groupWin[maxClients];
sl@0
  6803
	TRequestStatus status;
sl@0
  6804
	TInt cliHanGrpWin = 10000;
sl@0
  6805
	RTimer timer;
sl@0
  6806
	timer.CreateLocal();
sl@0
  6807
	CleanupClosePushL(timer);
sl@0
  6808
	// To have the test creating different number of clients is to make sure
sl@0
  6809
	// there is at least one of the tests meets the below requirement:
sl@0
  6810
	// the number of the connections when the new queue created for test is not multiple
sl@0
  6811
	// of queue granularity, so that the queue size initialization is not done by growing
sl@0
  6812
	// global queue size due to the increase of the connections.
sl@0
  6813
	for (TInt numClients = maxClients - 1; numClients <= maxClients; numClients++)
sl@0
  6814
		{
sl@0
  6815
		TInt clientIndex;
sl@0
  6816
		//Create test clients
sl@0
  6817
		for (clientIndex = 0; clientIndex < numClients; clientIndex++)
sl@0
  6818
			{
sl@0
  6819
			User::LeaveIfError(wsSession[clientIndex].Connect());
sl@0
  6820
			CleanupClosePushL(wsSession[clientIndex]);
sl@0
  6821
			groupWin[clientIndex] = RWindowGroup(wsSession[clientIndex]);
sl@0
  6822
			User::LeaveIfError(groupWin[clientIndex].Construct(cliHanGrpWin++));
sl@0
  6823
			CleanupClosePushL(groupWin[clientIndex]);
sl@0
  6824
			}
sl@0
  6825
		
sl@0
  6826
		// Cancel listening to event for the first client. 
sl@0
  6827
		// This is for testing PurgeInactiveEvents. 
sl@0
  6828
		if (aEventReadyCancel)
sl@0
  6829
			{
sl@0
  6830
			wsSession[0].EventReady(&status);
sl@0
  6831
			wsSession[0].EventReadyCancel();
sl@0
  6832
			User::WaitForRequest(status);
sl@0
  6833
			}
sl@0
  6834
sl@0
  6835
		//send events to window group to make the queue full.
sl@0
  6836
		TWsEvent event;
sl@0
  6837
		TInt evLoop;
sl@0
  6838
		for(evLoop = 0; evLoop < numEvents; evLoop++)
sl@0
  6839
			{
sl@0
  6840
			event.SetType(2001 + evLoop);
sl@0
  6841
			TheClient->iWs.SendEventToWindowGroup(groupWin[0].Identifier(),event);
sl@0
  6842
			TheClient->iWs.SendEventToWindowGroup(groupWin[1].Identifier(),event);
sl@0
  6843
			}
sl@0
  6844
		
sl@0
  6845
		//To create a new client, although the queue is full, wserv will guarantee to initialize 
sl@0
  6846
		//the queue size of the new queue to at least EMinQueueSize. So that it can response to 
sl@0
  6847
		//the event.
sl@0
  6848
		RWsSession testWsSession;
sl@0
  6849
		RWindowGroup testGroupWin;
sl@0
  6850
		TRequestStatus testStatus;
sl@0
  6851
		if (aEventReadyCancel)
sl@0
  6852
			{
sl@0
  6853
			//Simulate the heap allocation failure to test expanding spaces by purge 
sl@0
  6854
			//events from inactive clients when initialize queue size.
sl@0
  6855
			TInt failAt = 1;
sl@0
  6856
			TInt err;
sl@0
  6857
			do	{
sl@0
  6858
				TheClient->iWs.HeapSetFail(RHeap::EFailNext, failAt++);
sl@0
  6859
				TheClient->iWs.Flush();
sl@0
  6860
				err = testWsSession.Connect();
sl@0
  6861
				TheClient->iWs.HeapSetFail(RHeap::ENone, 1);
sl@0
  6862
				} while (err == KErrNoMemory);
sl@0
  6863
			User::LeaveIfError(err);
sl@0
  6864
			}
sl@0
  6865
		else
sl@0
  6866
			{
sl@0
  6867
			User::LeaveIfError(testWsSession.Connect());
sl@0
  6868
			}
sl@0
  6869
		CleanupClosePushL(testWsSession);
sl@0
  6870
		testGroupWin = RWindowGroup(testWsSession);
sl@0
  6871
		User::LeaveIfError(testGroupWin.Construct(cliHanGrpWin++));
sl@0
  6872
		CleanupClosePushL(testGroupWin);
sl@0
  6873
	
sl@0
  6874
		//Send events to the newly created client.
sl@0
  6875
		// The Debug version of WServ puts a EEventFocusGained into the event 
sl@0
  6876
		// before this test's custom event, so leave one slot in the queue 
sl@0
  6877
		// for it.
sl@0
  6878
#if (defined _DEBUG)
sl@0
  6879
		TInt testEventCount = EMinQueueSize - 1; 
sl@0
  6880
#else
sl@0
  6881
		TInt testEventCount = EMinQueueSize; 
sl@0
  6882
#endif
sl@0
  6883
		for(TInt evLoop = 0; evLoop < testEventCount; evLoop++)
sl@0
  6884
			{
sl@0
  6885
			event.SetType(3001 + evLoop);
sl@0
  6886
			TheClient->iWs.SendEventToWindowGroup(testGroupWin.Identifier(),event);
sl@0
  6887
			}
sl@0
  6888
		
sl@0
  6889
		//Check the event queue.
sl@0
  6890
		//Having a timer here to avoid infinitely wait for event.
sl@0
  6891
		TInt expectedEvent = 3001;
sl@0
  6892
		for(TInt evLoop = 0; evLoop < EMinQueueSize; evLoop++)
sl@0
  6893
            {
sl@0
  6894
			testWsSession.EventReady(&testStatus);
sl@0
  6895
			TRequestStatus timerStatus;
sl@0
  6896
			timer.After(timerStatus, oneSecond);
sl@0
  6897
			User::WaitForRequest(testStatus, timerStatus);
sl@0
  6898
			TEST(testStatus == 0);
sl@0
  6899
			if (testStatus == 0) 
sl@0
  6900
				{
sl@0
  6901
				// Tests the event
sl@0
  6902
				testWsSession.GetEvent(event);
sl@0
  6903
				// WServ sometimes puts a EEventFocusGained event into the queue 
sl@0
  6904
				// before the test's custom event, so ignore it.
sl@0
  6905
				if (event.Type() != EEventFocusGained)
sl@0
  6906
					{
sl@0
  6907
					TEST(event.Type() == expectedEvent);
sl@0
  6908
					expectedEvent++;
sl@0
  6909
					}
sl@0
  6910
				// testStatus has been completed. Cancel the timer.
sl@0
  6911
				timer.Cancel();
sl@0
  6912
				User::WaitForRequest(timerStatus);
sl@0
  6913
				}
sl@0
  6914
			else
sl@0
  6915
				{
sl@0
  6916
				// Times out, cancel the event notification
sl@0
  6917
				testWsSession.EventReadyCancel();
sl@0
  6918
				User::WaitForRequest(testStatus);
sl@0
  6919
				}
sl@0
  6920
			}
sl@0
  6921
		CleanupStack::PopAndDestroy(2*numClients + 2, &wsSession[0]);
sl@0
  6922
		}
sl@0
  6923
	CleanupStack::PopAndDestroy(&timer);
sl@0
  6924
	}
sl@0
  6925
sl@0
  6926
void CTEventTest::SimulateRepeatEvent(TInt aScanCode, TInt aRepeats/*=0*/)
sl@0
  6927
    {
sl@0
  6928
    TRawEvent rawEvent;
sl@0
  6929
    if (aRepeats)
sl@0
  6930
        rawEvent.Set(TRawEvent::EKeyRepeat, aScanCode, aRepeats);
sl@0
  6931
    else
sl@0
  6932
        rawEvent.Set(TRawEvent::EKeyRepeat, aScanCode);
sl@0
  6933
    UserSvr::AddEvent(rawEvent);
sl@0
  6934
    }
sl@0
  6935
sl@0
  6936
void CTEventTest::RawEventRepeatTest_NextSetOfEventsL()
sl@0
  6937
    {
sl@0
  6938
    switch(iEventSet++)
sl@0
  6939
        {
sl@0
  6940
        case 0:
sl@0
  6941
            // Tests EKeyRepeat without repeat value set.
sl@0
  6942
            SimulateRepeatEvent(32);
sl@0
  6943
            
sl@0
  6944
            // Tests EKeyRepeat with repeat value set to 2.
sl@0
  6945
            SimulateRepeatEvent(33,2);
sl@0
  6946
          
sl@0
  6947
            AddExpectedEvent(EEventFocusGained);
sl@0
  6948
            AddExpectedKey(EEventKey, 32);
sl@0
  6949
            AddExpectedKey(EEventKey, 33, 0, 2);
sl@0
  6950
            break;
sl@0
  6951
        default:
sl@0
  6952
             CActiveScheduler::Stop();
sl@0
  6953
             break;
sl@0
  6954
        }
sl@0
  6955
    TheClient->iWs.Flush();
sl@0
  6956
    }
sl@0
  6957
sl@0
  6958
void CTEventTest::RunTestCaseL(TInt /*aCurTestCase*/)
sl@0
  6959
	{
sl@0
  6960
	_LIT(KTest0,"General 1");
sl@0
  6961
	_LIT(KTest1,"Event queue purging");
sl@0
  6962
	_LIT(KTest2,"SendEvent");
sl@0
  6963
	_LIT(KTest3,"SendEventToAll");
sl@0
  6964
	_LIT(KTest4,"InvisibleWindow");
sl@0
  6965
	_LIT(KTest5,"JavaAdditions");
sl@0
  6966
	_LIT(KTest6,"WindowCaptureBug");
sl@0
  6967
	_LIT(KTest7,"XYInput Types");
sl@0
  6968
	_LIT(KTest8,"MovingPointerCursor");
sl@0
  6969
	_LIT(KTest9,"Rotated Modes");
sl@0
  6970
	_LIT(KTest10,"Anim Event");
sl@0
  6971
	_LIT(KTest11,"Focus Changed");
sl@0
  6972
	_LIT(KTest12,"On/Off Events");
sl@0
  6973
	_LIT(KTest13,"Virtual Keyboard");
sl@0
  6974
	_LIT(KTest14,"Key Clicks");
sl@0
  6975
	_LIT(KTest15,"Capture Long");
sl@0
  6976
	_LIT(KTest16,"Password Window");
sl@0
  6977
	_LIT(KTest17,"Group List Changed");
sl@0
  6978
	_LIT(KTest18,"Repeatable Key Events");
sl@0
  6979
	_LIT(KTest19,"Screen Scaling");
sl@0
  6980
	_LIT(KTest20,"Visibility Changed Events");
sl@0
  6981
	_LIT(KTest21,"Check Time Stamp Of Events");
sl@0
  6982
	_LIT(KTest22,"Pointer Capture Priority Events");
sl@0
  6983
	_LIT(KTest23,"Event Handler Removal");
sl@0
  6984
	_LIT(KTest24,"Event Queue ptr crash test");
sl@0
  6985
	_LIT(KTest25,"Mismatched Pointer Events");
sl@0
  6986
	_LIT(KTest26,"Pointer Buffer Purge");
sl@0
  6987
	_LIT(KTest27,"TRawEvent test for Repeats");
sl@0
  6988
#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA 
sl@0
  6989
	_LIT(KTest28,"Translation of key events by routing plug-in");
sl@0
  6990
	_LIT(KTest29,"Blocking of key events by routing plug-in");
sl@0
  6991
	_LIT(KTest30,"App UID based restriction of key capture");
sl@0
  6992
	_LIT(KTest31,"App UID based routing of key events");
sl@0
  6993
#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS            
sl@0
  6994
	_LIT(KTest32,"Transparent Surface Visibility Changed Events 1");
sl@0
  6995
	_LIT(KTest33,"Transparent Surface Visibility Changed Events 2");
sl@0
  6996
	_LIT(KTest34,"Transparent Surface Visibility Changed Events 3");
sl@0
  6997
#endif // SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
sl@0
  6998
#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
sl@0
  6999
	_LIT(KTest35A,"Initialize Queue Size without inactive queue");
sl@0
  7000
	_LIT(KTest35B,"Initialize Queue Size with inactive queue");	
sl@0
  7001
	
sl@0
  7002
	if (!TestBase()->ConfigurationSupportsPointerEventTesting())
sl@0
  7003
	    {
sl@0
  7004
	    INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing"));
sl@0
  7005
	    TestComplete();
sl@0
  7006
	    return;
sl@0
  7007
	    }
sl@0
  7008
	
sl@0
  7009
	//if (iTest->iState==1) iTest->iState=14;	//Use this line to skip to a particular test
sl@0
  7010
	((CTEventTestStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
sl@0
  7011
	switch(iTest->iState)
sl@0
  7012
		{
sl@0
  7013
/**
sl@0
  7014
@SYMTestCaseID		GRAPHICS-WSERV-0053
sl@0
  7015
sl@0
  7016
@SYMDEF             DEF081259
sl@0
  7017
sl@0
  7018
@SYMTestCaseDesc    Carry out general event tests on WServ
sl@0
  7019
sl@0
  7020
@SYMTestPriority    High
sl@0
  7021
sl@0
  7022
@SYMTestStatus      Implemented
sl@0
  7023
sl@0
  7024
@SYMTestActions     General events are sent via WServ
sl@0
  7025
sl@0
  7026
@SYMTestExpectedResults The events are sent without error
sl@0
  7027
*/
sl@0
  7028
		case 0:
sl@0
  7029
			iTest->LogSubTest(KTest0);
sl@0
  7030
			General();
sl@0
  7031
			((CTEventTestStep*)iStep)->SetOverallTestStepID(_L("GRAPHICS-WSERV-0053"));
sl@0
  7032
			//iState=8;
sl@0
  7033
			break;
sl@0
  7034
/**
sl@0
  7035
@SYMTestCaseID		GRAPHICS-WSERV-0054
sl@0
  7036
sl@0
  7037
@SYMDEF             DEF081259
sl@0
  7038
sl@0
  7039
@SYMTestCaseDesc    Carry out event queue purging
sl@0
  7040
sl@0
  7041
@SYMTestPriority    High
sl@0
  7042
sl@0
  7043
@SYMTestStatus      Implemented
sl@0
  7044
sl@0
  7045
@SYMTestActions     Purge the event queue
sl@0
  7046
sl@0
  7047
@SYMTestExpectedResults The events queue is purged without error
sl@0
  7048
*/
sl@0
  7049
		case 1:
sl@0
  7050
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0054"));
sl@0
  7051
			iTest->LogSubTest(KTest1);
sl@0
  7052
			RunTestsL();		//QueuePurgingL();
sl@0
  7053
			break;
sl@0
  7054
/**
sl@0
  7055
@SYMTestCaseID		GRAPHICS-WSERV-0055
sl@0
  7056
sl@0
  7057
@SYMDEF             DEF081259
sl@0
  7058
sl@0
  7059
@SYMTestCaseDesc    Test that events can be sent
sl@0
  7060
sl@0
  7061
@SYMTestPriority    High
sl@0
  7062
sl@0
  7063
@SYMTestStatus      Implemented
sl@0
  7064
sl@0
  7065
@SYMTestActions     Send events in WServ
sl@0
  7066
sl@0
  7067
@SYMTestExpectedResults The events are sent without error
sl@0
  7068
*/
sl@0
  7069
		case 2:
sl@0
  7070
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0055"));
sl@0
  7071
			iTest->LogSubTest(KTest2);
sl@0
  7072
			RunTestsL();		//SendEventL();
sl@0
  7073
			break;
sl@0
  7074
/**
sl@0
  7075
@SYMTestCaseID		GRAPHICS-WSERV-0056
sl@0
  7076
sl@0
  7077
@SYMDEF             DEF081259
sl@0
  7078
sl@0
  7079
@SYMTestCaseDesc    Send an event to all window groups
sl@0
  7080
sl@0
  7081
@SYMTestPriority    High
sl@0
  7082
sl@0
  7083
@SYMTestStatus      Implemented
sl@0
  7084
sl@0
  7085
@SYMTestActions     Send an event to all window groups
sl@0
  7086
sl@0
  7087
@SYMTestExpectedResults The events are sent to all window groups
sl@0
  7088
						without error
sl@0
  7089
*/
sl@0
  7090
		case 3:
sl@0
  7091
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0056"));
sl@0
  7092
			iTest->LogSubTest(KTest3);
sl@0
  7093
			General2();
sl@0
  7094
			break;
sl@0
  7095
/**
sl@0
  7096
@SYMTestCaseID		GRAPHICS-WSERV-0057
sl@0
  7097
sl@0
  7098
@SYMDEF             DEF081259
sl@0
  7099
sl@0
  7100
@SYMTestCaseDesc    Send events to an invisible window
sl@0
  7101
sl@0
  7102
@SYMTestPriority    High
sl@0
  7103
sl@0
  7104
@SYMTestStatus      Implemented
sl@0
  7105
sl@0
  7106
@SYMTestActions     Send events to an invisible window
sl@0
  7107
sl@0
  7108
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7109
						error
sl@0
  7110
*/
sl@0
  7111
		case 4:
sl@0
  7112
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0057"));
sl@0
  7113
			iTest->LogSubTest(KTest4);
sl@0
  7114
			RunTestsL(ETrue);		//InvisibleWindowL();
sl@0
  7115
			break;
sl@0
  7116
/**
sl@0
  7117
@SYMTestCaseID		GRAPHICS-WSERV-0058
sl@0
  7118
sl@0
  7119
@SYMDEF             DEF081259
sl@0
  7120
sl@0
  7121
@SYMTestCaseDesc    Send events for java additions
sl@0
  7122
sl@0
  7123
@SYMTestPriority    High
sl@0
  7124
sl@0
  7125
@SYMTestStatus      Implemented
sl@0
  7126
sl@0
  7127
@SYMTestActions     Send events for java additions
sl@0
  7128
sl@0
  7129
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7130
						error
sl@0
  7131
*/
sl@0
  7132
		case 5:
sl@0
  7133
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0058"));
sl@0
  7134
			iTest->LogSubTest(KTest5);
sl@0
  7135
			RunTestsL();		//JavaAdditionsL();
sl@0
  7136
			break;
sl@0
  7137
sl@0
  7138
		case 6:
sl@0
  7139
			((CTEventTestStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
  7140
			iTest->LogSubTest(KTest6);
sl@0
  7141
			//WindowCapBugL();		//Not finished
sl@0
  7142
			break;
sl@0
  7143
/**
sl@0
  7144
@SYMTestCaseID		GRAPHICS-WSERV-0059
sl@0
  7145
sl@0
  7146
@SYMDEF             DEF081259
sl@0
  7147
sl@0
  7148
@SYMTestCaseDesc    Send events for x and y inputs
sl@0
  7149
sl@0
  7150
@SYMTestPriority    High
sl@0
  7151
sl@0
  7152
@SYMTestStatus      Implemented
sl@0
  7153
sl@0
  7154
@SYMTestActions     Send events for x and y inputs
sl@0
  7155
sl@0
  7156
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7157
						error
sl@0
  7158
*/
sl@0
  7159
		case 7:
sl@0
  7160
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0059"));
sl@0
  7161
			iTest->LogSubTest(KTest7);
sl@0
  7162
			RunTestsL();		//XyInputTypeL();
sl@0
  7163
			break;
sl@0
  7164
/**
sl@0
  7165
@SYMTestCaseID		GRAPHICS-WSERV-0060
sl@0
  7166
sl@0
  7167
@SYMDEF             DEF081259
sl@0
  7168
sl@0
  7169
@SYMTestCaseDesc    Send events for moving pointer cursor
sl@0
  7170
sl@0
  7171
@SYMTestPriority    High
sl@0
  7172
sl@0
  7173
@SYMTestStatus      Implemented
sl@0
  7174
sl@0
  7175
@SYMTestActions     Send events for moving pointer cursor
sl@0
  7176
sl@0
  7177
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7178
						error
sl@0
  7179
*/
sl@0
  7180
		case 8:
sl@0
  7181
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0060"));
sl@0
  7182
			iTest->LogSubTest(KTest8);
sl@0
  7183
			RunTestsRestoreAreaL(ETrue);		//MovingPointerCursorL();
sl@0
  7184
		    break;
sl@0
  7185
/**
sl@0
  7186
@SYMTestCaseID		GRAPHICS-WSERV-0061
sl@0
  7187
sl@0
  7188
@SYMDEF             DEF081259
sl@0
  7189
sl@0
  7190
@SYMTestCaseDesc    Send events for rotate mode
sl@0
  7191
sl@0
  7192
@SYMTestPriority    High
sl@0
  7193
sl@0
  7194
@SYMTestStatus      Implemented
sl@0
  7195
sl@0
  7196
@SYMTestActions     Send events for rotate mode
sl@0
  7197
sl@0
  7198
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7199
						error
sl@0
  7200
*/
sl@0
  7201
		case 9:
sl@0
  7202
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0061"));
sl@0
  7203
			iTest->LogSubTest(KTest9);
sl@0
  7204
			RunTestsRestoreAreaL(EFalse);		//RotatedModeL();
sl@0
  7205
			break;
sl@0
  7206
/**
sl@0
  7207
@SYMTestCaseID		GRAPHICS-WSERV-0062
sl@0
  7208
sl@0
  7209
@SYMDEF             DEF081259
sl@0
  7210
sl@0
  7211
@SYMTestCaseDesc    Send events for an anim event
sl@0
  7212
sl@0
  7213
@SYMTestPriority    High
sl@0
  7214
sl@0
  7215
@SYMTestStatus      Implemented
sl@0
  7216
sl@0
  7217
@SYMTestActions     Send events for an anim event
sl@0
  7218
sl@0
  7219
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7220
						error
sl@0
  7221
*/
sl@0
  7222
		case 10:
sl@0
  7223
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0062"));
sl@0
  7224
			iTest->LogSubTest(KTest10);
sl@0
  7225
			RunTestsRestoreAreaL(EFalse);		//AnimEvent();
sl@0
  7226
			break;
sl@0
  7227
/**
sl@0
  7228
@SYMTestCaseID		GRAPHICS-WSERV-0063
sl@0
  7229
sl@0
  7230
@SYMDEF             DEF081259
sl@0
  7231
sl@0
  7232
@SYMTestCaseDesc    Send events for focus changed
sl@0
  7233
sl@0
  7234
@SYMTestPriority    High
sl@0
  7235
sl@0
  7236
@SYMTestStatus      Implemented
sl@0
  7237
sl@0
  7238
@SYMTestActions     Send events for focus changed
sl@0
  7239
sl@0
  7240
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7241
						error
sl@0
  7242
*/
sl@0
  7243
		case 11:
sl@0
  7244
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0063"));
sl@0
  7245
			iTest->LogSubTest(KTest11);
sl@0
  7246
			RunTestsL();		//FocusChanged();
sl@0
  7247
			break;
sl@0
  7248
/**
sl@0
  7249
@SYMTestCaseID		GRAPHICS-WSERV-0064
sl@0
  7250
sl@0
  7251
@SYMDEF             DEF081259
sl@0
  7252
sl@0
  7253
@SYMTestCaseDesc    Send stop events
sl@0
  7254
sl@0
  7255
@SYMTestPriority    High
sl@0
  7256
sl@0
  7257
@SYMTestStatus      Implemented
sl@0
  7258
sl@0
  7259
@SYMTestActions     Send stop events
sl@0
  7260
sl@0
  7261
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7262
						error
sl@0
  7263
*/
sl@0
  7264
		case 12:
sl@0
  7265
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0064"));
sl@0
  7266
			iTest->LogSubTest(KTest12);
sl@0
  7267
			RunTestsL(ETrue);		//StopEvents();
sl@0
  7268
			break;
sl@0
  7269
/**
sl@0
  7270
@SYMTestCaseID		GRAPHICS-WSERV-0065
sl@0
  7271
sl@0
  7272
@SYMDEF             DEF081259
sl@0
  7273
sl@0
  7274
@SYMTestCaseDesc    Send events for the virtual keyboard
sl@0
  7275
sl@0
  7276
@SYMTestPriority    High
sl@0
  7277
sl@0
  7278
@SYMTestStatus      Implemented
sl@0
  7279
sl@0
  7280
@SYMTestActions     Send events for the virtual keyboard
sl@0
  7281
sl@0
  7282
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7283
						error
sl@0
  7284
*/
sl@0
  7285
		case 13:
sl@0
  7286
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0065"));
sl@0
  7287
			iTest->LogSubTest(KTest13);
sl@0
  7288
			RunTestsL();		//VirtualKeyboard();
sl@0
  7289
			break;
sl@0
  7290
/**
sl@0
  7291
@SYMTestCaseID		GRAPHICS-WSERV-0066
sl@0
  7292
sl@0
  7293
@SYMDEF             DEF081259
sl@0
  7294
sl@0
  7295
@SYMTestCaseDesc    Send events for key clicks
sl@0
  7296
sl@0
  7297
@SYMTestPriority    High
sl@0
  7298
sl@0
  7299
@SYMTestStatus      Implemented
sl@0
  7300
sl@0
  7301
@SYMTestActions     Send stop events
sl@0
  7302
sl@0
  7303
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7304
						error
sl@0
  7305
*/
sl@0
  7306
		case 14:
sl@0
  7307
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0066"));
sl@0
  7308
			iTest->LogSubTest(KTest14);
sl@0
  7309
			{
sl@0
  7310
			TBool changeable;
sl@0
  7311
			if (iClick.IsLoaded(changeable) && !iTest->IsFullRomL())
sl@0
  7312
				RunTestsL(ETrue);		//KeyClicks();
sl@0
  7313
			}
sl@0
  7314
			break;
sl@0
  7315
/**
sl@0
  7316
@SYMTestCaseID		GRAPHICS-WSERV-0067
sl@0
  7317
sl@0
  7318
@SYMDEF             DEF081259
sl@0
  7319
sl@0
  7320
@SYMTestCaseDesc    Test RWindowGroup::CaptureLongKey()
sl@0
  7321
sl@0
  7322
@SYMTestPriority    High
sl@0
  7323
sl@0
  7324
@SYMTestStatus      Implemented
sl@0
  7325
sl@0
  7326
@SYMTestActions     Simulate long key presses and check that long key capture
sl@0
  7327
					and key repeat work as expected.
sl@0
  7328
sl@0
  7329
@SYMTestExpectedResults The correct key events are sent to the window without
sl@0
  7330
						error
sl@0
  7331
*/
sl@0
  7332
		case 15:
sl@0
  7333
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0067"));
sl@0
  7334
			iTest->LogSubTest(KTest15);
sl@0
  7335
			RunTestsL(ETrue);		//CaptureLong();
sl@0
  7336
			break;
sl@0
  7337
/**
sl@0
  7338
@SYMTestCaseID		GRAPHICS-WSERV-0068
sl@0
  7339
sl@0
  7340
@SYMDEF             DEF081259
sl@0
  7341
sl@0
  7342
@SYMTestCaseDesc    Send events for activating password
sl@0
  7343
sl@0
  7344
@SYMTestPriority    High
sl@0
  7345
sl@0
  7346
@SYMTestStatus      Implemented
sl@0
  7347
sl@0
  7348
@SYMTestActions     Send events for activating password
sl@0
  7349
sl@0
  7350
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7351
						error
sl@0
  7352
*/
sl@0
  7353
		case 16:
sl@0
  7354
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0068"));
sl@0
  7355
			iTest->LogSubTest(KTest16);
sl@0
  7356
			if (!iTest->IsFullRomL())
sl@0
  7357
				RunTestsL();		//Password();
sl@0
  7358
			break;
sl@0
  7359
/**
sl@0
  7360
@SYMTestCaseID		GRAPHICS-WSERV-0069
sl@0
  7361
sl@0
  7362
@SYMDEF             DEF081259
sl@0
  7363
sl@0
  7364
@SYMTestCaseDesc    Send events for activating password
sl@0
  7365
sl@0
  7366
@SYMTestPriority    High
sl@0
  7367
sl@0
  7368
@SYMTestStatus      Implemented
sl@0
  7369
sl@0
  7370
@SYMTestActions     Send events for activating password
sl@0
  7371
sl@0
  7372
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7373
						error
sl@0
  7374
*/
sl@0
  7375
		case 17:
sl@0
  7376
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0069"));
sl@0
  7377
			iTest->LogSubTest(KTest17);
sl@0
  7378
			RunTestsL();
sl@0
  7379
			break;
sl@0
  7380
/**
sl@0
  7381
@SYMTestCaseID		GRAPHICS-WSERV-0070
sl@0
  7382
sl@0
  7383
@SYMDEF             DEF081259
sl@0
  7384
sl@0
  7385
@SYMTestCaseDesc    Send repeatable key events
sl@0
  7386
sl@0
  7387
@SYMTestPriority    High
sl@0
  7388
sl@0
  7389
@SYMTestStatus      Implemented
sl@0
  7390
sl@0
  7391
@SYMTestActions     Send repeatable key events
sl@0
  7392
sl@0
  7393
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7394
						error
sl@0
  7395
*/
sl@0
  7396
		case 18:
sl@0
  7397
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0070"));
sl@0
  7398
			iTest->LogSubTest(KTest18);
sl@0
  7399
			RunTestsL();
sl@0
  7400
			break;
sl@0
  7401
/**
sl@0
  7402
@SYMTestCaseID		GRAPHICS-WSERV-0071
sl@0
  7403
sl@0
  7404
@SYMDEF             DEF081259
sl@0
  7405
sl@0
  7406
@SYMTestCaseDesc    Send Screen Scaling events
sl@0
  7407
sl@0
  7408
@SYMTestPriority    High
sl@0
  7409
sl@0
  7410
@SYMTestStatus      Implemented
sl@0
  7411
sl@0
  7412
@SYMTestActions     Send Screen Scaling events
sl@0
  7413
sl@0
  7414
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7415
						error
sl@0
  7416
*/
sl@0
  7417
		case 19:
sl@0
  7418
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0071"));
sl@0
  7419
			iTest->LogSubTest(KTest19);
sl@0
  7420
			if (iScreenModeTests&EDoScale)
sl@0
  7421
				{
sl@0
  7422
				RunTestsL();
sl@0
  7423
				}
sl@0
  7424
			break;
sl@0
  7425
/**
sl@0
  7426
@SYMTestCaseID		GRAPHICS-WSERV-0072
sl@0
  7427
sl@0
  7428
@SYMDEF             DEF081259
sl@0
  7429
sl@0
  7430
@SYMTestCaseDesc    Send Visibility Changed events
sl@0
  7431
sl@0
  7432
@SYMTestPriority    High
sl@0
  7433
sl@0
  7434
@SYMTestStatus      Implemented
sl@0
  7435
sl@0
  7436
@SYMTestActions     Send Visibility Changed events
sl@0
  7437
sl@0
  7438
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7439
						error
sl@0
  7440
*/
sl@0
  7441
		case 20:
sl@0
  7442
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0072"));
sl@0
  7443
			iTest->LogSubTest(KTest20);
sl@0
  7444
			RunTestsL();
sl@0
  7445
			break;
sl@0
  7446
/**
sl@0
  7447
@SYMTestCaseID		GRAPHICS-WSERV-0073
sl@0
  7448
sl@0
  7449
@SYMDEF             DEF081259
sl@0
  7450
sl@0
  7451
@SYMTestCaseDesc    Check Time Stamp Of Sent Events
sl@0
  7452
sl@0
  7453
@SYMTestPriority    High
sl@0
  7454
sl@0
  7455
@SYMTestStatus      Implemented
sl@0
  7456
sl@0
  7457
@SYMTestActions     Check Time Stamp Of Sent Events
sl@0
  7458
sl@0
  7459
@SYMTestExpectedResults The time stamps for the events are correct
sl@0
  7460
*/
sl@0
  7461
		case 21:
sl@0
  7462
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0073"));
sl@0
  7463
			iTest->LogSubTest(KTest21);
sl@0
  7464
			RunTestsL();
sl@0
  7465
			break;
sl@0
  7466
/**
sl@0
  7467
@SYMTestCaseID		GRAPHICS-WSERV-0074
sl@0
  7468
sl@0
  7469
@SYMDEF             DEF081259
sl@0
  7470
sl@0
  7471
@SYMTestCaseDesc    Send Pointer Capture Priority Events
sl@0
  7472
sl@0
  7473
@SYMTestPriority    High
sl@0
  7474
sl@0
  7475
@SYMTestStatus      Implemented
sl@0
  7476
sl@0
  7477
@SYMTestActions     Send Pointer Capture Priority Events
sl@0
  7478
sl@0
  7479
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7480
						error
sl@0
  7481
*/
sl@0
  7482
		case 22:
sl@0
  7483
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0074"));
sl@0
  7484
			iTest->LogSubTest(KTest22);
sl@0
  7485
			RunTestsL();
sl@0
  7486
			break;
sl@0
  7487
/**
sl@0
  7488
@SYMTestCaseID		GRAPHICS-WSERV-0343
sl@0
  7489
sl@0
  7490
@SYMDEF             DEF081259
sl@0
  7491
sl@0
  7492
@SYMTestCaseDesc    Send Event Handler Removal Events
sl@0
  7493
sl@0
  7494
@SYMTestPriority    High
sl@0
  7495
sl@0
  7496
@SYMTestStatus      Implemented
sl@0
  7497
sl@0
  7498
@SYMTestActions     Send Event Handler Removal Events
sl@0
  7499
sl@0
  7500
@SYMTestExpectedResults The events are sent to the window without
sl@0
  7501
						error
sl@0
  7502
*/
sl@0
  7503
		case 23:
sl@0
  7504
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0343"));
sl@0
  7505
			iTest->LogSubTest(KTest23);
sl@0
  7506
			RunTestsL();                   //EventHandlerRemoval();
sl@0
  7507
			break;
sl@0
  7508
		case 24:
sl@0
  7509
/**
sl@0
  7510
@SYMTestCaseID		GRAPHICS-WSERV-0565
sl@0
  7511
*/
sl@0
  7512
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0565"));
sl@0
  7513
			iTest->LogSubTest(KTest24);
sl@0
  7514
			EventQueuePtrCrashTest();
sl@0
  7515
			break;
sl@0
  7516
/**
sl@0
  7517
@SYMTestCaseID 		GRAPHICS-WSERV-0496
sl@0
  7518
sl@0
  7519
@SYMDEF 			DEF133776
sl@0
  7520
sl@0
  7521
@SYMTestCaseDesc 	Cancels key captures using all combinations of 
sl@0
  7522
  RWindowGroup::Capture...() and RWindowGroup::Cancel...() APIs.
sl@0
  7523
sl@0
  7524
@SYMTestPriority 	High
sl@0
  7525
sl@0
  7526
@SYMTestStatus 		Implemented
sl@0
  7527
sl@0
  7528
@SYMTestActions 	Call each of the RWindowGroup::Capture***() APIs followed by
sl@0
  7529
 each of the RWindowGroup::CancelCapture***() APIs.
sl@0
  7530
 RWindowGroup::Capture***() APIs:
sl@0
  7531
 	CaptureKey(TUint, TUint, TUint)
sl@0
  7532
 	CaptureKey(TUint, TUint, TUint, TInt)
sl@0
  7533
 	CaptureKeyUpAndDowns(TUint, TUint, TUint)
sl@0
  7534
 	CaptureKeyUpAndDowns(TUint, TUint, TUint, TInt)
sl@0
  7535
 	CaptureLongKey(TUint, TUint, TUint, TUint, TInt, TUint)
sl@0
  7536
 	CaptureLongKey(TTimeIntervalMicroSeconds32, TUint, TUint, TUint, TUint, TInt, TUint)
sl@0
  7537
 RWindowGroup::CancelCapture***() APIs:
sl@0
  7538
	CancelCaptureKey()
sl@0
  7539
	CancelCaptureKeyUpAndDowns()
sl@0
  7540
	CancelCaptureLongKey()
sl@0
  7541
 
sl@0
  7542
@SYMTestExpectedResults WServ should handle matched and mismatched Cancel 
sl@0
  7543
 and Capture calls without panicking.
sl@0
  7544
*/			
sl@0
  7545
		case 25:
sl@0
  7546
// Skip this test in debug on the emulator, run it always on hardware as debug ROMs include
sl@0
  7547
// a release version of the production code that doesn't panic
sl@0
  7548
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0496"));
sl@0
  7549
#if defined(_DEBUG) && !defined (__MARM__)
sl@0
  7550
			INFO_PRINTF1(_L("Skipping this test in _DEBUG on emulator to avoid debug only panics, see GRAPHICS-WSERV-0497 for the matching panic test"));				
sl@0
  7551
#else						
sl@0
  7552
			iTest->LogSubTest(KTest25);
sl@0
  7553
			RunTestsL();
sl@0
  7554
#endif
sl@0
  7555
			break;	
sl@0
  7556
/**
sl@0
  7557
@SYMTestCaseID		GRAPHICS-WSERV-0444
sl@0
  7558
sl@0
  7559
@SYMDEF             PDEF110849
sl@0
  7560
sl@0
  7561
@SYMTestCaseDesc    Pointer Buffer Exception After Event Queue Purge
sl@0
  7562
sl@0
  7563
@SYMTestPriority    High
sl@0
  7564
sl@0
  7565
@SYMTestStatus      Implemented
sl@0
  7566
sl@0
  7567
@SYMTestActions     Connect to pointer buffer, send it some pointer events and disconnect.
sl@0
  7568
					Now send enough events to cause an event queue purge.  The purge will
sl@0
  7569
					attempt to empty the pointer buffer, but will fail because we have disconnected.
sl@0
  7570
sl@0
  7571
@SYMTestExpectedResults The purge will realise it does not need to empty the pointer buffer and 
sl@0
  7572
						so there will not be an access violation - exception.
sl@0
  7573
						
sl@0
  7574
*/			
sl@0
  7575
		case 26:
sl@0
  7576
			((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0444"));
sl@0
  7577
			iTest->LogSubTest(KTest26);
sl@0
  7578
			RunTestsL();
sl@0
  7579
			break;
sl@0
  7580
/**
sl@0
  7581
@SYMTestCaseID		GRAPHICS-WSERV-0484
sl@0
  7582
@SYMDEF             PDEF120721
sl@0
  7583
@SYMTestCaseDesc    Window server guarantees to initialize the queue size of the new queue to 
sl@0
  7584
					at least EMinQueueSize.
sl@0
  7585
@SYMTestPriority    High
sl@0
  7586
@SYMTestStatus      Implemented
sl@0
  7587
@SYMTestActions     Create multiple clients to connect to window server.
sl@0
  7588
					Send enough events to make the event queue full.
sl@0
  7589
					Create a new client to connect to window server.
sl@0
  7590
					Send events to the new client and test that the new client 
sl@0
  7591
					can get the events.
sl@0
  7592
@SYMTestExpectedResults Window server guarantees to initialize the size of the new event 
sl@0
  7593
						queue to EMinQueueSize, so that window server will not lock up
sl@0
  7594
						due to the full of global event queue.
sl@0
  7595
						
sl@0
  7596
*/			
sl@0
  7597
		case 27:
sl@0
  7598
		    iTest->LogSubTest(KTest27);
sl@0
  7599
		    RunTestsL();
sl@0
  7600
		    break;
sl@0
  7601
		    
sl@0
  7602
#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA            
sl@0
  7603
/**
sl@0
  7604
@SYMTestCaseID      GRAPHICS-WSERV-0751, GRAPHICS-WSERV-0752, GRAPHICS-WSERV-0753
sl@0
  7605
@SYMPREQ			417-61800
sl@0
  7606
@SYMTestCaseDesc    Test translation of key events by Key Event Routing plug-in
sl@0
  7607
@SYMTestPriority    High
sl@0
  7608
@SYMTestStatus      Implemented
sl@0
  7609
@SYMTestActions     Use RWindowGroup::CaptureKey() to capture pseudo key
sl@0
  7610
					Device0 (key code EKeyDevice0, scan code EStdKeyDevice0).
sl@0
  7611
					Simulate pressing key Device1.
sl@0
  7612
					Repeat using CaptureKeyUpAndDowns().
sl@0
  7613
					Repeat using CaptureLongKey().
sl@0
  7614
					Repeat without any capture requests.
sl@0
  7615
@SYMTestExpectedResults
sl@0
  7616
					The key event delivered contains the key or scan code for
sl@0
  7617
					Device0, if captured. When using CaptureKey() and
sl@0
  7618
					CaptureLongKey(), only the key code is translated. Using
sl@0
  7619
					CaptureKeyUpAndDowns(), only the scan code is translated.
sl@0
  7620
sl@0
  7621
Note: this test requires an entry in the translation table of the Key Routing
sl@0
  7622
Plug-in to map Device0 to Device1 at capture request time.
sl@0
  7623
*/
sl@0
  7624
		case 28:
sl@0
  7625
            ((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0751"));
sl@0
  7626
            iTest->LogSubTest(KTest28);
sl@0
  7627
            RunTestsL();
sl@0
  7628
            break;
sl@0
  7629
sl@0
  7630
/**
sl@0
  7631
@SYMTestCaseID      GRAPHICS-WSERV-0760, GRAPHICS-WSERV-0761, GRAPHICS-WSERV-0762
sl@0
  7632
@SYMPREQ			417-61800
sl@0
  7633
@SYMTestCaseDesc    Test blocking of key events by Key Event Routing plug-in
sl@0
  7634
@SYMTestPriority    High
sl@0
  7635
@SYMTestStatus      Implemented
sl@0
  7636
@SYMTestActions     Simulate pressing a blocked key (Device3) while no
sl@0
  7637
					key capture is in effect.
sl@0
  7638
					Use RWindowGroup::CaptureKey() to capture EKeyDevice3
sl@0
  7639
					and simulate pressing the blocked key again.
sl@0
  7640
					Repeat using CaptureKeyUpAndDowns().
sl@0
  7641
					Repeat using CaptureLongKey().
sl@0
  7642
@SYMTestExpectedResults
sl@0
  7643
					The blocked key event is only delivered when captured and
sl@0
  7644
					is not routed to the focussed window group by default.
sl@0
  7645
sl@0
  7646
Note: this test requires entries in the Blocked Key Table of the Reference
sl@0
  7647
Key Routing Plug-in for EKeyDevice3 and EStdKeyDevice3.
sl@0
  7648
*/
sl@0
  7649
		case 29:
sl@0
  7650
            ((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0760"));
sl@0
  7651
            iTest->LogSubTest(KTest29);
sl@0
  7652
            RunTestsL();
sl@0
  7653
            break;
sl@0
  7654
sl@0
  7655
/**
sl@0
  7656
@SYMTestCaseID      GRAPHICS-WSERV-0754, GRAPHICS-WSERV-0755, GRAPHICS-WSERV-0756
sl@0
  7657
@SYMPREQ			417-61800
sl@0
  7658
@SYMTestCaseDesc    Test application UID-based restriction of key capture by
sl@0
  7659
					Key Event Routing plug-in.
sl@0
  7660
@SYMTestPriority    High
sl@0
  7661
@SYMTestStatus      Implemented
sl@0
  7662
@SYMTestActions     Attempt to capture a key that is restricted by UID
sl@0
  7663
					to another application.
sl@0
  7664
					Use RWindowGroup::CaptureKey() to capture a key that is
sl@0
  7665
					restricted to the current application's UID.
sl@0
  7666
					Simulate pressing the second key.
sl@0
  7667
					Repeat using CaptureKeyUpAndDowns().
sl@0
  7668
					Repeat using CaptureLongKey().
sl@0
  7669
@SYMTestExpectedResults
sl@0
  7670
					Capture of the first key fails with KErrPermissionDenied.
sl@0
  7671
					Capture of the second key succeeds and the key event is
sl@0
  7672
					delivered.
sl@0
  7673
sl@0
  7674
Note: this test requires entries in the Restricted Key Table of the Reference
sl@0
  7675
Key Routing Plug-in for the chosen keys.
sl@0
  7676
*/
sl@0
  7677
		case 30:
sl@0
  7678
            ((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0754"));
sl@0
  7679
            iTest->LogSubTest(KTest30);
sl@0
  7680
            RunTestsL();
sl@0
  7681
            break;
sl@0
  7682
sl@0
  7683
/**
sl@0
  7684
@SYMTestCaseID      GRAPHICS-WSERV-0757, GRAPHICS-WSERV-0758, GRAPHICS-WSERV-0759
sl@0
  7685
@SYMPREQ			417-61800
sl@0
  7686
@SYMTestCaseDesc    Test application UID-based routing of key events by
sl@0
  7687
					Key Event Routing plug-in.
sl@0
  7688
@SYMTestPriority    High
sl@0
  7689
@SYMTestStatus      Implemented
sl@0
  7690
@SYMTestActions     Invoke another application to capture two different keys
sl@0
  7691
					with high priority using each of RWindowGroup::CaptureKey(),
sl@0
  7692
					CaptureKeyUpAndDowns() and CaptureLongKey(). One key of
sl@0
  7693
					each pair has precedence for capture by the current
sl@0
  7694
					application's UID (i.e. this test).
sl@0
  7695
					In the current application, use RWindowGroup::CaptureKey()
sl@0
  7696
					to capture both keys with lower priority.
sl@0
  7697
					Simulate pressing the keys.
sl@0
  7698
					Repeat using CaptureKeyUpAndDowns().
sl@0
  7699
					Repeat using CaptureLongKey().
sl@0
  7700
@SYMTestExpectedResults
sl@0
  7701
					The key event with UID-based precedence is delivered to
sl@0
  7702
					the current application but the other key is not.
sl@0
  7703
sl@0
  7704
Note: this test requires entries in the Priority Application Table of the
sl@0
  7705
Reference Key Routing Plug-in for the chosen key.
sl@0
  7706
*/
sl@0
  7707
		case 31:
sl@0
  7708
            ((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0757"));
sl@0
  7709
            iTest->LogSubTest(KTest31);
sl@0
  7710
            RunTestsL();
sl@0
  7711
            break;
sl@0
  7712
sl@0
  7713
#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS            
sl@0
  7714
/**
sl@0
  7715
@SYMTestCaseID      GRAPHICS-WSERV-2669-0015
sl@0
  7716
@SYMREQ             REQ13202: Possibility for external layers to appear above UI layer
sl@0
  7717
@SYMTestCaseDesc    Window obscured by transparent surface window receives 
sl@0
  7718
                    (EPartiallyVisible | EFullyVisible) when surface is made semi-transparent.
sl@0
  7719
@SYMTestPriority    2
sl@0
  7720
@SYMPrerequisites   Win1 – bottom window
sl@0
  7721
                    Win2 – middle window with background surface, which totally obscures win1
sl@0
  7722
@SYMTestActions     Call SetSurfaceTransparency(ETrue) on win2
sl@0
  7723
@SYMTestExpectedResults Win1 receives visibility event
sl@0
  7724
*/            
sl@0
  7725
        case 32:
sl@0
  7726
            ((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-2669-0015"));
sl@0
  7727
            iTest->LogSubTest(KTest32);
sl@0
  7728
            RunTestsL();
sl@0
  7729
            break;
sl@0
  7730
/**
sl@0
  7731
@SYMTestCaseID      GRAPHICS-WSERV-2669-0016
sl@0
  7732
@SYMREQ             REQ13202: Possibility for external layers to appear above UI layer 
sl@0
  7733
@SYMTestCaseDesc    Window obscured by semi-transparent surface window receives   
sl@0
  7734
                    (EPartiallyVisible | EFullyVisible) when obscuring window is deleted
sl@0
  7735
@SYMTestPriority    2
sl@0
  7736
@SYMPrerequisites   Win1 – bottom window
sl@0
  7737
                    Win2 – middle window with semi-transparent background surface, which totally obscures win1
sl@0
  7738
                    Win3 – top window which totally obscures win2, and is opaque
sl@0
  7739
@SYMTestActions     Delete win3
sl@0
  7740
@SYMTestExpectedResults Both win1 and win2 receive visibility events
sl@0
  7741
*/            
sl@0
  7742
        case 33:
sl@0
  7743
            ((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-2669-0016"));
sl@0
  7744
            iTest->LogSubTest(KTest33);
sl@0
  7745
            RunTestsL();
sl@0
  7746
            break;
sl@0
  7747
/**
sl@0
  7748
@SYMTestCaseID      GRAPHICS-WSERV-2669-0017
sl@0
  7749
@SYMREQ             REQ13202: Possibility for external layers to appear above UI layer 
sl@0
  7750
@SYMTestCaseDesc    Window does not receive any visibiliy event when a semi-transparent
sl@0
  7751
                    surface is moved onto/above it.
sl@0
  7752
@SYMTestPriority    2
sl@0
  7753
@SYMPrerequisites   Win1 – bottom window
sl@0
  7754
                    Win2 – top window which does not overlap win1
sl@0
  7755
@SYMTestActions     Move win2 to overlap win1
sl@0
  7756
@SYMTestExpectedResults No visibility event is received (win1 is still fully visible)
sl@0
  7757
*/            
sl@0
  7758
        case 34:
sl@0
  7759
            ((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-2669-0017"));
sl@0
  7760
            iTest->LogSubTest(KTest34);
sl@0
  7761
            RunTestsL();
sl@0
  7762
            break;
sl@0
  7763
#endif // SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS  
sl@0
  7764
#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
sl@0
  7765
sl@0
  7766
/**
sl@0
  7767
@SYMTestCaseID      GRAPHICS-WSERV-0559
sl@0
  7768
@SYMDEF             INC140850
sl@0
  7769
@SYMTestCaseDesc    To check Wserv passes correct repeat value for TRawEvent of type EKeyRepeat.
sl@0
  7770
@SYMTestPriority    High
sl@0
  7771
@SYMTestStatus      Implemented
sl@0
  7772
@SYMTestActions     Simulate TRawEvent of type EKeyRepeat without Repeat value set.
sl@0
  7773
                    Simulate the above with repeat value set to 2.
sl@0
  7774
@SYMTestExpectedResults Simulated events should match expected events added to the array. 
sl@0
  7775
*/
sl@0
  7776
sl@0
  7777
#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
sl@0
  7778
		case 28:
sl@0
  7779
#else
sl@0
  7780
#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
sl@0
  7781
		case 35:
sl@0
  7782
#else
sl@0
  7783
		case 32:
sl@0
  7784
#endif
sl@0
  7785
#endif
sl@0
  7786
		    // This test was moved to be the last test in the test suite, because it sometimes leaves events in the event queue, 
sl@0
  7787
		    //it can affect the results of other tests. This test case should be the last test in the test suite. 
sl@0
  7788
		    ((CTEventTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0484"));
sl@0
  7789
		    iTest->LogSubTest(KTest35A);
sl@0
  7790
		    InitializeQueueSizeTestL(EFalse);
sl@0
  7791
		    iTest->LogSubTest(KTest35B);
sl@0
  7792
		    InitializeQueueSizeTestL(ETrue);
sl@0
  7793
		    break;    
sl@0
  7794
			
sl@0
  7795
		default:
sl@0
  7796
            ((CTEventTestStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
  7797
			((CTEventTestStep*)iStep)->CloseTMSGraphicsStep();
sl@0
  7798
			TestComplete();
sl@0
  7799
			break;
sl@0
  7800
		}
sl@0
  7801
	((CTEventTestStep*)iStep)->RecordTestResultL();
sl@0
  7802
	if (iFailed)
sl@0
  7803
		{
sl@0
  7804
		TEST(EFalse);
sl@0
  7805
		iFailed=EFalse;
sl@0
  7806
		}
sl@0
  7807
	++iTest->iState;
sl@0
  7808
	}
sl@0
  7809
sl@0
  7810
__WS_CONSTRUCT_STEP__(EventTest)
sl@0
  7811