sl@0: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Advanced pointer event unit tests sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: @internalComponent - Internal Symbian test code sl@0: */ sl@0: sl@0: #include "tadvancedpointerevent.h" sl@0: sl@0: CTAdvancedPointerEvent::CTAdvancedPointerEvent(CTestStep* aStep) sl@0: : CTWsGraphicsBase(aStep) sl@0: {} sl@0: sl@0: CTAdvancedPointerEvent::~CTAdvancedPointerEvent() sl@0: {} sl@0: sl@0: void CTAdvancedPointerEvent::TestPointerEventInit() sl@0: { sl@0: // Test size of class with hard coded values to prevent regression failure sl@0: TEST(sizeof(TPointerEvent) == 24); sl@0: sl@0: TPointerEvent ptrEvent1 = TPointerEvent(); sl@0: ptrEvent1.iType = TPointerEvent::EButton1Down; sl@0: TPoint initCoords(10,10); sl@0: ptrEvent1.iPosition = initCoords; sl@0: ptrEvent1.iParentPosition = initCoords; sl@0: ptrEvent1.iModifiers = 0; sl@0: sl@0: // Construct two TPointerEvent objects. The first using default constructor, the second using the copy constructor. T sl@0: { sl@0: TPointerEvent ptrEvent2 = TPointerEvent(ptrEvent1); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&ptrEvent1),sizeof(TPointerEvent),reinterpret_cast(&ptrEvent2),sizeof(TPointerEvent))); sl@0: } sl@0: sl@0: { sl@0: TPointerEvent ptrEvent2(TPointerEvent::EButton1Down, 0, initCoords, initCoords); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&ptrEvent1),sizeof(TPointerEvent),reinterpret_cast(&ptrEvent2),sizeof(TPointerEvent))); sl@0: } sl@0: } sl@0: sl@0: void AdvancedPointerInit(TWsEvent& aEvent1, TWsEvent& aEvent2, const TPointerEvent::TType aType, const TPoint3D& aPoint3D, const TUint8 aPointerNumber) sl@0: { sl@0: // init first event sl@0: TAdvancedPointerEvent& ptrEvent = *aEvent1.Pointer(); sl@0: ptrEvent.iType = aType; sl@0: ptrEvent.iModifiers = EModifierAdvancedPointerEvent; // done implicitly by TAdvancedPointerEvent::Init method sl@0: ptrEvent.iPosition.iX = aPoint3D.iX; sl@0: ptrEvent.iPosition.iY = aPoint3D.iY; sl@0: aEvent1.SetPointerNumber(aPointerNumber); sl@0: aEvent1.SetPointerZ(aPoint3D.iZ); sl@0: sl@0: // init 2nd event sl@0: aEvent2.InitAdvancedPointerEvent(aType,0,aPoint3D,aPointerNumber); sl@0: } sl@0: sl@0: void CTAdvancedPointerEvent::TestAdvancedPointerInit() sl@0: { sl@0: // Test size of class with hard coded values to prevent regression failure sl@0: TEST(sizeof(TAdvancedPointerEvent) == 32); sl@0: sl@0: TWsEvent event1; sl@0: TWsEvent event2; sl@0: sl@0: // low value coords, lowest value event type sl@0: { sl@0: TPoint3D point3D(1,2,3); sl@0: AdvancedPointerInit(event1, event2, TPointerEvent::EButton1Down, point3D, 1); sl@0: } sl@0: TEST(0==Mem::Compare(reinterpret_cast(&event1),sizeof(TWsEvent),reinterpret_cast(&event2),sizeof(TWsEvent))); sl@0: sl@0: // high value coords, highest value event type and pointer number sl@0: { sl@0: TPoint3D point3D(KMaxTInt, KMaxTInt-1, KMaxTInt-3); sl@0: AdvancedPointerInit(event1, event2, TPointerEvent::EOutOfRange, point3D, KMaxTUint8); sl@0: } sl@0: TEST(0==Mem::Compare(reinterpret_cast(&event1),sizeof(TWsEvent),reinterpret_cast(&event2),sizeof(TWsEvent))); sl@0: sl@0: // high negative value coords, highest value event type and pointer number sl@0: { sl@0: TPoint3D point3D(KMinTInt, KMinTInt+1, KMinTInt+3); sl@0: AdvancedPointerInit(event1, event2, TPointerEvent::EOutOfRange, point3D, KMaxTUint8); sl@0: } sl@0: TEST(0==Mem::Compare(reinterpret_cast(&event1),sizeof(TWsEvent),reinterpret_cast(&event2),sizeof(TWsEvent))); sl@0: } sl@0: sl@0: void CTAdvancedPointerEvent::TestAdvancedPointerGetPointerId() sl@0: { sl@0: TWsEvent event; sl@0: TAdvancedPointerEvent& ptrEvent = *event.Pointer(); sl@0: const TPoint3D point3D(1,2,3); sl@0: const TUint8 MaxLikelyCommonPointerNumber = 10; sl@0: sl@0: // Likely Common Values sl@0: TUint8 pointerNumber = 0; sl@0: for(;pointerNumber<=MaxLikelyCommonPointerNumber;pointerNumber++) sl@0: { sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove,0,point3D,pointerNumber); sl@0: TEST(ptrEvent.PointerNumber()==pointerNumber); sl@0: } sl@0: sl@0: // mid-range value sl@0: pointerNumber = 127; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove,0,point3D,pointerNumber); sl@0: TEST(ptrEvent.PointerNumber()==pointerNumber); sl@0: sl@0: // highest value sl@0: pointerNumber = 255; // KMaxTUint8 is there was one defined. sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove,0,point3D,pointerNumber); sl@0: TEST(ptrEvent.PointerNumber()==pointerNumber); sl@0: } sl@0: sl@0: /** helper method for TestAdvancedPointerGetPressureAndProximity() */ sl@0: void CTAdvancedPointerEvent::TestAdvancedPointerGetPressureAndProximity(const TPoint3D aPoint3D) sl@0: { sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, aPoint3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D positionAndPressure3D = ptrEvent.PositionAndPressure3D(); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&aPoint3D),sizeof(TPoint3D),reinterpret_cast(&positionAndPressure3D),sizeof(TPoint3D))); sl@0: TInt proximityAndPressure = ptrEvent.ProximityAndPressure(); sl@0: TEST(aPoint3D.iZ==proximityAndPressure); sl@0: } sl@0: sl@0: void CTAdvancedPointerEvent::TestAdvancedPointerGetPressureAndProximity() sl@0: { sl@0: { sl@0: // middle value sl@0: TPoint3D point3D(0,0,0); sl@0: TestAdvancedPointerGetPressureAndProximity(point3D); sl@0: } sl@0: { sl@0: // Typical value sl@0: TPoint3D point3D(10,9,8); sl@0: TestAdvancedPointerGetPressureAndProximity(point3D); sl@0: } sl@0: { sl@0: // Typical value sl@0: TPoint3D point3D(10,9,-8); sl@0: TestAdvancedPointerGetPressureAndProximity(point3D); sl@0: } sl@0: { sl@0: // max values sl@0: TPoint3D point3D(KMaxTInt-2,KMaxTInt-1,KMaxTInt); sl@0: TestAdvancedPointerGetPressureAndProximity(point3D); sl@0: } sl@0: { sl@0: // min values sl@0: TPoint3D point3D(KMinTInt+2,KMinTInt+1,KMinTInt); sl@0: TestAdvancedPointerGetPressureAndProximity(point3D); sl@0: } sl@0: } sl@0: sl@0: void CTAdvancedPointerEvent::TestAdvancedPointerGetPressure() sl@0: { sl@0: { sl@0: // middle value sl@0: const TPoint3D point3D(0,0,0); sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D pressure3D = ptrEvent.Pressure3D(); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&point3D),sizeof(TPoint3D),reinterpret_cast(&pressure3D),sizeof(TPoint3D))); sl@0: TInt pressure = ptrEvent.Pressure(); sl@0: TEST(point3D.iZ==pressure); sl@0: } sl@0: { sl@0: // Typical value sl@0: const TPoint3D point3D(10,9,8); sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D pressure3D = ptrEvent.Pressure3D(); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&point3D),sizeof(TPoint3D),reinterpret_cast(&pressure3D),sizeof(TPoint3D))); sl@0: TInt pressure = ptrEvent.Pressure(); sl@0: TEST(point3D.iZ==pressure); sl@0: } sl@0: { sl@0: // max value sl@0: const TPoint3D point3D(KMaxTInt-2,KMaxTInt-1,KMaxTInt); sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D pressure3D = ptrEvent.Pressure3D(); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&point3D),sizeof(TPoint3D),reinterpret_cast(&pressure3D),sizeof(TPoint3D))); sl@0: TInt pressure = ptrEvent.Pressure(); sl@0: TEST(point3D.iZ==pressure); sl@0: } sl@0: { sl@0: // min value sl@0: TPoint3D point3D(KMinTInt+2,KMinTInt+1,KMinTInt); sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D pressure3D = ptrEvent.Pressure3D(); sl@0: point3D.iZ=0; // pressure can't be negative sl@0: TEST(0==Mem::Compare(reinterpret_cast(&point3D),sizeof(TPoint3D),reinterpret_cast(&pressure3D),sizeof(TPoint3D))); sl@0: TInt pressure = ptrEvent.Pressure(); sl@0: TEST(0==pressure); sl@0: } sl@0: } sl@0: sl@0: void CTAdvancedPointerEvent::TestAdvancedPointerGetPosition() sl@0: { sl@0: { sl@0: // middle value sl@0: const TPoint3D point3D(0,0,0); sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D position3D = ptrEvent.Position3D(); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&point3D),sizeof(TPoint3D),reinterpret_cast(&position3D),sizeof(TPoint3D))); sl@0: TInt proximity = ptrEvent.Proximity(); sl@0: TEST(point3D.iZ==proximity); sl@0: } sl@0: { sl@0: // typical value sl@0: const TPoint3D point3D(10,9,-8); sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D position3D = ptrEvent.Position3D(); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&point3D),sizeof(TPoint3D),reinterpret_cast(&position3D),sizeof(TPoint3D))); sl@0: TInt proximity = ptrEvent.Proximity(); sl@0: TEST(point3D.iZ==proximity); sl@0: } sl@0: { sl@0: // highest value sl@0: TPoint3D point3D(KMaxTInt-2,KMaxTInt-1,KMaxTInt); sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D position3D = ptrEvent.Position3D(); sl@0: point3D.iZ=0; // proximity can't be positive sl@0: TEST(0==Mem::Compare(reinterpret_cast(&point3D),sizeof(TPoint3D),reinterpret_cast(&position3D),sizeof(TPoint3D))); sl@0: TInt proximity = ptrEvent.Proximity(); sl@0: TEST(0==proximity); sl@0: } sl@0: { sl@0: // lowest value sl@0: const TPoint3D point3D(KMinTInt+2,KMinTInt+1,KMinTInt); sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, point3D, 0); sl@0: TAdvancedPointerEvent ptrEvent = *event.Pointer(); sl@0: const TPoint3D position3D = ptrEvent.Position3D(); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&point3D),sizeof(TPoint3D),reinterpret_cast(&position3D),sizeof(TPoint3D))); sl@0: TInt proximity = ptrEvent.Proximity(); sl@0: TEST(point3D.iZ==proximity); sl@0: } sl@0: } sl@0: sl@0: void CTAdvancedPointerEvent::TestPointerEventCopying() sl@0: { sl@0: TWsEvent event; sl@0: event.InitAdvancedPointerEvent(TPointerEvent::EMove, 0, TPoint3D(2,3,4),1); sl@0: TPointerEvent testPointerEvent; sl@0: testPointerEvent.iModifiers =0; sl@0: testPointerEvent.iParentPosition=TPoint(0,0); sl@0: testPointerEvent.iPosition = TPoint(2,3); sl@0: testPointerEvent.iType=TPointerEvent::EMove; sl@0: sl@0: // TPointerEvent to TPointerEvent sl@0: // Copy Constructor sl@0: { sl@0: TPointerEvent* pointerEventPtr = event.Pointer(); sl@0: TPointerEvent pointerEvent = *pointerEventPtr; sl@0: TEST(0==Mem::Compare(reinterpret_cast(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast(&testPointerEvent),sizeof(TPointerEvent))); sl@0: } sl@0: // Assignment operator sl@0: { sl@0: TPointerEvent* pointerEventPtr = event.Pointer(); sl@0: TPointerEvent pointerEvent; sl@0: pointerEvent = *pointerEventPtr; sl@0: TEST(0==Mem::Compare(reinterpret_cast(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast(&testPointerEvent),sizeof(TPointerEvent))); sl@0: } sl@0: // TAdvancedPointerEvent to TPointerEvent sl@0: // Copy Constructor sl@0: { sl@0: TAdvancedPointerEvent* advancedPointerEventPtr = event.Pointer(); sl@0: TPointerEvent pointerEvent = *advancedPointerEventPtr; sl@0: TEST(0==Mem::Compare(reinterpret_cast(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast(&testPointerEvent),sizeof(TPointerEvent))); sl@0: } sl@0: // Assignment operator sl@0: { sl@0: TAdvancedPointerEvent* advancedPointerEventPtr = event.Pointer(); sl@0: TPointerEvent pointerEvent; sl@0: pointerEvent = *advancedPointerEventPtr; sl@0: TEST(0==Mem::Compare(reinterpret_cast(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast(&testPointerEvent),sizeof(TPointerEvent))); sl@0: } sl@0: sl@0: // TPointerEvent to TPointerEvent sl@0: // Copy Method sl@0: { sl@0: TPointerEvent* pointerEventPtr = event.Pointer(); sl@0: TPointerEvent pointerEvent; sl@0: pointerEvent.Copy(*pointerEventPtr); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast(&testPointerEvent),sizeof(TPointerEvent))); sl@0: } sl@0: sl@0: // TAdvancedPointerEvent to TPointerEvent sl@0: // Copy Constructor sl@0: { sl@0: TAdvancedPointerEvent* advancedPointerEventPtr = event.Pointer(); sl@0: TPointerEvent pointerEvent; sl@0: pointerEvent.Copy(*advancedPointerEventPtr); sl@0: TEST(0==Mem::Compare(reinterpret_cast(&pointerEvent),sizeof(TPointerEvent),reinterpret_cast(&testPointerEvent),sizeof(TPointerEvent))); sl@0: } sl@0: sl@0: // Assignment operator sl@0: { sl@0: TAdvancedPointerEvent* advancedPointerEventPtr = event.Pointer(); sl@0: TAdvancedPointerEvent advancedPointerEventPtr2; sl@0: advancedPointerEventPtr2 = *advancedPointerEventPtr; sl@0: TEST(0==Mem::Compare(reinterpret_cast(&advancedPointerEventPtr2),sizeof(TAdvancedPointerEvent),reinterpret_cast(event.Pointer()),sizeof(TAdvancedPointerEvent))); sl@0: } sl@0: } sl@0: sl@0: void CTAdvancedPointerEvent::RunTestCaseL(TInt /*aCurTestCase*/) sl@0: { sl@0: _LIT(KTest1,"PointerEventInit"); sl@0: _LIT(KTest2,"AdvancedPointerEventInit"); sl@0: _LIT(KTest3,"PointerEventCopying"); sl@0: _LIT(KTest4,"AdvancedPointerEventGetPointerId"); sl@0: _LIT(KTest5,"AdvancedPointerEventGetPressureAndProximity"); sl@0: _LIT(KTest6,"AdvancedPointerEventGetPressure"); sl@0: _LIT(KTest7,"AdvancedPointerEventGetPosition"); sl@0: sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); sl@0: switch(++iTest->iState) sl@0: { sl@0: case 1: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0542 sl@0: */ sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0542")); sl@0: iTest->LogSubTest(KTest1); sl@0: TestPointerEventInit(); sl@0: break; sl@0: case 2: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0543 sl@0: */ sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0543")); sl@0: iTest->LogSubTest(KTest2); sl@0: TestAdvancedPointerInit(); sl@0: break; sl@0: case 3: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0544 sl@0: */ sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0544")); sl@0: iTest->LogSubTest(KTest3); sl@0: TestPointerEventCopying(); sl@0: break; sl@0: case 4: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0545 sl@0: */ sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0545")); sl@0: iTest->LogSubTest(KTest4); sl@0: TestAdvancedPointerGetPointerId(); sl@0: break; sl@0: case 5: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0546 sl@0: */ sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0546")); sl@0: iTest->LogSubTest(KTest5); sl@0: TestAdvancedPointerGetPressureAndProximity(); sl@0: break; sl@0: case 6: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0547 sl@0: */ sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0547")); sl@0: iTest->LogSubTest(KTest6); sl@0: TestAdvancedPointerGetPressure(); sl@0: break; sl@0: case 7: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0548 sl@0: */ sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0548")); sl@0: iTest->LogSubTest(KTest7); sl@0: TestAdvancedPointerGetPosition(); sl@0: break; sl@0: default: sl@0: ((CTAdvancedPointerEventStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); sl@0: ((CTAdvancedPointerEventStep*)iStep)->CloseTMSGraphicsStep(); sl@0: TestComplete(); sl@0: break; sl@0: } sl@0: ((CTAdvancedPointerEventStep*)iStep)->RecordTestResultL(); sl@0: } sl@0: sl@0: __WS_CONSTRUCT_STEP__(AdvancedPointerEvent)