windowing/windowserver/tauto/tadvancedpointerevent.cpp
author Faisal Memon <faisal.memon@nokia.com>
Fri, 25 Jun 2010 17:49:58 +0100
branchEGL_MERGE
changeset 105 158b2308cc08
parent 0 5d03bc08d59c
permissions -rw-r--r--
Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.

// 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:
// Advanced pointer event unit tests
// 
//

/**
 @file
 @test
 @internalComponent - Internal Symbian test code
*/

#include "tadvancedpointerevent.h"

CTAdvancedPointerEvent::CTAdvancedPointerEvent(CTestStep* aStep)
	: CTWsGraphicsBase(aStep)
	{}

CTAdvancedPointerEvent::~CTAdvancedPointerEvent()
	{}

void CTAdvancedPointerEvent::TestPointerEventInit()
	{
	// Test size of class with hard coded values to prevent regression failure 
	TEST(sizeof(TPointerEvent) == 24);
	
	TPointerEvent ptrEvent1 = TPointerEvent();
	ptrEvent1.iType = TPointerEvent::EButton1Down;
	TPoint initCoords(10,10);
	ptrEvent1.iPosition = initCoords;
	ptrEvent1.iParentPosition = initCoords;
	ptrEvent1.iModifiers = 0;
	
	// Construct two TPointerEvent objects. The first using default constructor, the second using the copy constructor. T
		{		
		TPointerEvent ptrEvent2 = TPointerEvent(ptrEvent1);
		TEST(0==Mem::Compare(reinterpret_cast<TUint8*>(&ptrEvent1),sizeof(TPointerEvent),reinterpret_cast<TUint8*>(&ptrEvent2),sizeof(TPointerEvent)));		
		}	
	
		{		
		TPointerEvent ptrEvent2(TPointerEvent::EButton1Down, 0, initCoords, initCoords);
		TEST(0==Mem::Compare(reinterpret_cast<TUint8*>(&ptrEvent1),sizeof(TPointerEvent),reinterpret_cast<TUint8*>(&ptrEvent2),sizeof(TPointerEvent)));		
		}	
	}

void AdvancedPointerInit(TWsEvent& aEvent1, TWsEvent& aEvent2, const TPointerEvent::TType aType, const TPoint3D& aPoint3D, const TUint8 aPointerNumber)
	{
	// init first event
	TAdvancedPointerEvent& ptrEvent = *aEvent1.Pointer();
	ptrEvent.iType = aType;
	ptrEvent.iModifiers = EModifierAdvancedPointerEvent; // done implicitly by TAdvancedPointerEvent::Init method
	ptrEvent.iPosition.iX = aPoint3D.iX;
	ptrEvent.iPosition.iY = aPoint3D.iY;
	aEvent1.SetPointerNumber(aPointerNumber);
	aEvent1.SetPointerZ(aPoint3D.iZ);
	
	// init 2nd event
	aEvent2.InitAdvancedPointerEvent(aType,0,aPoint3D,aPointerNumber);
	}

void CTAdvancedPointerEvent::TestAdvancedPointerInit()
	{
	// Test size of class with hard coded values to prevent regression failure 
	TEST(sizeof(TAdvancedPointerEvent) == 32);

	TWsEvent event1;
	TWsEvent event2;
	
	// low value coords, lowest value event type
		{
		TPoint3D point3D(1,2,3);	
		AdvancedPointerInit(event1, event2, TPointerEvent::EButton1Down, point3D, 1);
		}
	TEST(0==Mem::Compare(reinterpret_cast<TUint8*>(&event1),sizeof(TWsEvent),reinterpret_cast<TUint8*>(&event2),sizeof(TWsEvent)));
	
	// high value coords, highest value event type and pointer number
		{
		TPoint3D point3D(KMaxTInt, KMaxTInt-1, KMaxTInt-3);
		AdvancedPointerInit(event1, event2, TPointerEvent::EOutOfRange, point3D, KMaxTUint8);
		}
	TEST(0==Mem::Compare(reinterpret_cast<TUint8*>(&event1),sizeof(TWsEvent),reinterpret_cast<TUint8*>(&event2),sizeof(TWsEvent)));
	
	// high negative value coords, highest value event type and pointer number
		{
		TPoint3D point3D(KMinTInt, KMinTInt+1, KMinTInt+3);
		AdvancedPointerInit(event1, event2, TPointerEvent::EOutOfRange, point3D, KMaxTUint8);
		}
	TEST(0==Mem::Compare(reinterpret_cast<TUint8*>(&event1),sizeof(TWsEvent),reinterpret_cast<TUint8*>(&event2),sizeof(TWsEvent)));		
	}

void CTAdvancedPointerEvent::TestAdvancedPointerGetPointerId()
	{
	TWsEvent event;
	TAdvancedPointerEvent& ptrEvent = *event.Pointer();
	const TPoint3D point3D(1,2,3);
	const TUint8 MaxLikelyCommonPointerNumber = 10;
	
	// Likely Common Values
	TUint8 pointerNumber = 0;
	for(;pointerNumber<=MaxLikelyCommonPointerNumber;pointerNumber++)
		{
		event.InitAdvancedPointerEvent(TPointerEvent::EMove,0,point3D,pointerNumber);
		TEST(ptrEvent.PointerNumber()==pointerNumber);
		}

	// mid-range value
	pointerNumber = 127;	
	event.InitAdvancedPointerEvent(TPointerEvent::EMove,0,point3D,pointerNumber);
	TEST(ptrEvent.PointerNumber()==pointerNumber);	
	
	// highest value
	pointerNumber = 255; // KMaxTUint8 is there was one defined.
	event.InitAdvancedPointerEvent(TPointerEvent::EMove,0,point3D,pointerNumber);
	TEST(ptrEvent.PointerNumber()==pointerNumber);	
	}

/** helper method for TestAdvancedPointerGetPressureAndProximity() */
void CTAdvancedPointerEvent::TestAdvancedPointerGetPressureAndProximity(const TPoint3D aPoint3D)
	{
	TWsEvent event;
	event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, aPoint3D, 0);
	TAdvancedPointerEvent ptrEvent = *event.Pointer();
	const TPoint3D positionAndPressure3D = ptrEvent.PositionAndPressure3D();
	TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&aPoint3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&positionAndPressure3D),sizeof(TPoint3D)));
	TInt proximityAndPressure = ptrEvent.ProximityAndPressure();
	TEST(aPoint3D.iZ==proximityAndPressure);	
	}

void CTAdvancedPointerEvent::TestAdvancedPointerGetPressureAndProximity()
	{
		{
		// middle value
		TPoint3D point3D(0,0,0);
		TestAdvancedPointerGetPressureAndProximity(point3D);
		}
		{
		// Typical value
		TPoint3D point3D(10,9,8);
		TestAdvancedPointerGetPressureAndProximity(point3D);
		}
		{
		// Typical value
		TPoint3D point3D(10,9,-8);
		TestAdvancedPointerGetPressureAndProximity(point3D);
		}
		{
		// max values
		TPoint3D point3D(KMaxTInt-2,KMaxTInt-1,KMaxTInt);
		TestAdvancedPointerGetPressureAndProximity(point3D);
		}
		{
		// min values
		TPoint3D point3D(KMinTInt+2,KMinTInt+1,KMinTInt);
		TestAdvancedPointerGetPressureAndProximity(point3D);
		}
	}

void CTAdvancedPointerEvent::TestAdvancedPointerGetPressure()
	{
		{
		// middle value
		const TPoint3D point3D(0,0,0);
		TWsEvent event;
		event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0);
		TAdvancedPointerEvent ptrEvent = *event.Pointer();
		const TPoint3D pressure3D = ptrEvent.Pressure3D();
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&point3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&pressure3D),sizeof(TPoint3D)));
		TInt pressure = ptrEvent.Pressure();
		TEST(point3D.iZ==pressure);
		}
		{
		// Typical value
		const TPoint3D point3D(10,9,8);
		TWsEvent event;
		event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0);
		TAdvancedPointerEvent ptrEvent = *event.Pointer();
		const TPoint3D pressure3D = ptrEvent.Pressure3D();
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&point3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&pressure3D),sizeof(TPoint3D)));
		TInt pressure = ptrEvent.Pressure();
		TEST(point3D.iZ==pressure);
		}		
		{
		// max value
		const TPoint3D point3D(KMaxTInt-2,KMaxTInt-1,KMaxTInt);
		TWsEvent event;
		event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0);
		TAdvancedPointerEvent ptrEvent = *event.Pointer();
		const TPoint3D pressure3D = ptrEvent.Pressure3D();
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&point3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&pressure3D),sizeof(TPoint3D)));
		TInt pressure = ptrEvent.Pressure();
		TEST(point3D.iZ==pressure);
		}
		{
		// min value
		TPoint3D point3D(KMinTInt+2,KMinTInt+1,KMinTInt);
		TWsEvent event;
		event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0);
		TAdvancedPointerEvent ptrEvent = *event.Pointer();
		const TPoint3D pressure3D = ptrEvent.Pressure3D();
		point3D.iZ=0; // pressure can't be negative
		TEST(0==Mem::Compare(reinterpret_cast<TUint8*>(&point3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&pressure3D),sizeof(TPoint3D)));
		TInt pressure = ptrEvent.Pressure();
		TEST(0==pressure);
		}
	}

void CTAdvancedPointerEvent::TestAdvancedPointerGetPosition()
	{
		{
		// middle value
		const TPoint3D point3D(0,0,0);
		TWsEvent event;
		event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0);
		TAdvancedPointerEvent ptrEvent = *event.Pointer();
		const TPoint3D position3D = ptrEvent.Position3D();
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&point3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&position3D),sizeof(TPoint3D)));
		TInt proximity = ptrEvent.Proximity();
		TEST(point3D.iZ==proximity);
		}
		{
		// typical value
		const TPoint3D point3D(10,9,-8);
		TWsEvent event;
		event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0);
		TAdvancedPointerEvent ptrEvent = *event.Pointer();
		const TPoint3D position3D = ptrEvent.Position3D();
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&point3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&position3D),sizeof(TPoint3D)));
		TInt proximity = ptrEvent.Proximity();
		TEST(point3D.iZ==proximity);
		}
		{
		// highest value
		TPoint3D point3D(KMaxTInt-2,KMaxTInt-1,KMaxTInt);
		TWsEvent event;
		event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0);
		TAdvancedPointerEvent ptrEvent = *event.Pointer();
		const TPoint3D position3D = ptrEvent.Position3D();
		point3D.iZ=0; // proximity can't be positive
		TEST(0==Mem::Compare(reinterpret_cast<TUint8*>(&point3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&position3D),sizeof(TPoint3D)));
		TInt proximity = ptrEvent.Proximity();
		TEST(0==proximity);
		}
		{
		// lowest value
		const TPoint3D point3D(KMinTInt+2,KMinTInt+1,KMinTInt);
		TWsEvent event;
		event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0);
		TAdvancedPointerEvent ptrEvent = *event.Pointer();
		const TPoint3D position3D = ptrEvent.Position3D();
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&point3D),sizeof(TPoint3D),reinterpret_cast<TUint8 const*>(&position3D),sizeof(TPoint3D)));
		TInt proximity = ptrEvent.Proximity();
		TEST(point3D.iZ==proximity);
		}
	}

void CTAdvancedPointerEvent::TestPointerEventCopying()
	{
	TWsEvent event;
	event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, TPoint3D(2,3,4),1);
	TPointerEvent testPointerEvent;
	testPointerEvent.iModifiers =0;
	testPointerEvent.iParentPosition=TPoint(0,0);
	testPointerEvent.iPosition = TPoint(2,3);
	testPointerEvent.iType=TPointerEvent::EMove;

	// TPointerEvent to TPointerEvent
	// Copy Constructor
		{
		TPointerEvent* pointerEventPtr = event.Pointer(); 
		TPointerEvent pointerEvent = *pointerEventPtr;
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast<TUint8 const*>(&testPointerEvent),sizeof(TPointerEvent)));
		}
	// Assignment operator
		{
		TPointerEvent* pointerEventPtr = event.Pointer(); 
		TPointerEvent pointerEvent;
		pointerEvent = *pointerEventPtr;
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast<TUint8 const*>(&testPointerEvent),sizeof(TPointerEvent)));
		}		
	// TAdvancedPointerEvent to TPointerEvent
	// Copy Constructor
		{
		TAdvancedPointerEvent* advancedPointerEventPtr = event.Pointer();		
		TPointerEvent pointerEvent = *advancedPointerEventPtr;
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast<TUint8 const*>(&testPointerEvent),sizeof(TPointerEvent)));
		}
	// Assignment operator
		{
		TAdvancedPointerEvent* advancedPointerEventPtr = event.Pointer(); 
		TPointerEvent pointerEvent;
		pointerEvent = *advancedPointerEventPtr;
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast<TUint8 const*>(&testPointerEvent),sizeof(TPointerEvent)));
		}

	// TPointerEvent to TPointerEvent
	// Copy Method
		{
		TPointerEvent* pointerEventPtr = event.Pointer(); 
		TPointerEvent pointerEvent;
		pointerEvent.Copy(*pointerEventPtr);
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast<TUint8 const*>(&testPointerEvent),sizeof(TPointerEvent)));
		}
		
	// TAdvancedPointerEvent to TPointerEvent
	// Copy Constructor
		{
		TAdvancedPointerEvent* advancedPointerEventPtr = event.Pointer();		
		TPointerEvent pointerEvent;
		pointerEvent.Copy(*advancedPointerEventPtr);
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast<TUint8 const*>(&testPointerEvent),sizeof(TPointerEvent)));
		}
		
	// Assignment operator
		{
		TAdvancedPointerEvent* advancedPointerEventPtr = event.Pointer(); 
		TAdvancedPointerEvent advancedPointerEventPtr2;
		advancedPointerEventPtr2 = *advancedPointerEventPtr;
		TEST(0==Mem::Compare(reinterpret_cast<TUint8 const*>(&advancedPointerEventPtr2),sizeof(TAdvancedPointerEvent),reinterpret_cast<TUint8 const*>(event.Pointer()),sizeof(TAdvancedPointerEvent)));
		}			
	}

void CTAdvancedPointerEvent::RunTestCaseL(TInt /*aCurTestCase*/)
	{
	_LIT(KTest1,"PointerEventInit");
	_LIT(KTest2,"AdvancedPointerEventInit");
	_LIT(KTest3,"PointerEventCopying");
	_LIT(KTest4,"AdvancedPointerEventGetPointerId");
	_LIT(KTest5,"AdvancedPointerEventGetPressureAndProximity");
	_LIT(KTest6,"AdvancedPointerEventGetPressure");
	_LIT(KTest7,"AdvancedPointerEventGetPosition");
	
	((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
	switch(++iTest->iState)
		{
	case 1:
/**
@SYMTestCaseID		GRAPHICS-WSERV-0542
*/
		((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0542"));
		iTest->LogSubTest(KTest1);
		TestPointerEventInit();
		break;	
	case 2:
/**
@SYMTestCaseID		GRAPHICS-WSERV-0543
*/
		((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0543"));
		iTest->LogSubTest(KTest2);
		TestAdvancedPointerInit();
		break;
	case 3:
/**
@SYMTestCaseID		GRAPHICS-WSERV-0544
*/
		((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0544"));
		iTest->LogSubTest(KTest3);			
		TestPointerEventCopying();
		break;
	case 4:
/**
@SYMTestCaseID		GRAPHICS-WSERV-0545
*/
		((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0545"));
		iTest->LogSubTest(KTest4);
		TestAdvancedPointerGetPointerId();
		break;		
	case 5:
/**
@SYMTestCaseID		GRAPHICS-WSERV-0546
*/
		((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0546"));
		iTest->LogSubTest(KTest5);
		TestAdvancedPointerGetPressureAndProximity();
		break;
	case 6:
/**
@SYMTestCaseID		GRAPHICS-WSERV-0547
*/
		((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0547"));
		iTest->LogSubTest(KTest6);
		TestAdvancedPointerGetPressure();
		break;
	case 7:
/**
@SYMTestCaseID		GRAPHICS-WSERV-0548
*/
		((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0548"));
		iTest->LogSubTest(KTest7);			
		TestAdvancedPointerGetPosition();
		break;
	default:
		((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
		((CTAdvancedPointerEventStep*)iStep)->CloseTMSGraphicsStep();
		TestComplete();
		break;
		}
	((CTAdvancedPointerEventStep*)iStep)->RecordTestResultL();
	}

__WS_CONSTRUCT_STEP__(AdvancedPointerEvent)