package org.pollux3d.gesture;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.Before;
import org.pollux3d.tuio.TuioInputListener;
import com.jme3.math.Vector2f;
public class GestureSystemTest{
private GestureSystem gestureSystem;
private TuioInputListener ti;
final List<Float> zoomValues = new ArrayList<Float>();
final List<Vector2f> clickVectors = new ArrayList<Vector2f>();
@Before
public void setup() {
gestureSystem = GestureSystem.get();
ti = gestureSystem;
gestureSystem.addListener(new GestureListener() {
public void click(Vector2f point) {
clickVectors.add(point);
}
public void longClick(Vector2f point) {}
public void move(Vector2f move) {}
public void rotate(float angle) {}
public void up(Vector2f point) {}
public void zoom(float zoom) {
zoomValues.add(zoom);
}
});
zoomValues.clear();
clickVectors.clear();
}
private void printList(List<?> list) {
for (int i = 0; i<list.size(); i++)
System.out.println(list.get(i));
}
@Test
public void testSimpleClick() {
gestureSystem.update(1);
ti.onNew(0, 0, 0);
gestureSystem.update(1);
ti.onRelease(0);
gestureSystem.update(1);
//printList(clickVectors);
Assert.assertTrue(clickVectors.get(0).equals(new Vector2f(0,0)));
Assert.assertTrue(zoomValues.isEmpty());
}
@Test
public void testClickInterrupt() {
gestureSystem.update(1);
ti.onNew(0, 10, 15);
gestureSystem.update(1);
ti.onNew(1, 20, 30);
//FIXME: if the onNew and onRelease event is triggered in one update cycle an click event is fired
// comment the next line for testing
gestureSystem.update(1);
ti.onRelease(0);
gestureSystem.update(1);
ti.onRelease(1);
gestureSystem.update(1);
//printList(clickVectors);
Assert.assertTrue(clickVectors.isEmpty());
Assert.assertTrue(zoomValues.isEmpty());
}
@Test
public void testClickDoubleUp() {
gestureSystem.update(1);
ti.onNew(0, 10, 15);
gestureSystem.update(1);
ti.onNew(1, 20, 30);
gestureSystem.update(1);
ti.onMove(0, 10, -1, 20, 14);
ti.onMove(1, 10, 3, 30, 33);
gestureSystem.update(1);
ti.onRelease(1);
ti.onRelease(0);
gestureSystem.update(1);
//printList(clickVectors);
Assert.assertTrue(clickVectors.isEmpty());
}
@Test
public void testClickFastDoubleUp() {
gestureSystem.update(1);
ti.onNew(0, 10, 15);
gestureSystem.update(1);
ti.onNew(1, 20, 30);
gestureSystem.update(1);
ti.onMove(0, 10, -1, 20, 14);
ti.onMove(1, 10, 3, 30, 33);
ti.onRelease(1);
ti.onRelease(0);
gestureSystem.update(1);
printList(clickVectors);
Assert.assertTrue(clickVectors.isEmpty());
}
@Test
public void TestZoom() {
ti.onNew(0, 300, 300);
gestureSystem.update(1);
ti.onMove(0, -10, -1, 290, 299);
ti.onNew(1, 350, 300);
gestureSystem.update(1);
ti.onMove(0, -10, -1, 280, 298);
ti.onMove(1, 10, -1, 310, 298);
gestureSystem.update(1);
ti.onMove(0, 3, -1, 283, 297);
ti.onMove(1, -4, -1, 306, 297);
gestureSystem.update(1);
ti.onMove(1, -6, -7, 300, 290);
ti.onRelease(1);
gestureSystem.update(1);
ti.onRelease(0);
gestureSystem.update(1);
//printList(zoomValues);
Assert.assertTrue(
zoomValues.get(0).equals(-20f) &&
zoomValues.get(1).equals(7f)
);
Assert.assertTrue(clickVectors.isEmpty());
}
}