windowing/windowserver/tauto/tmultiptrevent.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tauto/tmultiptrevent.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,283 @@
+// Copyright (c) 2008-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 TMULTIPTREVENT_H_
+#define TMULTIPTREVENT_H_
+
+#include <e32std.h>
+#include <e32cmn.h>
+#include "w32std.h"
+#include "../tlib/testbase.h"
+#include "AUTO.H"
+#include "AUTODLL.H"
+#include "../TClick/multiptrclick.h"
+#include "TGraphicsHarness.h"
+
+class CTMultiPtrEventTest;
+class CTMultiPtrEventClient;
+
+/*
+ * CTEvent derived class which acts as eventhandler and eventbuffer 
+ * Stores the events in buffer, which is used for comparing events received from wserv.
+ */ 
+class CTMultiPtrEventBuffer : public CTEvent
+	{
+	enum {EEventBufferSize=40, EMovePtsBuffer=10};
+public:
+	CTMultiPtrEventBuffer(RWsSession *aWs, CTMultiPtrEventTest *aTest, CTMultiPtrEventClient* aClient);
+	void ConstructL();
+	void AddExpectedEvent(TWsEvent &aEvent);
+	void AddExpectedMovePtEvent(TPoint &aMovePt);
+	TInt EventsRemaining();
+	void SetEventCount(TInt aCount) {iEventCount = aCount;}
+	void SetNestedLoopState(TBool aLoopStart) {iNestedLoopStarted = aLoopStart;}
+	TBool NestedLoopState() {return iNestedLoopStarted;}
+	void GetMoveBufferAndCompareL();
+protected:
+	// Pure virtual from CTEventBase
+	void doRunL();
+private:
+	void TestL(TInt aTest);
+	void TestL(TInt aTest, TInt aVal1, TInt aVal2,const char *oper, const char *aTestStr, 
+	           const TWsEvent *aEvent, const TWsEvent *aExpected, const char *aFile, TUint aLine);
+    void TestL(TInt aTest, TPoint aVal1, TPoint aVal2,const char *oper, const char *aTestStr, 
+               const TWsEvent *aEvent, const TWsEvent *aExpected, const char *aFile, TUint aLine);
+private:
+	CCirBuf<TWsEvent> iEventBuffer;
+	CCirBuf<TPoint> iMovePtsBuffer;
+	CTMultiPtrEventTest* iTest;
+	TInt iEventCount;
+	CTMultiPtrEventClient* iClient;
+	TBool iNestedLoopStarted;
+	};
+
+
+/* 
+ * CTClient derived class which gives Wserv client environment 
+ * i,e iWs, iScreen, iGc, iGroup, iEventHandler etc...
+ * Owns CTMultiPtrEventBuffer and stores in iEventhandler of its base class
+ * Accepts the event from test class and passes them on to buffer class
+ */ 
+class CTMultiPtrEventClient : public CTClient
+	{
+public:
+	CTMultiPtrEventClient(CTMultiPtrEventTest *aTest, TBool aSecondaryClient = EFalse);
+	~CTMultiPtrEventClient();
+	void ConstructL();
+	
+	inline CTBlankWindow* ParentWin() { return iParentWin; }
+	inline CTBlankWindow* ChildWin() { return iChildWin; }
+	inline CTMultiPtrEventBuffer* EventBuffer() {return static_cast<CTMultiPtrEventBuffer*>(iEventHandler);}
+	inline void SetExpectNonAdvancedPointerEvents() {iExpectNonAdvancedPointerEvents=ETrue;};
+	inline void ClearExpectNonAdvancedPointerEvents() {iExpectNonAdvancedPointerEvents=EFalse;};
+
+	TBool IsSecondaryClient() {return iSecondaryClient;}
+	
+	void AddExpectedPointerEvent(TPointerEvent::TType aType, TPoint aPos, TUint8 aPointerNumber, TUint aHandle = 0);
+	void AddExpectedPointerEvent(TPointerEvent::TType aType, TPoint aPos, TInt aZ, TUint aModifier, TUint8 aPointerNumber, TUint aHandle = 0);
+	void AddExpectedWsEvent(TEventCode aType, TInt aPointerNumber = 0, TUint aHandle = 0);
+	void AddExpectedMovePoint(TPoint aPos);
+	void CalculatePtrPosAndSet3Ddata(TWsEvent& aEvent, TPointerEvent::TType aType, TPoint aPos, TUint aModifiers, TInt aZ, TUint8 aPointerNumber, TUint aHandle);
+	void ConstructGroupBlankWinL();
+	void DeleteGroupBlankWin();
+	TBool CheckOrdinalPosition(TInt aWinAutoFocus1);
+	
+	// Virtual from CTClient
+	void ConstructEventHandlerL();
+	
+private:
+	CTMultiPtrEventTest* iTest;
+	TSize iParentWinSize;
+	TPoint iParentWinPos;
+	TSize iChildWinSize;
+	TPoint iChildWinPos;
+	CTBlankWindow* iParentWin;
+	CTBlankWindow* iChildWin;
+
+	TBool iSecondaryClient;
+	
+	// For AutoFocus test
+	CTWindowGroup* iGroupWinAutoFocus1;
+	CTWindowGroup* iGroupWinAutoFocus2;
+	CTBlankWindow* iWinAutoFocus1;
+	CTBlankWindow* iWinAutoFocus2;
+	
+	TSize iWinSizeAutoFocus1;
+	TPoint iWinPosAutoFocus1;
+	TSize iWinSizeAutoFocus2;
+	TPoint iWinPosAutoFocus2;
+	TBool iExpectNonAdvancedPointerEvents;
+	};
+
+class RMultiPointerAnim : public RTestAnim
+	{
+public:
+	static RMultiPointerAnim* NewL(RWindowBase* aWin, RAnimDll* aDll);
+	RMultiPointerAnim(RAnimDll* aDll) :RTestAnim(*aDll) {}
+	TInt AddExpectedAnimPointerEvent(TRawEvent::TType aType, TPoint aPos, TInt aZ, TUint aModifier, TUint8 aPointerNumber, TBool aEat = ETrue);
+	};
+
+/*
+ * CTWsGraphicsBase derived class which implements RunTestCaseL pure virtual.
+ * Runs all the testcases for multi poniter events.
+ * For each test case it creates CTMultiPtrEventClient object and creates a nested activescheduler
+ * Calls NextSetOfEventsL() which in turn calls respective tests depending upong the testcase number
+ * For each test simulates the events and adds the same event to CTMultiPtrEventBuffer
+ * When all the tests for a particular testcase completes stops activescheduler
+ * Repeats the same for all testcases
+ */ 
+class CTMultiPtrEventTest : public CTWsGraphicsBase
+	{
+public:
+	CTMultiPtrEventTest(CTestStep* aStep);
+	~CTMultiPtrEventTest();
+	void ConstructL();
+	void NextSetOfEventsL();
+	void Failed();
+	
+	// Functions for simulating events, which use UserSvr::AddEvent
+	void SimulatePointerEvent(TRawEvent::TType aType, TInt aX, TInt aY, TUint8 aPointerNumber);
+	void SimulatePointerEvent(TRawEvent::TType aType, TInt aX, TInt aY, TInt aZ, TUint8 aPointerNumber);
+	void SimulatePointerDownUp(TInt aX, TInt aY, TInt aZ, TUint8 aPointerNumber);
+	
+	// Functions for adding event, calls the client's AddExpectedPointer
+	void AddExpectedPointerEvent(TPointerEvent::TType aType, TPoint aPos, TUint8 aPointerNumber, TUint aHandle = 0);
+	void AddExpectedPointerEvent(TPointerEvent::TType aType, TPoint aPos, TInt aZ, TUint aModifier, TUint8 aPointerNumber, TUint aHandle = 0, TBool aSecondaryClient = EFalse);
+	void AddExpectedPointerDownUp(TPoint aPos, TInt aZ, TUint8 aPointerNumber);
+	void AddExpectedWsEvent(TEventCode aType, TBool aSecondaryClient = EFalse, TInt aPointerNumber = 0, TUint aHandle = 0);
+	void AddExpectedMultiPtrClickEvent(TPointerEvent::TType aType, TPoint aPos, TInt aZ, TUint aModifier, TUint8 aPointerNumber, TUint aHandle = 0);
+	void AddExpectedMultiPtrClickOtherEvent(TPointerEvent::TType aType, TPoint aPos, TInt aZ, TUint aModifier, TUint8 aPointerNumber, TUint aHandle);
+	
+	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);	
+	
+	// Supplementary function for tests
+	void TestDragForMultiPointer(TPoint aPtrPos, TInt aPrValue, TUint8 aPointerNumber);
+	void SimulateAndAddLoneUpEvents(TInt aNumSimulation, TInt aNumAddition, TPoint aPos);
+	void TestAndDisplayAnimError();
+	void GetRemainingEventsFromSecondaryClient();
+	void TestAndDisplayPtrClickError();
+	void CreatePointerClickPluginL();
+	void SetAutoFlush();
+	void ResetFlushStopAS();
+	void TestFilteringForMultiPointer(TBool aFiltering);
+	void TestGrabbingForMultiPointer(TBool aGrabbing);
+	void CreateGroupWinL();
+	void DeleteGroupWin();
+	void CreateGroupWinForCapturingL();
+	void DeleteGroupWinForCapturing();
+	void CreateAnimDllAndAnimL();
+	void DestroyAnimDllAndAnim();
+	void TestCloseProximityHighPressureAPIsL();
+	void TestCapturingForMultiPointer(TBool aAllGroups);
+	void SetThresholdValues(TInt aEnterCloseProx, TInt aExitCloseProx, TInt aEnterHighPres, TInt aExitHighPres);
+	void NegativeTestingOfProximityPressureAPIsL();
+	void TestErrorCodeL(TInt aExpErrCode, TInt aActualErrCode);
+	void SimulateProximityAndPressureEvents(TInt aCloseProxEnterValue, TInt aCloseProxExitValue, TInt aHighPresEnterValue, TInt aHighPresExitValue);
+	void SetDefaultScreenMode();
+	TPoint GetPointerPostionOnRotatedMode(TPoint aPointerPos, CFbsBitGc::TGraphicsOrientation aRotation);
+	void LogEventsAdded();
+	
+	// All tests
+	void MultiPointerEvents();
+	void PurgingMultiPointerEvents();
+	void MultiPointerEventsForAnimsL();
+	void MultiClientMultiPointerEvents();
+	void MultiPointerEventsForPointerClickL();
+	void MultiPointerEventsInDiffScreenModes();
+	void FilteringMultiPointerEvents();
+	void GrabbingMultiPointerEvents();
+	void VirtualKeyBoardForMultiplePointers();
+	void DoubleClickForMultiplePointers();
+	void MultiPointerOutOfRangeEvents();
+	void AutoForeGroundForMultiplePointersL();
+	void EmulationRulesForMultiplePointers();
+    void CloseProximityAndHighPressureEventsL();
+	void OutOfBoundValueTesting();
+	void CapturingMultiPointerEvents();
+	void NegativeTestsForProximityPressureEventsL();
+	void PointerRepeatEventForMultiplePointers();
+	void SetExpectNonAdvancedPointerEvents(TBool aSecondaryClient=EFalse);
+	void ClearExpectNonAdvancedPointerEvents(TBool aSecondaryClient=EFalse);
+	
+protected:
+	void RunTestCaseL(TInt aCurTestCase);
+private:
+	void RunTestsL();
+private:
+	TInt iEventSet;			// Set of events for one particular test case
+	TBool iFailed;
+	TBool iActiveSchedulerStarted;
+	TBool iTheClientFlush;
+	TBool iClientFlush;
+	TBool iSecClientFlush;
+	TSize iPhysicalScreenSize;
+	TRect iOrigPtrCursorArea;
+	
+	TUint iPointerNumber;
+	TInt iMaxDevPointers;
+	TInt iMaxUiPointers;
+	TInt iMaxPressure;
+	TInt iPressureStep;
+	TInt iMaxProximity;
+	TInt iProximityStep;
+
+	TInt iEnterCloseProximityThreshold;
+	TInt iExitCloseProximityThreshold;
+	TInt iEnterHighPressureThreshold;
+	TInt iExitHighPressureThreshold;	
+	 
+	CTMultiPtrEventClient *iMultiPtrEventClient;
+	CTMultiPtrEventClient *iSecMultiPtrEventClient;
+	
+	RAnimDll* iAnimDll;
+	RMultiPointerAnim* iAnim;
+	
+	RSoundPlugIn iClick;
+	TBool iPtrPluginLoaded;
+	RChunk iChunk;
+	RHeap* iHeap;
+	TAny* iErrDesc;
+	
+	TInt iCurrentScreenMode;
+	TBool iChangeScreenMode;
+	
+	CTWindowGroup* iGroupWinForEmul;
+	CTBlankWindow* iWinForEmul;
+	
+	CTWindowGroup* iGroupWinForCapturing;
+	CTBlankWindow* iWinForCapturing;
+	
+	TInt iYOffset;
+	};
+
+class CTMultiPtrEventTestStep : public CTGraphicsStep
+	{
+public:
+	CTMultiPtrEventTestStep();
+protected:
+	//from CTGraphicsStep
+	virtual CTGraphicsBase* CreateTestL();
+	};
+
+_LIT(KTMultiPtrEventTestStep, "TMultiPtrEventTest");
+
+#endif /*TMULTIPTREVENT_H_*/