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()));
+ }
}
+
+
}