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

colegreer pushed a commit to branch 3.8-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit fae1dcc3629904f770897616023f9397df568341
Merge: cdab3784c0 7e9615ef3b
Author: Cole Greer <[email protected]>
AuthorDate: Wed Apr 15 11:50:18 2026 -0700

    Merge branch '3.7-dev' into 3.8-dev

 CHANGELOG.asciidoc                                 |  2 ++
 docs/src/upgrade/release-3.7.x.asciidoc            | 29 ++++++++++++++++++++++
 .../process/traversal/step/map/ConjoinStep.java    |  2 +-
 .../traversal/step/map/ConjoinStepTest.java        |  3 ++-
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 18 ++++++++++++++
 gremlin-go/driver/cucumber/gremlin.go              |  2 ++
 .../gremlin-javascript/test/cucumber/gremlin.js    |  2 ++
 .../src/main/python/tests/feature/gremlin.py       |  2 ++
 .../scripts/generate-modern-readonly.groovy        |  2 +-
 .../gremlin/test/features/map/Conjoin.feature      | 24 ++++++++++++++++++
 10 files changed, 83 insertions(+), 3 deletions(-)

diff --cc gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 727b83511b,0a8e187dc2..d3f12b3e83
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@@ -1059,26 -620,28 +1059,44 @@@ namespace Gremlin.Net.IntegrationTest.G
                 
{"g_hasLabelXpersonX_valuesXnameX_asXaX_constantXMrX_concatXselectXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().HasLabel("person").Values<object>("name").As("a").Constant<object>("Mr.").Concat(__.Select<object>("a"))}},
 
                 
{"g_hasLabelXsoftwareX_asXaX_valuesXnameX_concatXunsesX_concatXselectXaXvaluesXlangX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().HasLabel("software").As("a").Values<object>("name").Concat(" 
uses ").Concat(__.Select<object>("a").Values<object>("lang"))}}, 
                 
{"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_labelX_concatXselectXaX_inV_valuesXnameXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values<object>("name").Concat(__.Select<object>("a").Label()).Concat(__.Select<object>("a").InV().Values<object>("name"))}},
 
++<<<<<<< HEAD
 +               
{"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_label_selectXaX_inV_valuesXnameXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values<object>("name").Concat(__.Select<object>("a").Label(),
 __.Select<object>("a").InV().Values<object>("name"))}}, 
 +               {"g_addVXconstantXprefix_X_concatXVX1X_labelX_label", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "rippl [...]
 +               {"g_injectXnullX_conjoinX1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null).Conjoin((string) "1")}}, 
 +               {"g_V_valuesXnameX_conjoinX1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("name").Conjoin((string) "1")}}, 
 +               {"g_V_valuesXnonexistantX_fold_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("nonexistant").Fold().Conjoin((string) ";")}}, 
 +               {"g_V_valuesXnameX_order_fold_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("name").Order().Fold().Conjoin((string) "_")}}, 
 +               {"g_V_valuesXageX_order_fold_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Order().Fold().Conjoin((string) ";")}}, 
 +               {"g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Out().Path().By(__.Values<object>("name").ToUpper()).Conjoin((string) 
"MARKO")}}, 
 +               {"g_injectXmarkoX_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "marko" }).Conjoin((string) 
"-")}}, 
 +               
{"g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().ValueMap<object, 
object>("location").Select<object>(Column.Values).Unfold<object>().Order(Scope.Local).Conjoin((string)
 "1")}}, 
 +               {"g_V_out_out_path_byXnameX_conjoinXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Out().Out().Path().By("name").Conjoin((string) "")}}, 
 +               {"g_injectXa_null_bX_conjoinXxyzX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", null, "b" }).Conjoin((string) 
"xyz")}}, 
 +               {"g_injectX3_threeX_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 3, "three" }).Conjoin((string) 
";")}}, 
++=======
+                
{"g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_label_selectXaX_inV_valuesXnameXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).OutE().As("a").V(p["vid1"]).Values<object>("name").Concat(__.Select<object>("a").Label(),__.Select<object>("a").InV().Values<object>("name"))}},
 
+                {"g_addVXconstantXprefix_X_concatXVX1X_labelX_label", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.AddV("person").Property("name","marko").Property("age",29).As("marko").AddV("person").Property("name","vadas").Property("age",27).As("vadas").AddV("software").Property("name","lop").Property("lang","java").As("lop").AddV("person").Property("name","josh").Property("age",32).As("josh").AddV("software").Property("name","ripple").Prope
 [...]
+                {"g_injectXnullX_conjoinX1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null).Conjoin("1")}}, 
+                {"g_V_valuesXnameX_conjoinX1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("name").Conjoin("1")}}, 
+                {"g_V_valuesXnonexistantX_fold_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("nonexistant").Fold().Conjoin(";")}}, 
+                {"g_V_valuesXnameX_order_fold_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("name").Order().Fold().Conjoin("_")}}, 
+                {"g_V_valuesXageX_order_fold_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Order().Fold().Conjoin(";")}}, 
+                {"g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Out().Path().By(__.Values<object>("name").ToUpper()).Conjoin("MARKO")}},
 
+                {"g_injectXmarkoX_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Conjoin("-")}}, 
+                
{"g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().ValueMap<object,object>("location").Select<object>(Column.Values).Unfold<object>().Order(Scope.Local).Conjoin("1")}},
 
+                {"g_V_out_out_path_byXnameX_conjoinXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Out().Out().Path().By("name").Conjoin("")}}, 
+                {"g_injectXa_null_bX_conjoinXxyzX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Conjoin("xyz")}}, 
+                {"g_injectX3_threeX_conjoinX_X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Conjoin(";")}}, 
+                {"g_injectXnull_a_null_bX_conjoinXplusX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Conjoin("+")}}, 
+                {"g_injectXnull_nullX_conjoinXplusX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Conjoin("+")}}, 
++>>>>>>> 3.7-dev
                 {"g_V_connectedComponent_hasXcomponentX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().ConnectedComponent().Has("gremlin.connectedComponentVertexProgram.component")}},
 
                 {"g_V_dedup_connectedComponent_hasXcomponentX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Dedup().ConnectedComponent().Has("gremlin.connectedComponentVertexProgram.component")}},
 
 -               
{"g_V_hasLabelXsoftwareX_connectedComponent_project_byXnameX_byXcomponentX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().HasLabel("software").ConnectedComponent().Project<object>("name","component").By("name").By("gremlin.connectedComponentVertexProgram.component")}},
 
 -               
{"g_V_connectedComponent_withXEDGES_bothEXknowsXX_withXPROPERTY_NAME_clusterX_project_byXnameX_byXclusterX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().HasLabel("person").ConnectedComponent().With("~tinkerpop.connectedComponent.edges",__.BothE("knows")).With("~tinkerpop.connectedComponent.propertyName","cluster").Project<object>("name","cluster").By("name").By("cluster")}},
 
 +               
{"g_V_hasLabelXsoftwareX_connectedComponent_project_byXnameX_byXcomponentX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().HasLabel("software").ConnectedComponent().Project<object>("name", 
"component").By("name").By("gremlin.connectedComponentVertexProgram.component")}},
 
 +               
{"g_V_connectedComponent_withXEDGES_bothEXknowsXX_withXPROPERTY_NAME_clusterX_project_byXnameX_byXclusterX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().HasLabel("person").ConnectedComponent().With("~tinkerpop.connectedComponent.edges",
 __.BothE("knows")).With("~tinkerpop.connectedComponent.propertyName", 
"cluster").Project<object>("name", "cluster").By("name").By("cluster")}}, 
                 {"g_V_constantX123X", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Constant<object>(123)}}, 
                 {"g_V_constantXnullX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Constant<object>(null)}}, 
 -               
{"g_V_chooseXhasLabelXpersonX_valuesXnameX_constantXinhumanXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Choose<object>(__.HasLabel("person"),__.Values<object>("name"),__.Constant<object>("inhuman"))}},
 
 +               
{"g_V_chooseXhasLabelXpersonX_valuesXnameX_constantXinhumanXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Choose<object>(__.HasLabel("person"), __.Values<object>("name"), 
__.Constant<object>("inhuman"))}}, 
                 {"g_V_count", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Count()}}, 
                 {"g_V_out_count", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Out().Count()}}, 
                 {"g_V_both_both_count", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Both().Both().Count()}}, 
diff --cc gremlin-go/driver/cucumber/gremlin.go
index 774c771562,ba1a6b1ae0..43d5632dff
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@@ -1037,11 -599,13 +1037,13 @@@ var translationMap = map[string][]func(
      "g_V_valuesXnameX_order_fold_conjoinX_X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("name").Order().Fold().Conjoin("_")}}, 
      "g_V_valuesXageX_order_fold_conjoinX_X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("age").Order().Fold().Conjoin(";")}}, 
      "g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Out().Path().By(gremlingo.T__.Values("name").ToUpper()).Conjoin("MARKO")}},
 
 -    "g_injectXmarkoX_conjoinX_X": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject(p["xx1"]).Conjoin("-")}}, 
 +    "g_injectXmarkoX_conjoinX_X": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{"marko"}).Conjoin("-")}}, 
      "g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().ValueMap("location").Select(gremlingo.Column.Values).Unfold().Order(gremlingo.Scope.Local).Conjoin("1")}},
 
      "g_V_out_out_path_byXnameX_conjoinXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Out().Out().Path().By("name").Conjoin("")}}, 
 -    "g_injectXa_null_bX_conjoinXxyzX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(p["xx1"]).Conjoin("xyz")}}, 
 -    "g_injectX3_threeX_conjoinX_X": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject(p["xx1"]).Conjoin(";")}}, 
 -    "g_injectXnull_a_null_bX_conjoinXplusX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(p["xx1"]).Conjoin("+")}}, 
 -    "g_injectXnull_nullX_conjoinXplusX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(p["xx1"]).Conjoin("+")}}, 
 +    "g_injectXa_null_bX_conjoinXxyzX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{"a", nil, 
"b"}).Conjoin("xyz")}}, 
 +    "g_injectX3_threeX_conjoinX_X": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{int32(3), "three"}).Conjoin(";")}}, 
++    "g_injectXnull_a_null_bX_conjoinXplusX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{nil, "a", nil, 
"b"}).Conjoin("+")}}, 
++    "g_injectXnull_nullX_conjoinXplusX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{nil, 
nil}).Conjoin("+")}}, 
      "g_V_connectedComponent_hasXcomponentX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().ConnectedComponent().Has("gremlin.connectedComponentVertexProgram.component")}},
 
      "g_V_dedup_connectedComponent_hasXcomponentX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Dedup().ConnectedComponent().Has("gremlin.connectedComponentVertexProgram.component")}},
 
      
"g_V_hasLabelXsoftwareX_connectedComponent_project_byXnameX_byXcomponentX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().HasLabel("software").ConnectedComponent().Project("name", 
"component").By("name").By("gremlin.connectedComponentVertexProgram.component")}},
 
diff --cc 
gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index cf75e374a6,b6de78479b..8fb749b903
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@@ -1068,18 -619,20 +1068,20 @@@ const gremlins = 
      g_V_valuesXnameX_order_fold_conjoinX_X: [function({g}) { return 
g.V().values("name").order().fold().conjoin("_") }], 
      g_V_valuesXageX_order_fold_conjoinX_X: [function({g}) { return 
g.V().values("age").order().fold().conjoin(";") }], 
      g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX: [function({g}) { 
return g.V().out().path().by(__.values("name").toUpper()).conjoin("MARKO") }], 
 -    g_injectXmarkoX_conjoinX_X: [function({g, xx1}) { return 
g.inject(xx1).conjoin("-") }], 
 +    g_injectXmarkoX_conjoinX_X: [function({g}) { return 
g.inject(["marko"]).conjoin("-") }], 
      g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X: 
[function({g}) { return 
g.V().valueMap("location").select(Column.values).unfold().order(Scope.local).conjoin("1")
 }], 
      g_V_out_out_path_byXnameX_conjoinXX: [function({g}) { return 
g.V().out().out().path().by("name").conjoin("") }], 
 -    g_injectXa_null_bX_conjoinXxyzX: [function({g, xx1}) { return 
g.inject(xx1).conjoin("xyz") }], 
 -    g_injectX3_threeX_conjoinX_X: [function({g, xx1}) { return 
g.inject(xx1).conjoin(";") }], 
 -    g_injectXnull_a_null_bX_conjoinXplusX: [function({g, xx1}) { return 
g.inject(xx1).conjoin("+") }], 
 -    g_injectXnull_nullX_conjoinXplusX: [function({g, xx1}) { return 
g.inject(xx1).conjoin("+") }], 
 +    g_injectXa_null_bX_conjoinXxyzX: [function({g}) { return g.inject(["a", 
null, "b"]).conjoin("xyz") }], 
 +    g_injectX3_threeX_conjoinX_X: [function({g}) { return g.inject([3, 
"three"]).conjoin(";") }], 
++    g_injectXnull_a_null_bX_conjoinXplusX: [function({g}) { return 
g.inject([null, "a", null, "b"]).conjoin("+") }], 
++    g_injectXnull_nullX_conjoinXplusX: [function({g}) { return 
g.inject([null, null]).conjoin("+") }], 
      g_V_connectedComponent_hasXcomponentX: [function({g}) { return 
g.V().connectedComponent().has("gremlin.connectedComponentVertexProgram.component")
 }], 
      g_V_dedup_connectedComponent_hasXcomponentX: [function({g}) { return 
g.V().dedup().connectedComponent().has("gremlin.connectedComponentVertexProgram.component")
 }], 
 -    g_V_hasLabelXsoftwareX_connectedComponent_project_byXnameX_byXcomponentX: 
[function({g}) { return 
g.V().hasLabel("software").connectedComponent().project("name","component").by("name").by("gremlin.connectedComponentVertexProgram.component")
 }], 
 -    
g_V_connectedComponent_withXEDGES_bothEXknowsXX_withXPROPERTY_NAME_clusterX_project_byXnameX_byXclusterX:
 [function({g}) { return 
g.V().hasLabel("person").connectedComponent().with_("~tinkerpop.connectedComponent.edges",__.bothE("knows")).with_("~tinkerpop.connectedComponent.propertyName","cluster").project("name","cluster").by("name").by("cluster")
 }], 
 +    g_V_hasLabelXsoftwareX_connectedComponent_project_byXnameX_byXcomponentX: 
[function({g}) { return 
g.V().hasLabel("software").connectedComponent().project("name", 
"component").by("name").by("gremlin.connectedComponentVertexProgram.component") 
}], 
 +    
g_V_connectedComponent_withXEDGES_bothEXknowsXX_withXPROPERTY_NAME_clusterX_project_byXnameX_byXclusterX:
 [function({g}) { return 
g.V().hasLabel("person").connectedComponent().with_("~tinkerpop.connectedComponent.edges",
 __.bothE("knows")).with_("~tinkerpop.connectedComponent.propertyName", 
"cluster").project("name", "cluster").by("name").by("cluster") }], 
      g_V_constantX123X: [function({g}) { return g.V().constant(123) }], 
      g_V_constantXnullX: [function({g}) { return g.V().constant(null) }], 
 -    g_V_chooseXhasLabelXpersonX_valuesXnameX_constantXinhumanXX: 
[function({g}) { return 
g.V().choose(__.hasLabel("person"),__.values("name"),__.constant("inhuman")) 
}], 
 +    g_V_chooseXhasLabelXpersonX_valuesXnameX_constantXinhumanXX: 
[function({g}) { return g.V().choose(__.hasLabel("person"), __.values("name"), 
__.constant("inhuman")) }], 
      g_V_count: [function({g}) { return g.V().count() }], 
      g_V_out_count: [function({g}) { return g.V().out().count() }], 
      g_V_both_both_count: [function({g}) { return g.V().both().both().count() 
}], 
diff --cc gremlin-python/src/main/python/tests/feature/gremlin.py
index 38d68ae9e4,3d14a7224d..ccdc643e1b
--- a/gremlin-python/src/main/python/tests/feature/gremlin.py
+++ b/gremlin-python/src/main/python/tests/feature/gremlin.py
@@@ -972,86 -533,88 +972,88 @@@ world.gremlins = 
      'g_V_fold_asStringXlocalX_orderXlocalX': [(lambda 
g:g.V().fold().as_string(Scope.local).order(Scope.local))], 
      'g_E_asString': [(lambda g:g.E().as_string())], 
      'g_V_properties': [(lambda g:g.V().properties().as_string())], 
 -    'g_V_hasLabelXpersonX_valuesXageX_asString': [(lambda 
g:g.V().has_label('person').age.as_string())], 
 -    'g_V_hasLabelXpersonX_valuesXageX_order_fold_asStringXlocalX': [(lambda 
g:g.V().has_label('person').age.order().fold().as_string(Scope.local))], 
 -    'g_V_hasLabelXpersonX_valuesXageX_asString_concatX_years_oldX': [(lambda 
g:g.V().has_label('person').age.as_string().concat(' years old'))], 
 +    'g_V_hasLabelXpersonX_valuesXageX_asString': [(lambda 
g:g.V().has_label('person').values('age').as_string())], 
 +    'g_V_hasLabelXpersonX_valuesXageX_order_fold_asStringXlocalX': [(lambda 
g:g.V().has_label('person').values('age').order().fold().as_string(Scope.local))],
 
 +    'g_V_hasLabelXpersonX_valuesXageX_asString_concatX_years_oldX': [(lambda 
g:g.V().has_label('person').values('age').as_string().concat(' years old'))], 
      'g_call': [(lambda g:g.call())], 
      'g_callXlistX': [(lambda g:g.call('--list'))], 
 -    'g_callXlistX_withXstring_stringX': [(lambda 
g:g.call('--list').with_('service','tinker.search'))], 
 -    'g_callXlistX_withXstring_traversalX': [(lambda 
g:g.call('--list').with_('service',__.constant('tinker.search')))], 
 -    'g_callXlist_mapX': [(lambda g, xx1=None:g.call('--list',xx1))], 
 -    'g_callXlist_traversalX': [(lambda 
g:g.call('--list',__.project('service').by(__.constant('tinker.search'))))], 
 -    'g_callXlist_map_traversalX': [(lambda g, 
xx1=None:g.call('--list',xx1,__.project('service').by(__.constant('tinker.search'))))],
 
 -    'g_callXsearch_mapX': [(lambda g, 
xx1=None:g.call('tinker.search',xx1).element())], 
 -    'g_callXsearch_traversalX': [(lambda 
g:g.call('tinker.search',__.project('search').by(__.constant('vada'))).element())],
 
 -    'g_callXsearchX_withXstring_stringX': [(lambda 
g:g.call('tinker.search').with_('search','vada').element())], 
 -    'g_callXsearchX_withXstring_traversalX': [(lambda 
g:g.call('tinker.search').with_('search',__.constant('vada')).element())], 
 -    'g_callXsearch_mapX_withXstring_VertexX': [(lambda g, 
xx1=None:g.call('tinker.search',xx1).with_('type','Vertex').element())], 
 -    'g_callXsearch_mapX_withXstring_EdgeX': [(lambda g, 
xx1=None:g.call('tinker.search',xx1).with_('type','Edge').element())], 
 -    'g_callXsearch_mapX_withXstring_VertexPropertyX': [(lambda g, 
xx1=None:g.call('tinker.search',xx1).with_('type','VertexProperty').element())],
 
 -    'g_V_callXdcX': [(lambda 
g:g.V().as_('v').call('tinker.degree.centrality').project('vertex','degree').by(__.select('v')).by())],
 
 +    'g_callXlistX_withXstring_stringX': [(lambda 
g:g.call('--list').with_('service', 'tinker.search'))], 
 +    'g_callXlistX_withXstring_traversalX': [(lambda 
g:g.call('--list').with_('service', __.constant('tinker.search')))], 
 +    'g_callXlist_mapX': [(lambda g, xx1=None:g.call('--list', xx1))], 
 +    'g_callXlist_traversalX': [(lambda g:g.call('--list', 
__.project('service').by(__.constant('tinker.search'))))], 
 +    'g_callXlist_map_traversalX': [(lambda g, xx1=None:g.call('--list', xx1, 
__.project('service').by(__.constant('tinker.search'))))], 
 +    'g_callXsearch_mapX': [(lambda g, xx1=None:g.call('tinker.search', 
xx1).element())], 
 +    'g_callXsearch_traversalX': [(lambda g:g.call('tinker.search', 
__.project('search').by(__.constant('vada'))).element())], 
 +    'g_callXsearchX_withXstring_stringX': [(lambda 
g:g.call('tinker.search').with_('search', 'vada').element())], 
 +    'g_callXsearchX_withXstring_traversalX': [(lambda 
g:g.call('tinker.search').with_('search', __.constant('vada')).element())], 
 +    'g_callXsearch_mapX_withXstring_VertexX': [(lambda g, 
xx1=None:g.call('tinker.search', xx1).with_('type', 'Vertex').element())], 
 +    'g_callXsearch_mapX_withXstring_EdgeX': [(lambda g, 
xx1=None:g.call('tinker.search', xx1).with_('type', 'Edge').element())], 
 +    'g_callXsearch_mapX_withXstring_VertexPropertyX': [(lambda g, 
xx1=None:g.call('tinker.search', xx1).with_('type', 
'VertexProperty').element())], 
 +    'g_V_callXdcX': [(lambda 
g:g.V().as_('v').call('tinker.degree.centrality').project('vertex', 
'degree').by(__.select('v')).by())], 
      'g_V_whereXcallXdcXX': [(lambda 
g:g.V().where(__.call('tinker.degree.centrality').is_(3)))], 
 -    'g_V_callXdcX_withXdirection_OUTX': [(lambda 
g:g.V().as_('v').call('tinker.degree.centrality').with_('direction',Direction.OUT).project('vertex','degree').by(__.select('v')).by())],
 
 -    'g_V_callXdc_mapX_withXdirection_OUTX': [(lambda g, 
xx1=None:g.V().as_('v').call('tinker.degree.centrality',xx1).with_('direction',Direction.OUT).project('vertex','degree').by(__.select('v')).by())],
 
 -    'g_V_callXdc_traversalX': [(lambda 
g:g.V().as_('v').call('tinker.degree.centrality',__.project('direction').by(__.constant(Direction.OUT))).project('vertex','degree').by(__.select('v')).by())],
 
 -    'g_V_callXdc_map_traversalX': [(lambda g, 
xx1=None:g.V().as_('v').call('tinker.degree.centrality',xx1,__.project('direction').by(__.constant(Direction.OUT))).project('vertex','degree').by(__.select('v')).by())],
 
 -    'g_V_coalesceXoutXfooX_outXbarXX': [(lambda 
g:g.V().coalesce(__.out('foo'),__.out('bar')))], 
 -    'g_VX1X_coalesceXoutXknowsX_outXcreatedXX_valuesXnameX': [(lambda g, 
vid1=None:g.V(vid1).coalesce(__.out('knows'),__.out('created')).name)], 
 -    'g_VX1X_coalesceXoutXcreatedX_outXknowsXX_valuesXnameX': [(lambda g, 
vid1=None:g.V(vid1).coalesce(__.out('created'),__.out('knows')).name)], 
 -    'g_V_coalesceXoutXlikesX_outXknowsX_inXcreatedXX_groupCount_byXnameX': 
[(lambda 
g:g.V().coalesce(__.out('likes'),__.out('knows'),__.out('created')).group_count().by('name'))],
 
 -    'g_V_coalesceXoutEXknowsX_outEXcreatedXX_otherV_path_byXnameX_byXlabelX': 
[(lambda 
g:g.V().coalesce(__.out_e('knows'),__.out_e('created')).other_v().path().by('name').by(T.label))],
 
 -    'g_V_outXcreatedX_order_byXnameX_coalesceXname_constantXxXX': [(lambda 
g:g.V().out('created').order().by('name').coalesce(__.name,__.constant('x')))], 
 +    'g_V_callXdcX_withXdirection_OUTX': [(lambda 
g:g.V().as_('v').call('tinker.degree.centrality').with_('direction', 
Direction.OUT).project('vertex', 'degree').by(__.select('v')).by())], 
 +    'g_V_callXdc_mapX_withXdirection_OUTX': [(lambda g, 
xx1=None:g.V().as_('v').call('tinker.degree.centrality', 
xx1).with_('direction', Direction.OUT).project('vertex', 
'degree').by(__.select('v')).by())], 
 +    'g_V_callXdc_traversalX': [(lambda 
g:g.V().as_('v').call('tinker.degree.centrality', 
__.project('direction').by(__.constant(Direction.OUT))).project('vertex', 
'degree').by(__.select('v')).by())], 
 +    'g_V_callXdc_map_traversalX': [(lambda g, 
xx1=None:g.V().as_('v').call('tinker.degree.centrality', xx1, 
__.project('direction').by(__.constant(Direction.OUT))).project('vertex', 
'degree').by(__.select('v')).by())], 
 +    'g_V_coalesceXoutXfooX_outXbarXX': [(lambda 
g:g.V().coalesce(__.out('foo'), __.out('bar')))], 
 +    'g_VX1X_coalesceXoutXknowsX_outXcreatedXX_valuesXnameX': [(lambda g, 
vid1=None:g.V(vid1).coalesce(__.out('knows'), 
__.out('created')).values('name'))], 
 +    'g_VX1X_coalesceXoutXcreatedX_outXknowsXX_valuesXnameX': [(lambda g, 
vid1=None:g.V(vid1).coalesce(__.out('created'), 
__.out('knows')).values('name'))], 
 +    'g_V_coalesceXoutXlikesX_outXknowsX_inXcreatedXX_groupCount_byXnameX': 
[(lambda g:g.V().coalesce(__.out('likes'), __.out('knows'), 
__.out('created')).group_count().by('name'))], 
 +    'g_V_coalesceXoutEXknowsX_outEXcreatedXX_otherV_path_byXnameX_byXlabelX': 
[(lambda g:g.V().coalesce(__.out_e('knows'), 
__.out_e('created')).other_v().path().by('name').by(T.label))], 
 +    'g_V_outXcreatedX_order_byXnameX_coalesceXname_constantXxXX': [(lambda 
g:g.V().out('created').order().by('name').coalesce(__.values('name'), 
__.constant('x')))], 
      'g_injectXnullX_combineXinjectX1XX': [(lambda 
g:g.inject(None).combine(__.inject(1)))], 
 -    'g_V_valuesXnameX_combineXV_foldX': [(lambda 
g:g.V().name.combine(__.V().fold()))], 
 +    'g_V_valuesXnameX_combineXV_foldX': [(lambda 
g:g.V().values('name').combine(__.V().fold()))], 
      'g_V_fold_combineXconstantXnullXX': [(lambda 
g:g.V().fold().combine(__.constant(None)))], 
      'g_V_fold_combineXVX': [(lambda g:g.V().fold().combine(__.V()))], 
 -    'g_V_valuesXnameX_fold_combineX2X': [(lambda 
g:g.V().name.fold().combine(2))], 
 -    'g_V_valuesXnameX_fold_combineXnullX': [(lambda 
g:g.V().name.fold().combine(None))], 
 -    'g_V_valuesXnonexistantX_fold_combineXV_valuesXnameX_foldX_unfold': 
[(lambda g:g.V().nonexistant.fold().combine(__.V().name.fold()).unfold())], 
 -    'g_V_valuesXnameX_fold_combineXV_valuesXnonexistantX_foldX_unfold': 
[(lambda g:g.V().name.fold().combine(__.V().nonexistant.fold()).unfold())], 
 -    
'g_V_valuesXageX_order_byXdescX_fold_combineXV_valuesXageX_order_byXdescX_foldX':
 [(lambda 
g:g.V().age.order().by(Order.desc).fold().combine(__.V().age.order().by(Order.desc).fold()))],
 
 -    'g_V_out_path_byXvaluesXnameX_toUpperX_combineXMARKOX': [(lambda g, 
xx1=None:g.V().out().path().by(__.name.to_upper()).combine(xx1))], 
 -    'g_injectXxx1X_combineXV_valuesXnameX_foldX_unfold': [(lambda g, 
xx1=None:g.inject(xx1).combine(__.V().name.fold()).unfold())], 
 -    
'g_V_valueMapXlocationX_selectXvaluesX_unfold_combineXseattle_vancouverX_orderXlocalX':
 [(lambda g, 
xx1=None:g.V().value_map('location').select(Column.values).unfold().combine(xx1).order(Scope.local))],
 
 -    'g_V_out_out_path_byXnameX_combineXempty_listX': [(lambda g, 
xx1=None:g.V().out().out().path().by('name').combine(xx1))], 
 -    'g_V_valuesXageX_order_fold_combineXconstantX27X_foldX': [(lambda 
g:g.V().age.order().fold().combine(__.constant(27).fold()))], 
 -    'g_V_out_out_path_byXnameX_combineXdave_kelvinX': [(lambda g, 
xx1=None:g.V().out().out().path().by('name').combine(xx1))], 
 -    'g_injectXa_null_bX_combineXa_cX': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).combine(xx2))], 
 -    'g_injectXa_null_bX_combineXa_null_cX': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).combine(xx2))], 
 -    'g_injectX3_threeX_combineXfive_three_7X': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).combine(xx2))], 
 -    'g_injectXa_bX_concat': [(lambda g:g.inject('a','b').concat())], 
 -    'g_injectXa_bX_concat_XcX': [(lambda g:g.inject('a','b').concat('c'))], 
 -    'g_injectXa_bX_concat_Xc_dX': [(lambda 
g:g.inject('a','b').concat('c','d'))], 
 -    'g_injectXa_bX_concat_Xinject_c_dX': [(lambda 
g:g.inject('a','b').concat(__.inject('c')))], 
 -    'g_injectXaX_concat_Xinject_List_b_cX': [(lambda g, 
xx1=None:g.inject('a').concat(__.inject(xx1)))], 
 -    'g_injectXListXa_bXcX_concat_XdX': [(lambda g, 
xx1=None:g.inject(xx1,'c').concat('d'))], 
 +    'g_V_valuesXnameX_fold_combineX2X': [(lambda 
g:g.V().values('name').fold().combine(2))], 
 +    'g_V_valuesXnameX_fold_combineXnullX': [(lambda 
g:g.V().values('name').fold().combine(None))], 
 +    'g_V_valuesXnonexistantX_fold_combineXV_valuesXnameX_foldX_unfold': 
[(lambda 
g:g.V().values('nonexistant').fold().combine(__.V().values('name').fold()).unfold())],
 
 +    'g_V_valuesXnameX_fold_combineXV_valuesXnonexistantX_foldX_unfold': 
[(lambda 
g:g.V().values('name').fold().combine(__.V().values('nonexistant').fold()).unfold())],
 
 +    
'g_V_valuesXageX_order_byXdescX_fold_combineXV_valuesXageX_order_byXdescX_foldX':
 [(lambda 
g:g.V().values('age').order().by(Order.desc).fold().combine(__.V().values('age').order().by(Order.desc).fold()))],
 
 +    'g_V_out_path_byXvaluesXnameX_toUpperX_combineXMARKOX': [(lambda 
g:g.V().out().path().by(__.values('name').to_upper()).combine(['MARKO']))], 
 +    'g_injectXxx1X_combineXV_valuesXnameX_foldX_unfold': [(lambda 
g:g.inject(['marko']).combine(__.V().values('name').fold()).unfold())], 
 +    
'g_V_valueMapXlocationX_selectXvaluesX_unfold_combineXseattle_vancouverX_orderXlocalX':
 [(lambda 
g:g.V().value_map('location').select(Column.values).unfold().combine(['seattle',
 'vancouver']).order(Scope.local))], 
 +    'g_V_out_out_path_byXnameX_combineXempty_listX': [(lambda 
g:g.V().out().out().path().by('name').combine([]))], 
 +    'g_V_valuesXageX_order_fold_combineXconstantX27X_foldX': [(lambda 
g:g.V().values('age').order().fold().combine(__.constant(27).fold()))], 
 +    'g_V_out_out_path_byXnameX_combineXdave_kelvinX': [(lambda 
g:g.V().out().out().path().by('name').combine(['dave', 'kelvin']))], 
 +    'g_injectXa_null_bX_combineXa_cX': [(lambda g:g.inject(['a', None, 
'b']).combine(['a', 'c']))], 
 +    'g_injectXa_null_bX_combineXa_null_cX': [(lambda g:g.inject(['a', None, 
'b']).combine(['a', None, 'c']))], 
 +    'g_injectX3_threeX_combineXfive_three_7X': [(lambda g:g.inject([3, 
'three']).combine(['five', 'three', 7]))], 
 +    'g_injectXa_bX_concat': [(lambda g:g.inject('a', 'b').concat())], 
 +    'g_injectXa_bX_concat_XcX': [(lambda g:g.inject('a', 'b').concat('c'))], 
 +    'g_injectXa_bX_concat_Xc_dX': [(lambda g:g.inject('a', 'b').concat('c', 
'd'))], 
 +    'g_injectXa_bX_concat_Xinject_c_dX': [(lambda g:g.inject('a', 
'b').concat(__.inject('c')))], 
 +    'g_injectXaX_concat_Xinject_List_b_cX': [(lambda 
g:g.inject('a').concat(__.inject(['b', 'c'])))], 
 +    'g_injectXListXa_bXcX_concat_XdX': [(lambda g:g.inject(['a', 'b'], 
'c').concat('d'))], 
      'g_injectXnullX_concat_XinjectX': [(lambda g:g.inject(None).concat())], 
 -    'g_injectXnull_aX_concat_Xnull_bX': [(lambda 
g:g.inject(None,'a').concat(None,'b'))], 
 -    'g_injectXhello_hiX_concat_XV_valuesXnameXX': [(lambda 
g:g.inject('hello','hi').concat(__.V().order().by(T.id_).name))], 
 -    'g_V_hasLabel_value_concat_X_X_concat_XpersonX': [(lambda 
g:g.V().has_label('person').name.concat(' ').concat('person'))], 
 -    'g_hasLabelXpersonX_valuesXnameX_asXaX_constantXMrX_concatXselectXaX': 
[(lambda 
g:g.V().has_label('person').name.as_('a').constant('Mr.').concat(__.select('a')))],
 
 -    
'g_hasLabelXsoftwareX_asXaX_valuesXnameX_concatXunsesX_concatXselectXaXvaluesXlangX':
 [(lambda g:g.V().has_label('software').as_('a').name.concat(' uses 
').concat(__.select('a').lang))], 
 -    
'g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_labelX_concatXselectXaX_inV_valuesXnameXX':
 [(lambda g, 
vid1=None:g.V(vid1).out_e().as_('a').V(vid1).name.concat(__.select('a').label()).concat(__.select('a').in_v().name))],
 
 -    
'g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_label_selectXaX_inV_valuesXnameXX':
 [(lambda g, 
vid1=None:g.V(vid1).out_e().as_('a').V(vid1).name.concat(__.select('a').label(),__.select('a').in_v().name))],
 
 -    'g_addVXconstantXprefix_X_concatXVX1X_labelX_label': [(lambda g, 
vid1=None:g.add_v('person').property('name','marko').property('age',29).as_('marko').add_v('person').property('name','vadas').property('age',27).as_('vadas').add_v('software').property('name','lop').property('lang','java').as_('lop').add_v('person').property('name','josh').property('age',32).as_('josh').add_v('software').property('name','ripple').property('lang','java').as_('ripple').add_v('person').property('name','pe
 [...]
 +    'g_injectXnull_aX_concat_Xnull_bX': [(lambda g:g.inject(None, 
'a').concat(None, 'b'))], 
 +    'g_injectXhello_hiX_concatXV_values_order_byXnameX_valuesXnameXX': 
[(lambda g:g.inject('hello', 
'hi').concat(__.V().order().by('name').values('name')))], 
 +    'g_V_hasLabel_value_concat_X_X_concat_XpersonX': [(lambda 
g:g.V().has_label('person').values('name').concat(' ').concat('person'))], 
 +    'g_hasLabelXpersonX_valuesXnameX_asXaX_constantXMrX_concatXselectXaX': 
[(lambda 
g:g.V().has_label('person').values('name').as_('a').constant('Mr.').concat(__.select('a')))],
 
 +    
'g_hasLabelXsoftwareX_asXaX_valuesXnameX_concatXunsesX_concatXselectXaXvaluesXlangX':
 [(lambda g:g.V().has_label('software').as_('a').values('name').concat(' uses 
').concat(__.select('a').values('lang')))], 
 +    
'g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_labelX_concatXselectXaX_inV_valuesXnameXX':
 [(lambda g, 
vid1=None:g.V(vid1).out_e().as_('a').V(vid1).values('name').concat(__.select('a').label()).concat(__.select('a').in_v().values('name')))],
 
 +    
'g_VX1X_outE_asXaX_VX1X_valuesXnamesX_concatXselectXaX_label_selectXaX_inV_valuesXnameXX':
 [(lambda g, 
vid1=None:g.V(vid1).out_e().as_('a').V(vid1).values('name').concat(__.select('a').label(),
 __.select('a').in_v().values('name')))], 
 +    'g_addVXconstantXprefix_X_concatXVX1X_labelX_label': [(lambda g, 
vid1=None:g.add_v('person').property('name', 'marko').property('age', 
29).as_('marko').add_v('person').property('name', 'vadas').property('age', 
27).as_('vadas').add_v('software').property('name', 'lop').property('lang', 
'java').as_('lop').add_v('person').property('name', 'josh').property('age', 
32).as_('josh').add_v('software').property('name', 'ripple').property('lang', 
'java').as_('ripple').add_v('person').property( [...]
      'g_injectXnullX_conjoinX1X': [(lambda g:g.inject(None).conjoin('1'))], 
 -    'g_V_valuesXnameX_conjoinX1X': [(lambda g:g.V().name.conjoin('1'))], 
 -    'g_V_valuesXnonexistantX_fold_conjoinX_X': [(lambda 
g:g.V().nonexistant.fold().conjoin(';'))], 
 -    'g_V_valuesXnameX_order_fold_conjoinX_X': [(lambda 
g:g.V().name.order().fold().conjoin('_'))], 
 -    'g_V_valuesXageX_order_fold_conjoinX_X': [(lambda 
g:g.V().age.order().fold().conjoin(';'))], 
 -    'g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX': [(lambda 
g:g.V().out().path().by(__.name.to_upper()).conjoin('MARKO'))], 
 -    'g_injectXmarkoX_conjoinX_X': [(lambda g, 
xx1=None:g.inject(xx1).conjoin('-'))], 
 +    'g_V_valuesXnameX_conjoinX1X': [(lambda 
g:g.V().values('name').conjoin('1'))], 
 +    'g_V_valuesXnonexistantX_fold_conjoinX_X': [(lambda 
g:g.V().values('nonexistant').fold().conjoin(';'))], 
 +    'g_V_valuesXnameX_order_fold_conjoinX_X': [(lambda 
g:g.V().values('name').order().fold().conjoin('_'))], 
 +    'g_V_valuesXageX_order_fold_conjoinX_X': [(lambda 
g:g.V().values('age').order().fold().conjoin(';'))], 
 +    'g_V_out_path_byXvaluesXnameX_toUpperX_conjoinXMARKOX': [(lambda 
g:g.V().out().path().by(__.values('name').to_upper()).conjoin('MARKO'))], 
 +    'g_injectXmarkoX_conjoinX_X': [(lambda 
g:g.inject(['marko']).conjoin('-'))], 
      'g_V_valueMapXlocationX_selectXvaluesX_unfold_orderXlocalX_conjoinX1X': 
[(lambda 
g:g.V().value_map('location').select(Column.values).unfold().order(Scope.local).conjoin('1'))],
 
      'g_V_out_out_path_byXnameX_conjoinXX': [(lambda 
g:g.V().out().out().path().by('name').conjoin(''))], 
 -    'g_injectXa_null_bX_conjoinXxyzX': [(lambda g, 
xx1=None:g.inject(xx1).conjoin('xyz'))], 
 -    'g_injectX3_threeX_conjoinX_X': [(lambda g, 
xx1=None:g.inject(xx1).conjoin(';'))], 
 -    'g_injectXnull_a_null_bX_conjoinXplusX': [(lambda g, 
xx1=None:g.inject(xx1).conjoin('+'))], 
 -    'g_injectXnull_nullX_conjoinXplusX': [(lambda g, 
xx1=None:g.inject(xx1).conjoin('+'))], 
 +    'g_injectXa_null_bX_conjoinXxyzX': [(lambda g:g.inject(['a', None, 
'b']).conjoin('xyz'))], 
 +    'g_injectX3_threeX_conjoinX_X': [(lambda g:g.inject([3, 
'three']).conjoin(';'))], 
++    'g_injectXnull_a_null_bX_conjoinXplusX': [(lambda g:g.inject([None, 'a', 
None, 'b']).conjoin('+'))], 
++    'g_injectXnull_nullX_conjoinXplusX': [(lambda g:g.inject([None, 
None]).conjoin('+'))], 
      'g_V_connectedComponent_hasXcomponentX': [(lambda 
g:g.V().connected_component().has('gremlin.connectedComponentVertexProgram.component'))],
 
      'g_V_dedup_connectedComponent_hasXcomponentX': [(lambda 
g:g.V().dedup().connected_component().has('gremlin.connectedComponentVertexProgram.component'))],
 
 -    
'g_V_hasLabelXsoftwareX_connectedComponent_project_byXnameX_byXcomponentX': 
[(lambda 
g:g.V().has_label('software').connected_component().project('name','component').by('name').by('gremlin.connectedComponentVertexProgram.component'))],
 
 -    
'g_V_connectedComponent_withXEDGES_bothEXknowsXX_withXPROPERTY_NAME_clusterX_project_byXnameX_byXclusterX':
 [(lambda 
g:g.V().has_label('person').connected_component().with_('~tinkerpop.connectedComponent.edges',__.both_e('knows')).with_('~tinkerpop.connectedComponent.propertyName','cluster').project('name','cluster').by('name').by('cluster'))],
 
 +    
'g_V_hasLabelXsoftwareX_connectedComponent_project_byXnameX_byXcomponentX': 
[(lambda g:g.V().has_label('software').connected_component().project('name', 
'component').by('name').by('gremlin.connectedComponentVertexProgram.component'))],
 
 +    
'g_V_connectedComponent_withXEDGES_bothEXknowsXX_withXPROPERTY_NAME_clusterX_project_byXnameX_byXclusterX':
 [(lambda 
g:g.V().has_label('person').connected_component().with_('~tinkerpop.connectedComponent.edges',
 __.both_e('knows')).with_('~tinkerpop.connectedComponent.propertyName', 
'cluster').project('name', 'cluster').by('name').by('cluster'))], 
      'g_V_constantX123X': [(lambda g:g.V().constant(123))], 
      'g_V_constantXnullX': [(lambda g:g.V().constant(None))], 
 -    'g_V_chooseXhasLabelXpersonX_valuesXnameX_constantXinhumanXX': [(lambda 
g:g.V().choose(__.has_label('person'),__.name,__.constant('inhuman')))], 
 +    'g_V_chooseXhasLabelXpersonX_valuesXnameX_constantXinhumanXX': [(lambda 
g:g.V().choose(__.has_label('person'), __.values('name'), 
__.constant('inhuman')))], 
      'g_V_count': [(lambda g:g.V().count())], 
      'g_V_out_count': [(lambda g:g.V().out().count())], 
      'g_V_both_both_count': [(lambda g:g.V().both().both().count())], 
diff --cc 
gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Conjoin.feature
index dd47ed044c,949dcc102d..376129b726
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Conjoin.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Conjoin.feature
@@@ -150,3 -153,29 +150,27 @@@ Feature: Step - conjoin(
      Then the result should be unordered
        | result |
        | 3;three |
+ 
+   @GraphComputerVerificationInjectionNotSupported
+   Scenario: g_injectXnull_a_null_bX_conjoinXplusX
+     Given the empty graph
 -    And using the parameter xx1 defined as "l[null,a,null,b]"
+     And the traversal of
+       """
 -      g.inject(xx1).conjoin("+")
++      g.inject([null,"a",null,"b"]).conjoin("+")
+       """
+     When iterated to list
+     Then the result should be unordered
+       | result |
+       | str[a+b] |
+ 
+   @GraphComputerVerificationInjectionNotSupported
+   Scenario: g_injectXnull_nullX_conjoinXplusX
+     Given the empty graph
 -    And using the parameter xx1 defined as "l[null,null]"
+     And the traversal of
+       """
 -      g.inject(xx1).conjoin("+")
++      g.inject([null,null]).conjoin("+")
+       """
+     When iterated to list
+     Then the result should be unordered
+       | result |
+       | str[] |


Reply via email to