1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/graphics/windowing/windowserver/test/tman/TMPOINTR.CPP Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,808 @@
1.4 +// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// Test pointer event handling
1.18 +//
1.19 +//
1.20 +
1.21 +#include <e32std.h>
1.22 +#include <hal.h>
1.23 +#include "W32STD.H"
1.24 +#include "../tlib/testbase.h"
1.25 +#include "TMAN.H"
1.26 +
1.27 +class CTPointerTest;
1.28 +class CGrabWindow;
1.29 +
1.30 +class CPointerWindow : public CTWin
1.31 + {
1.32 + enum {KRepeatMargin=200000}; // 0.2 Seconds
1.33 + enum {KRepeatCount=4};
1.34 + enum {KRepeatIntervalIncrements=100000};
1.35 + enum {KRepeatRectXExtra=50};
1.36 + enum {KRepeatRectYExtra=50};
1.37 + enum {KStateWaitingForTest1,KStateFailed,KStateTesting1,
1.38 + KStateWaitingForTest2,KStateTesting2,
1.39 + KStateWaitingForTest3,KStateTesting3,
1.40 + KStateWaitingForTest4,KStateTesting4,
1.41 + KStateWaitingForTest5,KStateTesting5,
1.42 + KStateWaitingForTest6,KStateTesting6,
1.43 + KStateWaitingForTest8,KStateTesting8,
1.44 + KStateWaitingForTest7,KStateTesting7,
1.45 + KStateFinished};
1.46 +public:
1.47 + CPointerWindow(CTPointerTest *aTest);
1.48 + void SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
1.49 + void Draw();
1.50 + void StartNextRepeatTest();
1.51 + void QueueNextRepeat();
1.52 + void PointerL(const TPointerEvent &aPointer,const TTime&);
1.53 + void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
1.54 +private:
1.55 + void SwitchOn(const TTime &);
1.56 + void ResetTest(TInt aState);
1.57 + void SetState(TInt aState);
1.58 + void FinishedTests();
1.59 + void TestFailed();
1.60 +private:
1.61 + CTPointerTest *iTest;
1.62 + TInt iRepeatCount;
1.63 + TInt iState;
1.64 + TTimeIntervalMicroSeconds32 iInterval;
1.65 + TTime iPrevTime;
1.66 + TRect iRepeatRect;
1.67 + };
1.68 +
1.69 +class CGrabWindow2 : public CTWin
1.70 + {
1.71 +public:
1.72 + CGrabWindow2(CGrabWindow *aWindow);
1.73 + void SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
1.74 +private:
1.75 + void Draw();
1.76 + void PointerL(const TPointerEvent &aPointer,const TTime&);
1.77 +private:
1.78 + CGrabWindow *iGrabWindow;
1.79 + };
1.80 +
1.81 +class CGrabWindow : public CTWin
1.82 + {
1.83 + enum {KGrabStateWaitingForDown,KGrabStateWaitingForDragOut,KGrabStateWaitingForUp,KGrabStateFinished,
1.84 + KGrabStateWaitingForDown2,KGrabStateWaitingForUp2a,KGrabStateWaitingForDrag2,KGrabStateWaitingForUp2b,
1.85 + KGrabStateWaitingForDown3,KGrabStateWaitingForUp3a,KGrabStateWaitingForUp3b,
1.86 + KGrabStateWaitingForDown4,KGrabStateWaitingForUp4,
1.87 + KGrabStateWaitingForDown5,KGrabStateWaitingForUp5,KGrabStateWaitingForDrag5,
1.88 + KStateFailed};
1.89 +public:
1.90 + CGrabWindow(CTPointerTest *aTest);
1.91 + void Pointer2(const TPointerEvent &aPointer);
1.92 + void SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
1.93 + void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
1.94 +private:
1.95 + void Draw();
1.96 + void SetState(TInt aState);
1.97 + void ResetTest();
1.98 + void PointerL(const TPointerEvent &aPointer,const TTime&);
1.99 + void TestFailed();
1.100 + void FinishedTests();
1.101 +private:
1.102 + TInt iState;
1.103 + CTPointerTest *iTest;
1.104 + };
1.105 +
1.106 +class CTPointerTest : public CTestBase
1.107 + {
1.108 +public:
1.109 + CTPointerTest();
1.110 + ~CTPointerTest();
1.111 + TBool TestFailed();
1.112 + TestState DoTestL();
1.113 + void StartGrabTestL();
1.114 + void ConstructL();
1.115 + CGrabWindow2 *GrabWin2() const;
1.116 + inline TBool Digitiser() const {return !iNoDigitiser;}
1.117 +private:
1.118 + TInt doTestFailedL();
1.119 +private:
1.120 + CPointerWindow *iRepeatWin;
1.121 + CGrabWindow *iGrabWin;
1.122 + CGrabWindow2 *iGrabWin2;
1.123 + TSize iWinSize;
1.124 + TInt iState;
1.125 + TBool iOldPointerState;
1.126 + TBool iNoDigitiser;
1.127 + };
1.128 +
1.129 +GLDEF_C CTestBase *CreatePointerTest()
1.130 + {
1.131 + return(new(ELeave) CTPointerTest());
1.132 + }
1.133 +
1.134 +CPointerWindow::CPointerWindow(CTPointerTest *aTest) : CTWin(), iTest(aTest)
1.135 + {}
1.136 +
1.137 +void CPointerWindow::SetState(TInt aState)
1.138 + {
1.139 + iState=aState;
1.140 + iWin.Invalidate();
1.141 + switch(aState)
1.142 + {
1.143 + case KStateWaitingForTest1:
1.144 + case KStateWaitingForTest2:
1.145 + case KStateWaitingForTest3:
1.146 + case KStateWaitingForTest4:
1.147 + case KStateWaitingForTest5:
1.148 + case KStateWaitingForTest6:
1.149 + case KStateWaitingForTest8:
1.150 + case KStateWaitingForTest7:
1.151 + iRepeatRect=TRect();
1.152 + break;
1.153 + case KStateTesting8:
1.154 + iWin.Close();
1.155 + Client()->iWs.Flush();
1.156 + User::After(500000);
1.157 + FinishedTests();
1.158 + break;
1.159 + }
1.160 + }
1.161 +
1.162 +void CPointerWindow::ResetTest(TInt aState)
1.163 + {
1.164 + TInt newState=KStateFinished;
1.165 + switch(aState)
1.166 + {
1.167 + case KStateTesting1:
1.168 + newState=KStateWaitingForTest1;
1.169 + break;
1.170 + case KStateTesting2:
1.171 + newState=KStateWaitingForTest2;
1.172 + break;
1.173 + case KStateTesting3:
1.174 + newState=KStateWaitingForTest3;
1.175 + break;
1.176 + case KStateTesting4:
1.177 + newState=KStateWaitingForTest4;
1.178 + break;
1.179 + case KStateTesting5:
1.180 + newState=KStateWaitingForTest5;
1.181 + break;
1.182 + case KStateTesting6:
1.183 + newState=KStateWaitingForTest6;
1.184 + break;
1.185 + case KStateTesting8:
1.186 + newState=KStateWaitingForTest8;
1.187 + break;
1.188 + case KStateTesting7:
1.189 + newState=KStateWaitingForTest7;
1.190 + break;
1.191 + }
1.192 + SetState(newState);
1.193 + }
1.194 +
1.195 +void CPointerWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
1.196 + {
1.197 + ConstructExtLD(*parent,pos,size);
1.198 + Activate();
1.199 + AssignGC(aGc);
1.200 + //SetState(KStateWaitingForTest1);
1.201 + SetState(KStateWaitingForTest7); //Only unconverted test
1.202 + BaseWin()->EnableOnEvents();
1.203 + }
1.204 +
1.205 +void CPointerWindow::Draw()
1.206 + {
1.207 + iGc->Clear();
1.208 + iGc->DrawRect(Size());
1.209 + iGc->DrawRect(iRepeatRect);
1.210 + TBuf<0x80> buf;
1.211 + TBuf<0x80> buf2;
1.212 + switch(iState)
1.213 + {
1.214 + case KStateWaitingForTest1:
1.215 + buf.Format(_L("Click anywhere in the window and hold the pointer steady"));
1.216 + break;
1.217 + case KStateTesting1:
1.218 + buf.Format(_L("Hold pointer inside the box"));
1.219 + break;
1.220 + case KStateWaitingForTest2:
1.221 + buf.Format(_L("Release the pointer then click in the window and hold the pointer steady"));
1.222 + break;
1.223 + case KStateTesting2:
1.224 + buf.Format(_L("Drag the pointer outside the box"));
1.225 + break;
1.226 + case KStateWaitingForTest3:
1.227 + buf.Format(_L("Release the pointer then click in the window and hold the pointer steady"));
1.228 + break;
1.229 + case KStateTesting3:
1.230 + buf.Format(_L("Release the pointer"));
1.231 + break;
1.232 + case KStateWaitingForTest4:
1.233 + buf.Format(_L("Click anywhere in the window and move the pointer slightly"));
1.234 + break;
1.235 + case KStateTesting4:
1.236 + buf.Format(_L("Release the pointer"));
1.237 + break;
1.238 + case KStateWaitingForTest5:
1.239 + buf.Format(_L("Click anywhere in the window and move the pointer slightly"));
1.240 + break;
1.241 + case KStateTesting5:
1.242 + buf.Format(_L("Release the pointer"));
1.243 + break;
1.244 + case KStateWaitingForTest6:
1.245 + buf.Format(_L("Click anywhere in the window"));
1.246 + break;
1.247 + case KStateTesting6:
1.248 + buf.Format(_L("Move the pointer"));
1.249 + break;
1.250 + case KStateWaitingForTest8:
1.251 + buf.Format(_L("Click anywhere in the window, and keep the pointer pressed"));
1.252 + break;
1.253 + case KStateTesting8:
1.254 + buf.Format(_L(""));
1.255 + break;
1.256 + case KStateWaitingForTest7:
1.257 + buf.Format(_L("Switch off and touch the center of the screen"));
1.258 + break;
1.259 + case KStateTesting7:
1.260 + buf.Format(_L(""));
1.261 + break;
1.262 + }
1.263 + switch(iState)
1.264 + {
1.265 + case KStateTesting1:
1.266 + buf2.Format(TRefByValue<const TDesC>(_L("Repeat (%d/%d), interval=%d.%d")),iRepeatCount,KRepeatCount,iInterval.Int()/1000000,(iInterval.Int()%1000000)/100000);
1.267 + break;
1.268 + case KStateTesting2:
1.269 + case KStateTesting3:
1.270 + buf2.Format(TRefByValue<const TDesC>(_L("Repeat (%d), interval=%d.%d")),iRepeatCount,iInterval.Int()/1000000,(iInterval.Int()%1000000)/100000);
1.271 + break;
1.272 + }
1.273 + iGc->DrawText(buf,TPoint(10,20));
1.274 + iGc->DrawText(buf2,TPoint(10,40));
1.275 + }
1.276 +
1.277 +void CPointerWindow::FinishedTests()
1.278 + {
1.279 + iState=KStateFinished;
1.280 + iTest->Request();
1.281 + }
1.282 +
1.283 +void CPointerWindow::StartNextRepeatTest()
1.284 + {
1.285 + iInterval=0;
1.286 + iRepeatCount=0;
1.287 + if (iState==KStateWaitingForTest4)
1.288 + User::After(TTimeIntervalMicroSeconds32(1000000));
1.289 + else if (iState==KStateWaitingForTest5)
1.290 + User::After(TTimeIntervalMicroSeconds32(1000000));
1.291 + QueueNextRepeat();
1.292 + switch(iState)
1.293 + {
1.294 + case KStateWaitingForTest1:
1.295 + SetState(KStateTesting1);
1.296 + break;
1.297 + case KStateWaitingForTest2:
1.298 + SetState(KStateTesting2);
1.299 + break;
1.300 + case KStateWaitingForTest3:
1.301 + SetState(KStateTesting3);
1.302 + break;
1.303 + case KStateWaitingForTest4:
1.304 + SetState(KStateTesting4);
1.305 + break;
1.306 + case KStateWaitingForTest5:
1.307 + SetState(KStateTesting5);
1.308 + break;
1.309 + case KStateWaitingForTest6:
1.310 + SetState(KStateTesting6);
1.311 + break;
1.312 + case KStateWaitingForTest8:
1.313 + SetState(KStateTesting8);
1.314 + break;
1.315 + case KStateWaitingForTest7:
1.316 + SetState(KStateTesting7);
1.317 + break;
1.318 + }
1.319 + }
1.320 +
1.321 +void CPointerWindow::QueueNextRepeat()
1.322 + {
1.323 + iInterval=iInterval.Int()+KRepeatIntervalIncrements;
1.324 + iWin.RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32(iInterval),TRect(iRepeatRect));
1.325 + iPrevTime.HomeTime();
1.326 + iWin.Invalidate();
1.327 + }
1.328 +
1.329 +void CPointerWindow::PointerL(const TPointerEvent &aPointer,const TTime &aTime)
1.330 + {
1.331 + if (aPointer.iType==TPointerEvent::EButtonRepeat)
1.332 + {
1.333 + if (iState!=KStateTesting1 && iState!=KStateTesting2 && iState!=KStateTesting3 && iState!=KStateTesting4)
1.334 + TestFailed();
1.335 + else
1.336 + {
1.337 + TTimeIntervalMicroSeconds32 interval(I64LOW(aTime.MicroSecondsFrom(iPrevTime).Int64()));
1.338 + if (interval.Int()<(iInterval.Int()-KRepeatMargin) || interval.Int()>(iInterval.Int()+KRepeatMargin))
1.339 + TestFailed();
1.340 + else
1.341 + {
1.342 + if (!iRepeatRect.Contains(aPointer.iPosition) ||
1.343 + aPointer.iParentPosition!=(aPointer.iPosition+iWin.InquireOffset(*Parent()->WinTreeNode())))
1.344 + TestFailed();
1.345 + else
1.346 + {
1.347 + iRepeatCount++;
1.348 + if (iState==KStateTesting1 && iRepeatCount==KRepeatCount)
1.349 + {
1.350 + QueueNextRepeat();
1.351 + Client()->iWs.Flush();
1.352 + User::After(TTimeIntervalMicroSeconds32(iRepeatCount*KRepeatIntervalIncrements));
1.353 + iWin.CancelPointerRepeatEventRequest();
1.354 + SetState(KStateWaitingForTest2);
1.355 + }
1.356 + else
1.357 + QueueNextRepeat();
1.358 + }
1.359 + }
1.360 + }
1.361 + }
1.362 + else switch(iState)
1.363 + {
1.364 + case KStateWaitingForTest1:
1.365 + case KStateWaitingForTest2:
1.366 + case KStateWaitingForTest3:
1.367 + case KStateWaitingForTest4:
1.368 + case KStateWaitingForTest8:
1.369 + if (aPointer.iType==TPointerEvent::EButton1Down)
1.370 + {
1.371 + iRepeatRect.iTl=aPointer.iPosition-TPoint(KRepeatRectXExtra,KRepeatRectYExtra);
1.372 + iRepeatRect.iBr=aPointer.iPosition+TPoint(KRepeatRectXExtra,KRepeatRectYExtra);
1.373 + StartNextRepeatTest();
1.374 + }
1.375 + break;
1.376 + case KStateWaitingForTest5:
1.377 + if (aPointer.iType==TPointerEvent::EButton1Down)
1.378 + {
1.379 + iRepeatRect.iTl=aPointer.iPosition;
1.380 + iRepeatRect.iBr=aPointer.iPosition+TPoint(1,1);
1.381 + StartNextRepeatTest();
1.382 + }
1.383 + break;
1.384 + case KStateWaitingForTest6:
1.385 + if (aPointer.iType==TPointerEvent::EButton1Down)
1.386 + {
1.387 + iRepeatRect.iTl=aPointer.iPosition+TPoint(KRepeatRectXExtra,KRepeatRectYExtra);
1.388 + iRepeatRect.iBr=aPointer.iPosition+TPoint(2*KRepeatRectXExtra,2*KRepeatRectYExtra);
1.389 + StartNextRepeatTest();
1.390 + }
1.391 + break;
1.392 + case KStateTesting1:
1.393 + TestFailed();
1.394 + break;
1.395 + case KStateTesting2:
1.396 + if (aPointer.iType==TPointerEvent::EDrag)
1.397 + SetState(KStateWaitingForTest3);
1.398 + else
1.399 + TestFailed();
1.400 + break;
1.401 + case KStateTesting3:
1.402 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.403 + SetState(KStateWaitingForTest4);
1.404 + else
1.405 + TestFailed();
1.406 + break;
1.407 + case KStateTesting4:
1.408 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.409 + SetState(KStateWaitingForTest5);
1.410 + else
1.411 + TestFailed();
1.412 + break;
1.413 + case KStateTesting5:
1.414 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.415 + SetState(KStateWaitingForTest6);
1.416 + else if (aPointer.iType!=TPointerEvent::EDrag)
1.417 + TestFailed();
1.418 + break;
1.419 + case KStateTesting6:
1.420 + if (aPointer.iType==TPointerEvent::EDrag)
1.421 + {
1.422 + #if !defined(__WINS__) // Can't emulate touching dig when switched off under WINS
1.423 + if (iTest->Digitiser())
1.424 + SetState(KStateWaitingForTest7);
1.425 + else
1.426 + #endif
1.427 + SetState(KStateWaitingForTest8);
1.428 + }
1.429 + else
1.430 + TestFailed();
1.431 + break;
1.432 + case KStateWaitingForTest7:
1.433 + if (aPointer.iType==TPointerEvent::EButton1Down || aPointer.iType==TPointerEvent::ESwitchOn)
1.434 + TestFailed();
1.435 + break;
1.436 + case KStateTesting7:
1.437 + if (aPointer.iType!=TPointerEvent::ESwitchOn)
1.438 + TestFailed();
1.439 + else
1.440 + SetState(KStateTesting8); //Jump straight to end as this is only unconverted test.
1.441 + //SetState(KStateWaitingForTest8);
1.442 + break;
1.443 + case KStateTesting8:
1.444 + break;
1.445 + }
1.446 + }
1.447 +
1.448 +void CPointerWindow::TestFailed()
1.449 + {
1.450 + if (iState!=KStateFailed)
1.451 + {
1.452 + TInt oldState=iState;
1.453 + iState=KStateFailed;
1.454 + if (iTest->TestFailed())
1.455 + ResetTest(oldState);
1.456 + }
1.457 + }
1.458 +
1.459 +void CPointerWindow::WinKeyL(const TKeyEvent &aKey,const TTime &)
1.460 + {
1.461 + if (aKey.iCode==EKeyEscape)
1.462 + FinishedTests(); // Simply skip this test if the Escape key is pressed
1.463 + }
1.464 +
1.465 +void CPointerWindow::SwitchOn(const TTime &)
1.466 + {
1.467 + if (iState==KStateWaitingForTest7)
1.468 + SetState(KStateTesting7);
1.469 + else
1.470 + TestFailed();
1.471 + }
1.472 +
1.473 +//
1.474 +// CGrabWindow //
1.475 +//
1.476 +
1.477 +CGrabWindow::CGrabWindow(CTPointerTest *aTest) : iTest(aTest)
1.478 + {
1.479 + }
1.480 +
1.481 +void CGrabWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
1.482 + {
1.483 + ConstructExtLD(*parent,pos,size);
1.484 + Activate();
1.485 + AssignGC(aGc);
1.486 + SetState(KGrabStateWaitingForDown);
1.487 + }
1.488 +
1.489 +void CGrabWindow::Draw()
1.490 + {
1.491 + iGc->Clear();
1.492 + iGc->DrawRect(Size());
1.493 + TBuf<0x80> buf;
1.494 + switch(iState)
1.495 + {
1.496 + case KGrabStateWaitingForDown:
1.497 + case KGrabStateWaitingForDown2:
1.498 + case KGrabStateWaitingForDown5:
1.499 + buf.Copy(_L("Press the pointer inside the window"));
1.500 + break;
1.501 + case KGrabStateWaitingForDown3:
1.502 + case KGrabStateWaitingForUp3a:
1.503 + buf.Copy(_L("Press and release the pointer inside the window"));
1.504 + break;
1.505 + case KGrabStateWaitingForDragOut:
1.506 + buf.Copy(_L("Drag the pointer outside into the outside window"));
1.507 + break;
1.508 + case KGrabStateWaitingForDrag2:
1.509 + buf.Copy(_L("Drag the pointer outside outside both windows"));
1.510 + break;
1.511 + case KGrabStateWaitingForUp:
1.512 + case KGrabStateWaitingForUp2b:
1.513 + case KGrabStateWaitingForUp5:
1.514 + buf.Copy(_L("Release the pointer"));
1.515 + break;
1.516 + case KGrabStateWaitingForDown4:
1.517 + buf.Copy(_L("Press then release the pointer"));
1.518 + break;
1.519 + default:;
1.520 + }
1.521 + iGc->DrawText(buf,TPoint(10,20));
1.522 + }
1.523 +
1.524 +void CGrabWindow::PointerL(const TPointerEvent &aPointer,const TTime&)
1.525 + {
1.526 + switch(iState)
1.527 + {
1.528 + case KGrabStateWaitingForDown:
1.529 + if (aPointer.iType==TPointerEvent::EButton1Down)
1.530 + SetState(KGrabStateWaitingForDragOut);
1.531 + break;
1.532 + case KGrabStateWaitingForDragOut:
1.533 + if (aPointer.iType!=TPointerEvent::EDrag)
1.534 + TestFailed();
1.535 + else
1.536 + {
1.537 + if (!TRect(Size()).Contains(aPointer.iPosition))
1.538 + SetState(KGrabStateWaitingForUp);
1.539 + }
1.540 + break;
1.541 + case KGrabStateWaitingForUp:
1.542 + if (aPointer.iType==TPointerEvent::EDrag)
1.543 + break;
1.544 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.545 + SetState(KGrabStateWaitingForDown2);
1.546 + else
1.547 + TestFailed();
1.548 + break;
1.549 + case KGrabStateWaitingForDown2:
1.550 + if (aPointer.iType!=TPointerEvent::EButton1Down)
1.551 + TestFailed();
1.552 + else
1.553 + {
1.554 + iTest->GrabWin2()->BaseWin()->ClaimPointerGrab();
1.555 + iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(); // Call twice to check it's harmless
1.556 + SetState(KGrabStateWaitingForUp2a);
1.557 + }
1.558 + break;
1.559 + case KGrabStateWaitingForUp2a:
1.560 + SetState(KGrabStateWaitingForDrag2);
1.561 + break;
1.562 + case KGrabStateWaitingForDrag2:
1.563 + break;
1.564 + case KGrabStateWaitingForUp2b:
1.565 + TestFailed();
1.566 + break;
1.567 + case KGrabStateWaitingForDown3:
1.568 + if (aPointer.iType!=TPointerEvent::EButton1Down)
1.569 + TestFailed();
1.570 + else
1.571 + SetState(KGrabStateWaitingForUp3a);
1.572 + break;
1.573 + case KGrabStateWaitingForUp3a:
1.574 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.575 + {
1.576 + iTest->GrabWin2()->BaseWin()->ClaimPointerGrab();
1.577 + SetState(KGrabStateWaitingForUp3b);
1.578 + }
1.579 + break;
1.580 + case KGrabStateWaitingForUp3b:
1.581 + TestFailed();
1.582 + break;
1.583 + case KGrabStateWaitingForDown5:
1.584 + if (aPointer.iType!=TPointerEvent::EButton1Down)
1.585 + TestFailed();
1.586 + else
1.587 + {
1.588 + iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(EFalse);
1.589 + SetState(KGrabStateWaitingForDrag5);
1.590 + }
1.591 + break;
1.592 + case KGrabStateWaitingForDrag5:
1.593 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.594 + TestFailed();
1.595 + break;
1.596 + case KGrabStateWaitingForUp5:
1.597 + TestFailed();
1.598 + break;
1.599 + case KGrabStateWaitingForDown4:
1.600 + SetState(KGrabStateWaitingForUp4);
1.601 + iWin.Close(); // Close the window with the grab captured in it
1.602 + break;
1.603 + case KGrabStateFinished:
1.604 + break;
1.605 + }
1.606 + }
1.607 +
1.608 +void CGrabWindow::ResetTest()
1.609 + {
1.610 + SetState(KGrabStateWaitingForDown);
1.611 + }
1.612 +
1.613 +void CGrabWindow::Pointer2(const TPointerEvent &aPointer)
1.614 + {
1.615 + switch(iState)
1.616 + {
1.617 + case KGrabStateWaitingForDrag2:
1.618 + {
1.619 + if (aPointer.iType==TPointerEvent::EDrag)
1.620 + {
1.621 + SetState(KGrabStateWaitingForUp2b);
1.622 + }
1.623 + else
1.624 + {
1.625 + if (iTest->TestFailed())
1.626 + ResetTest();
1.627 + }
1.628 + break;
1.629 + }
1.630 + case KGrabStateWaitingForUp2b:
1.631 + if (aPointer.iType==TPointerEvent::EDrag) // Harmless
1.632 + break;
1.633 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.634 + SetState(KGrabStateWaitingForDown3);
1.635 + else
1.636 + TestFailed();
1.637 + break;
1.638 + case KGrabStateWaitingForUp3b:
1.639 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.640 + SetState(KGrabStateWaitingForDown5);
1.641 + else
1.642 + TestFailed();
1.643 + break;
1.644 + case KGrabStateWaitingForUp4:
1.645 + FinishedTests();
1.646 + break;
1.647 + case KGrabStateWaitingForDrag5:
1.648 + {
1.649 + if (aPointer.iType==TPointerEvent::EDrag)
1.650 + SetState(KGrabStateWaitingForUp5);
1.651 + else if (iTest->TestFailed())
1.652 + ResetTest();
1.653 + break;
1.654 + }
1.655 + case KGrabStateWaitingForUp5:
1.656 + if (aPointer.iType==TPointerEvent::EDrag) // Harmless
1.657 + break;
1.658 + if (aPointer.iType==TPointerEvent::EButton1Up)
1.659 + SetState(KGrabStateWaitingForDown4);
1.660 + else
1.661 + TestFailed();
1.662 + break;
1.663 + default:;
1.664 + }
1.665 + }
1.666 +
1.667 +void CGrabWindow::SetState(TInt aState)
1.668 + {
1.669 + iState=aState;
1.670 + iWin.Invalidate();
1.671 + }
1.672 +
1.673 +void CGrabWindow::TestFailed()
1.674 + {
1.675 + if (iState!=KStateFailed)
1.676 + {
1.677 + iState=KStateFailed;
1.678 + if (iTest->TestFailed())
1.679 + ResetTest();
1.680 + }
1.681 + }
1.682 +
1.683 +void CGrabWindow::FinishedTests()
1.684 + {
1.685 + iState=KGrabStateFinished;
1.686 + iTest->Request();
1.687 + }
1.688 +
1.689 +void CGrabWindow::WinKeyL(const TKeyEvent &aKey,const TTime &)
1.690 + {
1.691 + if (aKey.iCode==EKeyEscape)
1.692 + FinishedTests(); // Simply skip this test if the Escape key is pressed
1.693 + }
1.694 +
1.695 +//
1.696 +// CGrabWindow2, used as part of grab tests //
1.697 +//
1.698 +
1.699 +CGrabWindow2::CGrabWindow2(CGrabWindow *aWindow) : iGrabWindow(aWindow)
1.700 + {
1.701 + }
1.702 +
1.703 +void CGrabWindow2::Draw()
1.704 + {
1.705 + iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
1.706 + iGc->SetBrushColor(TRgb::Gray4(2));
1.707 + iGc->DrawRect(Size());
1.708 + }
1.709 +
1.710 +void CGrabWindow2::PointerL(const TPointerEvent &aPointer,const TTime&)
1.711 + {
1.712 + iGrabWindow->Pointer2(aPointer);
1.713 + }
1.714 +
1.715 +//
1.716 +// CTPointTest //
1.717 +//
1.718 +
1.719 +CTPointerTest::CTPointerTest() : CTestBase(_L("CTPointerTest"))
1.720 + {}
1.721 +
1.722 +CTPointerTest::~CTPointerTest()
1.723 + {
1.724 + HAL::Set(HALData::EPenDisplayOn,iOldPointerState);
1.725 + delete iRepeatWin;
1.726 + delete iGrabWin;
1.727 + delete iGrabWin2;
1.728 + Client()->ResetFocus();
1.729 + }
1.730 +
1.731 +void CTPointerTest::ConstructL()
1.732 + {
1.733 + iRepeatWin=new(ELeave) CPointerWindow(this);
1.734 + TSize screenSize(Client()->iScreen->SizeInPixels());
1.735 + iRepeatWin->SetUpLD(TPoint(screenSize.iWidth/8,screenSize.iHeight/8),TSize(screenSize.iWidth*3/4,screenSize.iHeight*3/4),Client()->iGroup,*Client()->iGc);
1.736 + Client()->iGroup->SetCurrentWindow(iRepeatWin);
1.737 + iNoDigitiser=EFalse;
1.738 + TInt err=HAL::Get(HALData::EPenDisplayOn,iOldPointerState);
1.739 + if (err==KErrNotSupported)
1.740 + iNoDigitiser=ETrue;
1.741 + else if (err==KErrNone)
1.742 + err=HAL::Set(HALData::EPenDisplayOn,ETrue);
1.743 + if (err==KErrNotSupported)
1.744 + iNoDigitiser=(!iOldPointerState);
1.745 + else
1.746 + TestL(err==KErrNone);
1.747 + }
1.748 +
1.749 +TBool CTPointerTest::TestFailed()
1.750 + {
1.751 + TInt ret=1;
1.752 + TRAP_IGNORE(ret=doTestFailedL());
1.753 + switch(ret)
1.754 + {
1.755 + case 0:
1.756 + return(ETrue); // Re-try test
1.757 + case 1:
1.758 + Request();
1.759 + break;
1.760 + }
1.761 + return(EFalse);
1.762 + }
1.763 +
1.764 +TInt CTPointerTest::doTestFailedL()
1.765 + {
1.766 + CTDialog *dialog=new(ELeave) CTDialog();
1.767 + dialog->SetTitle(_L("Pointer repeat test failed"));
1.768 + dialog->SetNumButtons(2);
1.769 + dialog->SetButtonText(0,_L("Retest"));
1.770 + dialog->SetButtonText(1,_L("Fail"));
1.771 + dialog->ConstructLD(*Client()->iGroup,*Client()->iGc);
1.772 + return dialog->Display();
1.773 + }
1.774 +
1.775 +CGrabWindow2 *CTPointerTest::GrabWin2() const
1.776 + {
1.777 + return(iGrabWin2);
1.778 + }
1.779 +
1.780 +void CTPointerTest::StartGrabTestL()
1.781 + {
1.782 + iGrabWin=new(ELeave) CGrabWindow(this);
1.783 + iGrabWin2=new(ELeave) CGrabWindow2(iGrabWin);
1.784 +//
1.785 + TSize screenSize(Client()->iScreen->SizeInPixels());
1.786 + iGrabWin2->SetUpL(TPoint(screenSize.iWidth/8,screenSize.iHeight/8),TSize(screenSize.iWidth*3/4,screenSize.iHeight*3/4),Client()->iGroup,*Client()->iGc);
1.787 + Client()->iGroup->SetCurrentWindow(iGrabWin2);
1.788 +//
1.789 + iGrabWin->SetUpLD(TPoint(screenSize.iWidth/4,screenSize.iHeight/4),TSize(screenSize.iWidth/2,screenSize.iHeight/2),Client()->iGroup,*Client()->iGc);
1.790 + Client()->iGroup->SetCurrentWindow(iGrabWin);
1.791 +//
1.792 + }
1.793 +
1.794 +#pragma warning( disable : 4065 ) //switch statement contains 'default' but no 'case' labels
1.795 +TestState CTPointerTest::DoTestL()
1.796 + {
1.797 + switch(iState)
1.798 + {
1.799 + #if !defined(__WINS__) //Only unconverted test is MARM only
1.800 + case 0:
1.801 + LogSubTest(_L("Repeat tests"),1);
1.802 + iState++;
1.803 + return(EContinue);
1.804 + #endif
1.805 +
1.806 + default:
1.807 + return(EFinished);
1.808 + }
1.809 + }
1.810 +#pragma warning( default : 4065 )
1.811 +