windowing/windowserver/test/TClick/multiptrclick.cpp
author hgs
Tue, 22 Jun 2010 15:21:29 +0300
changeset 103 2717213c588a
child 178 89bd4cfee505
permissions -rw-r--r--
201024
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
103
hgs
parents:
diff changeset
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
// Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description:
hgs
parents:
diff changeset
    14
// Test Multi Pointer Click Plug-In DLL
hgs
parents:
diff changeset
    15
// 
hgs
parents:
diff changeset
    16
//
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <e32std.h>
hgs
parents:
diff changeset
    19
#include "W32CLICK.H"
hgs
parents:
diff changeset
    20
#include "multiptrclick.h"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
class CMultiPtrClickMaker : public CClickMaker
hgs
parents:
diff changeset
    23
	{
hgs
parents:
diff changeset
    24
	enum {EEventBufferSize=32};
hgs
parents:
diff changeset
    25
public:
hgs
parents:
diff changeset
    26
	~CMultiPtrClickMaker();
hgs
parents:
diff changeset
    27
	void ConstructL();
hgs
parents:
diff changeset
    28
	//Virtual function from CClickMaker
hgs
parents:
diff changeset
    29
	void KeyEvent(TEventCode aType, const TKeyEvent& aEvent);
hgs
parents:
diff changeset
    30
	void PointerEvent(const TPointerEvent& aEvent);
hgs
parents:
diff changeset
    31
	void OtherEvent(TInt aType, TAny* aParam);
hgs
parents:
diff changeset
    32
	TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
private:
hgs
parents:
diff changeset
    35
	TInt AddEvent(const TWsEvent* aEvent);
hgs
parents:
diff changeset
    36
	TInt AddEvent(const TPointerEventData* aEvent);
hgs
parents:
diff changeset
    37
	TBool ComparePointerEvents(const TPointerEvent* aExpectedEvent, const TPointerEvent* aActualEvent);
hgs
parents:
diff changeset
    38
	TBool CompareOtherEvents(const TPointerEventData* aExpectedEvent, const TPointerEventData* aActualEvent);
hgs
parents:
diff changeset
    39
private:
hgs
parents:
diff changeset
    40
	CCirBuf<TWsEvent> iPtrEventBuffer;
hgs
parents:
diff changeset
    41
	CCirBuf<TPointerEventData> iOtherEventBuffer;
hgs
parents:
diff changeset
    42
	TBuf<255> iErrorDes;
hgs
parents:
diff changeset
    43
	TInt iPtrEventCount;
hgs
parents:
diff changeset
    44
	TInt iOtherEventCount;
hgs
parents:
diff changeset
    45
	TInt iError;
hgs
parents:
diff changeset
    46
	};
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
void CMultiPtrClickMaker::ConstructL()
hgs
parents:
diff changeset
    50
	{
hgs
parents:
diff changeset
    51
	iPtrEventBuffer.SetLengthL(EEventBufferSize);
hgs
parents:
diff changeset
    52
	iOtherEventBuffer.SetLengthL(EEventBufferSize);
hgs
parents:
diff changeset
    53
	}
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
CMultiPtrClickMaker::~CMultiPtrClickMaker()
hgs
parents:
diff changeset
    56
	{
hgs
parents:
diff changeset
    57
	}
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
void CMultiPtrClickMaker::KeyEvent(TEventCode /*aType*/,const TKeyEvent& /*aEvent*/)
hgs
parents:
diff changeset
    60
	{
hgs
parents:
diff changeset
    61
	}
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
TBool CMultiPtrClickMaker::ComparePointerEvents(const TPointerEvent* aExpectedEvent, const TPointerEvent* aActualEvent)
hgs
parents:
diff changeset
    64
	{
hgs
parents:
diff changeset
    65
	// Check pointer type
hgs
parents:
diff changeset
    66
	if (aExpectedEvent->iType != aActualEvent->iType)
hgs
parents:
diff changeset
    67
		{
hgs
parents:
diff changeset
    68
		_LIT(KEventType, "Actual Wserv Event type = %d Expected Wserv Event Type = %d ");
hgs
parents:
diff changeset
    69
		iErrorDes.Format(KEventType, aActualEvent->iType, aExpectedEvent->iType);
hgs
parents:
diff changeset
    70
		return EFalse;
hgs
parents:
diff changeset
    71
		}
hgs
parents:
diff changeset
    72
	
hgs
parents:
diff changeset
    73
	if (aExpectedEvent->iPosition != aActualEvent->iPosition)
hgs
parents:
diff changeset
    74
		{
hgs
parents:
diff changeset
    75
		_LIT(KPointerPosition, "Actual PointerPosition = (%d, %d) Expected PointerPosition = (%d, %d) ");
hgs
parents:
diff changeset
    76
		iErrorDes.Format(KPointerPosition, aActualEvent->iPosition.iX, aActualEvent->iPosition.iY, aExpectedEvent->iPosition.iX, aExpectedEvent->iPosition.iY);
hgs
parents:
diff changeset
    77
		return EFalse;
hgs
parents:
diff changeset
    78
		}
hgs
parents:
diff changeset
    79
	
hgs
parents:
diff changeset
    80
	if (aExpectedEvent->iParentPosition != aActualEvent->iParentPosition)
hgs
parents:
diff changeset
    81
		{
hgs
parents:
diff changeset
    82
		_LIT(KPointerPosition, "Actual parent Position = (%d, %d) Expected parent Position = (%d, %d) ");
hgs
parents:
diff changeset
    83
		iErrorDes.Format(KPointerPosition, aActualEvent->iParentPosition.iX, aActualEvent->iParentPosition.iY, aExpectedEvent->iParentPosition.iX, aExpectedEvent->iParentPosition.iY);
hgs
parents:
diff changeset
    84
		return EFalse;
hgs
parents:
diff changeset
    85
		}
hgs
parents:
diff changeset
    86
	
hgs
parents:
diff changeset
    87
	if (aExpectedEvent->IsAdvancedPointerEvent() != aActualEvent->IsAdvancedPointerEvent())
hgs
parents:
diff changeset
    88
		{
hgs
parents:
diff changeset
    89
		_LIT(KPointerPosition, "Actual event is TAdvancedPointerEvent = %d Expected event is TAdvancedPointerEvent = %d ");
hgs
parents:
diff changeset
    90
		iErrorDes.Format(KPointerPosition, aActualEvent->IsAdvancedPointerEvent(), aExpectedEvent->IsAdvancedPointerEvent());
hgs
parents:
diff changeset
    91
		return EFalse;
hgs
parents:
diff changeset
    92
		}
hgs
parents:
diff changeset
    93
	
hgs
parents:
diff changeset
    94
	if (aExpectedEvent->IsAdvancedPointerEvent())
hgs
parents:
diff changeset
    95
		{
hgs
parents:
diff changeset
    96
		const TAdvancedPointerEvent& expectedAdvancedEvent = *aExpectedEvent->AdvancedPointerEvent();
hgs
parents:
diff changeset
    97
		const TAdvancedPointerEvent& actualAdvancedEvent   = *aActualEvent->AdvancedPointerEvent();
hgs
parents:
diff changeset
    98
		
hgs
parents:
diff changeset
    99
		if (expectedAdvancedEvent.PointerNumber() != actualAdvancedEvent.PointerNumber())
hgs
parents:
diff changeset
   100
			{
hgs
parents:
diff changeset
   101
			_LIT(KPointerNumber, "Actual PointerNumber = %d Expected PointerNumber = %d ");
hgs
parents:
diff changeset
   102
			iErrorDes.Format(KPointerNumber, actualAdvancedEvent.PointerNumber(), expectedAdvancedEvent.PointerNumber());
hgs
parents:
diff changeset
   103
			return EFalse;
hgs
parents:
diff changeset
   104
			}
hgs
parents:
diff changeset
   105
		
hgs
parents:
diff changeset
   106
		if (expectedAdvancedEvent.Pressure() != actualAdvancedEvent.Pressure())
hgs
parents:
diff changeset
   107
			{
hgs
parents:
diff changeset
   108
			_LIT(KPointerPressure, "Actual Pressure = %d Expected Pressure = %d ");
hgs
parents:
diff changeset
   109
			iErrorDes.Format(KPointerPressure, actualAdvancedEvent.Pressure(), expectedAdvancedEvent.Pressure());
hgs
parents:
diff changeset
   110
			return EFalse;
hgs
parents:
diff changeset
   111
			}
hgs
parents:
diff changeset
   112
		
hgs
parents:
diff changeset
   113
		if (expectedAdvancedEvent.Proximity() != actualAdvancedEvent.Proximity())
hgs
parents:
diff changeset
   114
			{
hgs
parents:
diff changeset
   115
			_LIT(KPointerProximity, "Actual Proximity = %d Expected Proximity = %d ");
hgs
parents:
diff changeset
   116
			iErrorDes.Format(KPointerProximity, actualAdvancedEvent.Proximity(), expectedAdvancedEvent.Proximity());
hgs
parents:
diff changeset
   117
			return EFalse;
hgs
parents:
diff changeset
   118
			}
hgs
parents:
diff changeset
   119
		}
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
	return ETrue;
hgs
parents:
diff changeset
   122
	}
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
//
hgs
parents:
diff changeset
   125
void CMultiPtrClickMaker::PointerEvent(const TPointerEvent& aEvent)
hgs
parents:
diff changeset
   126
	{
hgs
parents:
diff changeset
   127
	// If it has already failed then do not test other events
hgs
parents:
diff changeset
   128
	// becasue the error value and its descriptor will be over written
hgs
parents:
diff changeset
   129
	if (iError)
hgs
parents:
diff changeset
   130
		{
hgs
parents:
diff changeset
   131
		return;
hgs
parents:
diff changeset
   132
		}
hgs
parents:
diff changeset
   133
		
hgs
parents:
diff changeset
   134
	// Get pointer event from buffer
hgs
parents:
diff changeset
   135
	TWsEvent expectedEvent;
hgs
parents:
diff changeset
   136
	iPtrEventBuffer.Remove(&expectedEvent);
hgs
parents:
diff changeset
   137
	
hgs
parents:
diff changeset
   138
	// Increment event count
hgs
parents:
diff changeset
   139
	iPtrEventCount++;
hgs
parents:
diff changeset
   140
	
hgs
parents:
diff changeset
   141
	// increment this counter in OtherEvent() becasue first pointer event iscalled and then OtherEvent() is called
hgs
parents:
diff changeset
   142
	if (!ComparePointerEvents(expectedEvent.Pointer(), &aEvent))
hgs
parents:
diff changeset
   143
		{
hgs
parents:
diff changeset
   144
		iError = iPtrEventCount;
hgs
parents:
diff changeset
   145
		}
hgs
parents:
diff changeset
   146
	}
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
TBool CMultiPtrClickMaker::CompareOtherEvents(const TPointerEventData* aExpectedEvent, const TPointerEventData* aActualEvent)
hgs
parents:
diff changeset
   149
	{
hgs
parents:
diff changeset
   150
	if (aExpectedEvent->iCurrentPos != aActualEvent->iCurrentPos)
hgs
parents:
diff changeset
   151
		{
hgs
parents:
diff changeset
   152
		_LIT(KCurrentPosition, "Actual CurrentPosition  w.r.t screen = (%d,%d) Expected CurrentPosition  w.r.t screen = (%d,%d)");
hgs
parents:
diff changeset
   153
		iErrorDes.Copy(KCurrentPosition);
hgs
parents:
diff changeset
   154
		iErrorDes.Format(KCurrentPosition, aActualEvent->iCurrentPos.iX, aActualEvent->iCurrentPos.iX, aExpectedEvent->iCurrentPos.iX, aExpectedEvent->iCurrentPos.iY);
hgs
parents:
diff changeset
   155
		return EFalse;
hgs
parents:
diff changeset
   156
		}
hgs
parents:
diff changeset
   157
	
hgs
parents:
diff changeset
   158
	if (aExpectedEvent->iClientHandle != aActualEvent->iClientHandle)
hgs
parents:
diff changeset
   159
		{
hgs
parents:
diff changeset
   160
		_LIT(KWindowHandle, "Actual Window Handle = %d Expected Window Handle = %d ");
hgs
parents:
diff changeset
   161
		iErrorDes.Copy(KWindowHandle);
hgs
parents:
diff changeset
   162
		iErrorDes.Format(KWindowHandle, aActualEvent->iClientHandle, aExpectedEvent->iClientHandle);
hgs
parents:
diff changeset
   163
		return EFalse;
hgs
parents:
diff changeset
   164
		}
hgs
parents:
diff changeset
   165
	
hgs
parents:
diff changeset
   166
	return ComparePointerEvents(&aExpectedEvent->iPointerEvent, &aActualEvent->iPointerEvent);
hgs
parents:
diff changeset
   167
	}
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
void CMultiPtrClickMaker::OtherEvent(TInt aType, TAny* aParam)
hgs
parents:
diff changeset
   170
	{
hgs
parents:
diff changeset
   171
	if (aType != EEventPointer)
hgs
parents:
diff changeset
   172
		{
hgs
parents:
diff changeset
   173
		return;
hgs
parents:
diff changeset
   174
		}
hgs
parents:
diff changeset
   175
			
hgs
parents:
diff changeset
   176
	if (iError)
hgs
parents:
diff changeset
   177
		{
hgs
parents:
diff changeset
   178
		return;
hgs
parents:
diff changeset
   179
		}
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
	TPointerEventData expectedEvent;
hgs
parents:
diff changeset
   182
	iOtherEventBuffer.Remove(&expectedEvent);
hgs
parents:
diff changeset
   183
	
hgs
parents:
diff changeset
   184
	iOtherEventCount++;
hgs
parents:
diff changeset
   185
	
hgs
parents:
diff changeset
   186
	TPointerEventData* data=static_cast<TPointerEventData*>(aParam);
hgs
parents:
diff changeset
   187
	
hgs
parents:
diff changeset
   188
	if (!CompareOtherEvents(&expectedEvent, data))
hgs
parents:
diff changeset
   189
		{
hgs
parents:
diff changeset
   190
		iError = iPtrEventCount;
hgs
parents:
diff changeset
   191
		}
hgs
parents:
diff changeset
   192
	}
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
TInt CMultiPtrClickMaker::AddEvent(const TWsEvent* aEvent)
hgs
parents:
diff changeset
   195
	{
hgs
parents:
diff changeset
   196
	return iPtrEventBuffer.Add(aEvent);
hgs
parents:
diff changeset
   197
	}
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
TInt CMultiPtrClickMaker::AddEvent(const TPointerEventData* aEvent)
hgs
parents:
diff changeset
   200
	{
hgs
parents:
diff changeset
   201
	return iOtherEventBuffer.Add(aEvent);
hgs
parents:
diff changeset
   202
	}
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
TInt CMultiPtrClickMaker::CommandReplyL(TInt aOpcode, TAny *aArgs)
hgs
parents:
diff changeset
   205
	{
hgs
parents:
diff changeset
   206
	TMultiPtrClickArgUnion pData;
hgs
parents:
diff changeset
   207
	pData.any=aArgs;
hgs
parents:
diff changeset
   208
	switch (aOpcode)
hgs
parents:
diff changeset
   209
		{
hgs
parents:
diff changeset
   210
	case EMultiPtrClickEventAdd:
hgs
parents:
diff changeset
   211
		return AddEvent(pData.WsEvent);
hgs
parents:
diff changeset
   212
	case EMultiPtrOtherEventAdd:
hgs
parents:
diff changeset
   213
		return AddEvent(pData.OtherEvent);
hgs
parents:
diff changeset
   214
	case EMultiPtrClickEventError:
hgs
parents:
diff changeset
   215
		return iError;
hgs
parents:
diff changeset
   216
	case EMultiPtrClickEventErrorDesc:
hgs
parents:
diff changeset
   217
		if (iError != KErrNone)
hgs
parents:
diff changeset
   218
			{
hgs
parents:
diff changeset
   219
			RChunk chunk;
hgs
parents:
diff changeset
   220
			chunk.OpenGlobal(KMultiPtrClickChunk, ETrue);
hgs
parents:
diff changeset
   221
			TUint8* desPtr = chunk.Base() + *(static_cast<TInt*>(aArgs));
hgs
parents:
diff changeset
   222
			TPtr8 ptrDes(desPtr, iErrorDes.Length(), iErrorDes.Length());
hgs
parents:
diff changeset
   223
			ptrDes.Copy(iErrorDes);
hgs
parents:
diff changeset
   224
			chunk.Close();
hgs
parents:
diff changeset
   225
			return iErrorDes.Length();
hgs
parents:
diff changeset
   226
			// returns the error description which gets displayed in logs if test failed
hgs
parents:
diff changeset
   227
			}
hgs
parents:
diff changeset
   228
		break;
hgs
parents:
diff changeset
   229
	case EMultiPtrClickEventReset:
hgs
parents:
diff changeset
   230
		iPtrEventBuffer.Reset();
hgs
parents:
diff changeset
   231
		iError = 0;
hgs
parents:
diff changeset
   232
		iPtrEventCount = 0;
hgs
parents:
diff changeset
   233
		break;
hgs
parents:
diff changeset
   234
	default:;
hgs
parents:
diff changeset
   235
		}
hgs
parents:
diff changeset
   236
	return(KErrNone);
hgs
parents:
diff changeset
   237
	}
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
EXPORT_C CClickMaker* CreateMultiPtrClickMakerL()
hgs
parents:
diff changeset
   240
	{
hgs
parents:
diff changeset
   241
	CMultiPtrClickMaker* plugIn=new(ELeave) CMultiPtrClickMaker;
hgs
parents:
diff changeset
   242
	CleanupStack::PushL(plugIn);
hgs
parents:
diff changeset
   243
	plugIn->ConstructL();
hgs
parents:
diff changeset
   244
	CleanupStack::Pop(plugIn);
hgs
parents:
diff changeset
   245
	return plugIn;
hgs
parents:
diff changeset
   246
	}