TINKERPOP-1784 Added support for testing branch() with gherkin
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2a730e7c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2a730e7c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2a730e7c Branch: refs/heads/TINKERPOP-1784 Commit: 2a730e7cf278db0d0847f4d9de5c9936c57168bb Parents: 7a948db Author: Stephen Mallette <sp...@genoprime.com> Authored: Tue Oct 10 13:17:55 2017 -0400 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Mon Oct 30 13:23:34 2017 -0400 ---------------------------------------------------------------------- .../src/main/jython/radish/feature_steps.py | 12 ++-- gremlin-test/features/branch/Branch.feature | 76 ++++++++++++++++++++ .../gremlin/process/FeatureCoverageTest.java | 2 + 3 files changed, 86 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2a730e7c/gremlin-python/src/main/jython/radish/feature_steps.py ---------------------------------------------------------------------- diff --git a/gremlin-python/src/main/jython/radish/feature_steps.py b/gremlin-python/src/main/jython/radish/feature_steps.py index a2efb67..0d52d75 100644 --- a/gremlin-python/src/main/jython/radish/feature_steps.py +++ b/gremlin-python/src/main/jython/radish/feature_steps.py @@ -21,7 +21,7 @@ import json import re from gremlin_python.structure.graph import Graph from gremlin_python.process.graph_traversal import __ -from gremlin_python.process.traversal import P, Scope, Column, Order, Direction, T +from gremlin_python.process.traversal import P, Scope, Column, Order, Direction, T, Pick from radish import given, when, then from hamcrest import * @@ -58,15 +58,17 @@ def translate_traversal(step): "Column": Column, "Direction": Direction, "Order": Order, - "P": P, - "gt": P.gt, + "P": P, "gt": P.gt, + "Pick": Pick, "any": Pick.any, "Scope": Scope, "T": T, "as_": __.as_, "bothE": __.bothE, "in_": __.in_, + "label": __.label, "out": __.out, - "repeat": __.repeat} + "repeat": __.repeat, + "values": __.values} if hasattr(step.context, "traversal_params"): b.update(step.context.traversal_params) @@ -123,6 +125,8 @@ def __convert(val, ctx): return ctx.lookup_e["modern"][val[2:-1]] elif isinstance(val, str) and re.match("^m\[.*\]$", val): # parse json as a map return __convert(json.loads(val[2:-1]), ctx) + elif isinstance(val, str) and re.match("^c\[.*\]$", val): # parse lambda + return lambda: (val[2:-1], "gremlin-groovy") else: return val http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2a730e7c/gremlin-test/features/branch/Branch.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/branch/Branch.feature b/gremlin-test/features/branch/Branch.feature new file mode 100644 index 0000000..d12fc0f --- /dev/null +++ b/gremlin-test/features/branch/Branch.feature @@ -0,0 +1,76 @@ +# 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. + +Feature: Step - branch() + + Scenario: g_V_branchXlabel_eq_person__a_bX_optionXa__ageX_optionXb__langX_optionXb__nameX + Given the modern graph + And using the parameter l1 is "c[it.get().label() == 'person' ? 'a' : 'b']" + And the traversal of + """ + g.V().branch(l1).option("a", values("age")).option("b", values("lang")).option("b", values("name")) + """ + When iterated to list + Then the result should be unordered + | java | + | java | + | lop | + | ripple | + | d[29] | + | d[27] | + | d[32] | + | d[35] | + + Scenario: g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX + Given the modern graph + And the traversal of + """ + g.V().branch(label().is("person").count()).option(1L, values("age")).option(0L, values("lang")).option(0L, values("name")) + """ + When iterated to list + Then the result should be unordered + | java | + | java | + | lop | + | ripple | + | d[29] | + | d[27] | + | d[32] | + | d[35] | + + Scenario: g_V_branchXlabel_isXpersonX_countX_optionX1__ageX_optionX0__langX_optionX0__nameX_optionXany__labelX + Given the modern graph + And the traversal of + """ + g.V().branch(label().is("person").count()).option(1L, values("age")).option(0L, values("lang")).option(0L, values("name")).option(any, label()) + """ + When iterated to list + Then the result should be unordered + | java | + | java | + | lop | + | ripple | + | d[29] | + | d[27] | + | d[32] | + | d[35] | + | person | + | person | + | person | + | person | + | software | + | software | \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2a730e7c/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java index ce66889..be01613 100644 --- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java +++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java @@ -18,6 +18,7 @@ */ package org.apache.tinkerpop.gremlin.process; +import org.apache.tinkerpop.gremlin.process.traversal.step.branch.BranchTest; import org.apache.tinkerpop.gremlin.process.traversal.step.filter.CoinTest; import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountTest; import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexTest; @@ -56,6 +57,7 @@ public class FeatureCoverageTest { // TEMPORARY while test framework is under development - all tests should ultimately be included final List<Class<?>> temp = Arrays.asList( + BranchTest.class, CoinTest.class, CountTest.class, GroupCountTest.class,