package com.tinkerpop.frames.modules.javahandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import com.google.common.collect.Lists;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.frames.FramedGraph;
public class JavaHandlerContextImplTest {
private FramedGraph<?> graph;
private Vertex vertex;
private Edge edge;
@Before
public void setup() {
graph = Mockito.mock(FramedGraph.class);
vertex = Mockito.mock(Vertex.class);
edge = Mockito.mock(Edge.class);
}
@Test
public void testGetGraph() throws NoSuchMethodException {
Assert.assertEquals(graph, getHandler(graph, null, null).g());
}
@Test
public void testGetContext() throws NoSuchMethodException {
Assert.assertEquals(vertex, getHandler(graph, vertex, null).it());
}
@Test
public void testFrameVertexDefault() throws NoSuchMethodException {
getHandler(graph, vertex, getMethod("getA")).frame(vertex);
Mockito.verify(graph).frame(vertex, A.class);
}
@Test
public void testFrameVertexExplicit() throws NoSuchMethodException {
getHandler(graph, vertex, getMethod("getA")).frame(vertex, B.class);
Mockito.verify(graph).frame(vertex, B.class);
}
@Test
public void testFrameEdgeDefault() throws NoSuchMethodException {
getHandler(graph, edge, getMethod("getA")).frame(edge, Direction.OUT);
Mockito.verify(graph).frame(edge, Direction.OUT, A.class);
}
@Test
public void testFrameEdgeDefaultExplicit() throws NoSuchMethodException {
getHandler(graph, edge, getMethod("getA")).frame(edge, Direction.OUT, B.class);
Mockito.verify(graph).frame(edge, Direction.OUT, B.class);
}
@Test
public void testFrameEdgeDefaultNoDirection() throws NoSuchMethodException {
getHandler(graph, edge, getMethod("getA")).frame(edge);
Mockito.verify(graph).frame(edge, A.class);
}
@Test
public void testFrameEdgeDefaultExplicitNoDirection() throws NoSuchMethodException {
getHandler(graph, edge, getMethod("getA")).frame(edge, B.class);
Mockito.verify(graph).frame(edge, B.class);
}
@Test(expected=JavaHandlerException.class)
public void testFrameNotIterable() throws NoSuchMethodException {
getHandler(graph, vertex, getMethod("getA")).frameVertices(Lists.newArrayList(vertex));
Mockito.verify(graph).frame(vertex, A.class);
}
@Test(expected=JavaHandlerException.class)
public void testFrameIterableNotGeneric() throws NoSuchMethodException {
getHandler(graph, vertex, getMethod("getUnknownIterable")).frameVertices(Lists.newArrayList(vertex));
Mockito.verify(graph).frame(vertex, A.class);
}
@Test
public void testFrameIterableVertex() throws NoSuchMethodException {
ArrayList<Vertex> iterable = Lists.newArrayList(vertex);
getHandler(graph, vertex, getMethod("getIterable")).frameVertices(iterable);
Mockito.verify(graph).frameVertices(iterable, A.class);
}
@Test
public void testFrameIterableVertexComplex() throws NoSuchMethodException {
ArrayList<Vertex> iterable = Lists.newArrayList(vertex);
getHandler(graph, vertex, getMethod("getComplexIterable")).frameVertices(iterable);
Mockito.verify(graph).frameVertices(iterable, A.class);
}
@Test
public void testFrameIterableVertexExplicit() throws NoSuchMethodException {
ArrayList<Vertex> iterable = Lists.newArrayList(vertex);
getHandler(graph, vertex, getMethod("getIterable")).frameVertices(iterable, B.class);
Mockito.verify(graph).frameVertices(iterable, B.class);
}
@Test
public void testFrameIterableEdge() throws NoSuchMethodException {
ArrayList<Edge> iterable = Lists.newArrayList(edge);
getHandler(graph, vertex, getMethod("getIterable")).frameEdges(iterable, Direction.OUT);
Mockito.verify(graph).frameEdges(iterable, Direction.OUT, A.class);
}
@Test
public void testFrameIterableEdgeExplicit() throws NoSuchMethodException {
ArrayList<Edge> iterable = Lists.newArrayList(edge);
getHandler(graph, vertex, getMethod("getIterable")).frameEdges(iterable, Direction.OUT, B.class);
Mockito.verify(graph).frameEdges(iterable, Direction.OUT, B.class);
}
@Test
public void testFrameIterableEdgeNoDirection() throws NoSuchMethodException {
ArrayList<Edge> iterable = Lists.newArrayList(edge);
getHandler(graph, vertex, getMethod("getIterable")).frameEdges(iterable);
Mockito.verify(graph).frameEdges(iterable, A.class);
}
@Test
public void testFrameIterableEdgeExplicitNoDirection() throws NoSuchMethodException {
ArrayList<Edge> iterable = Lists.newArrayList(edge);
getHandler(graph, vertex, getMethod("getIterable")).frameEdges(iterable, B.class);
Mockito.verify(graph).frameEdges(iterable, B.class);
}
@Test
public void testGremlinContext() throws NoSuchMethodException {
JavaHandlerContextImpl<Edge> handler = getHandler(graph, edge, getMethod("getA"));
Assert.assertEquals(edge, handler.gremlin().next());
}
@Test
public void testGremlinExplicit() throws NoSuchMethodException {
JavaHandlerContextImpl<Edge> handler = getHandler(graph, edge, getMethod("getA"));
Assert.assertEquals(vertex, handler.gremlin(vertex).next());
}
private Method getMethod(String name) throws NoSuchMethodException {
return JavaHandlerContextImplTest.class.getMethod(name);
}
private <T extends Element> JavaHandlerContextImpl<T> getHandler(FramedGraph<?> graph, T element, Method method) {
JavaHandlerContextImpl<T> impl = new JavaHandlerContextImpl<T>(graph, method, element);
return impl;
}
public A getA() {
return null;
}
public Iterable getUnknownIterable() {
return null;
}
public Iterable<A> getIterable() {
return null;
}
public static interface A {
}
public static interface B {
}
public <T extends A> Iterable<T> getComplexIterable() {
return null;
}
}