You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2024/11/19 16:25:25 UTC

(tinkerpop) 02/21: Get rid of P as a parameter in gherkin

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch gvalue
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 3fd8926517c3dd2e2c979da707f58206c0712776
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Tue Jul 30 10:26:35 2024 -0400

    Get rid of P as a parameter in gherkin
    
    P can't really be used that way in the grammar so doesn't make sense to test that way.
---
 .../Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs    |  7 -------
 .../test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs   |  8 ++++----
 gremlin-go/driver/cucumber/cucumberSteps_test.go          | 15 +--------------
 gremlin-go/driver/cucumber/gremlin.go                     |  8 ++++----
 .../gremlin-javascript/test/cucumber/feature-steps.js     |  4 ----
 .../gremlin-javascript/test/cucumber/gremlin.js           |  8 ++++----
 gremlin-python/src/main/python/radish/feature_steps.py    | 11 -----------
 gremlin-python/src/main/python/radish/gremlin.py          |  8 ++++----
 .../apache/tinkerpop/gremlin/features/StepDefinition.java |  5 -----
 .../tinkerpop/gremlin/test/features/filter/HasId.feature  | 13 +++++--------
 10 files changed, 22 insertions(+), 65 deletions(-)

diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
index 98f8b0b5b4..98d49d8df7 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
@@ -115,13 +115,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
             _parameters.Add(name, parsedValue);
         }
 
-        [Given("using the parameter (\\w+) of P.(\\w+)\\(\"(.*)\"\\)")]
-        public void UsingParameterP(string name, string pval, string value)
-        {
-            var parsedValue = ParseValue(value.Replace("\\\"", "\""), _graphName!);
-            _parameters.Add(name, new P(pval, parsedValue));
-        }
-
         [Given("the traversal of")]
         public void TranslateTraversal(string traversalText)
         {
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index e72e7aa112..81c6b1fe26 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -269,9 +269,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_V_hasXlabel_isXpersonXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has(T.Label, __.Is("person"))}}, 
                {"g_V_hasXname_nullX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", (object) null)}}, 
                {"g_V_hasIdXemptyX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, 
-               {"g_V_hasIdXwithinXemptyXX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, 
-               {"g_V_hasIdXwithoutXemptyXX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(p["xx1"]).Count()}}, 
-               {"g_V_notXhasIdXwithinXemptyXXX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Not(__.HasId(p["xx1"])).Count()}}, 
+               {"g_V_hasIdXwithinXemptyXX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(P.Within(new List<object> {  })).Count()}}, 
+               {"g_V_hasIdXwithoutXemptyXX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(P.Without(new List<object> {  })).Count()}}, 
+               {"g_V_notXhasIdXwithinXemptyXXX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Not(__.HasId(P.Within(new List<object> {  }))).Count()}}, 
                {"g_V_hasIdXnullX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(null)}}, 
                {"g_V_hasIdXeqXnullXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(P.Eq(null))}}, 
                {"g_V_hasIdX2_nullX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(p["vid2"], null)}}, 
@@ -279,7 +279,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_V_hasIdX1AsString_2AsString_nullX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(p["vid1"], p["vid2"], null)}}, 
                {"g_V_hasIdXnull_2X", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(null, p["vid2"])}}, 
                {"g_V_hasIdX1X_hasIdX2X", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasId(p["vid1"]).HasId(p["vid2"])}}, 
-               {"g_V_in_hasIdXneqX1XX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().In().HasId(p["xx1"])}}, 
+               {"g_V_in_hasIdXneqX1XX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().In().HasId(P.Neq(p["xx1"]))}}, 
                {"g_VX1X_out_hasIdX2X", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out().HasId(p["vid2"])}}, 
                {"g_VX1X_out_hasXid_2_3X", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out().HasId(p["vid2"], p["vid3"])}}, 
                {"g_VX1X_out_hasXid_2AsString_3AsStringX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out().HasId(p["vid2"], p["vid3"])}}, 
diff --git a/gremlin-go/driver/cucumber/cucumberSteps_test.go b/gremlin-go/driver/cucumber/cucumberSteps_test.go
index fd49c7d8b4..38fbdb6207 100644
--- a/gremlin-go/driver/cucumber/cucumberSteps_test.go
+++ b/gremlin-go/driver/cucumber/cucumberSteps_test.go
@@ -47,7 +47,7 @@ var parsers map[*regexp.Regexp]func(string, string) interface{}
 
 func init() {
 	parsers = map[*regexp.Regexp]func(string, string) interface{}{
-		regexp.MustCompile(`^str\[(.*)]$`): func(stringVal, graphName string) interface{} { return stringVal }, //returns the string value as is
+		regexp.MustCompile(`^str\[(.*)]$`):          func(stringVal, graphName string) interface{} { return stringVal }, //returns the string value as is
 		regexp.MustCompile(`^dt\[(.*)]$`):           toDateTime,
 		regexp.MustCompile(`^d\[(.*)]\.[bslfdmn]$`): toNumeric,
 		regexp.MustCompile(`^d\[(.*)]\.[i]$`):       toInt32,
@@ -821,18 +821,6 @@ func (tg *tinkerPopGraph) usingTheParameterDefined(name string, params string) e
 	return nil
 }
 
-func (tg *tinkerPopGraph) usingTheParameterOfP(paramName, pVal, stringVal string) error {
-	predicate := reflect.ValueOf(gremlingo.P).MethodByName(strings.Title(pVal)).Interface().(func(...interface{}) gremlingo.Predicate)
-	values := parseValue(stringVal, tg.graphName)
-	switch reflect.TypeOf(values).Kind() {
-	case reflect.Array, reflect.Slice:
-		tg.parameters[paramName] = predicate(values.([]interface{})...)
-	default:
-		tg.parameters[paramName] = predicate(values)
-	}
-	return nil
-}
-
 func (tg *tinkerPopGraph) theTraversalWillRaiseAnError() error {
 	if _, ok := tg.error[true]; ok {
 		return nil
@@ -912,7 +900,6 @@ func InitializeScenario(ctx *godog.ScenarioContext) {
 	ctx.Step(`^the result should have a count of (\d+)$`, tg.theResultShouldHaveACountOf)
 	ctx.Step(`^the traversal of$`, tg.theTraversalOf)
 	ctx.Step(`^using the parameter (.+) defined as "(.+)"$`, tg.usingTheParameterDefined)
-	ctx.Step(`^using the parameter (.+) of P\.(.+)\("(.+)"\)$`, tg.usingTheParameterOfP)
 	ctx.Step(`^the traversal will raise an error$`, tg.theTraversalWillRaiseAnError)
 	ctx.Step(`^the traversal will raise an error with message (\w+) text of "(.+)"$`, tg.theTraversalWillRaiseAnErrorWithMessageContainingTextOf)
 }
diff --git a/gremlin-go/driver/cucumber/gremlin.go b/gremlin-go/driver/cucumber/gremlin.go
index 591bdd0c7c..dba9316ffb 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -239,9 +239,9 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[
     "g_V_hasXlabel_isXpersonXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has(gremlingo.T.Label, gremlingo.T__.Is("person"))}}, 
     "g_V_hasXname_nullX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", nil)}}, 
     "g_V_hasIdXemptyX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(p["xx1"]).Count()}}, 
-    "g_V_hasIdXwithinXemptyXX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(p["xx1"]).Count()}}, 
-    "g_V_hasIdXwithoutXemptyXX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(p["xx1"]).Count()}}, 
-    "g_V_notXhasIdXwithinXemptyXXX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Not(gremlingo.T__.HasId(p["xx1"])).Count()}}, 
+    "g_V_hasIdXwithinXemptyXX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(gremlingo.P.Within([]interface{}{})).Count()}}, 
+    "g_V_hasIdXwithoutXemptyXX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(gremlingo.P.Without([]interface{}{})).Count()}}, 
+    "g_V_notXhasIdXwithinXemptyXXX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Not(gremlingo.T__.HasId(gremlingo.P.Within([]interface{}{}))).Count()}}, 
     "g_V_hasIdXnullX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(nil)}}, 
     "g_V_hasIdXeqXnullXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(gremlingo.P.Eq(nil))}}, 
     "g_V_hasIdX2_nullX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(p["vid2"], nil)}}, 
@@ -249,7 +249,7 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[
     "g_V_hasIdX1AsString_2AsString_nullX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(p["vid1"], p["vid2"], nil)}}, 
     "g_V_hasIdXnull_2X": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(nil, p["vid2"])}}, 
     "g_V_hasIdX1X_hasIdX2X": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasId(p["vid1"]).HasId(p["vid2"])}}, 
-    "g_V_in_hasIdXneqX1XX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().In().HasId(p["xx1"])}}, 
+    "g_V_in_hasIdXneqX1XX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().In().HasId(gremlingo.P.Neq(p["xx1"]))}}, 
     "g_VX1X_out_hasIdX2X": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out().HasId(p["vid2"])}}, 
     "g_VX1X_out_hasXid_2_3X": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out().HasId(p["vid2"], p["vid3"])}}, 
     "g_VX1X_out_hasXid_2AsString_3AsStringX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out().HasId(p["vid2"], p["vid3"])}}, 
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
index e590415406..bad8161e70 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
@@ -117,10 +117,6 @@ Given('the traversal of', function (traversalText) {
   this.traversal = gremlin[this.scenario].shift()(p);
 });
 
-Given(/^using the parameter (.+) of P\.(.+)\("(.+)"\)$/, function (paramName, pval, stringValue) {
-  this.parameters[paramName] =  new P(pval, parseValue.call(this, stringValue))
-});
-
 Given(/^using the parameter (.+) defined as "(.+)"$/, function (paramName, stringValue) {
   // Remove escaped chars
   stringValue = stringValue.replace(/\\"/g, '"');
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index 5251007c64..a54eee84ed 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@ -260,9 +260,9 @@ const gremlins = {
     g_V_hasXlabel_isXpersonXX: [function({g}) { return g.V().has(T.label, __.is("person")) }], 
     g_V_hasXname_nullX: [function({g}) { return g.V().has("name", null) }], 
     g_V_hasIdXemptyX_count: [function({g, xx1}) { return g.V().hasId(xx1).count() }], 
-    g_V_hasIdXwithinXemptyXX_count: [function({g, xx1}) { return g.V().hasId(xx1).count() }], 
-    g_V_hasIdXwithoutXemptyXX_count: [function({g, xx1}) { return g.V().hasId(xx1).count() }], 
-    g_V_notXhasIdXwithinXemptyXXX_count: [function({g, xx1}) { return g.V().not(__.hasId(xx1)).count() }], 
+    g_V_hasIdXwithinXemptyXX_count: [function({g}) { return g.V().hasId(P.within([])).count() }], 
+    g_V_hasIdXwithoutXemptyXX_count: [function({g}) { return g.V().hasId(P.without([])).count() }], 
+    g_V_notXhasIdXwithinXemptyXXX_count: [function({g}) { return g.V().not(__.hasId(P.within([]))).count() }], 
     g_V_hasIdXnullX: [function({g}) { return g.V().hasId(null) }], 
     g_V_hasIdXeqXnullXX: [function({g}) { return g.V().hasId(P.eq(null)) }], 
     g_V_hasIdX2_nullX: [function({g, vid2}) { return g.V().hasId(vid2, null) }], 
@@ -270,7 +270,7 @@ const gremlins = {
     g_V_hasIdX1AsString_2AsString_nullX: [function({g, vid2, vid1}) { return g.V().hasId(vid1, vid2, null) }], 
     g_V_hasIdXnull_2X: [function({g, vid2}) { return g.V().hasId(null, vid2) }], 
     g_V_hasIdX1X_hasIdX2X: [function({g, vid2, vid1}) { return g.V().hasId(vid1).hasId(vid2) }], 
-    g_V_in_hasIdXneqX1XX: [function({g, xx1}) { return g.V().in_().hasId(xx1) }], 
+    g_V_in_hasIdXneqX1XX: [function({g, xx1}) { return g.V().in_().hasId(P.neq(xx1)) }], 
     g_VX1X_out_hasIdX2X: [function({g, vid2, vid1}) { return g.V(vid1).out().hasId(vid2) }], 
     g_VX1X_out_hasXid_2_3X: [function({g, vid3, vid2, vid1}) { return g.V(vid1).out().hasId(vid2, vid3) }], 
     g_VX1X_out_hasXid_2AsString_3AsStringX: [function({g, vid3, vid2, vid1}) { return g.V(vid1).out().hasId(vid2, vid3) }], 
diff --git a/gremlin-python/src/main/python/radish/feature_steps.py b/gremlin-python/src/main/python/radish/feature_steps.py
index 27b50911de..5f72c5b0dc 100644
--- a/gremlin-python/src/main/python/radish/feature_steps.py
+++ b/gremlin-python/src/main/python/radish/feature_steps.py
@@ -109,17 +109,6 @@ def unsupported_scenario(step):
     return
 
 
-@given("using the parameter {param_name:w} of P.{p_val:w}({param:QuotedString})")
-def add_p_parameter(step, param_name, p_val, param):
-    if (step.context.ignore):
-        return
-
-    if not hasattr(step.context, "traversal_params"):
-        step.context.traversal_params = {}
-
-    step.context.traversal_params[param_name] = getattr(P, p_val)(_convert(param.replace('\\"', '"'), step.context))
-
-
 @given("using the parameter {param_name:w} defined as {param:QuotedString}")
 def add_parameter(step, param_name, param):
     if (step.context.ignore):
diff --git a/gremlin-python/src/main/python/radish/gremlin.py b/gremlin-python/src/main/python/radish/gremlin.py
index bba1156256..42ff790faf 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -242,9 +242,9 @@ world.gremlins = {
     'g_V_hasXlabel_isXpersonXX': [(lambda g:g.V().has(T.label, __.is_('person')))], 
     'g_V_hasXname_nullX': [(lambda g:g.V().has('name', None))], 
     'g_V_hasIdXemptyX_count': [(lambda g, xx1=None:g.V().has_id(xx1).count())], 
-    'g_V_hasIdXwithinXemptyXX_count': [(lambda g, xx1=None:g.V().has_id(xx1).count())], 
-    'g_V_hasIdXwithoutXemptyXX_count': [(lambda g, xx1=None:g.V().has_id(xx1).count())], 
-    'g_V_notXhasIdXwithinXemptyXXX_count': [(lambda g, xx1=None:g.V().not_(__.has_id(xx1)).count())], 
+    'g_V_hasIdXwithinXemptyXX_count': [(lambda g:g.V().has_id(P.within([])).count())], 
+    'g_V_hasIdXwithoutXemptyXX_count': [(lambda g:g.V().has_id(P.without([])).count())], 
+    'g_V_notXhasIdXwithinXemptyXXX_count': [(lambda g:g.V().not_(__.has_id(P.within([]))).count())], 
     'g_V_hasIdXnullX': [(lambda g:g.V().has_id(None))], 
     'g_V_hasIdXeqXnullXX': [(lambda g:g.V().has_id(P.eq(None)))], 
     'g_V_hasIdX2_nullX': [(lambda g, vid2=None:g.V().has_id(vid2, None))], 
@@ -252,7 +252,7 @@ world.gremlins = {
     'g_V_hasIdX1AsString_2AsString_nullX': [(lambda g, vid2=None,vid1=None:g.V().has_id(vid1, vid2, None))], 
     'g_V_hasIdXnull_2X': [(lambda g, vid2=None:g.V().has_id(None, vid2))], 
     'g_V_hasIdX1X_hasIdX2X': [(lambda g, vid2=None,vid1=None:g.V().has_id(vid1).has_id(vid2))], 
-    'g_V_in_hasIdXneqX1XX': [(lambda g, xx1=None:g.V().in_().has_id(xx1))], 
+    'g_V_in_hasIdXneqX1XX': [(lambda g, xx1=None:g.V().in_().has_id(P.neq(xx1)))], 
     'g_VX1X_out_hasIdX2X': [(lambda g, vid2=None,vid1=None:g.V(vid1).out().has_id(vid2))], 
     'g_VX1X_out_hasXid_2_3X': [(lambda g, vid3=None,vid2=None,vid1=None:g.V(vid1).out().has_id(vid2, vid3))], 
     'g_VX1X_out_hasXid_2AsString_3AsStringX': [(lambda g, vid3=None,vid2=None,vid1=None:g.V(vid1).out().has_id(vid2, vid3))], 
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/StepDefinition.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/StepDefinition.java
index 4bcb90f110..767f7ca158 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/StepDefinition.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/StepDefinition.java
@@ -288,11 +288,6 @@ public final class StepDefinition {
         stringParameters.put(key, convertToString(value));
     }
 
-    @Given("using the parameter {word} of P.{word}\\({string})")
-    public void usingTheParameterXOfPX(final String key, final String pval, final String string) {
-        stringParameters.put(key, String.format("P.%s(%s)", pval, convertToString(string)));
-    }
-
     @Given("the traversal of")
     public void theTraversalOf(final String docString) {
         try {
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasId.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasId.feature
index 8c20b41b72..cc85a5c4fe 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasId.feature
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasId.feature
@@ -32,10 +32,9 @@ Feature: Step - hasId()
 
   Scenario: g_V_hasIdXwithinXemptyXX_count
     Given the modern graph
-    And using the parameter xx1 of P.within("l[]")
     And the traversal of
     """
-    g.V().hasId(xx1).count()
+    g.V().hasId(P.within([])).count()
     """
     When iterated to list
     Then the result should be unordered
@@ -44,10 +43,9 @@ Feature: Step - hasId()
 
   Scenario: g_V_hasIdXwithoutXemptyXX_count
     Given the modern graph
-    And using the parameter xx1 of P.without("l[]")
     And the traversal of
     """
-    g.V().hasId(xx1).count()
+    g.V().hasId(P.without([])).count()
     """
     When iterated to list
     Then the result should be unordered
@@ -56,10 +54,9 @@ Feature: Step - hasId()
 
   Scenario: g_V_notXhasIdXwithinXemptyXXX_count
     Given the modern graph
-    And using the parameter xx1 of P.within("l[]")
     And the traversal of
     """
-    g.V().not(__.hasId(xx1)).count()
+    g.V().not(__.hasId(P.within([]))).count()
     """
     When iterated to list
     Then the result should be unordered
@@ -147,10 +144,10 @@ Feature: Step - hasId()
 
   Scenario: g_V_in_hasIdXneqX1XX
     Given the modern graph
-    And using the parameter xx1 of P.neq("v[marko].id")
+    And using the parameter xx1 defined as "v[marko].id"
     And the traversal of
     """
-    g.V().in().hasId(xx1)
+    g.V().in().hasId(P.neq(xx1))
     """
     When iterated to list
     Then the result should be unordered