You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by fl...@apache.org on 2018/03/14 21:42:37 UTC
[04/34] tinkerpop git commit: Moved some tests to the correct
packages CTR
Moved some tests to the correct packages CTR
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2c6c151f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2c6c151f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2c6c151f
Branch: refs/heads/TINKERPOP-1897
Commit: 2c6c151fc491fbad5541edcd49902899ee7a4b12
Parents: 6fbf130
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Mar 5 14:17:22 2018 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Mar 5 14:17:22 2018 -0500
----------------------------------------------------------------------
.../traversal/step/util/BulkSetTest.java | 92 ++++
.../traversal/util/TraversalHelperTest.java | 424 +++++++++++++++++++
.../gremlin/process/util/BulkSetTest.java | 92 ----
.../process/util/TraversalHelperTest.java | 424 -------------------
4 files changed, 516 insertions(+), 516 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2c6c151f/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSetTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSetTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSetTest.java
new file mode 100644
index 0000000..9b4980f
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSetTest.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.util;
+
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
+import org.junit.Test;
+
+import java.util.Iterator;
+import java.util.Random;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class BulkSetTest {
+
+ @Test
+ public void shouldHaveProperHashAndEquality() {
+ final BulkSet<String> a = new BulkSet<>();
+ final BulkSet<String> b = new BulkSet<>();
+ a.add("stephen", 12);
+ a.add("marko", 32);
+ a.add("daniel", 74);
+ b.add("stephen", 12);
+ b.add("marko", 32);
+ b.add("daniel", 74);
+ assertEquals(a, b);
+ assertTrue(a.equals(b));
+ assertEquals(a.hashCode(), b.hashCode());
+ assertTrue(a.hashCode() == b.hashCode());
+ assertEquals(12, a.get("stephen"));
+ assertEquals(12, b.get("stephen"));
+ a.add("matthias", 99);
+ assertFalse(a.equals(b));
+ assertFalse(a.hashCode() == b.hashCode());
+ assertNotEquals(a.hashCode(), b.hashCode());
+ }
+
+ @Test
+ public void shouldHaveProperCountAndNotOutOfMemoryException() {
+ final Set<Boolean> list = new BulkSet<>();
+ final Random random = new Random();
+ for (int i = 0; i < 10000000; i++) {
+ list.add(random.nextBoolean());
+ }
+ assertEquals(10000000, list.size());
+ }
+
+ @Test
+ public void shouldHaveCorrectBulkCounts() {
+ final BulkSet<String> set = new BulkSet<>();
+ set.add("marko");
+ set.add("matthias");
+ set.add("marko", 7);
+ set.add("stephen");
+ set.add("stephen");
+ assertEquals(8, set.get("marko"));
+ assertEquals(1, set.get("matthias"));
+ assertEquals(2, set.get("stephen"));
+ final Iterator<String> iterator = set.iterator();
+ for (int i = 0; i < 11; i++) {
+ if (i < 8)
+ assertEquals("marko", iterator.next());
+ else if (i < 9)
+ assertEquals("matthias", iterator.next());
+ else
+ assertEquals("stephen", iterator.next());
+ }
+ assertEquals(11, set.size());
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2c6c151f/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelperTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelperTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelperTest.java
new file mode 100644
index 0000000..74ef6a4
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelperTest.java
@@ -0,0 +1,424 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.util;
+
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.branch.RepeatStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.branch.UnionStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.LambdaFilterStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.PathFilterStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTraversalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.FlatMapStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalFlatMapStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMapStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.structure.PropertyType;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class TraversalHelperTest {
+
+ @Test
+ public void shouldSetPreviousStepToEmptyStep() {
+ final Traversal.Admin<?, ?> traversal = __.V().out().asAdmin();
+ //transform the traversal to __.V().not(out())
+ //the VertexStep's previousStep should be the EmptyStep
+ Optional<VertexStep> vertexStepOpt = TraversalHelper.getFirstStepOfAssignableClass(VertexStep.class, traversal);
+ assertTrue(vertexStepOpt.isPresent());
+ Traversal.Admin<?,?> inner = __.start().asAdmin();
+ inner.addStep(0, vertexStepOpt.get());
+ TraversalHelper.replaceStep(vertexStepOpt.get(), new NotStep<>(__.identity().asAdmin(), inner), traversal);
+ List<VertexStep> vertexSteps = TraversalHelper.getStepsOfAssignableClassRecursively(VertexStep.class, traversal);
+ assertEquals(1, vertexSteps.size());
+ VertexStep vertexStep = vertexSteps.get(0);
+ assertTrue("Expected the previousStep to be an EmptyStep, found instead " + vertexStep.getPreviousStep().toString(),vertexStep.getPreviousStep() == EmptyStep.instance());
+ }
+
+ @Test
+ public void shouldIdentifyLocalChildren() {
+ final Traversal.Admin<?, ?> localChild = __.as("x").select("a", "b").by("name").asAdmin();
+ new LocalStep<>(new DefaultTraversal(), localChild);
+ assertFalse(TraversalHelper.isGlobalChild(localChild));
+ ///
+ new WhereTraversalStep<>(new DefaultTraversal(), localChild);
+ assertFalse(TraversalHelper.isGlobalChild(localChild));
+ ///
+ new TraversalFilterStep<>(new DefaultTraversal(), localChild);
+ assertFalse(TraversalHelper.isGlobalChild(localChild));
+ ///
+ new TraversalMapStep<>(new DefaultTraversal(), localChild);
+ assertFalse(TraversalHelper.isGlobalChild(localChild));
+ ///
+ new TraversalFlatMapStep<>(new DefaultTraversal(), localChild);
+ assertFalse(TraversalHelper.isGlobalChild(localChild));
+ ///
+ final Traversal.Admin<?, ?> remoteLocalChild = __.repeat(localChild).asAdmin();
+ new LocalStep<>(new DefaultTraversal<>(), remoteLocalChild);
+ assertFalse(TraversalHelper.isGlobalChild(localChild));
+ }
+
+ @Test
+ public void shouldIdentifyGlobalChildren() {
+ final Traversal.Admin<?, ?> globalChild = __.select("a", "b").by("name").asAdmin();
+ TraversalParent parent = new RepeatStep<>(new DefaultTraversal());
+ ((RepeatStep) parent).setRepeatTraversal(globalChild);
+ assertTrue(TraversalHelper.isGlobalChild(globalChild));
+ ///
+ new UnionStep<>(new DefaultTraversal(), globalChild);
+ assertTrue(TraversalHelper.isGlobalChild(globalChild));
+ ///
+ new TraversalVertexProgramStep(new DefaultTraversal<>(), globalChild);
+ assertTrue(TraversalHelper.isGlobalChild(globalChild));
+ ///
+ final Traversal.Admin<?, ?> remoteRemoteChild = __.repeat(globalChild).asAdmin();
+ new UnionStep<>(new DefaultTraversal(), remoteRemoteChild);
+ assertTrue(TraversalHelper.isGlobalChild(globalChild));
+ }
+
+ @Test
+ public void shouldIdentifyLocalProperties() {
+ assertTrue(TraversalHelper.isLocalProperties(__.identity().asAdmin()));
+ assertTrue(TraversalHelper.isLocalProperties(__.id().asAdmin()));
+ assertTrue(TraversalHelper.isLocalProperties(__.label().asAdmin()));
+ assertTrue(TraversalHelper.isLocalProperties(__.values("name").asAdmin()));
+ assertFalse(TraversalHelper.isLocalProperties(outE("knows").asAdmin()));
+ }
+
+ @Test
+ public void shouldNotFindStepOfClassInTraversal() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ assertThat(TraversalHelper.hasStepOfClass(FilterStep.class, traversal), is(false));
+ }
+
+ @Test
+ public void shouldFindStepOfClassInTraversal() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new IdentityStep<>(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ assertThat(TraversalHelper.hasStepOfClass(IdentityStep.class, traversal), is(true));
+ }
+
+ @Test
+ public void shouldNotFindStepOfAssignableClassInTraversal() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ assertThat(TraversalHelper.hasStepOfAssignableClass(IdentityStep.class, traversal), is(false));
+ }
+
+ @Test
+ public void shouldFindStepOfAssignableClassInTraversal() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ assertThat(TraversalHelper.hasStepOfAssignableClass(FilterStep.class, traversal), is(true));
+ }
+
+ @Test
+ public void shouldGetTheStepIndex() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ final HasStep hasStep = new HasStep(traversal);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, hasStep);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ assertEquals(1, TraversalHelper.stepIndex(hasStep, traversal));
+ }
+
+ @Test
+ public void shouldNotFindTheStepIndex() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ final IdentityStep identityStep = new IdentityStep(traversal);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ assertEquals(-1, TraversalHelper.stepIndex(identityStep, traversal));
+ }
+
+ @Test
+ public void shouldInsertBeforeStep() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ final HasStep hasStep = new HasStep(traversal);
+ final IdentityStep identityStep = new IdentityStep(traversal);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, hasStep);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ TraversalHelper.insertBeforeStep(identityStep, hasStep, traversal);
+
+ assertEquals(traversal.asAdmin().getSteps().get(1), identityStep);
+ assertEquals(4, traversal.asAdmin().getSteps().size());
+ }
+
+ @Test
+ public void shouldInsertAfterStep() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ final HasStep hasStep = new HasStep(traversal);
+ final IdentityStep identityStep = new IdentityStep(traversal);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, hasStep);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ TraversalHelper.insertAfterStep(identityStep, hasStep, traversal);
+
+ assertEquals(traversal.asAdmin().getSteps().get(2), identityStep);
+ assertEquals(4, traversal.asAdmin().getSteps().size());
+ }
+
+ @Test
+ public void shouldReplaceStep() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ final HasStep hasStep = new HasStep(traversal);
+ final IdentityStep identityStep = new IdentityStep(traversal);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, hasStep);
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+
+ TraversalHelper.replaceStep(hasStep, identityStep, traversal);
+
+ assertEquals(traversal.asAdmin().getSteps().get(1), identityStep);
+ assertEquals(3, traversal.asAdmin().getSteps().size());
+ }
+
+ @Test
+ public void shouldChainTogetherStepsWithNextPreviousInALinkedListStructure() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ traversal.asAdmin().addStep(new IdentityStep(traversal));
+ traversal.asAdmin().addStep(new HasStep(traversal));
+ traversal.asAdmin().addStep(new LambdaFilterStep(traversal, traverser -> true));
+ validateToyTraversal(traversal);
+ }
+
+ @Test
+ public void shouldAddStepsCorrectly() {
+ Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ traversal.asAdmin().addStep(0, new LambdaFilterStep(traversal, traverser -> true));
+ traversal.asAdmin().addStep(0, new HasStep(traversal));
+ traversal.asAdmin().addStep(0, new IdentityStep(traversal));
+ validateToyTraversal(traversal);
+
+ traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ traversal.asAdmin().addStep(0, new IdentityStep(traversal));
+ traversal.asAdmin().addStep(1, new HasStep(traversal));
+ traversal.asAdmin().addStep(2, new LambdaFilterStep(traversal, traverser -> true));
+ validateToyTraversal(traversal);
+ }
+
+ @Test
+ public void shouldRemoveStepsCorrectly() {
+ final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
+ traversal.asAdmin().addStep(new IdentityStep(traversal));
+ traversal.asAdmin().addStep(new HasStep(traversal));
+ traversal.asAdmin().addStep(new LambdaFilterStep(traversal, traverser -> true));
+
+ traversal.asAdmin().addStep(new PropertiesStep(traversal, PropertyType.VALUE, "marko"));
+ traversal.asAdmin().removeStep(3);
+ validateToyTraversal(traversal);
+
+ traversal.asAdmin().addStep(0, new PropertiesStep(traversal, PropertyType.PROPERTY, "marko"));
+ traversal.asAdmin().removeStep(0);
+ validateToyTraversal(traversal);
+
+ traversal.asAdmin().removeStep(1);
+ traversal.asAdmin().addStep(1, new HasStep(traversal));
+ validateToyTraversal(traversal);
+ }
+
+ private static void validateToyTraversal(final Traversal traversal) {
+ assertEquals(traversal.asAdmin().getSteps().size(), 3);
+
+ assertEquals(IdentityStep.class, traversal.asAdmin().getSteps().get(0).getClass());
+ assertEquals(HasStep.class, traversal.asAdmin().getSteps().get(1).getClass());
+ assertEquals(LambdaFilterStep.class, traversal.asAdmin().getSteps().get(2).getClass());
+
+ // IDENTITY STEP
+ assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(0)).getPreviousStep().getClass());
+ assertEquals(HasStep.class, ((Step) traversal.asAdmin().getSteps().get(0)).getNextStep().getClass());
+ assertEquals(LambdaFilterStep.class, ((Step) traversal.asAdmin().getSteps().get(0)).getNextStep().getNextStep().getClass());
+ assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(0)).getNextStep().getNextStep().getNextStep().getClass());
+
+ // HAS STEP
+ assertEquals(IdentityStep.class, ((Step) traversal.asAdmin().getSteps().get(1)).getPreviousStep().getClass());
+ assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(1)).getPreviousStep().getPreviousStep().getClass());
+ assertEquals(LambdaFilterStep.class, ((Step) traversal.asAdmin().getSteps().get(1)).getNextStep().getClass());
+ assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(1)).getNextStep().getNextStep().getClass());
+
+ // FILTER STEP
+ assertEquals(HasStep.class, ((Step) traversal.asAdmin().getSteps().get(2)).getPreviousStep().getClass());
+ assertEquals(IdentityStep.class, ((Step) traversal.asAdmin().getSteps().get(2)).getPreviousStep().getPreviousStep().getClass());
+ assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(2)).getPreviousStep().getPreviousStep().getPreviousStep().getClass());
+ assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(2)).getNextStep().getClass());
+
+ assertEquals(3, traversal.asAdmin().getSteps().size());
+ }
+
+ @Test
+ public void shouldTruncateLongName() {
+ Step s = Mockito.mock(Step.class);
+ Mockito.when(s.toString()).thenReturn("0123456789");
+ assertEquals("0123...", TraversalHelper.getShortName(s, 7));
+ }
+
+ @Test
+ public void shouldIdentifyStarGraphTraversals() {
+ assertTrue(TraversalHelper.isLocalStarGraph(__.identity().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.id().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.out().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.label().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.bothE().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.values().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.properties().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.repeat(__.identity()).asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.repeat(__.has("name")).asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.out().repeat(__.identity()).asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.out().id().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.label().union(__.out(), in()).asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.label().union(__.out(), in()).id().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.coalesce(out("likes"), out("knows"), out("created")).groupCount().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.local(__.out()).groupCount().asAdmin()));
+ assertTrue(TraversalHelper.isLocalStarGraph(__.local(__.out()).groupCount().by(T.id).asAdmin()));
+ // assertTrue(TraversalHelper.isLocalStarGraph(__.out().repeat(__.has("name")).asAdmin()));
+ //
+ assertFalse(TraversalHelper.isLocalStarGraph(__.out().label().asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.out().values().asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.out().valueMap().asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.repeat(__.out()).asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.repeat(__.has("name").out()).asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.repeat(__.has("name").union(__.out(), in())).asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.union(__.out(), in()).label().asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.union(__.out(), in().out()).asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.union(__.out(), __.out().union(in(), __.out())).asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.union(__.values(), __.out().union(in(), __.out())).out().asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.coalesce(out("likes"), out("knows"), out("created")).groupCount().by("name").asAdmin()));
+ assertFalse(TraversalHelper.isLocalStarGraph(__.local(__.out()).groupCount().by("name").asAdmin()));
+ }
+
+ @Test
+ public void shouldGetStepsByClass() {
+ Set<String> labels = (Set) TraversalHelper.getStepsOfClass(VertexStep.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
+ .stream()
+ .flatMap(s -> s.getLabels().stream())
+ .collect(Collectors.toSet());
+ assertEquals(2, labels.size());
+ assertTrue(labels.contains("a"));
+ assertTrue(labels.contains("c"));
+ //
+ labels = (Set) TraversalHelper.getStepsOfAssignableClass(VertexStep.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
+ .stream()
+ .flatMap(s -> s.getLabels().stream())
+ .collect(Collectors.toSet());
+ assertEquals(2, labels.size());
+ assertTrue(labels.contains("a"));
+ assertTrue(labels.contains("c"));
+ //
+ labels = (Set) TraversalHelper.getStepsOfAssignableClass(FlatMapStep.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
+ .stream()
+ .flatMap(s -> s.getLabels().stream())
+ .collect(Collectors.toSet());
+ assertEquals(3, labels.size());
+ assertTrue(labels.contains("a"));
+ assertTrue(labels.contains("b"));
+ assertTrue(labels.contains("c"));
+ //
+ labels = (Set) TraversalHelper.getStepsOfClass(Step.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
+ .stream()
+ .flatMap(s -> s.getLabels().stream())
+ .collect(Collectors.toSet());
+ assertEquals(0, labels.size());
+ //
+ labels = (Set) TraversalHelper.getStepsOfAssignableClass(Step.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
+ .stream()
+ .flatMap(s -> s.getLabels().stream())
+ .collect(Collectors.toSet());
+ assertEquals(4, labels.size());
+ assertTrue(labels.contains("a"));
+ assertTrue(labels.contains("b"));
+ assertTrue(labels.contains("c"));
+ assertTrue(labels.contains("d"));
+ }
+
+ @Test
+ public void shouldGetLabels() {
+ Set<String> labels = (Set) TraversalHelper.getLabels(__.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin());
+ assertEquals(4, labels.size());
+ assertTrue(labels.contains("a"));
+ assertTrue(labels.contains("b"));
+ assertTrue(labels.contains("c"));
+ assertTrue(labels.contains("d"));
+ labels = (Set) TraversalHelper.getLabels(__.out().as("a").repeat(__.out("name").as("b")).local(in().as("c")).as("d").groupCount().by(outE().as("e")).as("f").asAdmin());
+ assertEquals(6, labels.size());
+ assertTrue(labels.contains("a"));
+ assertTrue(labels.contains("b"));
+ assertTrue(labels.contains("c"));
+ assertTrue(labels.contains("d"));
+ assertTrue(labels.contains("e"));
+ assertTrue(labels.contains("f"));
+ }
+
+ @Test
+ public void shouldFindStepsRecursively() {
+ final Traversal<?,?> traversal = __.V().repeat(__.out().simplePath());
+ assertTrue(TraversalHelper.anyStepRecursively(s -> s instanceof PathFilterStep, traversal.asAdmin()));
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2c6c151f/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java
deleted file mode 100644
index df1c54f..0000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.util;
-
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
-import org.junit.Test;
-
-import java.util.Iterator;
-import java.util.Random;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class BulkSetTest {
-
- @Test
- public void shouldHaveProperHashAndEquality() {
- final BulkSet<String> a = new BulkSet<>();
- final BulkSet<String> b = new BulkSet<>();
- a.add("stephen", 12);
- a.add("marko", 32);
- a.add("daniel", 74);
- b.add("stephen", 12);
- b.add("marko", 32);
- b.add("daniel", 74);
- assertEquals(a, b);
- assertTrue(a.equals(b));
- assertEquals(a.hashCode(), b.hashCode());
- assertTrue(a.hashCode() == b.hashCode());
- assertEquals(12, a.get("stephen"));
- assertEquals(12, b.get("stephen"));
- a.add("matthias", 99);
- assertFalse(a.equals(b));
- assertFalse(a.hashCode() == b.hashCode());
- assertNotEquals(a.hashCode(), b.hashCode());
- }
-
- @Test
- public void shouldHaveProperCountAndNotOutOfMemoryException() {
- final Set<Boolean> list = new BulkSet<>();
- final Random random = new Random();
- for (int i = 0; i < 10000000; i++) {
- list.add(random.nextBoolean());
- }
- assertEquals(10000000, list.size());
- }
-
- @Test
- public void shouldHaveCorrectBulkCounts() {
- final BulkSet<String> set = new BulkSet<>();
- set.add("marko");
- set.add("matthias");
- set.add("marko", 7);
- set.add("stephen");
- set.add("stephen");
- assertEquals(8, set.get("marko"));
- assertEquals(1, set.get("matthias"));
- assertEquals(2, set.get("stephen"));
- final Iterator<String> iterator = set.iterator();
- for (int i = 0; i < 11; i++) {
- if (i < 8)
- assertEquals("marko", iterator.next());
- else if (i < 9)
- assertEquals("matthias", iterator.next());
- else
- assertEquals("stephen", iterator.next());
- }
- assertEquals(11, set.size());
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2c6c151f/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/TraversalHelperTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/TraversalHelperTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/TraversalHelperTest.java
deleted file mode 100644
index df22cd2..0000000
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/TraversalHelperTest.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.util;
-
-import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.RepeatStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.branch.UnionStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.LambdaFilterStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.PathFilterStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTraversalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.FlatMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalFlatMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.structure.PropertyType;
-import org.apache.tinkerpop.gremlin.structure.T;
-import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class TraversalHelperTest {
-
- @Test
- public void shouldSetPreviousStepToEmptyStep() {
- final Traversal.Admin<?, ?> traversal = __.V().out().asAdmin();
- //transform the traversal to __.V().not(out())
- //the VertexStep's previousStep should be the EmptyStep
- Optional<VertexStep> vertexStepOpt = TraversalHelper.getFirstStepOfAssignableClass(VertexStep.class, traversal);
- assertTrue(vertexStepOpt.isPresent());
- Traversal.Admin<?,?> inner = __.start().asAdmin();
- inner.addStep(0, vertexStepOpt.get());
- TraversalHelper.replaceStep(vertexStepOpt.get(), new NotStep<>(__.identity().asAdmin(), inner), traversal);
- List<VertexStep> vertexSteps = TraversalHelper.getStepsOfAssignableClassRecursively(VertexStep.class, traversal);
- assertEquals(1, vertexSteps.size());
- VertexStep vertexStep = vertexSteps.get(0);
- assertTrue("Expected the previousStep to be an EmptyStep, found instead " + vertexStep.getPreviousStep().toString(),vertexStep.getPreviousStep() == EmptyStep.instance());
- }
-
- @Test
- public void shouldIdentifyLocalChildren() {
- final Traversal.Admin<?, ?> localChild = __.as("x").select("a", "b").by("name").asAdmin();
- new LocalStep<>(new DefaultTraversal(), localChild);
- assertFalse(TraversalHelper.isGlobalChild(localChild));
- ///
- new WhereTraversalStep<>(new DefaultTraversal(), localChild);
- assertFalse(TraversalHelper.isGlobalChild(localChild));
- ///
- new TraversalFilterStep<>(new DefaultTraversal(), localChild);
- assertFalse(TraversalHelper.isGlobalChild(localChild));
- ///
- new TraversalMapStep<>(new DefaultTraversal(), localChild);
- assertFalse(TraversalHelper.isGlobalChild(localChild));
- ///
- new TraversalFlatMapStep<>(new DefaultTraversal(), localChild);
- assertFalse(TraversalHelper.isGlobalChild(localChild));
- ///
- final Traversal.Admin<?, ?> remoteLocalChild = __.repeat(localChild).asAdmin();
- new LocalStep<>(new DefaultTraversal<>(), remoteLocalChild);
- assertFalse(TraversalHelper.isGlobalChild(localChild));
- }
-
- @Test
- public void shouldIdentifyGlobalChildren() {
- final Traversal.Admin<?, ?> globalChild = __.select("a", "b").by("name").asAdmin();
- TraversalParent parent = new RepeatStep<>(new DefaultTraversal());
- ((RepeatStep) parent).setRepeatTraversal(globalChild);
- assertTrue(TraversalHelper.isGlobalChild(globalChild));
- ///
- new UnionStep<>(new DefaultTraversal(), globalChild);
- assertTrue(TraversalHelper.isGlobalChild(globalChild));
- ///
- new TraversalVertexProgramStep(new DefaultTraversal<>(), globalChild);
- assertTrue(TraversalHelper.isGlobalChild(globalChild));
- ///
- final Traversal.Admin<?, ?> remoteRemoteChild = __.repeat(globalChild).asAdmin();
- new UnionStep<>(new DefaultTraversal(), remoteRemoteChild);
- assertTrue(TraversalHelper.isGlobalChild(globalChild));
- }
-
- @Test
- public void shouldIdentifyLocalProperties() {
- assertTrue(TraversalHelper.isLocalProperties(__.identity().asAdmin()));
- assertTrue(TraversalHelper.isLocalProperties(__.id().asAdmin()));
- assertTrue(TraversalHelper.isLocalProperties(__.label().asAdmin()));
- assertTrue(TraversalHelper.isLocalProperties(__.values("name").asAdmin()));
- assertFalse(TraversalHelper.isLocalProperties(outE("knows").asAdmin()));
- }
-
- @Test
- public void shouldNotFindStepOfClassInTraversal() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- assertThat(TraversalHelper.hasStepOfClass(FilterStep.class, traversal), is(false));
- }
-
- @Test
- public void shouldFindStepOfClassInTraversal() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new IdentityStep<>(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- assertThat(TraversalHelper.hasStepOfClass(IdentityStep.class, traversal), is(true));
- }
-
- @Test
- public void shouldNotFindStepOfAssignableClassInTraversal() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- assertThat(TraversalHelper.hasStepOfAssignableClass(IdentityStep.class, traversal), is(false));
- }
-
- @Test
- public void shouldFindStepOfAssignableClassInTraversal() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- assertThat(TraversalHelper.hasStepOfAssignableClass(FilterStep.class, traversal), is(true));
- }
-
- @Test
- public void shouldGetTheStepIndex() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- final HasStep hasStep = new HasStep(traversal);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, hasStep);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- assertEquals(1, TraversalHelper.stepIndex(hasStep, traversal));
- }
-
- @Test
- public void shouldNotFindTheStepIndex() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- final IdentityStep identityStep = new IdentityStep(traversal);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- assertEquals(-1, TraversalHelper.stepIndex(identityStep, traversal));
- }
-
- @Test
- public void shouldInsertBeforeStep() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- final HasStep hasStep = new HasStep(traversal);
- final IdentityStep identityStep = new IdentityStep(traversal);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, hasStep);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- TraversalHelper.insertBeforeStep(identityStep, hasStep, traversal);
-
- assertEquals(traversal.asAdmin().getSteps().get(1), identityStep);
- assertEquals(4, traversal.asAdmin().getSteps().size());
- }
-
- @Test
- public void shouldInsertAfterStep() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- final HasStep hasStep = new HasStep(traversal);
- final IdentityStep identityStep = new IdentityStep(traversal);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, hasStep);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- TraversalHelper.insertAfterStep(identityStep, hasStep, traversal);
-
- assertEquals(traversal.asAdmin().getSteps().get(2), identityStep);
- assertEquals(4, traversal.asAdmin().getSteps().size());
- }
-
- @Test
- public void shouldReplaceStep() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- final HasStep hasStep = new HasStep(traversal);
- final IdentityStep identityStep = new IdentityStep(traversal);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, hasStep);
- traversal.asAdmin().addStep(0, new HasStep(traversal));
-
- TraversalHelper.replaceStep(hasStep, identityStep, traversal);
-
- assertEquals(traversal.asAdmin().getSteps().get(1), identityStep);
- assertEquals(3, traversal.asAdmin().getSteps().size());
- }
-
- @Test
- public void shouldChainTogetherStepsWithNextPreviousInALinkedListStructure() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- traversal.asAdmin().addStep(new IdentityStep(traversal));
- traversal.asAdmin().addStep(new HasStep(traversal));
- traversal.asAdmin().addStep(new LambdaFilterStep(traversal, traverser -> true));
- validateToyTraversal(traversal);
- }
-
- @Test
- public void shouldAddStepsCorrectly() {
- Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- traversal.asAdmin().addStep(0, new LambdaFilterStep(traversal, traverser -> true));
- traversal.asAdmin().addStep(0, new HasStep(traversal));
- traversal.asAdmin().addStep(0, new IdentityStep(traversal));
- validateToyTraversal(traversal);
-
- traversal = new DefaultTraversal<>(EmptyGraph.instance());
- traversal.asAdmin().addStep(0, new IdentityStep(traversal));
- traversal.asAdmin().addStep(1, new HasStep(traversal));
- traversal.asAdmin().addStep(2, new LambdaFilterStep(traversal, traverser -> true));
- validateToyTraversal(traversal);
- }
-
- @Test
- public void shouldRemoveStepsCorrectly() {
- final Traversal.Admin traversal = new DefaultTraversal<>(EmptyGraph.instance());
- traversal.asAdmin().addStep(new IdentityStep(traversal));
- traversal.asAdmin().addStep(new HasStep(traversal));
- traversal.asAdmin().addStep(new LambdaFilterStep(traversal, traverser -> true));
-
- traversal.asAdmin().addStep(new PropertiesStep(traversal, PropertyType.VALUE, "marko"));
- traversal.asAdmin().removeStep(3);
- validateToyTraversal(traversal);
-
- traversal.asAdmin().addStep(0, new PropertiesStep(traversal, PropertyType.PROPERTY, "marko"));
- traversal.asAdmin().removeStep(0);
- validateToyTraversal(traversal);
-
- traversal.asAdmin().removeStep(1);
- traversal.asAdmin().addStep(1, new HasStep(traversal));
- validateToyTraversal(traversal);
- }
-
- private static void validateToyTraversal(final Traversal traversal) {
- assertEquals(traversal.asAdmin().getSteps().size(), 3);
-
- assertEquals(IdentityStep.class, traversal.asAdmin().getSteps().get(0).getClass());
- assertEquals(HasStep.class, traversal.asAdmin().getSteps().get(1).getClass());
- assertEquals(LambdaFilterStep.class, traversal.asAdmin().getSteps().get(2).getClass());
-
- // IDENTITY STEP
- assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(0)).getPreviousStep().getClass());
- assertEquals(HasStep.class, ((Step) traversal.asAdmin().getSteps().get(0)).getNextStep().getClass());
- assertEquals(LambdaFilterStep.class, ((Step) traversal.asAdmin().getSteps().get(0)).getNextStep().getNextStep().getClass());
- assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(0)).getNextStep().getNextStep().getNextStep().getClass());
-
- // HAS STEP
- assertEquals(IdentityStep.class, ((Step) traversal.asAdmin().getSteps().get(1)).getPreviousStep().getClass());
- assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(1)).getPreviousStep().getPreviousStep().getClass());
- assertEquals(LambdaFilterStep.class, ((Step) traversal.asAdmin().getSteps().get(1)).getNextStep().getClass());
- assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(1)).getNextStep().getNextStep().getClass());
-
- // FILTER STEP
- assertEquals(HasStep.class, ((Step) traversal.asAdmin().getSteps().get(2)).getPreviousStep().getClass());
- assertEquals(IdentityStep.class, ((Step) traversal.asAdmin().getSteps().get(2)).getPreviousStep().getPreviousStep().getClass());
- assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(2)).getPreviousStep().getPreviousStep().getPreviousStep().getClass());
- assertEquals(EmptyStep.class, ((Step) traversal.asAdmin().getSteps().get(2)).getNextStep().getClass());
-
- assertEquals(3, traversal.asAdmin().getSteps().size());
- }
-
- @Test
- public void shouldTruncateLongName() {
- Step s = Mockito.mock(Step.class);
- Mockito.when(s.toString()).thenReturn("0123456789");
- assertEquals("0123...", TraversalHelper.getShortName(s, 7));
- }
-
- @Test
- public void shouldIdentifyStarGraphTraversals() {
- assertTrue(TraversalHelper.isLocalStarGraph(__.identity().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.id().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.out().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.label().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.bothE().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.values().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.properties().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.repeat(__.identity()).asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.repeat(__.has("name")).asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.out().repeat(__.identity()).asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.out().id().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.label().union(__.out(), in()).asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.label().union(__.out(), in()).id().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.coalesce(out("likes"), out("knows"), out("created")).groupCount().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.local(__.out()).groupCount().asAdmin()));
- assertTrue(TraversalHelper.isLocalStarGraph(__.local(__.out()).groupCount().by(T.id).asAdmin()));
- // assertTrue(TraversalHelper.isLocalStarGraph(__.out().repeat(__.has("name")).asAdmin()));
- //
- assertFalse(TraversalHelper.isLocalStarGraph(__.out().label().asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.out().values().asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.out().valueMap().asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.repeat(__.out()).asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.repeat(__.has("name").out()).asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.repeat(__.has("name").union(__.out(), in())).asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.union(__.out(), in()).label().asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.union(__.out(), in().out()).asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.union(__.out(), __.out().union(in(), __.out())).asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.union(__.values(), __.out().union(in(), __.out())).out().asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.coalesce(out("likes"), out("knows"), out("created")).groupCount().by("name").asAdmin()));
- assertFalse(TraversalHelper.isLocalStarGraph(__.local(__.out()).groupCount().by("name").asAdmin()));
- }
-
- @Test
- public void shouldGetStepsByClass() {
- Set<String> labels = (Set) TraversalHelper.getStepsOfClass(VertexStep.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
- .stream()
- .flatMap(s -> s.getLabels().stream())
- .collect(Collectors.toSet());
- assertEquals(2, labels.size());
- assertTrue(labels.contains("a"));
- assertTrue(labels.contains("c"));
- //
- labels = (Set) TraversalHelper.getStepsOfAssignableClass(VertexStep.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
- .stream()
- .flatMap(s -> s.getLabels().stream())
- .collect(Collectors.toSet());
- assertEquals(2, labels.size());
- assertTrue(labels.contains("a"));
- assertTrue(labels.contains("c"));
- //
- labels = (Set) TraversalHelper.getStepsOfAssignableClass(FlatMapStep.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
- .stream()
- .flatMap(s -> s.getLabels().stream())
- .collect(Collectors.toSet());
- assertEquals(3, labels.size());
- assertTrue(labels.contains("a"));
- assertTrue(labels.contains("b"));
- assertTrue(labels.contains("c"));
- //
- labels = (Set) TraversalHelper.getStepsOfClass(Step.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
- .stream()
- .flatMap(s -> s.getLabels().stream())
- .collect(Collectors.toSet());
- assertEquals(0, labels.size());
- //
- labels = (Set) TraversalHelper.getStepsOfAssignableClass(Step.class, __.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin())
- .stream()
- .flatMap(s -> s.getLabels().stream())
- .collect(Collectors.toSet());
- assertEquals(4, labels.size());
- assertTrue(labels.contains("a"));
- assertTrue(labels.contains("b"));
- assertTrue(labels.contains("c"));
- assertTrue(labels.contains("d"));
- }
-
- @Test
- public void shouldGetLabels() {
- Set<String> labels = (Set) TraversalHelper.getLabels(__.out().as("a").values("name").as("b").in().as("c").groupCount().as("d").asAdmin());
- assertEquals(4, labels.size());
- assertTrue(labels.contains("a"));
- assertTrue(labels.contains("b"));
- assertTrue(labels.contains("c"));
- assertTrue(labels.contains("d"));
- labels = (Set) TraversalHelper.getLabels(__.out().as("a").repeat(__.out("name").as("b")).local(in().as("c")).as("d").groupCount().by(outE().as("e")).as("f").asAdmin());
- assertEquals(6, labels.size());
- assertTrue(labels.contains("a"));
- assertTrue(labels.contains("b"));
- assertTrue(labels.contains("c"));
- assertTrue(labels.contains("d"));
- assertTrue(labels.contains("e"));
- assertTrue(labels.contains("f"));
- }
-
- @Test
- public void shouldFindStepsRecursively() {
- final Traversal<?,?> traversal = __.V().repeat(__.out().simplePath());
- assertTrue(TraversalHelper.anyStepRecursively(s -> s instanceof PathFilterStep, traversal.asAdmin()));
- }
-}