diff -r bf7481649c98 -r 7f25ef56562d windowing/windowserver/test/tauto/TEVENT.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tauto/TEVENT.H Wed Jun 23 19:41:15 2010 +0300 @@ -0,0 +1,423 @@ +// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + + +#ifndef __TEVENT_H__ +#define __TEVENT_H__ + +#include +#include +#include +#include "../tlib/testbase.h" +#include "AUTO.H" +#include "AUTODLL.H" +#include "../TClick/CLICK.H" +#include "TGraphicsHarness.h" +#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA +#include +#include +#endif //TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA + +const TInt EMaxEventQueueSize=32; +const TInt EMinQueueSize = 2; + + +class CTEventTest; +class CTQueueClient; + +class TWsQTEvent : public TWsEvent + { + friend class CTEventTest; +public: + inline TTime& Time() {return iTime;} + }; + +class CTQueueTestEvent : public CTEvent + { + enum {EEventBufferSize=40}; +public: + CTQueueTestEvent(RWsSession *aWs, CTEventTest *aTest); + void ConstructL(); + void AddExpectedEvent(TWsEvent &aEvent); + inline void ResetCount(TInt aSet) {iEventCount=0;iEventSet=aSet;iLastEventError=EFalse;} + TInt EventsLeft(); + inline void SetCheckTimeStamp(TBool aCheck) {iCheckTimeStamp = aCheck;} +protected: + void doRunL(); +private: + void TestL(TInt aTest); +private: + CCirBuf iEventBuffer; + CTEventTest *iTest; + TInt iEventCount; + TInt iEventSet; + TBool iCheckTimeStamp; + TPartialRedrawType iRedrawType; + TBool iLastEventError; + }; + +const TInt EWinPositionX=6; +const TInt EWinPositionY=9; +const TInt EWinWidth=100; +const TInt EWinHeight=50; +// (6,9) +// +----------------------+ +// | (31,21) | +// | +--------------+ | +// | | | | +// | | | | +// | +--------------+ | +// | (81,46) | +// +----------------------+ (106,59) + +class CTQueueClient : public CTClient + { +private: + enum {EMaxKeysDown=50}; +public: + CTQueueClient(CTEventTest *aTest); + ~CTQueueClient(); + void ConstructL(TBool aCreateChild); + void ConstructEventHandlerL(); + void AddExpectedEvent(TWsEvent &aEvent); + TInt WindowGroupIdentifier(); + CTWinBase* GetHandle(TPoint& aPos); + void SetChildCapture(TInt aCaptureFlags); + inline void ResetCount(TInt aSet) {EventQueue()->ResetCount(aSet);} + inline void EnableFocusChangeEvents() {iGroup->GroupWin()->EnableFocusChangeEvents();} + inline void DisableFocusChangeEvents() {iGroup->GroupWin()->DisableFocusChangeEvents();} + inline void EnableGroupListChangeEvents() {iGroup->GroupWin()->EnableGroupListChangeEvents();} + inline void DisableGroupListChangeEvents() {iGroup->GroupWin()->DisableGroupListChangeEvents();} + inline CTQueueTestEvent* EventQueue() {return STATIC_CAST(CTQueueTestEvent*,iEventHandler);} + inline TPoint ChildTopLeft() {return TPoint(EWinWidth/4,EWinHeight/4);} + inline TSize ChildSize() {return TSize(EWinWidth/2,EWinHeight/2);} + void CreateEventTestGroupOnSecondScreenL(); + void CloseEventTestGroupOnSecondScreen(); +private: + inline TPoint ParentTopLeft() {return TPoint(EWinPositionX,EWinPositionY);} + inline TPoint ChildAbsTopLeft() {return ParentTopLeft()+ChildTopLeft();} +private: + TInt iKeysDown[EMaxKeysDown]; + TInt iNumKeysDown; + CTEventTest *iTest; +public: + CTBackedUpWin *iChildWin; + CTBackedUpWin *iWin; + TBool iChildCapturing; + TBool iCapturing; + CWsScreenDevice* iSndScreen; + RWindowGroup* iWinGp1; + RWindowGroup* iWinGp2; + }; + +class REventAnimBase : public RTestAnim + { +public: + enum EAnimationType + { + EEventAnim, + EEventPostingAnim + }; + REventAnimBase(RAnimDll* aDll) :RTestAnim(*aDll) {} + virtual void Destroy(); + void Reset(); + TInt ErrorCode(); + TInt NumberOfEventsReceived(); + TInt AddExpectedEvent(TBool aEat, const TRawEvent& aEvent); + TInt AddExpectedEvent(const TAnimRawEvent& aEvent); + static RAnimDll* LoadL(); + }; + +/** + Client side handle to server-side anim class used for Anim Event tests + @internalComponent + @test + */ +class REventAnim : public REventAnimBase + { +public: + static REventAnim* NewL(RWindowBase* aWin, RAnimDll* aDll, REventAnimBase::EAnimationType aType=EEventAnim); + inline REventAnim(RAnimDll* aDll) : REventAnimBase(aDll) {} + inline TInt AddEvent(const TAnimRawEvent& aEvent) {return REventAnimBase::AddExpectedEvent(aEvent);}; + inline TInt GetError() {return REventAnimBase::ErrorCode();}; + inline TInt GetNumEvents() {return REventAnimBase::NumberOfEventsReceived();}; + TInt TestFail(TInt aNoEvents); + }; + +/** + Client side handle to server-side anim class used for Event Handler Removal tests + + RRemovableAnim is an anim which removes itself from the event handler list + after receiving n events, where n is the 'lifetime' of the anim measured in events received. + + @internalComponent + @test + */ +class RRemovableAnim : public REventAnimBase + { +public: + static RRemovableAnim* NewLC(RWindowBase* aWin, RAnimDll* aDll); + inline RRemovableAnim(RAnimDll* aDll) : REventAnimBase(aDll) {} + inline TInt AddExpectedEvent(const TRawEvent& aEvent) {return REventAnimBase::AddExpectedEvent(EFalse, aEvent);}; + TInt SetEventHandlerLifetime(TInt aEventCount); + TInt EventHandlerLifetime(); + TInt AddToEventHandlers(); + TInt RemoveFromEventHandlers(); + TBool TestPassed(); + }; + +class CTEventTest : public CTWsGraphicsBase + { + enum { + EKeyboardInitialRepeat1=1234567, + EKeyboardRepeat1=555666, + EKeyboardInitialRepeat2=2121212, + EKeyboardRepeat2=20000, + EDoubleClickTime1=900000, + EDoubleClickGap1=10, + EDoubleClickTime2=4000000, + EDoubleClickGap2=5, + ENumVisWins=2, + EPointerCursorUpdateGap=50000, //0.05secs Same as WsPointer::EPointerUpdateGapInMicroSeconds + EKeyboardInitialRepeat3=2147483447, // Max value + EKeyboardRepeat3=8000, // for repeat 3 + EKeyboardInitialRepeat4=-2, // Min value + EKeyboardRepeat4=6000, // for repeat 4 + EKeyboardRepeat5=7000, // for repeat 4z + EKeyboardRepeat6=-30000, // for repeat 4 + EKeyboardRepeat7=2147483447, // for repeat 4 + }; +public: + CTEventTest(CTestStep* aStep); + ~CTEventTest(); + //TestState DoTestL(); + void ConstructL(); + void General(); + void General2(); + void Failed(); + //void QueuePurgingL(); + //void SendEventL(); + //void InvisibleWindowL(); + //void JavaAdditionsL(); + void WindowCapBugL(); + //void XyInputTypeL(); + //void MovingPointerCursorL(); + //void RotatedModeL(); + //void AnimEvent(); + void CheckTimeInterval(const TTimeIntervalMicroSeconds32 &aTime,TInt EKeyboardRepeat1); + void KeyRepeatRate(TInt aInitialRepeat, TInt aRepeat); + void KeyRepeatRateNegTest(TInt aInitialRepeat, TInt aRepeat); + void DoubleClickSettings(TInt aInterval, TInt aDistance); + void NextSetOfEventsL(); + inline void ResetCount(TInt aSet) {iQueueClient->ResetCount(aSet);} +protected: +//from CTGraphicsStep + virtual void RunTestCaseL(TInt aCurTestCase); +private: + enum + { + EDoRot0 =0x01, + EDoRot90 =0x02, + EDoRot180=0x04, + EDoScale=0x80, + }; + enum TClients + { + ETheClient, + EQueueClient, + }; + enum TCaptureKeyApis + { + ECaptureKey1, + ECaptureKey2, + ECaptureKeyUpAndDowns1, + ECaptureKeyUpAndDowns2, + ECaptureLongKey1, + ECaptureLongKey2, + // Add additional enum values before this line + EMaxCaptureKeyApis + }; + enum TCancelCaptureKeyApis + { + ECancelCaptureKey, + ECancelCaptureKeyUpAndDowns, + ECancelCaptureLongKey, + // Add additional enum values before this line + EMaxCancelCaptureKeyApis + }; +private: + void RunTestsL(TBool aNeedChildWindows=EFalse); + void RunTestsRestoreAreaL(TBool aNeedChildWindows); + void QueuePurge_NextSetOfEventsL(); + void InitializeQueueSizeTestL(TBool aEventReadyCancel); + void SendEventTest_NextSetOfEvents(); + void InvisibleWindow_NextSetOfEvents(); + void JavaAdditions_NextSetOfEvents(); + void XyInputType_NextSetOfEvents(); + void MovingPointerCursor_NextSetOfEventsL(); + void WinCap_NextSetOfEvents(); + void RotatedMode_NextSetOfEventsL(); + void ScreenScaling_NextSetOfEventsL(); + void AnimEvent_NextSetOfEventsL(); + void FocusChanged_NextSetOfEventsL(); + void StopEvents_NextSetOfEventsL(); + void VirtualKeyboard_NextSetOfEventsL(); + void KeyClicks_NextSetOfEvents(); + void CaptureLong_NextSetOfEventsL(); + void Password_NextSetOfEvents(); + void GroupListChanged_NextSetOfEventsL(); + void VisibilityChanged_NextSetOfEventsL(); +#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS +#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA + void SurfaceVisibilityChanged1_NextSetOfEventsL(); + void SurfaceVisibilityChanged2_NextSetOfEventsL(); + void SurfaceVisibilityChanged3_NextSetOfEventsL(); +#endif //TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA +#endif //SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS + void CheckTimeStamp_NextSetOfEventsL(); + void RepeatableKeysL(); + void PointerCapture_NextSetOfEventsL(); + void PointerBufferPurge_NextSetOfEventsL(); + void MismatchedCapture_NextSetOfEventsL(); + void EventHandlerRemoval_NextSetOfEventsL(); + void EventHandlerRemoval_CreateAnimsL(TInt aAnimCount); + void EventHandlerRemoval_PrepareAnims(const TInt* aLifeTimes, TInt aAnimCount); + void EventHandlerRemoval_CreateExpectedEvents(TInt aEventCount, TInt aLiveAnimCount); + void EventHandlerRemoval_AddExpectedEvent(TRawEvent aEvent, TInt aLiveAnimCount); + void EventHandlerRemoval_CheckExpectedEventsReceivedByAnims(); + void EventHandlerRemoval_CheckRecursionOfProcessRawEvent(); + void EventHandlerRemoval_ManuallyRemoveAllAnims(); + void EventHandlerRemoval_ResetAllAnims(); + void EventHandlerRemoval_RemoveAndResetAllAnims(); + void EventHandlerRemoval_DestroyAllAnims(); + void EventHandlerRemoval_AddEventHandlerMultipleTimes(); + void CheckPointerCursorInDifferentScreenMode(TSizeMode aMode,TPoint aOrigin); + void SimulateAndCheck(TPoint aOrigin,TSize aScale,TInt aXOffset,TInt aYOffset,TPointerEvent::TType aEventType,TRect aPointerCursorArea); + void AddExpectedKey(TInt aEventCode, TInt aScanCode, TInt aCode=0, TInt aRepeats=0, TUint aModifiers=0); + void AddExpectedKeyDownUp(TInt aScanCode, TInt aCode=0, TInt aRepeats=0, TUint aModifiers=0); + void AddExpectedEvent(TInt aEventCode, CTWinBase* aWin); + void AddExpectedEvent(TInt aEventCode); + void AddExpectedEvent(TInt aEventCode,RWindowGroup* aWindow); + void AddExpectedErrorMessage(TWsErrorMessage::TErrorCategory aCategory, TInt aError); + void CalculatePointerEvent(TWsEvent& aEvent,TPointerEvent::TType aType, TPoint aPos); + void CalculatePointerCaptureEvent(TWsEvent& aEvent,TPointerEvent::TType aType, TPoint aPos, TInt aHandle=0); + void AddExpectedPointer(TPointerEvent::TType aType, TPoint aPos); + void AddExpectedPointerCapture(TPointerEvent::TType aType, TPoint aPos, TInt aHandle=0); + void AddExpectedPointerClick(TPointerEvent::TType aType, TPoint aPos); + void AddExpectedPointerDownUp(TPoint aPos); + inline void AddExpectedPointerScr(TPointerEvent::TType aType, TPoint aPos); + inline void AddExpectedPointerDownUpScr(TPoint aPos); + void AddExpectedModifiersChanged(TInt aChangedModifiers, TInt aModifiers); + void AddExpectedEnterExit(TInt aEventCode, TPoint aPos); + void AddExpectedKeyAnim(TRawEvent::TType aEventCode, TInt aScanCode,TBool aEat); + void AddExpectedPointerAnim(TRawEvent::TType aEventCode, TPoint aPoint, TBool aEat=ETrue); + void AddExpectedVisibilityChange(TUint aFlags); + void AddExpectedVisibilityChange(TUint aFlags, CTBlankWindow* aWindow); + inline void SimulatePointerWin(TRawEvent::TType aType, TInt aX, TInt aY); + inline void SimulatePointerDownUpWin(TInt aX, TInt aY); + inline void SimulatePointer(TRawEvent::TType aType, TInt aX, TInt aY); + void doSendEvent(TWsEvent &aEvent); + void SendKey(TInt aEventCode, TInt aScanCode, TInt aCode=0, TInt iRepeats=0); + void SendEvent(TInt aEventCode); + void CreateEventTestGroup(); + void CloseEventTestGroup(); + void CreateAndCloseEventTestGroup(); + void TriggerOomMessage(TTimeIntervalMinutes aPeriod); + TBool SetClickType(TClickOutputModes aType); + CTBlankWindow* NewBlueForgroundWindowL(); + CTBlankWindow* NewBlueForgroundWindow(); + TInt KeyRepeatTime() const; + void EventQueuePtrCrashTest(); + TInt ClickCommandReply(TInt aCommand,TInt aData); + TInt CreateGroupWindow(RWindowGroup& aWinGp,TClients aClient,TInt& aWinGpId); + void CloseGroupWindow(RWindowGroup& aWinGp,TInt aWinGpId); + void CloseWindow(RWindowBase& aWin,TInt aHandle,TInt aWinGpId); + void EventQueueExpansionTestL(); + void RawEventRepeatTest_NextSetOfEventsL(); + void SimulateRepeatEvent(TInt aScanCode, TInt aRepeats=0); +#if !defined(TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA) + void SimulateButton1DownWithSimulatedMove(TInt aX, TInt aY); +#endif + void TestCaptureAndCancelCapturePair(TCaptureKeyApis aCaptureApi, TCancelCaptureKeyApis aCancelCaptureApi); + static TInt GenerateAnEvent(TAny* aEventTest); +private: + CTBlankWindow* iBlankWin; + RBlankWindow iBackingWindow; + TSize iPhysicalScreenSize; + TSize iWinSize; + RWindowGroup iEventTestGroup; + CTWindowGroup *iEventTestGroup2; + CTWindowGroup *iEventTestGroup3; + CTWindowGroup *iEventTestGroup4; + TInt iEventSet; + CTQueueClient *iQueueClient; + TBool iFailed; + REventAnim* iAnim; + TUint iScreenModeTests; //currently contains supported rotation and if screen scaling is possible + TInt iNumScrModes; + RSoundPlugIn iClick; + TBool iAddToClick; + TInt iCaptureKey; + TBool iTurnBackOnCapsLock; + TInt iCurrentMode; + TSizeMode iSizeMode; + TBool iTheClientFlush; + TBool iQuequeClientFlush; + CTBlankWindow* iVisWins1; + CTBlankWindow* iVisWins2; + CTBlankWindow* iVisWins3; + CTransWindow* iTransWin; + RAnimDll* iAnimDll; + RPointerArray* iRemovableAnims; + TBool iIs3DPointer; + TBool iPtrPluginLoaded; + TInt iYOffset; +#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS +#ifndef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA + TSurfaceId iSurfaceId; + RSurfaceManager iSurfaceManager; + CPeriodic* iTimeOutCallback; +#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA +#endif // SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS + }; + +class CTQueueWindowGroup : public CTWindowGroup + { +public: + CTQueueWindowGroup(CTClient *aClient); + void ConstructL(); +private: + TInt iNumOnEvents; + }; + +class CTEventTestStep : public CTGraphicsStep + { +public: + CTEventTestStep(); +protected: + //from CTGraphicsStep + virtual CTGraphicsBase* CreateTestL(); + }; + +_LIT(KTEventTestStep,"TEventTest"); + + +#endif