This is an automated email from the ASF dual-hosted git repository. colegreer pushed a commit to branch gvalue-feature-tests in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 28bdeeba3b56308b166f41eb754d046ed826e8c3 Author: Cole-Greer <[email protected]> AuthorDate: Sun Nov 24 18:54:17 2024 -0800 fix tests --- .../gremlin/language/grammar/ArgumentVisitor.java | 21 ++-- .../language/grammar/GenericLiteralVisitor.java | 2 - .../language/grammar/TraversalMethodVisitor.java | 2 +- .../gremlin/process/traversal/dsl/graph/__.java | 11 ++ .../gremlin/process/traversal/step/GValue.java | 3 + .../process/traversal/step/branch/RepeatStep.java | 4 +- .../language/grammar/ArgumentVisitorTest.java | 112 +++++++++++++-------- .../grammar/TraversalMethodVisitorTest.java | 15 +-- .../language/translator/GremlinTranslatorTest.java | 10 +- .../remote/EmbeddedRemoteConnectionTest.java | 5 +- .../gremlin/process/traversal/GremlinLangTest.java | 17 ++-- .../dsl/graph/GraphTraversalSourceTest.java | 5 +- .../gremlin/server/HttpDriverIntegrateTest.java | 5 +- 13 files changed, 125 insertions(+), 87 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java index e72ea7c826..46ada3e6b6 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java @@ -39,25 +39,16 @@ public class ArgumentVisitor extends DefaultGremlinBaseVisitor<Object> { this.antlr = antlr; } - /** - * Wrapper for visit function for object types. - */ - public Object parseObject(final GremlinParser.GenericLiteralArgumentContext ctx) { - return visitGenericLiteralArgument(ctx); - } - - /** - * Wrapper for visit function for {@link Vertex} types. - */ - public Vertex parseVertex(final GremlinParser.StructureVertexContext ctx) { - return antlr.structureVisitor.visitStructureVertex(ctx); - } - /** * Wrapper for visit function for {@code Map} types. */ public Map parseMap(final GremlinParser.GenericLiteralMapNullableArgumentContext ctx) { - return (Map) visitGenericLiteralMapNullableArgument(ctx); + Object literalOrVar = visitGenericLiteralMapNullableArgument(ctx); + if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) { + return ((GValue<Map>) literalOrVar).get(); + } else { + return (Map) literalOrVar; + } } /** diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java index 9f28d4c76c..0f86540636 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java @@ -365,8 +365,6 @@ public class GenericLiteralVisitor extends DefaultGremlinBaseVisitor<Object> { return literalMap; } - - /** * {@inheritDoc} */ diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java index 035e9faf69..63a43cf8d0 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java @@ -1095,7 +1095,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal> } else if (ctx.ioOptionsValues() != null) { o = WithOptionsVisitor.instance().visitIoOptionsValues(ctx.ioOptionsValues()); } else { - o = antlr.argumentVisitor.parseObject(ctx.genericLiteralArgument()); + o = antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument()); } return graphTraversal.with(k, o); } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java index 5d24f70d44..615a3a96f1 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java @@ -26,9 +26,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.Scope; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.Traverser; import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; +import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.FormatStep; +import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet; +import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper; import org.apache.tinkerpop.gremlin.structure.Column; import org.apache.tinkerpop.gremlin.structure.Direction; import org.apache.tinkerpop.gremlin.structure.Edge; @@ -1132,6 +1135,14 @@ public class __ { return __.<A>start().has(label, propertyKey, value); } + /** + * @see GraphTraversal#has(GValue, String, P) + */ + public static <A> GraphTraversal<A, A> has(final GValue<String> label, final String propertyKey, final P<?> predicate) { + return __.<A>start().has(label, propertyKey, predicate); + } + + /** * @see GraphTraversal#has(GValue, String, Object) */ diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java index 0608d94a19..b0d2fdc6fc 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java @@ -52,6 +52,9 @@ public class GValue<V> implements Cloneable, Serializable { } private GValue(final String name, final GType type, final V value) { + if (name != null && name.startsWith("_")) { + throw new IllegalArgumentException(String.format("Invalid GValue name [%s]. Should not start with _.", name)); + } this.name = name; this.type = type; this.value = value; diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java index 73414cf290..9e852bf388 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java @@ -179,9 +179,11 @@ public final class RepeatStep<S> extends ComputerAwareStep<S, S> implements Trav @Override public int hashCode() { - int result = super.hashCode() ^ this.repeatTraversal.hashCode(); + int result = super.hashCode(); result ^= Boolean.hashCode(this.untilFirst); result ^= Boolean.hashCode(this.emitFirst) << 1; + if (this.repeatTraversal != null) + result ^= this.repeatTraversal.hashCode(); if (this.loopName != null) result ^= this.loopName.hashCode(); if (this.untilTraversal != null) diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java index fc16ef4ac1..ab5fbdcecb 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java @@ -31,6 +31,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions; import org.apache.tinkerpop.gremlin.process.traversal.Scope; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.Column; import org.apache.tinkerpop.gremlin.structure.Direction; import org.apache.tinkerpop.gremlin.structure.T; @@ -84,56 +85,67 @@ public class ArgumentVisitorTest { public static Iterable<Object[]> generateTestParameters() { return Arrays.asList(new Object[][]{ {Boolean.class, "x", new VariableResolverException("x"), createAntlr(VariableResolver.NoVariableResolver.instance())}, - {Boolean.class, "true", true, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", true)))}, - {Boolean.class, "false", false, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", true)))}, + {Boolean.class, "true", true, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", true)))}, + {Boolean.class, "false", false, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", true)))}, + {Boolean.class, "x", GValue.of("x", true), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", true)))}, {Boolean.class, "x", true, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", true)))}, {Integer.class, "x", new VariableResolverException("x"), createAntlr(VariableResolver.NoVariableResolver.instance())}, - {Integer.class, "0", 0, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 100)))}, - {Integer.class, "0i", 0, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 100)))}, - {Integer.class, "0L", 0L, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 100)))}, + {Integer.class, "0", 0, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 100)))}, + {Integer.class, "0i", 0, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 100)))}, + {Integer.class, "0L", 0L, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 100)))}, + {Integer.class, "x", GValue.of("x", 0), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 0)))}, + {Integer.class, "x", GValue.of("x", 0L), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 0L)))}, {Integer.class, "x", 0, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 0)))}, {Integer.class, "x", 0L, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 0L)))}, {Float.class, "x", new VariableResolverException("x"), createAntlr(VariableResolver.NoVariableResolver.instance())}, - {Float.class, "0.0d", 0.0, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 1000.0)))}, - {Float.class, "0d", 0.0, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 1000.0)))}, - {Float.class, "0F", 0.0F, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 1000.0F)))}, + {Float.class, "0.0d", 0.0, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 1000.0)))}, + {Float.class, "0d", 0.0, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 1000.0)))}, + {Float.class, "0F", 0.0F, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 1000.0F)))}, + {Float.class, "x", GValue.of("x", 0.0), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 0.0)))}, + {Float.class, "x", GValue.of("x", 0.0F), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", 0.0F)))}, {Float.class, "x", 0.0, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 0.0)))}, {Float.class, "x", 0.0F, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", 0.0F)))}, {String.class, "x", new VariableResolverException("x"), createAntlr(VariableResolver.NoVariableResolver.instance())}, - {String.class, "'test'", "test", createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, + {String.class, "'test'", "test", createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {String.class, "x", GValue.of("x", "test"), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "test")))}, + {String.class, "x", GValue.of("x", "graphson"), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", IO.graphson)))}, {String.class, "x", "test", createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "test")))}, {String.class, "x", "graphson", createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", IO.graphson)))}, {StringNullable.class, "x", new VariableResolverException("x"), createAntlr(VariableResolver.NoVariableResolver.instance())}, - {StringNullable.class, "null", null, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, + {StringNullable.class, "null", null, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {StringNullable.class, "x", GValue.of("x", null), createAntlr(new VariableResolver.DefaultVariableResolver(nullMap))}, {StringNullable.class, "x", null, createAntlr(new VariableResolver.DirectVariableResolver(nullMap))}, {Object.class, "x", new VariableResolverException("x"), createAntlr(VariableResolver.NoVariableResolver.instance())}, - {Object.class, "'test'", "test", createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Object.class, "'test'", "test", createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Object.class, "x", GValue.of("x", "test"), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "test")))}, + {Object.class, "x", GValue.of("x", now), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", now)))}, {Object.class, "x", "test", createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "test")))}, {Object.class, "x", now, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", now)))}, - {Object.class, "[1,2,3]", Arrays.asList(1, 2, 3), createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", now)))}, + {Object.class, "[1,2,3]", Arrays.asList(1, 2, 3), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", now)))}, + {Object.class, "x", GValue.of("x", P.eq(100)), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", P.eq(100))))}, {Object.class, "x", P.eq(100), createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", P.eq(100))))}, - {Direction.class, "Direction.OUT", Direction.OUT, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Direction.class, "OUT", Direction.OUT, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Vertex.class, "new Vertex(1i,'person')", new ReferenceVertex(1, "person"), createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", Direction.from)))}, - {Order.class, "Order.desc", Order.desc, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Scope.class, "Scope.local", Scope.local, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Scope.class, "local", Scope.local, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {T.class, "T.label", T.label, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {T.class, "label", T.label, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {VertexProperty.Cardinality.class, "Cardinality.list", VertexProperty.Cardinality.list, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {VertexProperty.Cardinality.class, "list", VertexProperty.Cardinality.list, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {DT.class, "DT.hour", DT.hour, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {DT.class, "hour", DT.hour, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Merge.class, "Merge.onMatch", Merge.onMatch, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Merge.class, "onMatch", Merge.onMatch, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Pop.class, "Pop.last", Pop.last, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Pop.class, "last", Pop.last, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Operator.class, "Operator.sum", Operator.sum, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Operator.class, "sum", Operator.sum, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Column.class, "Column.keys", Column.keys, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {Column.class, "keys", Column.keys, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {SackFunctions.Barrier.class, "Barrier.normSack", SackFunctions.Barrier.normSack, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, - {SackFunctions.Barrier.class, "Barrier.normSack", SackFunctions.Barrier.normSack, createAntlr(new VariableResolver.DirectVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Direction.class, "Direction.OUT", Direction.OUT, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Direction.class, "OUT", Direction.OUT, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Vertex.class, "new Vertex(1i,'person')", new ReferenceVertex(1, "person"), createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", Direction.from)))}, + {Order.class, "Order.desc", Order.desc, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Scope.class, "Scope.local", Scope.local, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Scope.class, "local", Scope.local, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {T.class, "T.label", T.label, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {T.class, "label", T.label, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {VertexProperty.Cardinality.class, "Cardinality.list", VertexProperty.Cardinality.list, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {VertexProperty.Cardinality.class, "list", VertexProperty.Cardinality.list, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {DT.class, "DT.hour", DT.hour, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {DT.class, "hour", DT.hour, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Merge.class, "Merge.onMatch", Merge.onMatch, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Merge.class, "onMatch", Merge.onMatch, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Pop.class, "Pop.last", Pop.last, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Pop.class, "last", Pop.last, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Operator.class, "Operator.sum", Operator.sum, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Operator.class, "sum", Operator.sum, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Column.class, "Column.keys", Column.keys, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {Column.class, "keys", Column.keys, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {SackFunctions.Barrier.class, "Barrier.normSack", SackFunctions.Barrier.normSack, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, + {SackFunctions.Barrier.class, "Barrier.normSack", SackFunctions.Barrier.normSack, createAntlr(new VariableResolver.DefaultVariableResolver(ElementHelper.asMap("x", "nope")))}, }); } @@ -141,15 +153,35 @@ public class ArgumentVisitorTest { public void shouldParse() { final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString(script)); final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer)); - if (clazz.equals(StringNullable.class)) { + if (clazz.equals(Boolean.class)) { + assertParsing(() -> { + final GremlinParser.BooleanArgumentContext ctx = parser.booleanArgument(); + return antlrToLanguage.argumentVisitor.visitBooleanArgument(ctx); + }); + } else if (clazz.equals(Integer.class)) { + assertParsing(() -> { + final GremlinParser.IntegerArgumentContext ctx = parser.integerArgument(); + return antlrToLanguage.argumentVisitor.visitIntegerArgument(ctx); + }); + } else if (clazz.equals(Float.class)) { + assertParsing(() -> { + final GremlinParser.FloatArgumentContext ctx = parser.floatArgument(); + return antlrToLanguage.argumentVisitor.visitFloatArgument(ctx); + }); + } else if (clazz.equals(String.class)) { + assertParsing(() -> { + final GremlinParser.StringArgumentContext ctx = parser.stringArgument(); + return antlrToLanguage.argumentVisitor.visitStringArgument(ctx); + }); + } else if (clazz.equals(StringNullable.class)) { assertParsing(() -> { final GremlinParser.StringNullableArgumentContext ctx = parser.stringNullableArgument(); - return antlrToLanguage.argumentVisitor.parseString(ctx); + return antlrToLanguage.argumentVisitor.visitStringNullableArgument(ctx); }); } else if (clazz.equals(Object.class)) { assertParsing(() -> { final GremlinParser.GenericLiteralArgumentContext ctx = parser.genericLiteralArgument(); - return antlrToLanguage.argumentVisitor.parseObject(ctx); + return antlrToLanguage.argumentVisitor.visitGenericLiteralArgument(ctx); }); } else if (clazz.equals(List.class)) { assertParsing(() -> { @@ -160,8 +192,8 @@ public class ArgumentVisitorTest { assertParsing(() -> TraversalEnumParser.parseTraversalEnumFromContext(Direction.class, parser.traversalDirection())); } else if (clazz.equals(Vertex.class)) { assertParsing(() -> { - final GremlinParser.StructureVertexContext ctx = parser.structureVertex(); - return antlrToLanguage.argumentVisitor.parseVertex(ctx); + final GremlinParser.StructureVertexArgumentContext ctx = parser.structureVertexArgument(); + return antlrToLanguage.argumentVisitor.visitStructureVertexArgument(ctx); }); } else if (clazz.equals(Order.class)) { assertParsing(() -> TraversalEnumParser.parseTraversalEnumFromContext(Order.class, parser.traversalOrder())); @@ -205,4 +237,4 @@ public class ArgumentVisitorTest { } private static class StringNullable { } -} +} \ No newline at end of file diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitorTest.java index cc4f0c1fd9..ebc253ee74 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitorTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitorTest.java @@ -29,6 +29,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Pop; import org.apache.tinkerpop.gremlin.process.traversal.Scope; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.step.util.WithOptions; import org.apache.tinkerpop.gremlin.structure.Column; import org.apache.tinkerpop.gremlin.structure.Direction; @@ -69,8 +70,8 @@ public class TraversalMethodVisitorTest { } private void compare(Object expected, Object actual) { - assertEquals(((DefaultGraphTraversal) expected).asAdmin().getGremlinLang(), - ((DefaultGraphTraversal) actual).asAdmin().getGremlinLang()); + assertEquals(((DefaultGraphTraversal) expected).asAdmin(), + ((DefaultGraphTraversal) actual).asAdmin()); } @Test @@ -124,7 +125,7 @@ public class TraversalMethodVisitorTest { @Test public void shouldParseTraversalMethod_and() throws Exception { - compare(g.V().and(outE("knows")), eval("g.V().and(outE('knows'))")); + compare(g.V().and(outE(GValue.of("knows"))), eval("g.V().and(outE('knows'))")); } @Test @@ -158,12 +159,12 @@ public class TraversalMethodVisitorTest { @Test public void shouldParseTraversalMethod_both_SingleString() throws Exception { - compare(g.V().both("test"), eval("g.V().both('test')")); + compare(g.V().both(GValue.of("test")), eval("g.V().both('test')")); } @Test public void shouldParseTraversalMethod_both_MultiString() throws Exception { - compare(g.V().both(new String[]{"a", "b"}), eval("g.V().both('a', 'b')")); + compare(g.V().both(new GValue[]{GValue.of("a"), GValue.of("b")}), eval("g.V().both('a', 'b')")); } @Test @@ -529,7 +530,7 @@ public class TraversalMethodVisitorTest { @Test public void shouldParseTraversalMethod_inE() throws Exception { - compare(g.V().inE("created"), eval("g.V().inE('created')")); + compare(g.V().inE(GValue.of("created")), eval("g.V().inE('created')")); } @Test @@ -962,7 +963,7 @@ public class TraversalMethodVisitorTest { @Test public void shouldParseTraversalMethod_to_Direction_String() throws Exception { - compare(g.V().to(Direction.IN, "asd"), eval("g.V().to(IN, 'asd')")); + compare(g.V().to(Direction.IN, GValue.of("asd")), eval("g.V().to(IN, 'asd')")); } @Test diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java index 82e3461cc5..3858b265f2 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java @@ -48,7 +48,7 @@ public class GremlinTranslatorTest { public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {"g.V(l1)", Collections.singletonList("l1")}, - {"g.V().hasLabel('person').has(x, y).as('a').out('knows').as('b').select('a', 'b')", Arrays.asList("x", "y")}, + {"g.V().hasLabel('person').has('key', y).as('a').out('knows').as('b').select('a', 'b')", Collections.singletonList("y")}, {"g.V(x).map(out(y).count())", Arrays.asList("x", "y")}, }); } @@ -1063,11 +1063,11 @@ public class GremlinTranslatorTest { "g.V().limit(1l)", "g.V().limit(1)", "g.V().limit(long(1))"}, - {"g.V().limit(x)", - null, + {"g.V().limit(1)", null, - "g.V().Limit<object>(x)", - "g.V().Limit(x)", + "g.V().limit(number0)", + "g.V().Limit<object>(1)", + "g.V().Limit(1)", null, null, null, diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnectionTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnectionTest.java index ad5a75c7a3..1f3d237620 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnectionTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnectionTest.java @@ -19,13 +19,12 @@ package org.apache.tinkerpop.gremlin.process.remote; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph; import org.junit.Test; import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal; -import static org.apache.tinkerpop.gremlin.process.traversal.GremlinLang.Parameter.value; -import static org.apache.tinkerpop.gremlin.process.traversal.GremlinLang.Parameter.var; import static org.junit.Assert.assertEquals; public class EmbeddedRemoteConnectionTest { @@ -42,6 +41,6 @@ public class EmbeddedRemoteConnectionTest { final Graph graph = EmptyGraph.instance(); final GraphTraversalSource g = graph.traversal(); final GraphTraversalSource simulatedRemoteG = traversal().with(new EmbeddedRemoteConnection(g)); - assertEquals(33, simulatedRemoteG.inject(value(11), var("x", 22)).sum().next()); + assertEquals(33, simulatedRemoteG.inject(GValue.of(11), GValue.of("x", 22)).sum().next()); } } diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java index 47318fafc3..d21beed912 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java @@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal; import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang.Parameter; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy; @@ -120,7 +121,7 @@ public class GremlinLangTest { "g.withStrategies(new SubgraphStrategy(checkAdjacentVertices:true,vertices:__.hasLabel(\"person\"))).V()",}, {g.withStrategies(SubgraphStrategy.build().vertices(__.has("name", P.within("josh", "lop", "ripple"))).create()).V(), "g.withStrategies(new SubgraphStrategy(checkAdjacentVertices:true,vertices:__.has(\"name\",P.within([\"josh\",\"lop\",\"ripple\"])))).V()"}, - {g.inject(Parameter.var("x", "x")).V(Parameter.var("ids", new int[]{1, 2, 3})), "g.inject(x).V(ids)"}, + {g.inject(GValue.of("x", "x")).V(GValue.of("ids", new int[]{1, 2, 3})), "g.inject(x).V(ids)"}, {newG().inject(Parameter.value("test1"), Parameter.value("test2")), "g.inject(_0,_1)"}, {newG().inject(new HashSet<>(Arrays.asList(1, 2))), "g.inject({1,2})"}, }); @@ -130,35 +131,35 @@ public class GremlinLangTest { @Test(expected = IllegalArgumentException.class) public void shouldCheckParameterNameDontNeedEscaping() { - g.V(GremlinLang.Parameter.var("\"", new int[]{1, 2, 3})); + g.V(GValue.of("\"", new int[]{1, 2, 3})); } @Test(expected = IllegalArgumentException.class) public void shouldCheckParameterNameIsNotNumber() { - g.V(GremlinLang.Parameter.var("1", new int[]{1, 2, 3})); + g.V(GValue.of("1", new int[]{1, 2, 3})); } @Test(expected = IllegalArgumentException.class) public void shouldCheckParameterNameIsValidIdentifier() { - g.V(GremlinLang.Parameter.var("1a", new int[]{1, 2, 3})); + g.V(GValue.of("1a", new int[]{1, 2, 3})); } @Test(expected = IllegalArgumentException.class) public void shouldCheckParameterNameIsNotReserved() { - g.V(GremlinLang.Parameter.var("_1", new int[]{1, 2, 3})); + g.V(GValue.of("_1", new int[]{1, 2, 3})); } @Test(expected = IllegalArgumentException.class) public void shouldNowAllowParameterNameDuplicates() { - final GremlinLang gremlin = g.inject(Parameter.var("ids", new int[]{1, 2})).V(Parameter.var("ids", new int[]{2, 3})) + final GremlinLang gremlin = g.inject(GValue.of("ids", new int[]{1, 2})).V(GValue.of("ids", new int[]{2, 3})) .asAdmin().getGremlinLang(); } @Test public void shouldAllowToUseSameParameterTwice() { final int[] value = new int[]{1, 2, 3}; - final Parameter p = Parameter.var("ids", value); - final GremlinLang gremlin = g.inject(p).V(p).asAdmin().getGremlinLang(); + final GValue<int[]> gValue = GValue.of("ids", value); + final GremlinLang gremlin = g.inject(gValue).V(gValue).asAdmin().getGremlinLang(); assertEquals("g.inject(ids).V(ids)", gremlin.getGremlin()); assertEquals(value, gremlin.getParameters().get("ids")); diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java index fb96db1f6f..83bc03ad44 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java @@ -23,6 +23,7 @@ import org.apache.tinkerpop.gremlin.process.remote.RemoteConnection; import org.apache.tinkerpop.gremlin.process.traversal.GremlinLang; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.Order; +import org.apache.tinkerpop.gremlin.process.traversal.step.GValue; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy; import org.apache.tinkerpop.gremlin.structure.T; @@ -167,7 +168,7 @@ public class GraphTraversalSourceTest { assertThat(g.getGremlinLang().getOptionsStrategies().isEmpty(), is(true)); assertThat(g.getGremlinLang().getParameters().isEmpty(), is(true)); - GremlinLang lang = g.V(value(11)).asAdmin().getGremlinLang(); + GremlinLang lang = g.V(GValue.of(11)).asAdmin().getGremlinLang(); assertThat(g.getGremlinLang().getParameters().isEmpty(), is(true)); assertThat(lang.getParameters().size(), is(1)); assertThat(lang.getParameters().values(), containsInAnyOrder(11)); @@ -175,7 +176,7 @@ public class GraphTraversalSourceTest { paramMatcher.find(); assertThat(lang.getParameters().keySet(), containsInAnyOrder(paramMatcher.group())); - lang = g.V(value(22)).asAdmin().getGremlinLang(); + lang = g.V(GValue.of(22)).asAdmin().getGremlinLang(); assertThat(g.getGremlinLang().getParameters().isEmpty(), is(true)); assertThat(lang.getParameters().size(), is(1)); assertThat(lang.getParameters().values(), containsInAnyOrder(22)); diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/HttpDriverIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/HttpDriverIntegrateTest.java index 87a1ed5476..cff1068097 100644 --- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/HttpDriverIntegrateTest.java +++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/HttpDriverIntegrateTest.java @@ -88,9 +88,8 @@ public class HttpDriverIntegrateTest extends AbstractGremlinServerIntegrationTes final Cluster cluster = TestClientFactory.build().create(); final Client client = cluster.connect(); try { - final RequestOptions ro = RequestOptions.build().language("gremlin-lang"). - addParameter("x", "Good bye, world!").create(); - client.submit("g.inject(1).fail(x)", ro).all().get(); + final RequestOptions ro = RequestOptions.build().language("gremlin-lang").create(); + client.submit("g.inject(1).fail('Good bye, world!')", ro).all().get(); fail("should throw exception"); } catch (Exception ex) { final Throwable inner = ExceptionHelper.getRootCause(ex);
