os/graphics/windowing/windowserver/test/tauto/TPointer.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-2009 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 pointer event handling
sl@0
    15
// Coverted from TMan test code (TMPOINTR.CPP) October 2000
sl@0
    16
// 
sl@0
    17
//
sl@0
    18
sl@0
    19
/**
sl@0
    20
 @file
sl@0
    21
 @test
sl@0
    22
 @internalComponent - Internal Symbian test code
sl@0
    23
*/
sl@0
    24
sl@0
    25
#include "TPointer.H"
sl@0
    26
sl@0
    27
sl@0
    28
//#define LOGGING
sl@0
    29
sl@0
    30
#if defined(LOGGING)
sl@0
    31
	LOCAL_D TLogMessageText LogMessageText;
sl@0
    32
#endif
sl@0
    33
sl@0
    34
sl@0
    35
CPointerWindow::CPointerWindow(CTPointer *aTest) : CTWin(), iTest(aTest)
sl@0
    36
	{}
sl@0
    37
sl@0
    38
void CPointerWindow::SetState(TInt aState)
sl@0
    39
	{
sl@0
    40
#if defined(LOGGING)
sl@0
    41
	_LIT(KState,"CPointerWindow::SetState(%d) OldState=%d");
sl@0
    42
	LogMessageText.Format(KState,aState,iState);
sl@0
    43
	TheClient->LogMessage(LogMessageText);
sl@0
    44
#endif
sl@0
    45
	iState=aState;
sl@0
    46
	iWin.Invalidate();
sl@0
    47
	switch(aState)
sl@0
    48
		{
sl@0
    49
		case KStateWaitingForTest1:
sl@0
    50
		case KStateWaitingForTest2:
sl@0
    51
		case KStateWaitingForTest3:
sl@0
    52
		case KStateWaitingForTest4:
sl@0
    53
		case KStateWaitingForTest5:
sl@0
    54
		case KStateWaitingForTest6:
sl@0
    55
		case KStateWaitingForTest8:
sl@0
    56
		case KStateWaitingForTest7:
sl@0
    57
			iRepeatRect=TRect();
sl@0
    58
			break;
sl@0
    59
		case KStateTesting8:
sl@0
    60
			iWin.Close();
sl@0
    61
			Client()->iWs.Flush();
sl@0
    62
			User::After(500000);
sl@0
    63
			FinishedTests();
sl@0
    64
			break;
sl@0
    65
		}
sl@0
    66
	TheClient->WaitForRedrawsToFinish();
sl@0
    67
	SendEvent();
sl@0
    68
	}
sl@0
    69
sl@0
    70
void CPointerWindow::ResetTest(TInt aState)
sl@0
    71
	{
sl@0
    72
	TInt newState=KStateFinished;
sl@0
    73
	switch(aState)
sl@0
    74
		{
sl@0
    75
		case KStateTesting1:
sl@0
    76
			newState=KStateWaitingForTest1;
sl@0
    77
			break;
sl@0
    78
		case KStateTesting2:
sl@0
    79
			newState=KStateWaitingForTest2;
sl@0
    80
			break;
sl@0
    81
		case KStateTesting3:
sl@0
    82
			newState=KStateWaitingForTest3;
sl@0
    83
			break;
sl@0
    84
		case KStateTesting4:
sl@0
    85
			newState=KStateWaitingForTest4;
sl@0
    86
			break;
sl@0
    87
		case KStateTesting5:
sl@0
    88
			newState=KStateWaitingForTest5;
sl@0
    89
			break;
sl@0
    90
		case KStateTesting6:
sl@0
    91
			newState=KStateWaitingForTest6;
sl@0
    92
			break;
sl@0
    93
		case KStateTesting8:
sl@0
    94
			newState=KStateWaitingForTest8;
sl@0
    95
			break;
sl@0
    96
		case KStateTesting7:
sl@0
    97
			newState=KStateWaitingForTest7;
sl@0
    98
			break;
sl@0
    99
		}
sl@0
   100
	TheClient->iWs.PurgePointerEvents();
sl@0
   101
	SetState(newState);
sl@0
   102
	}
sl@0
   103
sl@0
   104
void CPointerWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
sl@0
   105
	{
sl@0
   106
	ConstructExtLD(*parent,pos,size);
sl@0
   107
	iTl=pos;
sl@0
   108
	iSize=size;
sl@0
   109
	Activate();
sl@0
   110
	AssignGC(aGc);
sl@0
   111
	SetState(KStateWaitingForTest1);
sl@0
   112
	BaseWin()->EnableOnEvents();
sl@0
   113
	}
sl@0
   114
sl@0
   115
void CPointerWindow::Draw()
sl@0
   116
	{
sl@0
   117
	iGc->Clear();
sl@0
   118
	iGc->DrawRect(Size());
sl@0
   119
	iGc->DrawRect(iRepeatRect);
sl@0
   120
	TBuf<0x80> buf;
sl@0
   121
	TBuf<0x80> buf2;
sl@0
   122
	switch(iState)
sl@0
   123
		{
sl@0
   124
		case KStateWaitingForTest1:
sl@0
   125
			{
sl@0
   126
			_LIT(Draw1,"Click anywhere in the window and hold the pointer steady");
sl@0
   127
			buf.Format(Draw1);
sl@0
   128
			}
sl@0
   129
			break;
sl@0
   130
		case KStateTesting1:
sl@0
   131
			{
sl@0
   132
			_LIT(Draw2,"Hold pointer inside the box");
sl@0
   133
			buf.Format(Draw2);
sl@0
   134
			}
sl@0
   135
			break;
sl@0
   136
		case KStateWaitingForTest2:
sl@0
   137
			{
sl@0
   138
			_LIT(Draw3,"Release the pointer then click in the window and hold the pointer steady");
sl@0
   139
			buf.Format(Draw3);
sl@0
   140
			}
sl@0
   141
			break;
sl@0
   142
		case KStateTesting2:
sl@0
   143
			{
sl@0
   144
			_LIT(Draw4,"Drag the pointer outside the box");
sl@0
   145
			buf.Format(Draw4);
sl@0
   146
			}
sl@0
   147
			break;
sl@0
   148
		case KStateWaitingForTest3:
sl@0
   149
			{
sl@0
   150
			_LIT(Draw5,"Release the pointer then click in the window and hold the pointer steady");
sl@0
   151
			buf.Format(Draw5);
sl@0
   152
			}
sl@0
   153
			break;
sl@0
   154
		case KStateTesting3:
sl@0
   155
			{
sl@0
   156
			_LIT(Draw6,"Release the pointer");
sl@0
   157
			buf.Format(Draw6);
sl@0
   158
			}
sl@0
   159
			break;
sl@0
   160
		case KStateWaitingForTest4:
sl@0
   161
			{
sl@0
   162
			_LIT(Draw7,"Click anywhere in the window and move the pointer slightly");
sl@0
   163
			buf.Format(Draw7);
sl@0
   164
			}
sl@0
   165
			break;
sl@0
   166
		case KStateTesting4:
sl@0
   167
			{
sl@0
   168
			_LIT(Draw8,"Release the pointer");
sl@0
   169
			buf.Format(Draw8);
sl@0
   170
			}
sl@0
   171
			break;
sl@0
   172
		case KStateWaitingForTest5:
sl@0
   173
			{
sl@0
   174
			_LIT(Draw9,"Click anywhere in the window and move the pointer slightly");
sl@0
   175
			buf.Format(Draw9);
sl@0
   176
			}
sl@0
   177
			break;
sl@0
   178
		case KStateTesting5:
sl@0
   179
			{
sl@0
   180
			_LIT(Draw10,"Release the pointer");
sl@0
   181
			buf.Format(Draw10);
sl@0
   182
			break;
sl@0
   183
			}
sl@0
   184
		case KStateWaitingForTest6:
sl@0
   185
			{
sl@0
   186
			_LIT(Draw11,"Click anywhere in the window");
sl@0
   187
			buf.Format(Draw11);
sl@0
   188
			}
sl@0
   189
			break;
sl@0
   190
		case KStateTesting6:
sl@0
   191
			{
sl@0
   192
			_LIT(Draw12,"Move the pointer");
sl@0
   193
			buf.Format(Draw12);
sl@0
   194
			}
sl@0
   195
			break;
sl@0
   196
		case KStateWaitingForTest8:
sl@0
   197
			{
sl@0
   198
			_LIT(Draw13,"Click anywhere in the window, and keep the pointer pressed");
sl@0
   199
			buf.Format(Draw13);
sl@0
   200
			}
sl@0
   201
			break;
sl@0
   202
		case KStateTesting8:
sl@0
   203
			buf.Format(KNullDesC);
sl@0
   204
			break;
sl@0
   205
		case KStateWaitingForTest7:
sl@0
   206
			{
sl@0
   207
			_LIT(Draw14,"Switch off and touch the center of the screen");
sl@0
   208
			buf.Format(Draw14);
sl@0
   209
			}
sl@0
   210
			break;
sl@0
   211
		case KStateTesting7:
sl@0
   212
			buf.Format(KNullDesC);
sl@0
   213
			break;
sl@0
   214
		}
sl@0
   215
	switch(iState)
sl@0
   216
		{
sl@0
   217
		case KStateTesting1:
sl@0
   218
			{
sl@0
   219
			_LIT(Repeat2,"Repeat (%d/%d), interval=%d.%d");
sl@0
   220
			buf2.Format(Repeat2,iRepeatCount,KRepeatCount,iInterval.Int()/1000000,(iInterval.Int()%1000000)/100000);
sl@0
   221
			}
sl@0
   222
			break;
sl@0
   223
		case KStateTesting2:
sl@0
   224
		case KStateTesting3:
sl@0
   225
			{
sl@0
   226
			_LIT(Repeat1,"Repeat (%d), interval=%d.%d");
sl@0
   227
			buf2.Format(Repeat1,iRepeatCount,iInterval.Int()/1000000,(iInterval.Int()%1000000)/100000);
sl@0
   228
			}
sl@0
   229
			break;
sl@0
   230
		}
sl@0
   231
	iGc->DrawText(buf,TPoint(10,20));
sl@0
   232
	iGc->DrawText(buf2,TPoint(10,40));
sl@0
   233
	}
sl@0
   234
sl@0
   235
void CPointerWindow::FinishedTests()
sl@0
   236
	{
sl@0
   237
	iState=KStateFinished;
sl@0
   238
	}
sl@0
   239
sl@0
   240
void CPointerWindow::StartNextRepeatTest()
sl@0
   241
	{
sl@0
   242
	iInterval=0;
sl@0
   243
	iRepeatCount=0;
sl@0
   244
	if (iState==KStateWaitingForTest4)
sl@0
   245
		User::After(TTimeIntervalMicroSeconds32(1000000));
sl@0
   246
	else if (iState==KStateWaitingForTest5)
sl@0
   247
		User::After(TTimeIntervalMicroSeconds32(1000000));
sl@0
   248
	QueueNextRepeat();
sl@0
   249
	switch(iState)
sl@0
   250
		{
sl@0
   251
		case KStateWaitingForTest1:
sl@0
   252
			SetState(KStateTesting1);
sl@0
   253
			break;
sl@0
   254
		case KStateWaitingForTest2:
sl@0
   255
			SetState(KStateTesting2);
sl@0
   256
			break;
sl@0
   257
		case KStateWaitingForTest3:
sl@0
   258
			SetState(KStateTesting3);
sl@0
   259
			break;
sl@0
   260
		case KStateWaitingForTest4:
sl@0
   261
			SetState(KStateTesting4);
sl@0
   262
			break;
sl@0
   263
		case KStateWaitingForTest5:
sl@0
   264
			SetState(KStateTesting5);
sl@0
   265
			break;
sl@0
   266
		case KStateWaitingForTest6:
sl@0
   267
			SetState(KStateTesting6);
sl@0
   268
			break;
sl@0
   269
		case KStateWaitingForTest8:
sl@0
   270
			SetState(KStateTesting8);
sl@0
   271
			break;
sl@0
   272
		case KStateWaitingForTest7:
sl@0
   273
			SetState(KStateTesting7);
sl@0
   274
			break;
sl@0
   275
		}
sl@0
   276
	}
sl@0
   277
sl@0
   278
void CPointerWindow::QueueNextRepeat()
sl@0
   279
	{
sl@0
   280
	iInterval=iInterval.Int()+KRepeatIntervalIncrements;
sl@0
   281
#if defined(LOGGING)
sl@0
   282
	/*_LIT(KRequestRepeat,"Request Repeat, State=%d, Interval=%d");
sl@0
   283
	TLogMessageText buf;
sl@0
   284
	buf.Format(KRequestRepeat,iState,iInterval.Int());
sl@0
   285
	TheClient->LogMessage(buf);*/
sl@0
   286
#endif
sl@0
   287
	iWin.RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32(iInterval),TRect(iRepeatRect));
sl@0
   288
	iPrevTime.HomeTime();
sl@0
   289
	iWin.Invalidate();
sl@0
   290
	}
sl@0
   291
sl@0
   292
void CPointerWindow::PointerL(const TPointerEvent &aPointer,const TTime &aTime)
sl@0
   293
	{
sl@0
   294
#if defined(LOGGING)
sl@0
   295
	_LIT(KPointer,"CPointerWindow::PointerL(Type=%d, Pos=(%d,%d), ParPos=(%d,%d), Mod=0x%x) State=%d");
sl@0
   296
	LogMessageText.Format(KPointer,aPointer.iType,aPointer.iPosition.iX,aPointer.iPosition.iY,aPointer.iParentPosition.iX,aPointer.iParentPosition.iY,aPointer.iModifiers,iState);
sl@0
   297
	TheClient->LogMessage(LogMessageText);
sl@0
   298
#endif
sl@0
   299
	if (aPointer.iType==TPointerEvent::EButtonRepeat)
sl@0
   300
		{
sl@0
   301
		if (iState!=KStateTesting1 && iState!=KStateTesting2 && iState!=KStateTesting3 && iState!=KStateTesting4)
sl@0
   302
			TestFailed();
sl@0
   303
		else
sl@0
   304
			{
sl@0
   305
			TTimeIntervalMicroSeconds32 interval(I64LOW(aTime.MicroSecondsFrom(iPrevTime).Int64()));
sl@0
   306
			TBool fail1=(interval.Int()<(iInterval.Int()-KRepeatMargin) || interval.Int()>(iInterval.Int()+KRepeatMargin));
sl@0
   307
			if (fail1)
sl@0
   308
				{
sl@0
   309
				_LIT(KPointerRepeat1,"Pointer Repeat Interval, Exp=%d, Act=%d, F1=%d, F2=%d");
sl@0
   310
				TLogMessageText buf;
sl@0
   311
				TBool fail2=(interval.Int()<(iInterval.Int()-2*KRepeatMargin) || interval.Int()>(iInterval.Int()+3*KRepeatMargin));
sl@0
   312
				buf.Format(KPointerRepeat1,iInterval.Int(),interval.Int(),fail1,fail2);
sl@0
   313
				TheClient->LogMessage(buf);
sl@0
   314
				}
sl@0
   315
			if (interval.Int()<(iInterval.Int()-
sl@0
   316
		#if defined(__MARM_ARM4__)
sl@0
   317
												2*
sl@0
   318
		#endif
sl@0
   319
												  KRepeatMargin) || interval.Int()>(iInterval.Int()+
sl@0
   320
		#if defined(__MARM_ARM4__)
sl@0
   321
																								    3*
sl@0
   322
		#endif
sl@0
   323
																									  KRepeatMargin))
sl@0
   324
				TestFailed();
sl@0
   325
			else
sl@0
   326
				{
sl@0
   327
				if (!iRepeatRect.Contains(aPointer.iPosition) ||
sl@0
   328
					aPointer.iParentPosition!=(aPointer.iPosition+iWin.InquireOffset(*Parent()->WinTreeNode())))
sl@0
   329
					TestFailed();
sl@0
   330
				else
sl@0
   331
					{
sl@0
   332
					iRepeatCount++;
sl@0
   333
					if (iState==KStateTesting1 && iRepeatCount==KRepeatCount)
sl@0
   334
						{
sl@0
   335
						QueueNextRepeat();
sl@0
   336
						Client()->iWs.Flush();
sl@0
   337
						User::After(TTimeIntervalMicroSeconds32(iRepeatCount*KRepeatIntervalIncrements));
sl@0
   338
						iWin.CancelPointerRepeatEventRequest();
sl@0
   339
						SetState(KStateWaitingForTest2);
sl@0
   340
						}
sl@0
   341
					else
sl@0
   342
						QueueNextRepeat();
sl@0
   343
					}
sl@0
   344
				}
sl@0
   345
			}
sl@0
   346
		}
sl@0
   347
	else switch(iState)
sl@0
   348
		{
sl@0
   349
		case KStateWaitingForTest1:
sl@0
   350
		case KStateWaitingForTest2:
sl@0
   351
		case KStateWaitingForTest3:
sl@0
   352
		case KStateWaitingForTest4:
sl@0
   353
		case KStateWaitingForTest8:
sl@0
   354
			if (aPointer.iType==TPointerEvent::EButton1Down)
sl@0
   355
				{
sl@0
   356
				iRepeatRect.iTl=aPointer.iPosition-TPoint(KRepeatRectXExtra,KRepeatRectYExtra);
sl@0
   357
				iRepeatRect.iBr=aPointer.iPosition+TPoint(KRepeatRectXExtra,KRepeatRectYExtra);
sl@0
   358
				StartNextRepeatTest();
sl@0
   359
				}
sl@0
   360
			break;
sl@0
   361
		case KStateWaitingForTest5:
sl@0
   362
			if (aPointer.iType==TPointerEvent::EButton1Down)
sl@0
   363
				{
sl@0
   364
				iRepeatRect.iTl=aPointer.iPosition;
sl@0
   365
				iRepeatRect.iBr=aPointer.iPosition+TPoint(1,1);
sl@0
   366
				StartNextRepeatTest();
sl@0
   367
				}
sl@0
   368
			break;
sl@0
   369
		case KStateWaitingForTest6:
sl@0
   370
			if (aPointer.iType==TPointerEvent::EButton1Down)
sl@0
   371
				{
sl@0
   372
				iRepeatRect.iTl=aPointer.iPosition+TPoint(KRepeatRectXExtra,KRepeatRectYExtra);
sl@0
   373
				iRepeatRect.iBr=aPointer.iPosition+TPoint(2*KRepeatRectXExtra,2*KRepeatRectYExtra);
sl@0
   374
				StartNextRepeatTest();
sl@0
   375
				}
sl@0
   376
			break;
sl@0
   377
		case KStateTesting1:
sl@0
   378
			{
sl@0
   379
			TBool isDrag=(aPointer.iType==TPointerEvent::EDrag);
sl@0
   380
			TestFailed(isDrag);
sl@0
   381
			if (isDrag)
sl@0
   382
				{
sl@0
   383
				iTest->SimulatePointer(TRawEvent::EButton1Down,aPointer.iPosition.iX,aPointer.iPosition.iY);
sl@0
   384
				iTest->SimulatePointer(TRawEvent::EButton1Up,aPointer.iPosition.iX,aPointer.iPosition.iY);
sl@0
   385
				}
sl@0
   386
			}
sl@0
   387
			break;
sl@0
   388
		case KStateTesting2:
sl@0
   389
			if (aPointer.iType==TPointerEvent::EDrag)
sl@0
   390
				SetState(KStateWaitingForTest3);
sl@0
   391
			else
sl@0
   392
				TestFailed();
sl@0
   393
			break;
sl@0
   394
		case KStateTesting3:
sl@0
   395
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   396
				SetState(KStateWaitingForTest4);
sl@0
   397
			else
sl@0
   398
				TestFailed();
sl@0
   399
			break;
sl@0
   400
		case KStateTesting4:
sl@0
   401
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   402
				SetState(KStateWaitingForTest5);
sl@0
   403
			else
sl@0
   404
				TestFailed();
sl@0
   405
			break;
sl@0
   406
		case KStateTesting5:
sl@0
   407
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   408
				SetState(KStateWaitingForTest6);
sl@0
   409
			else if (aPointer.iType!=TPointerEvent::EDrag)
sl@0
   410
				TestFailed();
sl@0
   411
			break;
sl@0
   412
		case KStateTesting6:
sl@0
   413
			if (aPointer.iType==TPointerEvent::EDrag)
sl@0
   414
				{
sl@0
   415
		//#if !defined(__WINS__)	// Can't emulate touching dig when switched off under WINS
sl@0
   416
		//		if (iTest->Digitiser())
sl@0
   417
					SetState(KStateWaitingForTest7);
sl@0
   418
		/*		else
sl@0
   419
		#endif
sl@0
   420
					SetState(KStateWaitingForTest8);*/
sl@0
   421
				}
sl@0
   422
			else
sl@0
   423
				TestFailed();
sl@0
   424
			break;
sl@0
   425
		case KStateWaitingForTest7:
sl@0
   426
			if (aPointer.iType==TPointerEvent::EButton1Down || aPointer.iType==TPointerEvent::ESwitchOn)
sl@0
   427
				TestFailed();
sl@0
   428
			break;
sl@0
   429
		case KStateTesting7:
sl@0
   430
			if (aPointer.iType!=TPointerEvent::ESwitchOn)
sl@0
   431
				TestFailed();
sl@0
   432
			else
sl@0
   433
				SetState(KStateWaitingForTest8);
sl@0
   434
			break;
sl@0
   435
		case KStateTesting8:
sl@0
   436
			break;
sl@0
   437
		}
sl@0
   438
	}
sl@0
   439
sl@0
   440
void CPointerWindow::TestFailed(TBool aRetest/*=EFalse*/)
sl@0
   441
	{
sl@0
   442
	if (iState!=KStateFailed)
sl@0
   443
		{
sl@0
   444
		TInt oldState=iState;
sl@0
   445
		iState=KStateFailed;
sl@0
   446
		if (iTest->TestFailed(oldState,aRetest) || aRetest)
sl@0
   447
			ResetTest(oldState);
sl@0
   448
		}
sl@0
   449
	}
sl@0
   450
sl@0
   451
void CPointerWindow::WinKeyL(const TKeyEvent &aKey,const TTime &)
sl@0
   452
	{
sl@0
   453
#if defined(LOGGING)
sl@0
   454
	_LIT(KKey,"CPointerWindow::WinKeyL(Code=%d, ScanCode=%d) State=%d");
sl@0
   455
	LogMessageText.Format(KKey,aKey.iCode,aKey.iScanCode,iState);
sl@0
   456
	TheClient->LogMessage(LogMessageText);
sl@0
   457
#endif
sl@0
   458
	if (aKey.iCode==EKeyEscape)
sl@0
   459
		FinishedTests();	// Simply skip this test if the Escape key is pressed
sl@0
   460
	}
sl@0
   461
sl@0
   462
void CPointerWindow::SwitchOn(const TTime &)
sl@0
   463
	{
sl@0
   464
#if defined(LOGGING)
sl@0
   465
	_LIT(KOn,"CPointerWindow::SwitchOn() State=%d");
sl@0
   466
	LogMessageText.Format(KOn,iState);
sl@0
   467
	TheClient->LogMessage(LogMessageText);
sl@0
   468
#endif
sl@0
   469
	if (iState==KStateWaitingForTest7)
sl@0
   470
		SetState(KStateTesting7);
sl@0
   471
	else
sl@0
   472
		TestFailed();
sl@0
   473
	}
sl@0
   474
sl@0
   475
void CPointerWindow::SendEvent()
sl@0
   476
	{	
sl@0
   477
#if defined(LOGGING)
sl@0
   478
	_LIT(KSend,"CPointerWindow::SendEvent() State=%d");
sl@0
   479
	LogMessageText.Format(KSend,iState);
sl@0
   480
	TheClient->LogMessage(LogMessageText);
sl@0
   481
#endif
sl@0
   482
	switch (iState)
sl@0
   483
		{
sl@0
   484
	case KStateWaitingForTest1:
sl@0
   485
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/4,iTl.iY+iSize.iHeight/4);
sl@0
   486
		break;
sl@0
   487
	//case KStateTesting1:			//Do Nothing
sl@0
   488
	//	break;
sl@0
   489
	case KStateWaitingForTest2:
sl@0
   490
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/4,iTl.iY+iSize.iHeight/4);
sl@0
   491
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/2,iTl.iY+iSize.iHeight/4);
sl@0
   492
		break;
sl@0
   493
	case KStateTesting2:
sl@0
   494
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+5*iSize.iWidth/8,iTl.iY+iSize.iHeight/4+2);
sl@0
   495
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4,iTl.iY+iSize.iHeight/4+4);
sl@0
   496
		break;
sl@0
   497
	case KStateWaitingForTest3:
sl@0
   498
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+3*iSize.iWidth/4,iTl.iY+iSize.iHeight/4+4);
sl@0
   499
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/4,iTl.iY+iSize.iHeight/2);
sl@0
   500
		break;
sl@0
   501
	case KStateTesting3:
sl@0
   502
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/4,iTl.iY+iSize.iHeight/2);
sl@0
   503
		break;
sl@0
   504
	case KStateWaitingForTest4:
sl@0
   505
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/2,iTl.iY+iSize.iHeight/2);
sl@0
   506
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+3,iTl.iY+iSize.iHeight/2+1);
sl@0
   507
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+6,iTl.iY+iSize.iHeight/2+2);
sl@0
   508
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+9,iTl.iY+iSize.iHeight/2+3);
sl@0
   509
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+12,iTl.iY+iSize.iHeight/2+4);
sl@0
   510
		break;
sl@0
   511
	case KStateTesting4:
sl@0
   512
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/2+12,iTl.iY+iSize.iHeight/2+4);
sl@0
   513
		break;
sl@0
   514
	case KStateWaitingForTest5:
sl@0
   515
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/2,iTl.iY+3*iSize.iHeight/4);
sl@0
   516
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+3,iTl.iY+3*iSize.iHeight/4+1);
sl@0
   517
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+6,iTl.iY+3*iSize.iHeight/4+2);
sl@0
   518
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+9,iTl.iY+3*iSize.iHeight/4+3);
sl@0
   519
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/2+12,iTl.iY+3*iSize.iHeight/4+4);
sl@0
   520
		break;
sl@0
   521
	case KStateTesting5:
sl@0
   522
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/2+12,iTl.iY+3*iSize.iHeight/4+4);
sl@0
   523
		break;
sl@0
   524
	case KStateWaitingForTest6:
sl@0
   525
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+3*iSize.iWidth/4,iTl.iY+3*iSize.iHeight/4);
sl@0
   526
		break;
sl@0
   527
	case KStateTesting6:
sl@0
   528
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4+4,iTl.iY+3*iSize.iHeight/4+2);
sl@0
   529
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4+8,iTl.iY+3*iSize.iHeight/4+4);
sl@0
   530
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4+12,iTl.iY+3*iSize.iHeight/4+6);
sl@0
   531
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+3*iSize.iWidth/4+16,iTl.iY+3*iSize.iHeight/4+8);
sl@0
   532
		break;
sl@0
   533
	case KStateWaitingForTest8:
sl@0
   534
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/2,iTl.iY+3*iSize.iHeight/4);
sl@0
   535
		break;
sl@0
   536
	case KStateTesting8:
sl@0
   537
		break;
sl@0
   538
	case KStateWaitingForTest7:
sl@0
   539
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+3*iSize.iWidth/4+16,iTl.iY+3*iSize.iHeight/4+8);
sl@0
   540
		iTest->SimulateEvent(TRawEvent::ESwitchOn);
sl@0
   541
		iTest->SimulatePointer(TRawEvent::EPointerSwitchOn,iTl.iX+iSize.iWidth/2-1,iTl.iY+iSize.iHeight/2-1);
sl@0
   542
		break;
sl@0
   543
	//case KStateTesting7:		//Do Nothing
sl@0
   544
	//	break;
sl@0
   545
	/*case KStateFailed:
sl@0
   546
		break;
sl@0
   547
	case KStateFinished:
sl@0
   548
		break;*/
sl@0
   549
		}
sl@0
   550
	}
sl@0
   551
sl@0
   552
//
sl@0
   553
// CGrabWindow //
sl@0
   554
//
sl@0
   555
sl@0
   556
CGrabWindow::CGrabWindow(CTPointer *aTest) : iTest(aTest)
sl@0
   557
	{
sl@0
   558
	}
sl@0
   559
sl@0
   560
void CGrabWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
sl@0
   561
	{
sl@0
   562
	ConstructExtLD(*parent,pos,size);
sl@0
   563
	iTl=pos;
sl@0
   564
	iSize=size;
sl@0
   565
	Activate();
sl@0
   566
	AssignGC(aGc);
sl@0
   567
	SetState(KGrabStateWaitingForDown);
sl@0
   568
	}
sl@0
   569
sl@0
   570
void CGrabWindow::Draw()
sl@0
   571
	{
sl@0
   572
	iGc->Clear();
sl@0
   573
	iGc->DrawRect(Size());
sl@0
   574
	TBuf<0x80> buf;
sl@0
   575
	switch(iState)
sl@0
   576
		{
sl@0
   577
		case KGrabStateWaitingForDown:
sl@0
   578
		case KGrabStateWaitingForDown2:
sl@0
   579
		case KGrabStateWaitingForDown5:
sl@0
   580
			{
sl@0
   581
			_LIT(Draw1,"Press the pointer inside the window");
sl@0
   582
			buf.Copy(Draw1);
sl@0
   583
			}
sl@0
   584
			break;
sl@0
   585
		case KGrabStateWaitingForDown3:
sl@0
   586
		case KGrabStateWaitingForUp3a:
sl@0
   587
			{
sl@0
   588
			_LIT(Draw2,"Press and release the pointer inside the window");
sl@0
   589
			buf.Copy(Draw2);
sl@0
   590
			}
sl@0
   591
			break;
sl@0
   592
		case KGrabStateWaitingForDragOut:
sl@0
   593
			{
sl@0
   594
			_LIT(Draw3,"Drag the pointer outside into the outside window");
sl@0
   595
			buf.Copy(Draw3);
sl@0
   596
			}
sl@0
   597
			break;
sl@0
   598
		case KGrabStateWaitingForUp:
sl@0
   599
		case KGrabStateWaitingForUp2b:
sl@0
   600
		case KGrabStateWaitingForUp5:
sl@0
   601
			{
sl@0
   602
			_LIT(Draw4,"Release the pointer");
sl@0
   603
			buf.Copy(Draw4);
sl@0
   604
			}
sl@0
   605
			break;
sl@0
   606
		case KGrabStateWaitingForDown4:
sl@0
   607
			{
sl@0
   608
			_LIT(Draw5,"Press then release the pointer");
sl@0
   609
			buf.Copy(Draw5);
sl@0
   610
			}
sl@0
   611
			break;
sl@0
   612
		default:;
sl@0
   613
		}
sl@0
   614
	iGc->DrawText(buf,TPoint(10,20));
sl@0
   615
	}
sl@0
   616
sl@0
   617
void CGrabWindow::PointerL(const TPointerEvent &aPointer,const TTime&)
sl@0
   618
	{
sl@0
   619
#if defined(LOGGING)
sl@0
   620
	_LIT(KPointer,"CGrabWindow::PointerL(Type=%d, Pos=(%d,%d), ParPos=(%d,%d), Mod=0x%x) State=%d");
sl@0
   621
	LogMessageText.Format(KPointer,aPointer.iType,aPointer.iPosition.iX,aPointer.iPosition.iY,aPointer.iParentPosition.iX,aPointer.iParentPosition.iY,aPointer.iModifiers,iState);
sl@0
   622
	TheClient->LogMessage(LogMessageText);
sl@0
   623
#endif
sl@0
   624
	switch(iState)
sl@0
   625
		{
sl@0
   626
		case KGrabStateWaitingForDown:
sl@0
   627
			if (aPointer.iType==TPointerEvent::EButton1Down)
sl@0
   628
				SetState(KGrabStateWaitingForDragOut);
sl@0
   629
			break;
sl@0
   630
		case KGrabStateWaitingForDragOut:
sl@0
   631
			if (aPointer.iType!=TPointerEvent::EDrag)
sl@0
   632
				TestFailed();
sl@0
   633
			else
sl@0
   634
				{
sl@0
   635
				if (!TRect(Size()).Contains(aPointer.iPosition))
sl@0
   636
					SetState(KGrabStateWaitingForUp);
sl@0
   637
				}
sl@0
   638
			break;
sl@0
   639
		case KGrabStateWaitingForUp:
sl@0
   640
			if (aPointer.iType==TPointerEvent::EDrag)
sl@0
   641
				break;
sl@0
   642
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   643
				SetState(KGrabStateWaitingForDown2);
sl@0
   644
			else
sl@0
   645
				TestFailed();
sl@0
   646
			break;
sl@0
   647
		case KGrabStateWaitingForDown2:
sl@0
   648
			if (aPointer.iType!=TPointerEvent::EButton1Down)
sl@0
   649
				TestFailed();
sl@0
   650
			else
sl@0
   651
				{
sl@0
   652
				iTest->GrabWin2()->BaseWin()->ClaimPointerGrab();
sl@0
   653
				iTest->GrabWin2()->BaseWin()->ClaimPointerGrab();	// Call twice to check it's harmless
sl@0
   654
				SetState(KGrabStateWaitingForUp2a);
sl@0
   655
				}
sl@0
   656
			break;
sl@0
   657
		case KGrabStateWaitingForUp2a:
sl@0
   658
			SetState(KGrabStateWaitingForDrag2);
sl@0
   659
			break;
sl@0
   660
		case KGrabStateWaitingForDrag2:
sl@0
   661
			break;
sl@0
   662
		case KGrabStateWaitingForUp2b:
sl@0
   663
			TestFailed();
sl@0
   664
			break;
sl@0
   665
		case KGrabStateWaitingForDown3:
sl@0
   666
			if (aPointer.iType!=TPointerEvent::EButton1Down)
sl@0
   667
				TestFailed();
sl@0
   668
			else
sl@0
   669
				SetState(KGrabStateWaitingForUp3a);
sl@0
   670
			break;
sl@0
   671
		case KGrabStateWaitingForUp3a:
sl@0
   672
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   673
				{
sl@0
   674
				iTest->GrabWin2()->BaseWin()->ClaimPointerGrab();
sl@0
   675
				SetState(KGrabStateWaitingForUp3b);
sl@0
   676
				}
sl@0
   677
			break;
sl@0
   678
		case KGrabStateWaitingForUp3b:
sl@0
   679
			TestFailed();
sl@0
   680
			break;
sl@0
   681
		case KGrabStateWaitingForDown5:
sl@0
   682
			if (aPointer.iType!=TPointerEvent::EButton1Down)
sl@0
   683
				TestFailed();
sl@0
   684
			else
sl@0
   685
				{
sl@0
   686
				iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(EFalse);
sl@0
   687
				SetState(KGrabStateWaitingForDrag5);
sl@0
   688
				}
sl@0
   689
			break;
sl@0
   690
		case KGrabStateWaitingForDrag5:
sl@0
   691
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   692
				TestFailed();
sl@0
   693
			break;
sl@0
   694
		case KGrabStateWaitingForUp5:
sl@0
   695
			TestFailed();
sl@0
   696
			break;
sl@0
   697
		case KGrabStateWaitingForDown4:
sl@0
   698
			iWin.Close();	// Close the window with the grab captured in it
sl@0
   699
			SetState(KGrabStateWaitingForUp4);
sl@0
   700
			break;
sl@0
   701
		case KGrabStateFinished:
sl@0
   702
			break;
sl@0
   703
		}
sl@0
   704
	}
sl@0
   705
sl@0
   706
void CGrabWindow::ResetTest()
sl@0
   707
	{
sl@0
   708
	TheClient->iWs.PurgePointerEvents();
sl@0
   709
	SetState(KGrabStateWaitingForDown);
sl@0
   710
	}
sl@0
   711
sl@0
   712
void CGrabWindow::Pointer2(const TPointerEvent &aPointer)
sl@0
   713
	{
sl@0
   714
	switch(iState)
sl@0
   715
		{
sl@0
   716
		case KGrabStateWaitingForDrag2:
sl@0
   717
			{
sl@0
   718
			if (aPointer.iType==TPointerEvent::EDrag)
sl@0
   719
				{
sl@0
   720
				SetState(KGrabStateWaitingForUp2b);
sl@0
   721
				}
sl@0
   722
			else
sl@0
   723
				{
sl@0
   724
				if (iTest->TestFailed(iState))
sl@0
   725
					ResetTest();
sl@0
   726
				}
sl@0
   727
			break;
sl@0
   728
			}
sl@0
   729
		case KGrabStateWaitingForUp2b:
sl@0
   730
			if (aPointer.iType==TPointerEvent::EDrag)	// Harmless
sl@0
   731
				break;
sl@0
   732
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   733
				SetState(KGrabStateWaitingForDown3);
sl@0
   734
			else
sl@0
   735
				TestFailed();
sl@0
   736
			break;
sl@0
   737
		case KGrabStateWaitingForUp3b:
sl@0
   738
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   739
				SetState(KGrabStateWaitingForDown5);
sl@0
   740
			else
sl@0
   741
				TestFailed();
sl@0
   742
			break;
sl@0
   743
		case KGrabStateWaitingForUp4:
sl@0
   744
			FinishedTests();
sl@0
   745
			break;
sl@0
   746
		case KGrabStateWaitingForDrag5:
sl@0
   747
			{
sl@0
   748
			if (aPointer.iType==TPointerEvent::EDrag)
sl@0
   749
				SetState(KGrabStateWaitingForUp5);
sl@0
   750
			else if (iTest->TestFailed(iState))
sl@0
   751
				ResetTest();
sl@0
   752
			break;
sl@0
   753
			}
sl@0
   754
		case KGrabStateWaitingForUp5:
sl@0
   755
			if (aPointer.iType==TPointerEvent::EDrag)	// Harmless
sl@0
   756
				break;
sl@0
   757
			if (aPointer.iType==TPointerEvent::EButton1Up)
sl@0
   758
				SetState(KGrabStateWaitingForDown4);
sl@0
   759
			else
sl@0
   760
				TestFailed();
sl@0
   761
			break;
sl@0
   762
		default:;
sl@0
   763
		}
sl@0
   764
	}
sl@0
   765
sl@0
   766
void CGrabWindow::SetState(TInt aState)
sl@0
   767
	{
sl@0
   768
	iState=aState;
sl@0
   769
	if (aState!=KGrabStateWaitingForUp4)
sl@0
   770
		iWin.Invalidate();
sl@0
   771
	TheClient->WaitForRedrawsToFinish();	
sl@0
   772
	SendEvent();
sl@0
   773
	}
sl@0
   774
sl@0
   775
void CGrabWindow::TestFailed()
sl@0
   776
	{
sl@0
   777
#if defined(LOGGING)
sl@0
   778
	_LIT(KFail,"CGrabWindow::TestFailed() State=%d");
sl@0
   779
	LogMessageText.Format(KFail,iState);
sl@0
   780
	TheClient->LogMessage(LogMessageText);
sl@0
   781
#endif
sl@0
   782
	if (iState!=KStateFailed)
sl@0
   783
		{
sl@0
   784
		TInt oldState=iState;
sl@0
   785
		iState=KStateFailed;
sl@0
   786
		if (iTest->TestFailed(oldState))
sl@0
   787
			ResetTest();
sl@0
   788
		}
sl@0
   789
	}
sl@0
   790
sl@0
   791
void CGrabWindow::FinishedTests()
sl@0
   792
	{
sl@0
   793
	iState=KGrabStateFinished;
sl@0
   794
	}
sl@0
   795
sl@0
   796
void CGrabWindow::WinKeyL(const TKeyEvent &aKey,const TTime &)
sl@0
   797
	{
sl@0
   798
#if defined(LOGGING)
sl@0
   799
	_LIT(KKey,"CGrabWindow::WinKeyL(Code=%d, ScanCode=%d) State=%d");
sl@0
   800
	LogMessageText.Format(KKey,aKey.iCode,aKey.iScanCode,iState);
sl@0
   801
	TheClient->LogMessage(LogMessageText);
sl@0
   802
#endif
sl@0
   803
	if (aKey.iCode==EKeyEscape)
sl@0
   804
		FinishedTests();	// Simply skip this test if the Escape key is pressed
sl@0
   805
	}
sl@0
   806
sl@0
   807
void CGrabWindow::SendEvent()
sl@0
   808
	{
sl@0
   809
	switch (iState)
sl@0
   810
		{
sl@0
   811
	case KGrabStateWaitingForDown:
sl@0
   812
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/3,iTl.iY+iSize.iHeight/3);
sl@0
   813
		break;
sl@0
   814
	case KGrabStateWaitingForDragOut:
sl@0
   815
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+iSize.iWidth/6,iTl.iY+iSize.iHeight/6);
sl@0
   816
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+1,iTl.iY+1);
sl@0
   817
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX-10,iTl.iY-10);
sl@0
   818
		break;
sl@0
   819
	case KGrabStateWaitingForUp:
sl@0
   820
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX-8,iTl.iY-8);
sl@0
   821
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX-5,iTl.iY-5);
sl@0
   822
		break;
sl@0
   823
	case KGrabStateWaitingForDown2:
sl@0
   824
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+2*iSize.iWidth/3,iTl.iY+iSize.iHeight/3);
sl@0
   825
		break;
sl@0
   826
	/*case KGrabStateWaitingForUp2a:		//Don't need to do anything for these cases
sl@0
   827
		break;
sl@0
   828
	case KGrabStateWaitingForDrag2:
sl@0
   829
		break;*/
sl@0
   830
	case KGrabStateWaitingForUp2b:
sl@0
   831
		iTest->SimulatePointer(TRawEvent::EPointerMove,iTl.iX+2*iSize.iWidth/3-3,iTl.iY+iSize.iHeight/3+3);
sl@0
   832
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+2*iSize.iWidth/3,iTl.iY+iSize.iHeight/3);
sl@0
   833
		break;
sl@0
   834
	case KGrabStateWaitingForDown3:
sl@0
   835
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+2*iSize.iWidth/3,2*iTl.iY+iSize.iHeight/3);
sl@0
   836
		break;
sl@0
   837
	case KGrabStateWaitingForUp3a:
sl@0
   838
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+2*iSize.iWidth/3,2*iTl.iY+iSize.iHeight/3);
sl@0
   839
		break;
sl@0
   840
	case KGrabStateWaitingForUp3b:
sl@0
   841
		break;
sl@0
   842
	case KGrabStateWaitingForDown4:
sl@0
   843
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+2*iSize.iWidth/5,iTl.iY+iSize.iHeight/3);
sl@0
   844
		break;
sl@0
   845
	case KGrabStateWaitingForUp4:
sl@0
   846
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+2*iSize.iWidth/5,iTl.iY+iSize.iHeight/3);
sl@0
   847
		break;
sl@0
   848
	case KGrabStateWaitingForDown5:
sl@0
   849
		iTest->SimulatePointer(TRawEvent::EButton1Down,iTl.iX+iSize.iWidth/3,2*iTl.iY+iSize.iHeight/3);
sl@0
   850
		break;
sl@0
   851
	case KGrabStateWaitingForUp5:
sl@0
   852
		iTest->SimulatePointer(TRawEvent::EButton1Up,iTl.iX+iSize.iWidth/3,2*iTl.iY+iSize.iHeight/3);
sl@0
   853
		break;
sl@0
   854
	//case KGrabStateWaitingForDrag5:		//Don't need to do anything for these cases
sl@0
   855
	//	break;
sl@0
   856
	/*case KStateFailed:
sl@0
   857
		break;
sl@0
   858
	case KGrabStateFinished:
sl@0
   859
		break;*/
sl@0
   860
	default:;
sl@0
   861
		}
sl@0
   862
	TheClient->iWs.Flush();
sl@0
   863
	}
sl@0
   864
sl@0
   865
sl@0
   866
//
sl@0
   867
// CGrabWindow2, used as part of grab tests //
sl@0
   868
//
sl@0
   869
sl@0
   870
CGrabWindow2::CGrabWindow2(CGrabWindow *aWindow) : iGrabWindow(aWindow)
sl@0
   871
	{
sl@0
   872
	}
sl@0
   873
sl@0
   874
void CGrabWindow2::Draw()
sl@0
   875
	{
sl@0
   876
	iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
sl@0
   877
	iGc->SetBrushColor(TRgb::Gray4(2));
sl@0
   878
	iGc->DrawRect(Size());
sl@0
   879
	}
sl@0
   880
sl@0
   881
void CGrabWindow2::PointerL(const TPointerEvent &aPointer,const TTime&)
sl@0
   882
	{
sl@0
   883
#if defined(LOGGING)
sl@0
   884
	_LIT(KPointer,"CGrabWindow2::PointerL(Type=%d, Pos=(%d,%d), ParPos=(%d,%d), Mod=0x%x)");
sl@0
   885
	LogMessageText.Format(KPointer,aPointer.iType,aPointer.iPosition.iX,aPointer.iPosition.iY,aPointer.iParentPosition.iX,aPointer.iParentPosition.iY,aPointer.iModifiers);
sl@0
   886
	TheClient->LogMessage(LogMessageText);
sl@0
   887
#endif
sl@0
   888
	iGrabWindow->Pointer2(aPointer);
sl@0
   889
	}
sl@0
   890
sl@0
   891
//
sl@0
   892
// CTPointTest //
sl@0
   893
//
sl@0
   894
sl@0
   895
CTPointer::CTPointer(CTestStep* aStep) : CTWsGraphicsBase(aStep)
sl@0
   896
	{
sl@0
   897
	iState = 0;
sl@0
   898
	}
sl@0
   899
sl@0
   900
sl@0
   901
CTPointer::~CTPointer()
sl@0
   902
	{
sl@0
   903
	HAL::Set(HALData::EPenDisplayOn,iOldPointerState);
sl@0
   904
	delete iRepeatWin;
sl@0
   905
	delete iGrabWin;
sl@0
   906
	delete iGrabWin2;
sl@0
   907
	Client()->ResetFocus();
sl@0
   908
	delete iTimeOut;
sl@0
   909
	}
sl@0
   910
sl@0
   911
void CTPointer::ConstructL()
sl@0
   912
	{
sl@0
   913
	iTimeOut=new(ELeave) CTimeOut();
sl@0
   914
	iTimeOut->ConstructL();
sl@0
   915
	iTimeOut->Start(KTimeOutAfter,TCallBack(CTPointer::TimeOut,this));
sl@0
   916
	
sl@0
   917
	TheClient->iWs.SetPointerCursorArea(iTest->iNormalPointerCursorArea);
sl@0
   918
	iRepeatWin=new(ELeave) CPointerWindow(this);
sl@0
   919
	TSize screenSize(Client()->iScreen->SizeInPixels());
sl@0
   920
	if (TestBase()->ConfigurationSupportsPointerEventTesting())
sl@0
   921
	    {
sl@0
   922
	    iRepeatWin->SetUpLD(TPoint(screenSize.iWidth/8,screenSize.iHeight/8),TSize(screenSize.iWidth*3/4,screenSize.iHeight*3/4),Client()->iGroup,*Client()->iGc);
sl@0
   923
	    }
sl@0
   924
	Client()->iGroup->SetCurrentWindow(iRepeatWin);
sl@0
   925
	iNoDigitiser=EFalse;
sl@0
   926
	TInt err=HAL::Get(HALData::EPenDisplayOn,iOldPointerState);
sl@0
   927
	if (err==KErrNotSupported)
sl@0
   928
		iNoDigitiser=ETrue;
sl@0
   929
	else if (err==KErrNone)
sl@0
   930
		err=HAL::Set(HALData::EPenDisplayOn,ETrue);
sl@0
   931
	if (err==KErrNotSupported)
sl@0
   932
		iNoDigitiser=(!iOldPointerState);
sl@0
   933
	else
sl@0
   934
		{
sl@0
   935
		TEST(err==KErrNone);
sl@0
   936
		if (err!=KErrNone)
sl@0
   937
		INFO_PRINTF3(_L("HAL::Set(HALData::EPenDisplayOn,ETrue) return value - Expected: %d, Actual: %d"), KErrNone, err);			
sl@0
   938
		}
sl@0
   939
	
sl@0
   940
	}
sl@0
   941
sl@0
   942
TInt CTPointer::TimeOut(TAny* aTest)		//static
sl@0
   943
	{
sl@0
   944
	static_cast<CTPointer*>(aTest)->TimeOut();
sl@0
   945
	return(KErrNone);
sl@0
   946
	}
sl@0
   947
sl@0
   948
void CTPointer::TimeOut()
sl@0
   949
	{
sl@0
   950
	TLogMessageText buf;
sl@0
   951
	_LIT(KPointerTimeOut,"TIMEOUT: Pointer Test, %d, %S");
sl@0
   952
	buf.AppendFormat(KPointerTimeOut,iState,&(iTest->iSubTitle));
sl@0
   953
	TheClient->LogMessage(buf);
sl@0
   954
	++iTimeOutCount;
sl@0
   955
	if (!TestFailed(-1) && iState<2)
sl@0
   956
		{
sl@0
   957
		iTimeOut->Start(KTimeOutAfter,TCallBack(CTPointer::TimeOut,this));
sl@0
   958
		}
sl@0
   959
	}
sl@0
   960
sl@0
   961
TBool CTPointer::TestFailed(TInt aCase,TBool aRetry/*=EFalse*/)
sl@0
   962
	{
sl@0
   963
	_LIT(KPointerTest,": Pointer Test, %d, %S, Case %d");
sl@0
   964
	_LIT(KRetry,"Retry");
sl@0
   965
	_LIT(KFail,"FAIL");
sl@0
   966
	TLogMessageText buf;
sl@0
   967
	TInt ret=0;
sl@0
   968
	if (aRetry)
sl@0
   969
		buf.Append(KRetry);
sl@0
   970
	else
sl@0
   971
		{
sl@0
   972
		ret=1;
sl@0
   973
		buf.Append(KFail);
sl@0
   974
		}
sl@0
   975
	buf.AppendFormat(KPointerTest,iState,&(iTest->iSubTitle),aCase);
sl@0
   976
	TheClient->LogMessage(buf);
sl@0
   977
#if !defined(DISABLE_FAIL_DIALOG)
sl@0
   978
	if (!aRetry)
sl@0
   979
		{
sl@0
   980
		__DEBUGGER();
sl@0
   981
		TRAPD(err,ret=doTestFailedL());
sl@0
   982
		}
sl@0
   983
#endif
sl@0
   984
	switch(ret)
sl@0
   985
		{
sl@0
   986
		case 0:
sl@0
   987
			return(ETrue);	// Re-try test
sl@0
   988
		case 1:
sl@0
   989
			break;
sl@0
   990
		}
sl@0
   991
	return(EFalse);
sl@0
   992
	}
sl@0
   993
sl@0
   994
TInt CTPointer::doTestFailedL()
sl@0
   995
	{
sl@0
   996
	//_LIT(Failed,"Pointer repeat test failed");
sl@0
   997
	_LIT(Retest,"Retest");
sl@0
   998
	_LIT(Fail,"Fail");
sl@0
   999
	CTDialog *dialog=new(ELeave) CTDialog();
sl@0
  1000
	dialog->SetNumButtons(2);
sl@0
  1001
	dialog->SetButtonText(0,Retest);
sl@0
  1002
	dialog->SetButtonText(1,Fail);
sl@0
  1003
	dialog->ConstructLD(*Client()->iGroup,*Client()->iGc);
sl@0
  1004
	dialog->SetTitle(_L("Pointer repeat test failed"));
sl@0
  1005
	dialog->SetFlags(CTDialog::EDialogWaitForButtonUp);
sl@0
  1006
	return dialog->Display();
sl@0
  1007
	}
sl@0
  1008
sl@0
  1009
CGrabWindow2 *CTPointer::GrabWin2() const
sl@0
  1010
	{
sl@0
  1011
	return(iGrabWin2);
sl@0
  1012
	}
sl@0
  1013
sl@0
  1014
void CTPointer::StartGrabTestL()
sl@0
  1015
	{
sl@0
  1016
	iGrabWin=new(ELeave) CGrabWindow(this);
sl@0
  1017
	iGrabWin2=new(ELeave) CGrabWindow2(iGrabWin);
sl@0
  1018
//
sl@0
  1019
	TSize screenSize(Client()->iScreen->SizeInPixels());
sl@0
  1020
	iGrabWin2->SetUpL(TPoint(screenSize.iWidth/8,screenSize.iHeight/8),TSize(screenSize.iWidth*3/4,screenSize.iHeight*3/4),Client()->iGroup,*Client()->iGc);
sl@0
  1021
	Client()->iGroup->SetCurrentWindow(iGrabWin2);
sl@0
  1022
//
sl@0
  1023
	iGrabWin->SetUpLD(TPoint(screenSize.iWidth/4,screenSize.iHeight/4),TSize(screenSize.iWidth/2,screenSize.iHeight/2),Client()->iGroup,*Client()->iGc);
sl@0
  1024
	Client()->iGroup->SetCurrentWindow(iGrabWin);
sl@0
  1025
//
sl@0
  1026
	}
sl@0
  1027
sl@0
  1028
sl@0
  1029
void CTPointer::RunTestCaseL(TInt /*aCurTestCase*/)
sl@0
  1030
	{
sl@0
  1031
	_LIT(Repeat,"Repeat tests");
sl@0
  1032
	_LIT(Grab,"Grab tests");
sl@0
  1033
sl@0
  1034
	iTest->iState=iState;
sl@0
  1035
	
sl@0
  1036
	if (!TestBase()->ConfigurationSupportsPointerEventTesting())
sl@0
  1037
	    {
sl@0
  1038
	    INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing"));
sl@0
  1039
	    TestComplete();
sl@0
  1040
	    return;
sl@0
  1041
	    }
sl@0
  1042
	
sl@0
  1043
	((CTPointerStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
sl@0
  1044
	switch(iState)
sl@0
  1045
		{
sl@0
  1046
		case 0:
sl@0
  1047
			((CTPointerStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
  1048
			iTest->LogSubTest(Repeat);
sl@0
  1049
			iState++;
sl@0
  1050
			break;
sl@0
  1051
/**
sl@0
  1052
sl@0
  1053
  @SYMTestCaseID GRAPHICS-WSERV-0310
sl@0
  1054
  
sl@0
  1055
  @SYMDEF             DEF081259
sl@0
  1056
 
sl@0
  1057
  @SYMTestCaseDesc Test pointer event handling
sl@0
  1058
    
sl@0
  1059
  @SYMTestPriority High
sl@0
  1060
 
sl@0
  1061
  @SYMTestStatus Implemented
sl@0
  1062
 
sl@0
  1063
  @SYMTestActions Simulate pointer events and check the events are then handled correctly
sl@0
  1064
  
sl@0
  1065
  @SYMTestExpectedResults Pointer events are handled correctly
sl@0
  1066
 
sl@0
  1067
*/
sl@0
  1068
		case 1:
sl@0
  1069
			((CTPointerStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0310"));
sl@0
  1070
			iTest->LogSubTest(Grab);
sl@0
  1071
			
sl@0
  1072
			StartGrabTestL();
sl@0
  1073
			iState++;
sl@0
  1074
			break;
sl@0
  1075
		default:
sl@0
  1076
			((CTPointerStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
sl@0
  1077
			((CTPointerStep*)iStep)->CloseTMSGraphicsStep();
sl@0
  1078
			iTimeOut->Cancel();
sl@0
  1079
			if (iTimeOutCount>0) TEST(EFalse);
sl@0
  1080
			if (iTest->IsFullRomL()) User::After(5000000);
sl@0
  1081
			TestComplete();
sl@0
  1082
		}
sl@0
  1083
	((CTPointerStep*)iStep)->RecordTestResultL();
sl@0
  1084
	}
sl@0
  1085
sl@0
  1086
sl@0
  1087
__WS_CONSTRUCT_STEP__(Pointer)