TINKERPOP-1784 Added tail() feature tests Added fixes to python test logic for the reserved global keyword and fixed ordering test logic a bit.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e67cbdb8 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e67cbdb8 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e67cbdb8 Branch: refs/heads/tp32 Commit: e67cbdb86241dd7d2baa42cb9a6e1458788839ee Parents: 7896264 Author: Stephen Mallette <sp...@genoprime.com> Authored: Fri Nov 10 12:05:57 2017 -0500 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Tue Nov 21 15:52:52 2017 -0500 ---------------------------------------------------------------------- .../src/main/jython/radish/feature_steps.py | 7 +- gremlin-test/features/filter/Tail.feature | 166 +++++++++++++++++++ 2 files changed, 171 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e67cbdb8/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 dae6361a..6c72bf1 100644 --- a/gremlin-python/src/main/jython/radish/feature_steps.py +++ b/gremlin-python/src/main/jython/radish/feature_steps.py @@ -28,6 +28,7 @@ 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\(") @@ -193,15 +194,17 @@ def _table_assertion(data, result, ctx, ordered): assert_that(results_to_test[ix], equal_to(val)) else: assert_that(val, is_in(results_to_test)) - results_to_test.remove(val) + results_to_test.remove(val) - assert_that(len(results_to_test), is_(0)) + if not ordered: + assert_that(len(results_to_test), is_(0)) def _translate(traversal): replaced = traversal.replace("\n", "") replaced = regex_and.sub(r"\1and_(", replaced) replaced = regex_from.sub(r"\1from_(", replaced) + replaced = regex_global.sub(r"\1global_", replaced) replaced = regex_as.sub(r"\1as_(", replaced) replaced = regex_is.sub(r"\1is_(", replaced) replaced = regex_not.sub(r"\1not_(", replaced) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e67cbdb8/gremlin-test/features/filter/Tail.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/filter/Tail.feature b/gremlin-test/features/filter/Tail.feature new file mode 100644 index 0000000..35083ef --- /dev/null +++ b/gremlin-test/features/filter/Tail.feature @@ -0,0 +1,166 @@ +# 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 - tail() + + Scenario: g_V_valuesXnameX_order_tailXglobal_2X + Given the modern graph + And the traversal of + """ + g.V().values("name").order().tail(Scope.global, 2) + """ + When iterated to list + Then the result should be ordered + | result | + | ripple | + | vadas | + + Scenario: g_V_valuesXnameX_order_tailX2X + Given the modern graph + And the traversal of + """ + g.V().values("name").order().tail(2) + """ + When iterated to list + Then the result should be ordered + | result | + | ripple | + | vadas | + + Scenario: g_V_valuesXnameX_order_tail + Given the modern graph + And the traversal of + """ + g.V().values("name").order().tail() + """ + When iterated to list + Then the result should be ordered + | result | + | vadas | + + Scenario: g_V_valuesXnameX_order_tailX7X + Given the modern graph + And the traversal of + """ + g.V().values("name").order().tail(7) + """ + When iterated to list + Then the result should be ordered + | result | + | josh | + | lop | + | marko | + | peter | + | ripple | + | vadas | + + Scenario: g_V_repeatXbothX_timesX3X_tailX7X + Given the modern graph + And the traversal of + """ + g.V().repeat(__.both()).times(3).tail(7) + """ + When iterated to list + Then the result should be unordered + | result | + | v[peter] | + | v[peter] | + | v[peter] | + | v[peter] | + | v[marko] | + | v[marko] | + | v[marko] | + + Scenario: g_V_repeatXin_outX_timesX3X_tailX7X_count + Given the modern graph + And the traversal of + """ + g.V().repeat(__.in().out()).times(3).tail(7).count() + """ + When iterated to list + Then the result should be unordered + | result | + | d[7] | + + Scenario: g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X + Given the modern graph + And the traversal of + """ + g.V().as("a").out().as("a").out().as("a").select("a").by(__.unfold().values("name").fold()).tail(Scope.local, 2) + """ + When iterated to list + Then the result should be unordered + | result | + | l[josh,ripple] | + | l[josh,lop] | + + Scenario: g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_1X + Given the modern graph + And the traversal of + """ + g.V().as("a").out().as("a").out().as("a").select("a").by(__.unfold().values("name").fold()).tail(Scope.local, 1) + """ + When iterated to list + Then the result should be unordered + | result | + | ripple | + | lop | + + Scenario: g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocalX + Given the modern graph + And the traversal of + """ + g.V().as("a").out().as("a").out().as("a").select("a").by(__.unfold().values("name").fold()).tail(Scope.local) + """ + When iterated to list + Then the result should be unordered + | result | + | ripple | + | lop | + + Scenario: g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXlimitXlocal_0XX_tailXlocal_1X + Given the modern graph + And the traversal of + """ + g.V().as("a").out().as("a").out().as("a").select("a").by(__.limit(Scope.local, 0)).tail(Scope.local, 1) + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_2X + Given the modern graph + And the traversal of + """ + g.V().as("a").out().as("b").out().as("c").select("a","b","c").by("name").tail(Scope.local, 2) + """ + When iterated to list + Then the result should be unordered + | result | + | m[{"b":"josh","c":"ripple"}] | + | m[{"b":"josh","c":"lop"}] | + + Scenario: g_V_asXaX_out_asXbX_out_asXcX_selectXa_b_cX_byXnameX_tailXlocal_1X + Given the modern graph + And the traversal of + """ + g.V().as("a").out().as("b").out().as("c").select("a","b","c").by("name").tail(Scope.local, 1) + """ + When iterated to list + Then the result should be unordered + | result | + | m[{"c":"ripple"}] | + | m[{"c":"lop"}] | \ No newline at end of file