You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/09/28 17:38:26 UTC

[26/41] tinkerpop git commit: fixed up SubgraphStrategyTest so that non-parameterized tests are not run multiple times for each parameterization -- stole the model from RepeatUnrollStrategyTest.

fixed up SubgraphStrategyTest so that non-parameterized tests are not run multiple times for each parameterization -- stole the model from RepeatUnrollStrategyTest.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/bb0e22a7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/bb0e22a7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/bb0e22a7

Branch: refs/heads/TINKERPOP-790
Commit: bb0e22a789a4d403971f8ea82791b8fa97f0f19b
Parents: b92dba7
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Sep 26 12:33:13 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Sep 27 12:45:49 2016 -0600

----------------------------------------------------------------------
 .../strategy/decoration/SubgraphStrategy.java   |  33 ++--
 .../decoration/SubgraphStrategyTest.java        | 172 ++++++++++---------
 2 files changed, 107 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bb0e22a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
index 0a9cb15..0187969 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java
@@ -102,23 +102,33 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
         this.vertexPropertyCriterion = null == vertexPropertyCriterion ? null : vertexPropertyCriterion.asAdmin();
 
         if (null != this.vertexCriterion)
-            this.metadataLabelStartStep(this.vertexCriterion);
+            this.addLabelMarker(this.vertexCriterion);
         if (null != this.edgeCriterion)
-            this.metadataLabelStartStep(this.edgeCriterion);
+            this.addLabelMarker(this.edgeCriterion);
         if (null != this.vertexPropertyCriterion)
-            this.metadataLabelStartStep(this.vertexPropertyCriterion);
+            this.addLabelMarker(this.vertexPropertyCriterion);
     }
 
-    private final void metadataLabelStartStep(final Traversal.Admin<?, ?> traversal) {
+    private final void addLabelMarker(final Traversal.Admin<?, ?> traversal) {
         traversal.getStartStep().addLabel(MARKER);
         for (final Step<?, ?> step : traversal.getSteps()) {
             if (step instanceof TraversalParent) {
-                ((TraversalParent) step).getLocalChildren().forEach(this::metadataLabelStartStep);
-                ((TraversalParent) step).getGlobalChildren().forEach(this::metadataLabelStartStep);
+                ((TraversalParent) step).getLocalChildren().forEach(this::addLabelMarker);
+                ((TraversalParent) step).getGlobalChildren().forEach(this::addLabelMarker);
             }
         }
     }
 
+    private static void applyCriterion(final List<Step> stepsToApplyCriterionAfter, final Traversal.Admin traversal,
+                                final Traversal.Admin<? extends Element, ?> criterion) {
+        for (final Step<?, ?> step : stepsToApplyCriterionAfter) {
+            // re-assign the step label to the criterion because the label should apply seamlessly after the filter
+            final Step filter = new TraversalFilterStep<>(traversal, criterion.clone());
+            TraversalHelper.insertAfterStep(filter, step, traversal);
+            TraversalHelper.copyLabels(step, filter, true);
+        }
+    }
+
     private static final char processesPropertyType(Step step) {
         while (!(step instanceof EmptyStep)) {
             if (step instanceof FilterStep || step instanceof SideEffectStep)
@@ -280,21 +290,10 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
         return this.vertexPropertyCriterion;
     }
 
-
     public static Builder build() {
         return new Builder();
     }
 
-    private void applyCriterion(final List<Step> stepsToApplyCriterionAfter, final Traversal.Admin traversal,
-                                final Traversal.Admin<? extends Element, ?> criterion) {
-        for (final Step<?, ?> step : stepsToApplyCriterionAfter) {
-            // re-assign the step label to the criterion because the label should apply seamlessly after the filter
-            final Step filter = new TraversalFilterStep<>(traversal, criterion.clone());
-            TraversalHelper.insertAfterStep(filter, step, traversal);
-            TraversalHelper.copyLabels(step, filter, true);
-        }
-    }
-
     public final static class Builder {
 
         private Traversal<Vertex, ?> vertexPredicate = null;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bb0e22a7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java
index 2e89f6b..7082838 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyTest.java
@@ -37,6 +37,7 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.hamcrest.CoreMatchers;
 import org.junit.Test;
+import org.junit.experimental.runners.Enclosed;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
@@ -56,98 +57,107 @@ import static org.junit.Assert.assertTrue;
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-@RunWith(Parameterized.class)
+@RunWith(Enclosed.class)
 public class SubgraphStrategyTest {
 
-    @Parameterized.Parameter(value = 0)
-    public Traversal original;
+    @RunWith(Parameterized.class)
+    public static class ParameterizedTests {
 
-    @Parameterized.Parameter(value = 1)
-    public Traversal optimized;
+        @Parameterized.Parameter(value = 0)
+        public Traversal original;
 
+        @Parameterized.Parameter(value = 1)
+        public Traversal optimized;
 
-    void applySubgraphStrategyTest(final Traversal traversal) {
-        final TraversalStrategies strategies = new DefaultTraversalStrategies();
-        strategies.addStrategies(SubgraphStrategy.build().
-                vertices(__.and(has("name", "marko"), has("age", 29))).
-                edges(hasLabel("knows")).
-                vertexProperties(__.<VertexProperty, Long>values().count().and(is(P.lt(10)), is(0))).create());
-        strategies.addStrategies(InlineFilterStrategy.instance());
-        strategies.addStrategies(StandardVerificationStrategy.instance());
-        traversal.asAdmin().setStrategies(strategies);
-        traversal.asAdmin().applyStrategies();
-    }
 
-    @Test
-    public void doTest() {
-        applySubgraphStrategyTest(original);
-        assertEquals(optimized, original);
-    }
+        void applySubgraphStrategyTest(final Traversal traversal) {
+            final TraversalStrategies strategies = new DefaultTraversalStrategies();
+            strategies.addStrategies(SubgraphStrategy.build().
+                    vertices(__.and(has("name", "marko"), has("age", 29))).
+                    edges(hasLabel("knows")).
+                    vertexProperties(__.<VertexProperty, Long>values().count().and(is(P.lt(10)), is(0))).create());
+            strategies.addStrategies(InlineFilterStrategy.instance());
+            strategies.addStrategies(StandardVerificationStrategy.instance());
+            traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().applyStrategies();
+        }
 
-    @Parameterized.Parameters(name = "{0}")
-    public static Iterable<Object[]> generateTestParameters() {
-
-        return Arrays.asList(new Traversal[][]{
-                {__.outE(), __.outE().hasLabel("knows").and(
-                        inV().has("name", "marko").has("age", 29),
-                        outV().has("name", "marko").has("age", 29))},
-                {__.V(), __.V().has("name", "marko").has("age", 29)},
-                {__.V().has("location", "santa fe"), __.V().has("name", "marko").has("age", 29).has("location", "santa fe")},
-                {__.V().where(has("location", "santa fe")), __.V().has("name", "marko").has("age", 29).has("location", "santa fe")},
-                {__.V().where(has("location", "santa fe")).values("location"), __.V().has("name", "marko").has("age", 29).has("location", "santa fe").properties("location").filter(values().count().is(P.lt(10)).is(0)).value()}
-        });
-    }
+        @Test
+        public void doTest() {
+            applySubgraphStrategyTest(original);
+            assertEquals(optimized, original);
+        }
 
-    @Test
-    public void shouldAddFilterAfterVertex() {
-        final SubgraphStrategy strategy = SubgraphStrategy.build().vertices(__.identity()).create();
-        final Traversal t = __.inV();
-        strategy.apply(t.asAdmin());
-        final EdgeVertexStep edgeVertexStep = (EdgeVertexStep) t.asAdmin().getStartStep();
-        assertEquals(TraversalFilterStep.class, edgeVertexStep.getNextStep().getClass());
-        final TraversalFilterStep h = (TraversalFilterStep) t.asAdmin().getEndStep();
-        assertEquals(1, h.getLocalChildren().size());
-        assertThat(((DefaultGraphTraversal) h.getLocalChildren().get(0)).getEndStep(), CoreMatchers.instanceOf(IdentityStep.class));
-    }
+        @Parameterized.Parameters(name = "{0}")
+        public static Iterable<Object[]> generateTestParameters() {
 
-    @Test
-    public void shouldAddFilterAfterEdge() {
-        final SubgraphStrategy strategy = SubgraphStrategy.build().edges(__.identity()).create();
-        final Traversal t = __.inE();
-        strategy.apply(t.asAdmin());
-        final VertexStep vertexStep = (VertexStep) t.asAdmin().getStartStep();
-        assertEquals(TraversalFilterStep.class, vertexStep.getNextStep().getClass());
-        final TraversalFilterStep h = (TraversalFilterStep) t.asAdmin().getEndStep();
-        assertEquals(1, h.getLocalChildren().size());
-        assertThat(((DefaultGraphTraversal) h.getLocalChildren().get(0)).getEndStep(), CoreMatchers.instanceOf(IdentityStep.class));
+            return Arrays.asList(new Traversal[][]{
+                    {__.outE(), __.outE().hasLabel("knows").and(
+                            inV().has("name", "marko").has("age", 29),
+                            outV().has("name", "marko").has("age", 29))},
+                    {__.V(), __.V().has("name", "marko").has("age", 29)},
+                    {__.V().has("location", "santa fe"), __.V().has("name", "marko").has("age", 29).has("location", "santa fe")},
+                    {__.V().where(has("location", "santa fe")), __.V().has("name", "marko").has("age", 29).has("location", "santa fe")},
+                    {__.V().where(has("location", "santa fe")).values("location"), __.V().has("name", "marko").has("age", 29).has("location", "santa fe").properties("location").filter(values().count().is(P.lt(10)).is(0)).value()}
+            });
+        }
     }
 
-    @Test
-    public void shouldAddBothFiltersAfterVertex() {
-        final SubgraphStrategy strategy = SubgraphStrategy.build().edges(__.identity()).vertices(__.identity()).create();
-        final Traversal t = __.inE();
-        strategy.apply(t.asAdmin());
-        final VertexStep vertexStep = (VertexStep) t.asAdmin().getStartStep();
-        assertEquals(TraversalFilterStep.class, vertexStep.getNextStep().getClass());
-        final TraversalFilterStep h = (TraversalFilterStep) t.asAdmin().getEndStep();
-        assertEquals(1, h.getLocalChildren().size());
-        assertThat(((DefaultGraphTraversal) h.getLocalChildren().get(0)).getEndStep(), CoreMatchers.instanceOf(TraversalFilterStep.class));
-    }
+    public static class RewriteTest {
 
-    @Test
-    public void shouldNotRetainMetadataLabelMarkers() {
-        final SubgraphStrategy strategy = SubgraphStrategy.build().vertices(__.<Vertex>out().hasLabel("person")).create();
-        final Traversal.Admin<?, ?> t = out().inE().asAdmin();
-        t.setStrategies(t.getStrategies().clone().addStrategies(strategy, StandardVerificationStrategy.instance()));
-        t.applyStrategies();
-        assertEquals(t.getSteps().get(0).getClass(), VertexStep.class);
-        assertEquals(t.getSteps().get(1).getClass(), TraversalFilterStep.class);
-        assertEquals(AndStep.class, ((TraversalFilterStep<?>) t.getSteps().get(1)).getLocalChildren().get(0).getStartStep().getClass());
-        assertEquals(0, ((TraversalFilterStep<?>) t.getSteps().get(1)).getLocalChildren().get(0).getStartStep().getLabels().size());
-        assertEquals(t.getSteps().get(2).getClass(), EdgeVertexStep.class);
-        assertEquals(t.getSteps().get(3).getClass(), TraversalFilterStep.class);
-        assertEquals(VertexStep.class, ((TraversalFilterStep<?>) t.getSteps().get(3)).getLocalChildren().get(0).getStartStep().getClass());
-        assertEquals(0, ((TraversalFilterStep<?>) t.getSteps().get(3)).getLocalChildren().get(0).getStartStep().getLabels().size());
-        TraversalHelper.getStepsOfAssignableClassRecursively(Step.class, t).forEach(step -> assertTrue(step.getLabels().isEmpty()));
+        @Test
+        public void shouldAddFilterAfterVertex() {
+            final SubgraphStrategy strategy = SubgraphStrategy.build().vertices(__.identity()).create();
+            final Traversal t = __.inV();
+            strategy.apply(t.asAdmin());
+            final EdgeVertexStep edgeVertexStep = (EdgeVertexStep) t.asAdmin().getStartStep();
+            assertEquals(TraversalFilterStep.class, edgeVertexStep.getNextStep().getClass());
+            final TraversalFilterStep h = (TraversalFilterStep) t.asAdmin().getEndStep();
+            assertEquals(1, h.getLocalChildren().size());
+            assertThat(((DefaultGraphTraversal) h.getLocalChildren().get(0)).getEndStep(), CoreMatchers.instanceOf(IdentityStep.class));
+        }
+
+        @Test
+        public void shouldAddFilterAfterEdge() {
+            final SubgraphStrategy strategy = SubgraphStrategy.build().edges(__.identity()).create();
+            final Traversal t = __.inE();
+            strategy.apply(t.asAdmin());
+            final VertexStep vertexStep = (VertexStep) t.asAdmin().getStartStep();
+            assertEquals(TraversalFilterStep.class, vertexStep.getNextStep().getClass());
+            final TraversalFilterStep h = (TraversalFilterStep) t.asAdmin().getEndStep();
+            assertEquals(1, h.getLocalChildren().size());
+            assertThat(((DefaultGraphTraversal) h.getLocalChildren().get(0)).getEndStep(), CoreMatchers.instanceOf(IdentityStep.class));
+        }
+
+        @Test
+        public void shouldAddBothFiltersAfterVertex() {
+            final SubgraphStrategy strategy = SubgraphStrategy.build().edges(__.identity()).vertices(__.identity()).create();
+            final Traversal t = __.inE();
+            strategy.apply(t.asAdmin());
+            final VertexStep vertexStep = (VertexStep) t.asAdmin().getStartStep();
+            assertEquals(TraversalFilterStep.class, vertexStep.getNextStep().getClass());
+            final TraversalFilterStep h = (TraversalFilterStep) t.asAdmin().getEndStep();
+            assertEquals(1, h.getLocalChildren().size());
+            assertThat(((DefaultGraphTraversal) h.getLocalChildren().get(0)).getEndStep(), CoreMatchers.instanceOf(TraversalFilterStep.class));
+        }
+
+        @Test
+        public void shouldNotRetainMarkers() {
+            final SubgraphStrategy strategy = SubgraphStrategy.build().vertices(__.<Vertex>out().hasLabel("person")).create();
+            final Traversal.Admin<?, ?> t = out().inE().asAdmin();
+            t.setStrategies(t.getStrategies().clone().addStrategies(strategy, StandardVerificationStrategy.instance()));
+            t.applyStrategies();
+            assertEquals(t.getSteps().get(0).getClass(), VertexStep.class);
+            assertEquals(t.getSteps().get(1).getClass(), TraversalFilterStep.class);
+            assertEquals(AndStep.class, ((TraversalFilterStep<?>) t.getSteps().get(1)).getLocalChildren().get(0).getStartStep().getClass());
+            assertEquals(0, ((TraversalFilterStep<?>) t.getSteps().get(1)).getLocalChildren().get(0).getStartStep().getLabels().size());
+            assertEquals(t.getSteps().get(2).getClass(), EdgeVertexStep.class);
+            assertEquals(t.getSteps().get(3).getClass(), TraversalFilterStep.class);
+            assertEquals(VertexStep.class, ((TraversalFilterStep<?>) t.getSteps().get(3)).getLocalChildren().get(0).getStartStep().getClass());
+            assertEquals(0, ((TraversalFilterStep<?>) t.getSteps().get(3)).getLocalChildren().get(0).getStartStep().getLabels().size());
+            TraversalHelper.getStepsOfAssignableClassRecursively(Step.class, t).forEach(step -> assertTrue(step.getLabels().isEmpty()));
+        }
     }
+
+
 }