/*
* Copyright (C) 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.errai.ui.cordova.events.touch.swipe;
import static org.jboss.errai.ui.cordova.events.touch.swipe.SwipeEvent.Direction;
import static org.junit.Assert.*;
import org.jboss.errai.ui.cordova.events.touch.mock.MockHasHandlers;
import org.jboss.errai.ui.cordova.events.touch.mock.MockTouchEndEvent;
import org.jboss.errai.ui.cordova.events.touch.mock.MockTouchMoveEvent;
import org.jboss.errai.ui.cordova.events.touch.mock.MockTouchStartEvent;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwtmockito.GwtMockitoTestRunner;
/**
* @author edewit@redhat.com
*/
@RunWith(GwtMockitoTestRunner.class)
public class SwipeRecogniserTest {
private MockHasHandlers hasHandlers = new MockHasHandlers();
private SwipeRecognizer swipeRecognizer = new SwipeRecognizer(hasHandlers);
@Test(expected = IllegalArgumentException.class)
public void testSwipeRecognizerHasHandlers() {
new SwipeRecognizer(null);
}
@Test(expected = IllegalArgumentException.class)
public void testSwipeRecognizerHasHandlersInt() {
new SwipeRecognizer(hasHandlers, -1);
}
@Test(expected = IllegalArgumentException.class)
public void testSwipeRecognizerHasHandlersInt1() {
new SwipeRecognizer(hasHandlers, 2);
}
@Test(expected = IllegalArgumentException.class)
public void testSwipeRecognizerHasHandlersIntInt() {
new SwipeRecognizer(hasHandlers, 20, -1);
}
@Test
public void testSimpleHorizontalSwipe() {
swipeRecognizer.onTouchStart(new MockTouchStartEvent(1, 0, 0));
boolean first = true;
int i;
for (i = 1; i < 60; i++) {
swipeRecognizer.onTouchMove(new MockTouchMoveEvent(1, i, 0));
if (i >= swipeRecognizer.getThreshold()) {
GwtEvent<?> event = hasHandlers.getEvent();
if (first) {
first = false;
if (!(event instanceof SwipeStartEvent)) {
fail("swipe start event was not fired");
}
SwipeStartEvent swipeStartEvent = (SwipeStartEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeStartEvent.getDirection());
assertEquals(swipeRecognizer.getThreshold(),
swipeStartEvent.getDistance());
}
else {
if (!(event instanceof SwipeMoveEvent)) {
fail("swipe move event was not fired");
}
SwipeMoveEvent swipeMoveEvent = (SwipeMoveEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeMoveEvent.getDirection());
assertEquals(i, swipeMoveEvent.getDistance());
if (swipeMoveEvent.getDistance() > swipeRecognizer.getMinDistance()) {
assertTrue(swipeMoveEvent.isDistanceReached());
}
else {
Assert.assertFalse(swipeMoveEvent.isDistanceReached());
}
}
}
}
swipeRecognizer.onTouchEnd(new MockTouchEndEvent());
GwtEvent<?> event = hasHandlers.getEvent();
if (!(event instanceof SwipeEndEvent)) {
fail("swipe end event was not fired");
}
SwipeEndEvent swipeEndEvent = (SwipeEndEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeEndEvent.getDirection());
assertEquals(i - 1, swipeEndEvent.getDistance());
assertTrue(swipeEndEvent.isDistanceReached());
}
@Test
public void testSimpleHorizontalSwipe2Times() {
swipeRecognizer.onTouchStart(new MockTouchStartEvent(1, 0, 0));
boolean first = true;
int i = 1;
for (i = 1; i < 60; i++) {
swipeRecognizer.onTouchMove(new MockTouchMoveEvent(1, i, 0));
if (i >= swipeRecognizer.getThreshold()) {
GwtEvent<?> event = hasHandlers.getEvent();
if (first) {
first = false;
if (!(event instanceof SwipeStartEvent)) {
fail("swipe start event was not fired");
}
SwipeStartEvent swipeStartEvent = (SwipeStartEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeStartEvent.getDirection());
assertEquals(swipeRecognizer.getThreshold(),
swipeStartEvent.getDistance());
}
else {
if (!(event instanceof SwipeMoveEvent)) {
fail("swipe move event was not fired");
}
SwipeMoveEvent swipeMoveEvent = (SwipeMoveEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeMoveEvent.getDirection());
assertEquals(i, swipeMoveEvent.getDistance());
if (swipeMoveEvent.getDistance() > swipeRecognizer.getMinDistance()) {
assertTrue(swipeMoveEvent.isDistanceReached());
}
else {
Assert.assertFalse(swipeMoveEvent.isDistanceReached());
}
}
}
}
swipeRecognizer.onTouchEnd(new MockTouchEndEvent());
GwtEvent<?> event = hasHandlers.getEvent();
if (!(event instanceof SwipeEndEvent)) {
fail("swipe end event was not fired");
}
SwipeEndEvent swipeEndEvent = (SwipeEndEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeEndEvent.getDirection());
assertEquals(i - 1, swipeEndEvent.getDistance());
assertTrue(swipeEndEvent.isDistanceReached());
swipeRecognizer.onTouchStart(new MockTouchStartEvent(1, 0, 0));
first = true;
for (i = 1; i < 60; i++) {
swipeRecognizer.onTouchMove(new MockTouchMoveEvent(1, i, 0));
if (i >= swipeRecognizer.getThreshold()) {
event = hasHandlers.getEvent();
if (first) {
first = false;
if (!(event instanceof SwipeStartEvent)) {
fail("swipe start event was not fired");
}
SwipeStartEvent swipeStartEvent = (SwipeStartEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeStartEvent.getDirection());
assertEquals(swipeRecognizer.getThreshold(),
swipeStartEvent.getDistance());
}
else {
if (!(event instanceof SwipeMoveEvent)) {
fail("swipe move event was not fired");
}
SwipeMoveEvent swipeMoveEvent = (SwipeMoveEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeMoveEvent.getDirection());
assertEquals(i, swipeMoveEvent.getDistance());
if (swipeMoveEvent.getDistance() > swipeRecognizer.getMinDistance()) {
assertTrue(swipeMoveEvent.isDistanceReached());
}
else {
Assert.assertFalse(swipeMoveEvent.isDistanceReached());
}
}
}
}
swipeRecognizer.onTouchEnd(new MockTouchEndEvent());
event = hasHandlers.getEvent();
if (!(event instanceof SwipeEndEvent)) {
fail("swipe end event was not fired");
}
swipeEndEvent = (SwipeEndEvent) event;
assertEquals(Direction.LEFT_TO_RIGHT, swipeEndEvent.getDirection());
assertEquals(i - 1, swipeEndEvent.getDistance());
assertTrue(swipeEndEvent.isDistanceReached());
}
@Test
public void testSimpleVerticalSwipe() {
swipeRecognizer.onTouchStart(new MockTouchStartEvent(1, 0, 0));
boolean first = true;
int i = 1;
for (i = 1; i < 60; i++) {
swipeRecognizer.onTouchMove(new MockTouchMoveEvent(1, 0, i));
if (i >= swipeRecognizer.getThreshold()) {
GwtEvent<?> event = hasHandlers.getEvent();
if (first) {
first = false;
if (!(event instanceof SwipeStartEvent)) {
fail("swipe start event was not fired");
}
SwipeStartEvent swipeStartEvent = (SwipeStartEvent) event;
assertEquals(Direction.TOP_TO_BOTTOM, swipeStartEvent.getDirection());
assertEquals(swipeRecognizer.getThreshold(),
swipeStartEvent.getDistance());
}
else {
if (!(event instanceof SwipeMoveEvent)) {
fail("swipe move event was not fired");
}
SwipeMoveEvent swipeMoveEvent = (SwipeMoveEvent) event;
assertEquals(Direction.TOP_TO_BOTTOM, swipeMoveEvent.getDirection());
assertEquals(i, swipeMoveEvent.getDistance());
if (swipeMoveEvent.getDistance() > swipeRecognizer.getMinDistance()) {
assertTrue(swipeMoveEvent.isDistanceReached());
}
else {
Assert.assertFalse(swipeMoveEvent.isDistanceReached());
}
}
}
}
swipeRecognizer.onTouchEnd(new MockTouchEndEvent());
GwtEvent<?> event = hasHandlers.getEvent();
if (!(event instanceof SwipeEndEvent)) {
fail("swipe end event was not fired");
}
SwipeEndEvent swipeEndEvent = (SwipeEndEvent) event;
assertEquals(Direction.TOP_TO_BOTTOM, swipeEndEvent.getDirection());
assertEquals(i - 1, swipeEndEvent.getDistance());
assertTrue(swipeEndEvent.isDistanceReached());
}
@Test
public void testSimpleVerticalSwipeAfterRandomInput() {
swipeRecognizer.onTouchStart(new MockTouchStartEvent(2, 0, 0));
swipeRecognizer.onTouchMove(new MockTouchMoveEvent(2, 4, 4));
swipeRecognizer.onTouchEnd(new MockTouchEndEvent());
swipeRecognizer.onTouchStart(new MockTouchStartEvent(1, 0, 0));
boolean first = true;
int i = 1;
for (i = 1; i < 60; i++) {
swipeRecognizer.onTouchMove(new MockTouchMoveEvent(1, 0, i));
if (i >= swipeRecognizer.getThreshold()) {
GwtEvent<?> event = hasHandlers.getEvent();
if (first) {
first = false;
if (!(event instanceof SwipeStartEvent)) {
fail("swipe start event was not fired");
}
SwipeStartEvent swipeStartEvent = (SwipeStartEvent) event;
assertEquals(Direction.TOP_TO_BOTTOM, swipeStartEvent.getDirection());
assertEquals(swipeRecognizer.getThreshold(),
swipeStartEvent.getDistance());
}
else {
if (!(event instanceof SwipeMoveEvent)) {
fail("swipe move event was not fired");
}
SwipeMoveEvent swipeMoveEvent = (SwipeMoveEvent) event;
assertEquals(Direction.TOP_TO_BOTTOM, swipeMoveEvent.getDirection());
assertEquals(i, swipeMoveEvent.getDistance());
if (swipeMoveEvent.getDistance() > swipeRecognizer.getMinDistance()) {
assertTrue(swipeMoveEvent.isDistanceReached());
}
else {
Assert.assertFalse(swipeMoveEvent.isDistanceReached());
}
}
}
}
swipeRecognizer.onTouchEnd(new MockTouchEndEvent());
GwtEvent<?> event = hasHandlers.getEvent();
if (!(event instanceof SwipeEndEvent)) {
fail("swipe end event was not fired");
}
SwipeEndEvent swipeEndEvent = (SwipeEndEvent) event;
assertEquals(Direction.TOP_TO_BOTTOM, swipeEndEvent.getDirection());
assertEquals(i - 1, swipeEndEvent.getDistance());
assertTrue(swipeEndEvent.isDistanceReached());
}
}