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