Github user jorgebay commented on a diff in the pull request: https://github.com/apache/tinkerpop/pull/747#discussion_r150542730 --- Diff: gremlin-python/src/main/jython/radish/feature_steps.py --- @@ -0,0 +1,231 @@ +''' +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. +''' + +import json +import re +from gremlin_python.structure.graph import Graph, Path +from gremlin_python.process.graph_traversal import __ +from gremlin_python.process.traversal import Cardinality, P, Scope, Column, Order, Direction, T, Pick, Operator +from radish import given, when, then +from hamcrest import * + +regex_and = re.compile(r"([(.,\s])and\(") +regex_as = re.compile(r"([(.,\s])as\(") +regex_from = re.compile(r"([(.,\s])from\(") +regex_global = re.compile(r"([(.,\s])global") +regex_in = re.compile(r"([(.,\s])in\(") +regex_is = re.compile(r"([(.,\s])is\(") +regex_not = re.compile(r"([(.,\s])not\(") +regex_or = re.compile(r"([(.,\s])or\(") + + +ignores = [ + "g.V(v1Id).out().inject(v2).values(\"name\")" # bug in attachment won't connect v2 + ] + + +@given("the {graph_name:w} graph") +def choose_graph(step, graph_name): + 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 + return + + +@given("using the parameter {param_name:w} defined as {param:QuotedString}") +def add_parameter(step, param_name, param): + if not hasattr(step.context, "traversal_params"): + step.context.traversal_params = {} + + step.context.traversal_params[param_name] = _convert(param, step.context) + + +@given("the traversal of") +def translate_traversal(step): + step.context.ignore = ignores.__contains__(step.text) + 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") +def iterate_the_traversal(step): + step.context.result = map(lambda x: _convert_results(x), step.context.traversal.toList()) + + +@when("iterated next") +def next_the_traversal(step): + step.context.result = map(lambda x: _convert_results(x), step.context.traversal.next()) + + +@then("the result should be {characterized_as:w}") +def assert_result(step, characterized_as): + if step.context.ignore: + return + + if characterized_as == "empty": # no results + assert_that(len(step.context.result), equal_to(0)) + elif characterized_as == "ordered": # results asserted in the order of the data table + _table_assertion(step.table, step.context.result, step.context, True) + elif characterized_as == "unordered": # results asserted in any order + _table_assertion(step.table, step.context.result, step.context, False) + elif characterized_as == "of": # results may be of any of the specified items in the data table + _any_assertion(step.table, step.context.result, step.context) + else: + 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): + if step.context.ignore: + return + + t = _make_traversal(step.context.g, traversal_string.replace('\\"', '"'), + step.context.traversal_params if hasattr(step.context, "traversal_params") else {}) + assert_that(count, equal_to(t.count().next())) + + +@then("the result should have a count of {count:d}") +def assert_count(step, count): + assert_that(len(step.context.result), equal_to(count)) + + +@then("nothing should happen because") +def nothing_happening(step): + return --- End diff -- I think including steps on the feature to denote that can't be migrated is OK and the format is OK. I was commenting on the way python feature handles it, but it's not directly related to the test suite. I agree that its not important for this patch.
---