package com.googlecode.mgwt.helper; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Touch; import com.google.gwt.event.dom.client.TouchEndEvent; import com.google.gwt.event.dom.client.TouchEvent; import com.google.gwt.event.dom.client.TouchMoveEvent; import com.google.gwt.event.dom.client.TouchStartEvent; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.Assert; public class TouchTestUtil { public static TouchStartEvent createTouchStartEvent(int x, int y) { TouchStartEvent touchStartEvent = mock(TouchStartEvent.class); setupTouchEvenMock(touchStartEvent, new int[] {x, y}); return touchStartEvent; } public static TouchStartEvent createTouchStartEvent(int[] positions) { TouchStartEvent touchStartEvent = mock(TouchStartEvent.class); setupTouchEvenMock(touchStartEvent, positions); return touchStartEvent; } public static TouchMoveEvent createTouchMoveEvent(int x, int y) { TouchMoveEvent touchStartEvent = mock(TouchMoveEvent.class); setupTouchEvenMock(touchStartEvent, new int[] {x, y}); return touchStartEvent; } public static TouchMoveEvent createTouchMoveEvent(int[] positions) { TouchMoveEvent touchStartEvent = mock(TouchMoveEvent.class); setupTouchEvenMock(touchStartEvent, positions); return touchStartEvent; } private static void setupTouchEvenMock(TouchEvent<?> event, int[] positions) { Assert.assertTrue(positions.length % 2 == 0); @SuppressWarnings("unchecked") JsArray<Touch> touchArray = mock(JsArray.class); when(event.getTouches()).thenReturn(touchArray); int count = 0; for(; count < positions.length; count +=2) { Touch touch = mock(Touch.class); when(touchArray.get(count / 2)).thenReturn(touch); when(touch.getPageX()).thenReturn(positions[count]); when(touch.getPageY()).thenReturn(positions[count + 1]); } when(touchArray.length()).thenReturn(count / 2); } public static TouchEndEvent createTouchEndEvent() { return createTouchEndEvent(new int[]{}); } public static TouchEndEvent createTouchEndEvent(int[] positions) { TouchEndEvent touchEndEvent = mock(TouchEndEvent.class); setupTouchEvenMock(touchEndEvent, positions); return touchEndEvent; } }