TINKERPOP-1784 Added test for drop() and graph init language Graph init language provides a way to add data to an empty graph as part of a scenario.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d74d6a6f Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d74d6a6f Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d74d6a6f Branch: refs/heads/TINKERPOP-1784 Commit: d74d6a6f66498d564cbee003ecb4cf93dd27606c Parents: dd9d1ba Author: Stephen Mallette <sp...@genoprime.com> Authored: Tue Oct 17 15:20:28 2017 -0400 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Fri Nov 10 19:55:20 2017 -0500 ---------------------------------------------------------------------- .../src/main/jython/radish/feature_steps.py | 53 ++++++++++------ gremlin-test/features/filter/Drop.feature | 63 ++++++++++++++++++++ .../gremlin/process/FeatureCoverageTest.java | 2 + 3 files changed, 101 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d74d6a6f/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 5040896..a0fcd9b 100644 --- a/gremlin-python/src/main/jython/radish/feature_steps.py +++ b/gremlin-python/src/main/jython/radish/feature_steps.py @@ -36,10 +36,19 @@ regex_or = re.compile(r"([(.,\s])or\(") @given("the {graph_name:w} graph") def choose_graph(step, graph_name): - # only have modern atm but graphName would be used to select the right one step.context.g = Graph().traversal().withRemote(step.context.remote_conn[graph_name]) +@given("the graph initializer of") +def initialize_graph(step): + traversal = _make_traversal(step.context.g, step.text, {}) + + # just be sure that the traversal returns something to prove that it worked to some degree. probably + # is overkill to try to assert the complete success of this init operation. presumably the test + # suite would fail elsewhere if this didn't work which would help identify a problem. + assert len(traversal.toList()) > 0 + + @given("an unsupported test") def unsupported_scenario(step): # this is a do nothing step as the test can't be supported for whatever reason @@ -56,22 +65,9 @@ def add_parameter(step, param_name, param): @given("the traversal of") def translate_traversal(step): - g = step.context.g - b = {"g": g, - "__": __, - "Column": Column, - "Direction": Direction, - "Order": Order, - "P": P, - "Pick": Pick, - "Scope": Scope, - "T": T} - - if hasattr(step.context, "traversal_params"): - b.update(step.context.traversal_params) - - # print _translate(step.text + " - " + str(b)) - step.context.traversal = eval(_translate(step.text), b) + step.context.traversal = _make_traversal( + step.context.g, step.text, + step.context.traversal_params if hasattr(step.context, "traversal_params") else {}) @when("iterated to list") @@ -96,6 +92,12 @@ def assert_result(step, characterized_as): raise ValueError("unknown data characterization of " + characterized_as) +@then("the graph should return {count:d} for count of {traversal_string:QuotedString}") +def assert_side_effects(step, count, traversal_string): + t = _make_traversal(step.context.g, traversal_string, {}) + assert_that(count, equal_to(t.count().next())) + + @then("nothing should happen because") def nothing_happening(step): return @@ -177,3 +179,20 @@ def _translate(traversal): replaced = regex_not.sub(r"\1not_(", replaced) replaced = regex_or.sub(r"\1or_(", replaced) return regex_in.sub(r"\1in_(", replaced) + + +def _make_traversal(g, traversal_string, params): + b = {"g": g, + "__": __, + "Column": Column, + "Direction": Direction, + "Order": Order, + "P": P, + "Pick": Pick, + "Scope": Scope, + "T": T} + + b.update(params) + + # print _translate(step.text + " - " + str(b)) + return eval(_translate(traversal_string), b) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d74d6a6f/gremlin-test/features/filter/Drop.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/filter/Drop.feature b/gremlin-test/features/filter/Drop.feature new file mode 100644 index 0000000..753b377 --- /dev/null +++ b/gremlin-test/features/filter/Drop.feature @@ -0,0 +1,63 @@ +# 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 - drop() + + Scenario: g_V_drop + Given the empty graph + And the graph initializer of + """ + g.addV().as("a").addV().as("b").addE("knows").to("a") + """ + And the traversal of + """ + g.V().drop() + """ + When iterated to list + Then the result should be empty + And the graph should return 0 for count of "g.V()" + And the graph should return 0 for count of "g.E()" + + Scenario: g_V_outE_drop + Given the empty graph + And the graph initializer of + """ + g.addV().as("a").addV().as("b").addE("knows").to("a") + """ + And the traversal of + """ + g.V().outE().drop() + """ + When iterated to list + Then the result should be empty + And the graph should return 2 for count of "g.V()" + And the graph should return 0 for count of "g.E()" + + Scenario: g_V_properties_drop + Given the empty graph + And the graph initializer of + """ + g.addV().property("name","bob").addV().property("name","alice") + """ + And the traversal of + """ + g.V().properties().drop() + """ + When iterated to list + Then the result should be empty + And the graph should return 2 for count of "g.V()" + And the graph should return 0 for count of "g.V().properties()" \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d74d6a6f/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 7c53cb9..1f52581 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 @@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.branch.BranchTest; import org.apache.tinkerpop.gremlin.process.traversal.step.branch.ChooseTest; import org.apache.tinkerpop.gremlin.process.traversal.step.branch.OptionalTest; import org.apache.tinkerpop.gremlin.process.traversal.step.filter.CoinTest; +import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropTest; import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountTest; import org.apache.tinkerpop.gremlin.process.traversal.step.map.PathTest; import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexTest; @@ -67,6 +68,7 @@ public class FeatureCoverageTest { OptionalTest.class, // filter CoinTest.class, + DropTest.class, // map CountTest.class, PathTest.class,