Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1701 6e2ebb52f -> d16d0df5c
added test cases that verify that nested collection detachment works for Lists, Sets, and Maps (and any arbitrary nest of those collections within themselves). Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d16d0df5 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d16d0df5 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d16d0df5 Branch: refs/heads/TINKERPOP-1701 Commit: d16d0df5c64f6da04c6a11c9403273f30eb264d4 Parents: 6e2ebb5 Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Tue Jun 27 14:14:22 2017 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Tue Jun 27 14:14:22 2017 -0600 ---------------------------------------------------------------------- .../util/detached/DetachedVertexTest.java | 49 ++++++++++++++++++ .../util/reference/ReferenceVertexTest.java | 53 ++++++++++++++++++++ 2 files changed, 102 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d16d0df5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertexTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertexTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertexTest.java index 582b9a5..93cb46f 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertexTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertexTest.java @@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.AbstractGremlinTest; import org.apache.tinkerpop.gremlin.FeatureRequirement; import org.apache.tinkerpop.gremlin.FeatureRequirementSet; import org.apache.tinkerpop.gremlin.LoadGraphWith; +import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; @@ -39,6 +40,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; +import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.inE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; @@ -325,4 +327,51 @@ public class DetachedVertexTest extends AbstractGremlinTest { }); assertEquals(1, dogTimes.get()); } + + @Test + @LoadGraphWith(LoadGraphWith.GraphData.MODERN) + @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY) + public void shouldDetachCollections() { + // single element + final Vertex vertex = DetachedFactory.detach(g.V().has("name", "marko").next(), true); + assertTrue(vertex instanceof DetachedVertex); + // list nest + final List<Vertex> vertices = DetachedFactory.detach(g.V().hasLabel("software").fold().next(), true); + for (final Vertex v : vertices) { + assertTrue(v instanceof DetachedVertex); + assertEquals("java", v.value("lang")); + } + // double nested list + final List<List<Vertex>> lists = DetachedFactory.detach(g.V().hasLabel("software").fold().fold().next(), true); + for (final Vertex v : lists.get(0)) { + assertTrue(v instanceof DetachedVertex); + assertEquals("java", v.value("lang")); + } + // double nested list to set + final Set<List<Vertex>> set = DetachedFactory.detach(g.V().hasLabel("software").fold().toSet(), true); + for (final Vertex v : set.iterator().next()) { + assertTrue(v instanceof DetachedVertex); + assertEquals("java", v.value("lang")); + } + // map keys and values + Map<Vertex, List<Edge>> map = DetachedFactory.detach(g.V().hasLabel("software").group().by().by(inE().fold()).next(), true); + for (final Map.Entry<Vertex, List<Edge>> entry : map.entrySet()) { + assertTrue(entry.getKey() instanceof DetachedVertex); + assertEquals("java", entry.getKey().value("lang")); + for (final Edge edge : entry.getValue()) { + assertTrue(edge instanceof DetachedEdge); + assertTrue(edge.property("weight").isPresent()); + } + } + // map keys and values as sideEffect + map = DetachedFactory.detach(g.V().hasLabel("software").group("m").by().by(inE().fold()).identity().cap("m").next(), true); + for (final Map.Entry<Vertex, List<Edge>> entry : map.entrySet()) { + assertTrue(entry.getKey() instanceof DetachedVertex); + assertEquals("java", entry.getKey().value("lang")); + for (final Edge edge : entry.getValue()) { + assertTrue(edge instanceof DetachedEdge); + assertTrue(edge.property("weight").isPresent()); + } + } + } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d16d0df5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceVertexTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceVertexTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceVertexTest.java index 76564a703..4f7f1da 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceVertexTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceVertexTest.java @@ -23,17 +23,23 @@ import org.apache.tinkerpop.gremlin.FeatureRequirement; import org.apache.tinkerpop.gremlin.FeatureRequirementSet; import org.apache.tinkerpop.gremlin.LoadGraphWith; import org.apache.tinkerpop.gremlin.structure.Direction; +import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; import org.apache.tinkerpop.gremlin.structure.util.Attachable; +import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge; import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory; +import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex; import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils; import org.junit.Test; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; +import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.inE; import static org.junit.Assert.*; /** @@ -171,4 +177,51 @@ public class ReferenceVertexTest extends AbstractGremlinTest { final ReferenceVertex rv = ReferenceFactory.detach(g.V(convertToVertexId("marko")).next()); assertFalse(rv.vertices(Direction.BOTH).hasNext()); } + + @Test + @LoadGraphWith(LoadGraphWith.GraphData.MODERN) + @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY) + public void shouldDetachCollections() { + // single element + final Vertex vertex = ReferenceFactory.detach(g.V().has("name", "marko").next()); + assertTrue(vertex instanceof ReferenceVertex); + // list nest + final List<Vertex> vertices = ReferenceFactory.detach(g.V().hasLabel("software").fold().next()); + for (final Vertex v : vertices) { + assertTrue(v instanceof ReferenceVertex); + assertEquals("java", v.value("lang")); + } + // double nested list + final List<List<Vertex>> lists = ReferenceFactory.detach(g.V().hasLabel("software").fold().fold().next()); + for (final Vertex v : lists.get(0)) { + assertTrue(v instanceof ReferenceVertex); + assertEquals("java", v.value("lang")); + } + // double nested list to set + final Set<List<Vertex>> set = ReferenceFactory.detach(g.V().hasLabel("software").fold().toSet()); + for (final Vertex v : set.iterator().next()) { + assertTrue(v instanceof ReferenceVertex); + assertEquals("java", v.value("lang")); + } + // map keys and values + Map<Vertex, List<Edge>> map = ReferenceFactory.detach(g.V().hasLabel("software").group().by().by(inE().fold()).next()); + for (final Map.Entry<Vertex, List<Edge>> entry : map.entrySet()) { + assertTrue(entry.getKey() instanceof ReferenceVertex); + assertEquals("java", entry.getKey().value("lang")); + for (final Edge edge : entry.getValue()) { + assertTrue(edge instanceof ReferenceEdge); + assertTrue(edge.property("weight").isPresent()); + } + } + // map keys and values as sideEffect + map = ReferenceFactory.detach(g.V().hasLabel("software").group("m").by().by(inE().fold()).identity().cap("m").next()); + for (final Map.Entry<Vertex, List<Edge>> entry : map.entrySet()) { + assertTrue(entry.getKey() instanceof ReferenceVertex); + assertEquals("java", entry.getKey().value("lang")); + for (final Edge edge : entry.getValue()) { + assertTrue(edge instanceof ReferenceEdge); + assertTrue(edge.property("weight").isPresent()); + } + } + } }