package com.tinkerpop.frames;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.junit.Test;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
import com.tinkerpop.blueprints.impls.tg.TinkerGraphFactory;
import com.tinkerpop.frames.domain.classes.Person;
import com.tinkerpop.frames.domain.classes.Project;
import com.tinkerpop.frames.domain.incidences.Created;
import com.tinkerpop.frames.domain.incidences.CreatedBy;
import com.tinkerpop.frames.domain.incidences.CreatedInfo;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class FramedElementTest {
@Test
public void testGettingProperties() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<Graph> framedGraph = new FramedGraphFactory().create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
assertEquals(marko.getName(), "marko");
assertEquals(marko.getAge(), new Integer(29));
Project lop = framedGraph.getVertex(3, Project.class);
assertEquals(lop.getName(), "lop");
assertEquals(lop.getLanguage(), "java");
CreatedInfo markoCreatedLopInfo = framedGraph.getEdge(9, CreatedInfo.class);
assertEquals(markoCreatedLopInfo.getWeight(), 0.4f, 0.1f);
//Same with using deprecated Domain/Range annotations:
Created markoCreatedLop = framedGraph.getEdge(9, Direction.OUT, Created.class);
assertEquals(markoCreatedLop.getWeight(), 0.4f, 0.1f);
CreatedBy lopCreatedByMarko = framedGraph.getEdge(9, Direction.IN, CreatedBy.class);
assertEquals(lopCreatedByMarko.getWeight(), 0.4f, 0.1f);
Person temp = framedGraph.frame(graph.addVertex(null), Person.class);
assertNull(temp.getName());
assertNull(temp.getAge());
}
@Test
public void testSettingProperties() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<Graph> framedGraph = new FramedGraphFactory().create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
assertEquals(marko.getName(), "marko");
marko.setName("pavel");
assertEquals(marko.getName(), "pavel");
assertEquals(marko.getAge(), new Integer(29));
marko.setAge(31);
assertEquals(marko.getAge(), new Integer(31));
CreatedInfo markoCreatedLopInfo = framedGraph.getEdge(9, CreatedInfo.class);
assertEquals(markoCreatedLopInfo.getWeight(), 0.4f, 0.1f);
markoCreatedLopInfo.setWeight(99.0f);
assertEquals(markoCreatedLopInfo.getWeight(), 99.0f, 0.1f);
markoCreatedLopInfo.setWeight(0.4f);
//Same with deprecated Domain/Range annotations:
Created markoCreatedLop = framedGraph.getEdge(9, Direction.OUT, Created.class);
assertEquals(markoCreatedLop.getWeight(), 0.4f, 0.1f);
markoCreatedLop.setWeight(99.0f);
assertEquals(markoCreatedLop.getWeight(), 99.0f, 0.1f);
}
@Test
public void testRemoveProperties() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<Graph> framedGraph = new FramedGraphFactory().create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
assertEquals(marko.getAge(), new Integer(29));
marko.removeAge();
assertNull(marko.getAge());
}
@Test
public void testSetPropertiesToNull() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<Graph> framedGraph = new FramedGraphFactory().create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
assertEquals(marko.getAge(), new Integer(29));
marko.setAge(null);
assertNull(marko.getAge());
}
@Test
public void testEnumProperty() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<Graph> framedGraph = new FramedGraphFactory().create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
assertEquals(marko.getGender(), null);
marko.setGender(Person.Gender.MALE);
assertEquals(Person.Gender.MALE, marko.getGender());
marko.setGender(null);
assertEquals(null, marko.getGender());
marko.setGender(Person.Gender.MALE);
marko.removeGender();
assertEquals(marko.getGender(), null);
}
@Test
public void testToString() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<Graph> framedGraph = new FramedGraphFactory().create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
assertEquals("v[1]", marko.toString());
CreatedInfo markoCreatedLopInfo = framedGraph.getEdge(9, CreatedInfo.class);
assertEquals("e[9][1-created->3]", markoCreatedLopInfo.toString());
//Using deprecated Domain/Range annotations:
Created markoCreatedLop = framedGraph.getEdge(9, Direction.OUT, Created.class);
assertEquals("e[9][1-created->3]", markoCreatedLop.toString());
}
@Test
public void testEquality() {
TinkerGraph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<TinkerGraph> framedGraph = new FramedGraphFactory().create(graph);
assertEquals(framedGraph.getVertex(1, Person.class), framedGraph.frame(graph.getVertex(1), Person.class));
}
@Test(expected=UnhandledMethodException.class)
public void testUnhandledMethodNoAnnotation() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<Graph> framedGraph = new FramedGraphFactory().create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
marko.unhandledNoAnnotation();
}
@Test(expected=UnhandledMethodException.class)
public void testUnhandledMethodWithAnnotation() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
FramedGraph<Graph> framedGraph = new FramedGraphFactory().create(graph);
Person marko = framedGraph.getVertex(1, Person.class);
marko.unhandledNoHandler();
}
}