11package io .flutter .embedding .android ;
22
3- import static android .view .MotionEvent .PointerCoords ;
4- import static android .view .MotionEvent .PointerProperties ;
53import static junit .framework .TestCase .assertEquals ;
64import static org .mockito .Mockito .inOrder ;
5+ import static org .mockito .Mockito .mock ;
6+ import static org .mockito .Mockito .when ;
77
88import android .annotation .TargetApi ;
99import android .view .InputDevice ;
1010import android .view .MotionEvent ;
11- import androidx .test .core .view .MotionEventBuilder ;
1211import androidx .test .ext .junit .runners .AndroidJUnit4 ;
1312import io .flutter .embedding .engine .renderer .FlutterRenderer ;
1413import java .nio .ByteBuffer ;
@@ -65,19 +64,38 @@ private double readPointerPanY(ByteBuffer buffer) {
6564 return buffer .getDouble (30 * AndroidTouchProcessor .BYTES_PER_FIELD );
6665 }
6766
67+ private class MotionEventMocker {
68+ int pointerId ;
69+ int source ;
70+ int toolType ;
71+
72+ MotionEventMocker (int pointerId , int source , int toolType ) {
73+ this .pointerId = pointerId ;
74+ this .source = source ;
75+ this .toolType = toolType ;
76+ }
77+
78+ MotionEvent mockEvent (int action , float x , float y , int buttonState ) {
79+ MotionEvent event = mock (MotionEvent .class );
80+ when (event .getDevice ()).thenReturn (null );
81+ when (event .getSource ()).thenReturn (source );
82+ when (event .getPointerCount ()).thenReturn (1 );
83+ when (event .getActionMasked ()).thenReturn (action );
84+ when (event .getActionIndex ()).thenReturn (0 );
85+ when (event .getButtonState ()).thenReturn (buttonState );
86+ when (event .getPointerId (0 )).thenReturn (pointerId );
87+ when (event .getX (0 )).thenReturn (x );
88+ when (event .getY (0 )).thenReturn (y );
89+ when (event .getToolType (0 )).thenReturn (toolType );
90+ return event ;
91+ }
92+ }
93+
6894 @ Test
6995 public void normalTouch () {
70- PointerProperties properties = new PointerProperties ();
71- properties .id = 0 ;
72- properties .toolType = MotionEvent .TOOL_TYPE_FINGER ;
73- PointerCoords coordinates = new PointerCoords ();
74- touchProcessor .onTouchEvent (
75- MotionEventBuilder .newBuilder ()
76- .setAction (MotionEvent .ACTION_DOWN )
77- .setActionIndex (0 )
78- .setDeviceId (1 )
79- .setPointer (properties , coordinates )
80- .build ());
96+ MotionEventMocker mocker =
97+ new MotionEventMocker (0 , InputDevice .SOURCE_TOUCHSCREEN , MotionEvent .TOOL_TYPE_FINGER );
98+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_DOWN , 0.0f , 0.0f , 0 ));
8199 InOrder inOrder = inOrder (mockRenderer );
82100 inOrder
83101 .verify (mockRenderer )
@@ -88,15 +106,7 @@ public void normalTouch() {
88106 assertEquals (AndroidTouchProcessor .PointerSignalKind .NONE , readPointerSignalKind (packet ));
89107 assertEquals (0.0 , readPointerPhysicalX (packet ));
90108 assertEquals (0.0 , readPointerPhysicalY (packet ));
91- coordinates .x = 10 ;
92- coordinates .y = 5 ;
93- touchProcessor .onTouchEvent (
94- MotionEventBuilder .newBuilder ()
95- .setAction (MotionEvent .ACTION_MOVE )
96- .setActionIndex (0 )
97- .setDeviceId (1 )
98- .setPointer (properties , coordinates )
99- .build ());
109+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_MOVE , 10.0f , 5.0f , 0 ));
100110 inOrder
101111 .verify (mockRenderer )
102112 .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
@@ -106,13 +116,7 @@ public void normalTouch() {
106116 assertEquals (AndroidTouchProcessor .PointerSignalKind .NONE , readPointerSignalKind (packet ));
107117 assertEquals (10.0 , readPointerPhysicalX (packet ));
108118 assertEquals (5.0 , readPointerPhysicalY (packet ));
109- touchProcessor .onTouchEvent (
110- MotionEventBuilder .newBuilder ()
111- .setAction (MotionEvent .ACTION_UP )
112- .setActionIndex (0 )
113- .setDeviceId (1 )
114- .setPointer (properties , coordinates )
115- .build ());
119+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_UP , 10.0f , 5.0f , 0 ));
116120 inOrder
117121 .verify (mockRenderer )
118122 .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
@@ -127,18 +131,9 @@ public void normalTouch() {
127131
128132 @ Test
129133 public void trackpadGesture () {
130- PointerProperties properties = new PointerProperties ();
131- properties .id = 0 ;
132- properties .toolType = MotionEvent .TOOL_TYPE_MOUSE ;
133- PointerCoords coordinates = new PointerCoords ();
134- touchProcessor .onTouchEvent (
135- MotionEventBuilder .newBuilder ()
136- .setAction (MotionEvent .ACTION_DOWN )
137- .setActionIndex (0 )
138- .setDeviceId (1 )
139- .setPointer (properties , coordinates )
140- .setSource (InputDevice .SOURCE_MOUSE )
141- .build ());
134+ MotionEventMocker mocker =
135+ new MotionEventMocker (1 , InputDevice .SOURCE_MOUSE , MotionEvent .TOOL_TYPE_MOUSE );
136+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_DOWN , 0.0f , 0.0f , 0 ));
142137 InOrder inOrder = inOrder (mockRenderer );
143138 inOrder
144139 .verify (mockRenderer )
@@ -149,16 +144,7 @@ public void trackpadGesture() {
149144 assertEquals (AndroidTouchProcessor .PointerSignalKind .NONE , readPointerSignalKind (packet ));
150145 assertEquals (0.0 , readPointerPhysicalX (packet ));
151146 assertEquals (0.0 , readPointerPhysicalY (packet ));
152- coordinates .x = 10 ;
153- coordinates .y = 5 ;
154- touchProcessor .onTouchEvent (
155- MotionEventBuilder .newBuilder ()
156- .setAction (MotionEvent .ACTION_MOVE )
157- .setActionIndex (0 )
158- .setDeviceId (1 )
159- .setPointer (properties , coordinates )
160- .setSource (InputDevice .SOURCE_MOUSE )
161- .build ());
147+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_MOVE , 10.0f , 5.0f , 0 ));
162148 inOrder
163149 .verify (mockRenderer )
164150 .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
@@ -170,14 +156,7 @@ public void trackpadGesture() {
170156 assertEquals (0.0 , readPointerPhysicalY (packet ));
171157 assertEquals (10.0 , readPointerPanX (packet ));
172158 assertEquals (5.0 , readPointerPanY (packet ));
173- touchProcessor .onTouchEvent (
174- MotionEventBuilder .newBuilder ()
175- .setAction (MotionEvent .ACTION_UP )
176- .setActionIndex (0 )
177- .setDeviceId (1 )
178- .setPointer (properties , coordinates )
179- .setSource (InputDevice .SOURCE_MOUSE )
180- .build ());
159+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_UP , 10.0f , 5.0f , 0 ));
181160 inOrder
182161 .verify (mockRenderer )
183162 .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
@@ -192,17 +171,9 @@ public void trackpadGesture() {
192171
193172 @ Test
194173 public void mouse () {
195- PointerProperties properties = new PointerProperties ();
196- properties .id = 0 ;
197- properties .toolType = MotionEvent .TOOL_TYPE_MOUSE ;
198- PointerCoords coordinates = new PointerCoords ();
199- touchProcessor .onTouchEvent (
200- MotionEventBuilder .newBuilder ()
201- .setAction (MotionEvent .ACTION_DOWN )
202- .setActionIndex (0 )
203- .setDeviceId (1 )
204- .setPointer (properties , coordinates )
205- .build ());
174+ MotionEventMocker mocker =
175+ new MotionEventMocker (2 , InputDevice .SOURCE_MOUSE , MotionEvent .TOOL_TYPE_MOUSE );
176+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_DOWN , 0.0f , 0.0f , 1 ));
206177 InOrder inOrder = inOrder (mockRenderer );
207178 inOrder
208179 .verify (mockRenderer )
@@ -213,15 +184,7 @@ public void mouse() {
213184 assertEquals (AndroidTouchProcessor .PointerSignalKind .NONE , readPointerSignalKind (packet ));
214185 assertEquals (0.0 , readPointerPhysicalX (packet ));
215186 assertEquals (0.0 , readPointerPhysicalY (packet ));
216- coordinates .x = 10 ;
217- coordinates .y = 5 ;
218- touchProcessor .onTouchEvent (
219- MotionEventBuilder .newBuilder ()
220- .setAction (MotionEvent .ACTION_MOVE )
221- .setActionIndex (0 )
222- .setDeviceId (1 )
223- .setPointer (properties , coordinates )
224- .build ());
187+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_MOVE , 10.0f , 5.0f , 1 ));
225188 inOrder
226189 .verify (mockRenderer )
227190 .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
@@ -231,13 +194,7 @@ public void mouse() {
231194 assertEquals (AndroidTouchProcessor .PointerSignalKind .NONE , readPointerSignalKind (packet ));
232195 assertEquals (10.0 , readPointerPhysicalX (packet ));
233196 assertEquals (5.0 , readPointerPhysicalY (packet ));
234- touchProcessor .onTouchEvent (
235- MotionEventBuilder .newBuilder ()
236- .setAction (MotionEvent .ACTION_UP )
237- .setActionIndex (0 )
238- .setDeviceId (1 )
239- .setPointer (properties , coordinates )
240- .build ());
197+ touchProcessor .onTouchEvent (mocker .mockEvent (MotionEvent .ACTION_UP , 10.0f , 5.0f , 1 ));
241198 inOrder
242199 .verify (mockRenderer )
243200 .dispatchPointerDataPacket (packetCaptor .capture (), packetSizeCaptor .capture ());
0 commit comments