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

kenhuuu pushed a commit to branch feature-tests-params
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit daba1d1509d226dabb2beef2b025b65f193ed5a8
Author: Ken Hu <[email protected]>
AuthorDate: Tue Nov 26 22:28:58 2024 -0800

    Added feature tests for traversals that were missing gvalue coverage
---
 gremlin-python/src/main/python/radish/gremlin.py   | 44 +++++++++++++++-------
 .../gremlin/test/features/branch/Choose.feature    | 19 ++++++++++
 .../gremlin/test/features/filter/Coin.feature      | 17 +++++++++
 .../gremlin/test/features/filter/Has.feature       | 13 +++++++
 .../gremlin/test/features/filter/HasId.feature     | 29 ++++++++++++++
 .../gremlin/test/features/filter/HasLabel.feature  | 17 +++++++++
 .../gremlin/test/features/map/AddEdge.feature      | 18 ++++++++-
 .../gremlin/test/features/map/Call.feature         | 19 ++++++++++
 .../gremlin/test/features/map/Combine.feature      | 10 +++++
 .../gremlin/test/features/map/Difference.feature   | 10 +++++
 .../gremlin/test/features/map/Disjunct.feature     | 10 +++++
 .../gremlin/test/features/map/Edge.feature         | 15 +++++++-
 .../gremlin/test/features/map/Intersect.feature    | 10 +++++
 .../gremlin/test/features/map/MergeEdge.feature    | 32 ++++++++++++++++
 .../gremlin/test/features/map/MergeVertex.feature  | 29 ++++++++++++++
 .../gremlin/test/features/map/Product.feature      | 10 +++++
 16 files changed, 286 insertions(+), 16 deletions(-)

diff --git a/gremlin-python/src/main/python/radish/gremlin.py 
b/gremlin-python/src/main/python/radish/gremlin.py
index a2db50be54..3385d0f6a7 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -138,6 +138,7 @@ world.gremlins = {
     'g_injectXnull_nullX_anyXeqXnullXX': [(lambda g, 
xx1=None:g.inject(xx1).any_(P.eq(None)))], 
     'g_injectX3_threeX_anyXeqX3XX': [(lambda g, 
xx1=None:g.inject(xx1).any_(P.eq(3)))], 
     'g_V_coinX1X': [(lambda g:g.V().coin(1.0))], 
+    'g_V_coinX1varX': [(lambda g, xx1=None:g.V().coin(xx1))], 
     'g_V_coinX0X': [(lambda g:g.V().coin(0.0))], 
     'g_withStrategiesXSeedStrategyX_V_order_byXnameX_coinX50X': [(lambda 
g:g.with_strategies(SeedStrategy(seed=999999)).V().order().by('name').coin(0.5))],
 
     'g_VX1X_outXcreatedX_inXcreatedX_cyclicPath': [(lambda g, 
vid1=None:g.V(vid1).out('created').in_('created').cyclic_path())], 
@@ -202,6 +203,7 @@ world.gremlins = {
     'g_V_hasXage_isXgt_30XX': [(lambda g:g.V().has('age', __.is_(P.gt(30))))], 
     'g_V_hasXlabel_isXsoftwareXX': [(lambda g:g.V().has(T.label, 
__.is_('software')))], 
     'g_VX1X_hasXage_gt_30X': [(lambda g, vid1=None:g.V(vid1).has('age', 
P.gt(30)))], 
+    'g_V_hasXpersonvar_age_gt_30X': [(lambda g, xx1=None:g.V().has(xx1, 'age', 
P.gt(30)))], 
     'g_VX4X_hasXage_gt_30X': [(lambda g, vid4=None:g.V(vid4).has('age', 
P.gt(30)))], 
     'g_VXv1X_hasXage_gt_30X': [(lambda g, v1=None:g.V(v1).has('age', 
P.gt(30)))], 
     'g_VXv4X_hasXage_gt_30X': [(lambda g, v4=None:g.V(v4).has('age', 
P.gt(30)))], 
@@ -251,6 +253,8 @@ world.gremlins = {
     '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))], 
+    'g_V_hasIdXmarkovar_vadasvarX': [(lambda g, 
vid2=None,vid1=None:g.V().has_id(vid1, vid2))], 
+    'g_V_hasIdXmarkovar_vadasvar_petervarX': [(lambda g, 
vid2=None,vid1=None:g.V().has_id(vid1, vid2))], 
     'g_V_hasIdX2AsString_nullX': [(lambda g, vid2=None:g.V().has_id(vid2, 
None))], 
     '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))], 
@@ -277,6 +281,7 @@ world.gremlins = {
     'g_E_hasLabelXknowsX': [(lambda g:g.E().has_label('knows'))], 
     'g_E_hasLabelXuses_traversesX': [(lambda g:g.E().has_label('uses', 
'traverses'))], 
     'g_V_hasLabelXperson_software_blahX': [(lambda g:g.V().has_label('person', 
'software', 'blah'))], 
+    'g_V_hasLabelXperson_softwarevarX': [(lambda g, 
xx1=None:g.V().has_label('person', xx1))], 
     'g_V_hasLabelXpersonX_hasLabelXsoftwareX': [(lambda 
g:g.V().has_label('person').has_label('software'))], 
     'g_V_hasLabelXpersonvarX_hasLabelXsoftwareX': [(lambda g, 
xx1=None:g.V().has_label(xx1).has_label('software'))], 
     'g_V_hasLabelXpersonvar_softwarevarX': [(lambda g, 
xx1=None,xx2=None:g.V().has_label(xx1, xx2))], 
@@ -574,6 +579,7 @@ world.gremlins = {
     'g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X': [(lambda g, 
v6=None,xx1=None,v1=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') [...]
     
'g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX':
 [(lambda g:g.add_v('person').property('name', 'marko').property('age', 
29).add_v('person').property('name', 'vadas').property('age', 27)), (lambda 
g:g.add_e('knows').property('weight', None).from_(__.V().has('name', 
'marko')).to(__.V().has('name', 'vadas'))), (lambda g:g.E().has('knows', 
'weight', None))], 
     
'g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX':
 [(lambda g, xx1=None:g.add_v('person').property('name', 
'marko').property('age', 29).add_v('person').property('name', 
'vadas').property('age', 27)), (lambda g, 
xx1=None:g.add_e(xx1).property('weight', None).from_(__.V().has('name', 
'marko')).to(__.V().has('name', 'vadas'))), (lambda g, 
xx1=None:g.E().has('knows', 'weight', None))], 
+    
'g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX':
 [(lambda g, xx1=None:g.add_v('person').property('name', 
'marko').property('age', 29).add_v('person').property('name', 
'vadas').property('age', 27)), (lambda g, 
xx1=None:g.union(__.add_e(xx1).property('weight', 1).from_(__.V().has('name', 
'marko')).to(__.V().has('name', 'vadas')))), (lambda g, 
xx1=None:g.E().has('knows', 'weight', 1))], 
     
'g_VX1X_addVXanimalX_propertyXage_selectXaX_byXageXX_propertyXname_puppyX': 
[(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 [...]
     'g_V_addVXanimalX_propertyXage_0X': [(lambda 
g: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', 'peter').property('ag 
[...]
     'g_V_addVXanimalvarX_propertyXage_0varX': [(lambda g, 
xx1=None,xx2=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('nam [...]
@@ -659,6 +665,7 @@ world.gremlins = {
     '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().values('name').fold().combine(2))], 
+    'g_V_valuesXnameX_fold_combineX2varX': [(lambda g, 
xx1=None:g.V().values('name').fold().combine(xx1))], 
     '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())],
 
@@ -735,6 +742,7 @@ world.gremlins = {
     'g_V_fold_differenceXconstantXnullXX': [(lambda 
g:g.V().fold().difference(__.constant(None)))], 
     'g_V_fold_differenceXVX': [(lambda g:g.V().fold().difference(__.V()))], 
     'g_V_valuesXnameX_fold_differenceX2X': [(lambda 
g:g.V().values('name').fold().difference(2))], 
+    'g_V_valuesXnameX_fold_differenceX2varX': [(lambda g, 
xx1=None:g.V().values('name').fold().difference(xx1))], 
     'g_V_valuesXnameX_fold_differenceXnullX': [(lambda 
g:g.V().values('name').fold().difference(None))], 
     'g_V_valuesXnonexistantX_fold_differenceXV_valuesXnameX_foldX': [(lambda 
g:g.V().values('nonexistant').fold().difference(__.V().values('name').fold()))],
 
     'g_V_valuesXnameX_fold_differenceXV_valuesXnonexistantX_foldX': [(lambda 
g:g.V().values('name').fold().difference(__.V().values('nonexistant').fold()))],
 
@@ -754,6 +762,7 @@ world.gremlins = {
     'g_V_fold_disjunctXconstantXnullXX': [(lambda 
g:g.V().fold().disjunct(__.constant(None)))], 
     'g_V_fold_disjunctXVX': [(lambda g:g.V().fold().disjunct(__.V()))], 
     'g_V_valuesXnameX_fold_disjunctX2X': [(lambda 
g:g.V().values('name').fold().disjunct(2))], 
+    'g_V_valuesXnameX_fold_disjunctX3varX': [(lambda g, 
xx1=None:g.V().values('name').fold().disjunct(xx1))], 
     'g_V_valuesXnameX_fold_disjunctXnullX': [(lambda 
g:g.V().values('name').fold().disjunct(None))], 
     'g_V_valuesXnonexistantX_fold_disjunctXV_valuesXnameX_foldX': [(lambda 
g:g.V().values('nonexistant').fold().disjunct(__.V().values('name').fold()))], 
     'g_V_valuesXnameX_fold_disjunctXV_valuesXnonexistantX_foldX': [(lambda 
g:g.V().values('name').fold().disjunct(__.V().values('nonexistant').fold()))], 
@@ -792,6 +801,7 @@ world.gremlins = {
     'g_VX1X_outEXknows_createdX_inV': [(lambda g, 
vid1=None:g.V(vid1).out_e('knows', 'created').in_v())], 
     'g_VX1X_outEXknowsX_bothV': [(lambda g, 
vid1=None:g.V(vid1).out_e('knows').both_v())], 
     'g_VX1X_outEXknowsX_bothV_name': [(lambda g, 
vid1=None:g.V(vid1).out_e('knows').both_v().values('name'))], 
+    'g_V_toEXout_knowsvarX_valuesXweightX': [(lambda g, 
xx1=None:g.V().to_e(Direction.OUT, xx1).values('weight'))], 
     'g_VX1X_properties_element': [(lambda g, 
v2=None:g.V(v2).properties().element().limit(1))], 
     'g_V_properties_element': [(lambda g:g.V().properties().element())], 
     'g_V_propertiesXageX_element': [(lambda 
g:g.V().properties('age').element())], 
@@ -834,6 +844,7 @@ world.gremlins = {
     'g_V_fold_intersectXconstantXnullXX': [(lambda 
g:g.V().fold().intersect(__.constant(None)))], 
     'g_V_fold_intersectXVX': [(lambda g:g.V().fold().intersect(__.V()))], 
     'g_V_valuesXnameX_fold_intersectX2X': [(lambda 
g:g.V().values('name').fold().intersect(2))], 
+    'g_V_valuesXnameX_fold_intersectX5varX': [(lambda g, 
xx1=None:g.V().values('name').fold().intersect(xx1))], 
     'g_V_valuesXnameX_fold_intersectXnullX': [(lambda 
g:g.V().values('name').fold().intersect(None))], 
     'g_V_valuesXnonexistantX_fold_intersectXV_valuesXnameX_foldX': [(lambda 
g:g.V().values('nonexistant').fold().intersect(__.V().values('name').fold()))], 
     'g_V_valuesXnameX_fold_intersectXV_valuesXnonexistantX_foldX': [(lambda 
g:g.V().values('name').fold().intersect(__.V().values('nonexistant').fold()))], 
@@ -846,13 +857,6 @@ world.gremlins = {
     'g_injectXa_null_bX_intersectXa_cX': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).intersect(xx2))], 
     'g_injectXa_null_bX_intersectXa_null_cX': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).intersect(xx2))], 
     'g_injectX3_threeX_intersectXfive_three_7X': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).intersect(xx2))], 
-    'g_injectX__feature___test__nullX_lTrim': [(lambda g:g.inject('  feature', 
' one test', None, '', ' ', ' abc', 'abc ', ' abc ', '  ').l_trim())], 
-    'g_injectX__feature___test__nullX_lTrimXlocalX': [(lambda g:g.inject(['  
feature  ', ' one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  
']).l_trim(Scope.local))], 
-    'g_injectX__feature__X_lTrim': [(lambda g:g.inject('  feature  
').l_trim())], 
-    'g_injectXListXa_bXX_lTrim': [(lambda g, 
xx1=None:g.inject(xx1).l_trim())], 
-    'g_injectXListX1_2XX_lTrimXlocalX': [(lambda g, 
xx1=None:g.inject(xx1).l_trim(Scope.local))], 
-    'g_V_valuesXnameX_lTrim': [(lambda g: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', 'peter').proper [...]
-    'g_V_valuesXnameX_order_fold_lTrimXlocalX': [(lambda 
g: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 [...]
     'g_injectXfeature_test_nullX_length': [(lambda g:g.inject('feature', 
'test', None).length())], 
     'g_injectXfeature_test_nullX_lengthXlocalX': [(lambda 
g:g.inject('feature', 'test', None).length(Scope.local))], 
     'g_injectXListXa_bXX_length': [(lambda g, 
xx1=None:g.inject(xx1).length())], 
@@ -862,6 +866,13 @@ world.gremlins = {
     
'g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_or_loops_isX2XX_hasXname_peterX_path_byXnameX':
 [(lambda g, 
vid1=None:g.V(vid1).repeat(__.both().simple_path()).until(__.has('name', 
'peter').or_().loops().is_(2)).has('name', 'peter').path().by('name'))], 
     
'g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_and_loops_isX3XX_hasXname_peterX_path_byXnameX':
 [(lambda g, 
vid1=None:g.V(vid1).repeat(__.both().simple_path()).until(__.has('name', 
'peter').and_().loops().is_(3)).has('name', 'peter').path().by('name'))], 
     'g_V_emitXhasXname_markoX_or_loops_isX2XX_repeatXoutX_valuesXnameX': 
[(lambda g:g.V().emit(__.has('name', 
'marko').or_().loops().is_(2)).repeat(__.out()).values('name'))], 
+    'g_injectX__feature___test__nullX_lTrim': [(lambda g:g.inject('  feature', 
' one test', None, '', ' ', ' abc', 'abc ', ' abc ', '  ').l_trim())], 
+    'g_injectX__feature___test__nullX_lTrimXlocalX': [(lambda g:g.inject(['  
feature  ', ' one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  
']).l_trim(Scope.local))], 
+    'g_injectX__feature__X_lTrim': [(lambda g:g.inject('  feature  
').l_trim())], 
+    'g_injectXListXa_bXX_lTrim': [(lambda g, 
xx1=None:g.inject(xx1).l_trim())], 
+    'g_injectXListX1_2XX_lTrimXlocalX': [(lambda g, 
xx1=None:g.inject(xx1).l_trim(Scope.local))], 
+    'g_V_valuesXnameX_lTrim': [(lambda g: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', 'peter').proper [...]
+    'g_V_valuesXnameX_order_fold_lTrimXlocalX': [(lambda 
g: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 [...]
     'g_VX1X_mapXnameX': [],  # skipping as it contains a lambda
     'g_VX1X_outE_label_mapXlengthX': [],  # skipping as it contains a lambda
     'g_VX1X_out_mapXnameX_mapXlengthX': [],  # skipping as it contains a lambda
@@ -982,6 +993,8 @@ world.gremlins = {
     'g_V_mergeEXemptyX_two_exist': [(lambda g, 
xx1=None:g.add_v('person').property('name', 'marko').property('age', 
29).add_v('person').property('name', 'vadas').property('age', 27)), (lambda g, 
xx1=None:g.V().as_('v').merge_e(xx1).option(Merge.out_v, 
__.select('v')).option(Merge.in_v, __.select('v'))), (lambda g, 
xx1=None:g.E()), (lambda g, xx1=None:g.V())], 
     'g_V_mergeE_inlineXemptyX_two_exist': [(lambda 
g:g.add_v('person').property('name', 'marko').property('age', 
29).add_v('person').property('name', 'vadas').property('age', 27)), (lambda 
g:g.V().as_('v').merge_e({ T.label: 'self', Direction.OUT: Merge.out_v, 
Direction.IN: Merge.in_v }).option(Merge.out_v, 
__.select('v')).option(Merge.in_v, __.select('v'))), (lambda g:g.E()), (lambda 
g:g.V())], 
     'g_mergeEXnullX': [(lambda g:g.add_v('person').property('name', 
'marko').property('age', 29)), (lambda g:g.merge_e(None))], 
+    'g_mergeEXnullvarX': [(lambda g, 
xx1=None:g.add_v('person').property('name', 'marko').property('age', 29)), 
(lambda g, xx1=None:g.merge_e(xx1))], 
+    'g_V_limitX1X_mergeEXnullvarX': [(lambda g, 
xx1=None:g.add_v('person').property('name', 'marko').property('age', 29)), 
(lambda g, xx1=None:g.V().limit(1).merge_e(xx1))], 
     'g_V_mergeEXnullX': [(lambda g:g.add_v('person').property('name', 
'marko').property('age', 29)), (lambda g:g.V().merge_e(None))], 
     'g_mergeEXlabel_knows_out_marko_in_vadasX': [(lambda g, 
xx1=None:g.add_v('person').property('name', 
'marko').add_v('person').property('name', 'vadas')), (lambda g, 
xx1=None:g.merge_e(xx1)), (lambda g, xx1=None:g.V().has('person', 'name', 
'marko').out('knows').has('person', 'name', 'vadas'))], 
     'g_withSideEffectXa_label_knows_out_marko_in_vadasX_mergeEXselectXaXX': 
[(lambda g, xx1=None:g.add_v('person').property('name', 
'marko').add_v('person').property('name', 'vadas')), (lambda g, 
xx1=None:g.with_side_effect('a', xx1).merge_e(__.select('a'))), (lambda g, 
xx1=None:g.V().has('person', 'name', 'marko').out('knows').has('person', 
'name', 'vadas'))], 
@@ -1033,6 +1046,7 @@ world.gremlins = {
     'g_mergeVXemptyX': [(lambda g:g.add_v('person').property('name', 
'marko').property('age', 29)), (lambda g:g.merge_v({  })), (lambda 
g:g.V().has('person', 'name', 'marko').has('age', 29))], 
     'g_V_mergeVXemptyX_two_exist': [(lambda 
g:g.add_v('person').property('name', 'marko').property('age', 
29).add_v('person').property('name', 'vadas').property('age', 27)), (lambda 
g:g.V().merge_v({  })), (lambda g:g.V()), (lambda g:g.V().has('person', 'name', 
'marko').has('age', 29)), (lambda g:g.V().has('person', 'name', 
'vadas').has('age', 27))], 
     'g_mergeVXnullX': [(lambda g:g.add_v('person').property('name', 
'marko').property('age', 29)), (lambda g:g.merge_v(None)), (lambda g:g.V())], 
+    'g_mergeVXnullvarX': [(lambda g, xx1=None:g.merge_v(xx1)), (lambda g, 
xx1=None:g.V())], 
     'g_V_mergeVXnullX': [(lambda g:g.add_v('person').property('name', 
'marko').property('age', 29)), (lambda g:g.V().merge_v(None)), (lambda 
g:g.V())], 
     'g_mergeVXlabel_person_name_stephenX': [(lambda g, 
xx1=None:g.add_v('person').property('name', 'marko').property('age', 29)), 
(lambda g, xx1=None:g.merge_v(xx1)), (lambda g, xx1=None:g.V().has('person', 
'name', 'stephen'))], 
     'g_mergeVXlabel_person_name_markoX': [(lambda g, 
xx1=None:g.add_v('person').property('name', 'marko').property('age', 29)), 
(lambda g, xx1=None:g.merge_v(xx1)), (lambda g, xx1=None:g.V().has('person', 
'name', 'marko'))], 
@@ -1074,6 +1088,7 @@ world.gremlins = {
     'g_mergeVXname_markoX_optionXonMatch_age_singleX33XX': [(lambda 
g:g.add_v('person').property('name', 'marko').property(Cardinality.list_, 
'age', 29).property(Cardinality.list_, 'age', 31).property(Cardinality.list_, 
'age', 32)), (lambda g:g.merge_v({ 'name': 'marko' }).option(Merge.on_match, { 
'age': CardinalityValue.single(33) })), (lambda g:g.V().has('person', 'name', 
'marko').has('age', 33)), (lambda g:g.V().has('person', 'name', 
'marko').has('age')), (lambda g:g.V().has('person', [...]
     'g_mergeVXname_markoX_optionXonMatch_age_33_singleX': [(lambda 
g:g.add_v('person').property('name', 'marko').property(Cardinality.list_, 
'age', 29).property(Cardinality.list_, 'age', 31).property(Cardinality.list_, 
'age', 32)), (lambda g:g.merge_v({ 'name': 'marko' }).option(Merge.on_match, { 
'age': 33 }, Cardinality.single)), (lambda g:g.V().has('person', 'name', 
'marko').has('age', 33)), (lambda g:g.V().has('person', 'name', 
'marko').has('age')), (lambda g:g.V().has('person', 'name [...]
     'g_mergeVXname_markoX_optionXonMatch_name_allen_age_setX31X_singleX': 
[(lambda g:g.add_v('person').property('name', 
'marko').property(Cardinality.list_, 'age', 29).property(Cardinality.list_, 
'age', 31).property(Cardinality.list_, 'age', 32)), (lambda g:g.merge_v({ 
'name': 'marko' }).option(Merge.on_match, { 'name': 'allen', 'age': 
CardinalityValue.set_(31) }, Cardinality.single)), (lambda 
g:g.V().has('person', 'name', 'marko')), (lambda g:g.V().has('person', 'name', 
'allen').has('ag [...]
+    'g_mergeVXname_markoX_optionXonMatch_name_allen_var_singleX': [(lambda g, 
xx1=None:g.add_v('person').property('name', 'marko')), (lambda g, 
xx1=None:g.merge_v({ 'name': 'marko' }).option(Merge.on_match, xx1, 
Cardinality.single)), (lambda g, xx1=None:g.V().has('person', 'name', 
'marko')), (lambda g, xx1=None:g.V().has('person', 'name', 'allen'))], 
     'g_mergeVXname_markoX_optionXonMatch_name_allen_age_singleX31X_singleX': 
[(lambda g:g.add_v('person').property('name', 
'marko').property(Cardinality.list_, 'age', 29).property(Cardinality.list_, 
'age', 31).property(Cardinality.list_, 'age', 32)), (lambda g:g.merge_v({ 
'name': 'marko' }).option(Merge.on_match, { 'name': 'allen', 'age': 
CardinalityValue.single(31) }, Cardinality.single)), (lambda 
g:g.V().has('person', 'name', 'marko')), (lambda g:g.V().has('person', 'name', 
'allen').ha [...]
     'g_mergeVXname_aliceX_optionXonCreate_age_singleX81XX': [(lambda 
g:g.merge_v({ 'name': 'alice', T.label: 'person' }).option(Merge.on_create, { 
'age': CardinalityValue.single(81) })), (lambda g:g.V().has('person', 'name', 
'alice').has('age', 81)), (lambda g:g.V().has('person', 'name', 
'alice').has('age')), (lambda g:g.V().has('person', 'name', 
'alice').properties('age'))], 
     'g_mergeVXname_aliceX_optionXonCreate_age_setX81XX': [(lambda 
g:g.merge_v({ 'name': 'alice', T.label: 'person' }).option(Merge.on_create, { 
'age': CardinalityValue.set_(81) })), (lambda g:g.V().has('person', 'name', 
'alice').has('age', 81)), (lambda g:g.V().has('person', 'name', 
'alice').has('age')), (lambda g:g.V().has('person', 'name', 
'alice').properties('age'))], 
@@ -1157,6 +1172,7 @@ world.gremlins = {
     'g_V_fold_productXconstantXnullXX': [(lambda 
g:g.V().fold().product(__.constant(None)))], 
     'g_V_fold_productXVX': [(lambda g:g.V().fold().product(__.V()))], 
     'g_V_valuesXnameX_fold_productX2X': [(lambda 
g:g.V().values('name').fold().product(2))], 
+    'g_V_valuesXnameX_fold_productX7varX': [(lambda g, 
xx1=None:g.V().values('name').fold().product(xx1))], 
     'g_V_valuesXnameX_fold_productXnullX': [(lambda 
g:g.V().values('name').fold().product(None))], 
     'g_V_valuesXnonexistantX_fold_productXV_valuesXnameX_foldX': [(lambda 
g:g.V().values('nonexistant').fold().product(__.V().values('name').fold()))], 
     'g_V_valuesXnameX_fold_productXV_valuesXnonexistantX_foldX': [(lambda 
g:g.V().values('name').fold().product(__.V().values('nonexistant').fold()))], 
@@ -1179,13 +1195,6 @@ world.gremlins = {
     'g_V_hasXageX_propertiesXage_nameX_value': [(lambda 
g:g.V().has('age').properties('age', 'name').value())], 
     'g_V_propertiesXname_age_nullX_value': [(lambda g:g.V().properties('name', 
'age', None).value())], 
     'g_V_valuesXname_age_nullX': [(lambda g:g.V().values('name', 'age', 
None))], 
-    'g_injectX__feature___test__nullX_rTrim': [(lambda g:g.inject('feature  ', 
'one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  ').r_trim())], 
-    'g_injectX__feature___test__nullX_rTrimXlocalX': [(lambda g:g.inject(['  
feature  ', ' one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  
']).r_trim(Scope.local))], 
-    'g_injectX__feature__X_rTrim': [(lambda g:g.inject('  feature  
').r_trim())], 
-    'g_injectXListXa_bXX_rTrim': [(lambda g, 
xx1=None:g.inject(xx1).r_trim())], 
-    'g_injectXListX1_2XX_rTrimXlocalX': [(lambda g, 
xx1=None:g.inject(xx1).r_trim(Scope.local))], 
-    'g_V_valuesXnameX_rTrim': [(lambda g: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', 'peter').proper [...]
-    'g_V_valuesXnameX_order_fold_rTrimXlocalX': [(lambda 
g: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 [...]
     'g_injectXthat_this_test_nullX_replaceXh_jX': [(lambda g:g.inject('that', 
'this', 'test', None).replace('h', 'j'))], 
     'g_injectXthat_this_test_nullX_fold_replaceXlocal_h_jX': [(lambda 
g:g.inject('that', 'this', 'test', None).fold().replace(Scope.local, 'h', 
'j'))], 
     'g_injectXListXa_bXcX_replaceXa_bX': [(lambda g, 
xx1=None:g.inject(xx1).replace('a', 'b'))], 
@@ -1202,6 +1211,13 @@ world.gremlins = {
     'g_injectXnullX_reverse': [(lambda g:g.inject(None).reverse())], 
     'g_injectXbX_reverse': [(lambda g:g.inject('b').reverse())], 
     'g_injectX3_threeX_reverse': [(lambda g, 
xx1=None:g.inject(xx1).reverse())], 
+    'g_injectX__feature___test__nullX_rTrim': [(lambda g:g.inject('feature  ', 
'one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  ').r_trim())], 
+    'g_injectX__feature___test__nullX_rTrimXlocalX': [(lambda g:g.inject(['  
feature  ', ' one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  
']).r_trim(Scope.local))], 
+    'g_injectX__feature__X_rTrim': [(lambda g:g.inject('  feature  
').r_trim())], 
+    'g_injectXListXa_bXX_rTrim': [(lambda g, 
xx1=None:g.inject(xx1).r_trim())], 
+    'g_injectXListX1_2XX_rTrimXlocalX': [(lambda g, 
xx1=None:g.inject(xx1).r_trim(Scope.local))], 
+    'g_V_valuesXnameX_rTrim': [(lambda g: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', 'peter').proper [...]
+    'g_V_valuesXnameX_order_fold_rTrimXlocalX': [(lambda 
g: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 [...]
     'g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX': [(lambda g, 
vid1=None:g.V(vid1).as_('a').out('knows').as_('b').select('a', 'b'))], 
     'g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX_byXnameX': [(lambda g, 
vid1=None:g.V(vid1).as_('a').out('knows').as_('b').select('a', 
'b').by('name'))], 
     'g_VX1X_asXaX_outXknowsX_asXbX_selectXaX': [(lambda g, 
vid1=None:g.V(vid1).as_('a').out('knows').as_('b').select('a'))], 
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/branch/Choose.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/branch/Choose.feature
index 9696563308..94791d3598 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/branch/Choose.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/branch/Choose.feature
@@ -89,6 +89,25 @@ Feature: Step - choose()
       | lop |
       | ripple |
 
+  # this doesn't work with either grammar (null not allowed)
+  # or groovy (ambiguous method call)
+  #Scenario: g_V_chooseXlabelX_optionXpersonvar_nullX_optionXnone__identityX
+  #  Given the modern graph
+  #  And using the parameter xx1 defined as "person"
+  #  And the traversal of
+  #    """
+  #    g.V().choose(__.label()).option(xx1, null).option(Pick.none, 
__.identity())
+  #    """
+  #  When iterated to list
+  #  Then the result should be unordered
+  #    | result |
+  #    | marko |
+  #    | vadas |
+  #    | peter |
+  #    | josh |
+  #    | lop |
+  #    | ripple |
+
   Scenario: g_V_chooseXoutXknowsX_count_isXgtX0XX__outXknowsXX_name
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
index fd007fb320..8ba4265b8c 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
@@ -34,6 +34,23 @@ Feature: Step - coin()
       | v[ripple] |
       | v[peter]  |
 
+  Scenario: g_V_coinX1varX
+    Given the modern graph
+    And using the parameter xx1 defined as "d[1.0].d"
+    And the traversal of
+      """
+      g.V().coin(xx1)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[marko] |
+      | v[vadas] |
+      | v[lop] |
+      | v[josh] |
+      | v[ripple] |
+      | v[peter]  |
+
   Scenario: g_V_coinX0X
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Has.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Has.feature
index 42059bccdb..2cb5e0bab1 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Has.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Has.feature
@@ -153,6 +153,19 @@ Feature: Step - has()
     When iterated to list
     Then the result should be empty
 
+  Scenario: g_V_hasXpersonvar_age_gt_30X
+    Given the modern graph
+    And using the parameter xx1 defined as "person"
+    And the traversal of
+      """
+      g.V().has(xx1, "age", P.gt(30))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[peter] |
+      | v[josh] |
+
   Scenario: g_VX4X_hasXage_gt_30X
     Given the modern graph
     And using the parameter vid4 defined as "v[josh].id"
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 2cb6992510..febcc45c71 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
@@ -93,6 +93,35 @@ Feature: Step - hasId()
       | result |
       | v[vadas] |
 
+  Scenario: g_V_hasIdXmarkovar_vadasvarX
+    Given the modern graph
+    And using the parameter vid1 defined as "v[marko].id"
+    And using the parameter vid2 defined as "v[vadas].id"
+    And the traversal of
+      """
+      g.V().hasId(vid1, vid2)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[marko] |
+      | v[vadas] |
+
+  Scenario: g_V_hasIdXmarkovar_vadasvar_petervarX
+    Given the modern graph
+    And using the parameter vid1 defined as "v[marko].id"
+    And using the parameter vid2 defined as "l[v[vadas].id, v[peter].id]"
+    And the traversal of
+      """
+      g.V().hasId(vid1, vid2)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[marko] |
+      | v[vadas] |
+      | v[peter] |
+
   Scenario: g_V_hasIdX2AsString_nullX
     Given the modern graph
     And using the parameter vid2 defined as "v[vadas].sid"
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature
index 2da655e7e6..c9484790ca 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasLabel.feature
@@ -78,6 +78,23 @@ Feature: Step - hasLabel()
       | v[lop] |
       | v[ripple] |
 
+  Scenario: g_V_hasLabelXperson_softwarevarX
+    Given the modern graph
+    And using the parameter xx1 defined as "software"
+    And the traversal of
+    """
+    g.V().hasLabel("person",xx1)
+    """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[marko] |
+      | v[vadas] |
+      | v[josh] |
+      | v[peter] |
+      | v[lop] |
+      | v[ripple] |
+
   Scenario: g_V_hasLabelXpersonX_hasLabelXsoftwareX
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
index b2cd709619..827eaa6dc6 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
@@ -479,4 +479,20 @@ Feature: Step - addE()
       """
     When iterated to list
     Then the result should have a count of 1
-    And the graph should return 1 for count of 
"g.E().has(\"knows\",\"weight\",null)"
\ No newline at end of file
+    And the graph should return 1 for count of 
"g.E().has(\"knows\",\"weight\",null)"
+
+  Scenario: 
g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX
+    Given the empty graph
+    And the graph initializer of
+      """
+      g.addV("person").property("name", "marko").property("age", 29).
+        addV("person").property("name", "vadas").property("age", 27)
+      """
+    And using the parameter xx1 defined as "knows"
+    And the traversal of
+      """
+      g.union(addE(xx1).property("weight", 
1).from(V().has("name","marko")).to(V().has("name","vadas")))
+      """
+    When iterated to list
+    Then the result should have a count of 1
+    And the graph should return 1 for count of 
"g.E().has(\"knows\",\"weight\", 1)"
\ No newline at end of file
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Call.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Call.feature
index d5f9366c40..244a9a0715 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Call.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Call.feature
@@ -237,6 +237,25 @@ Feature: Step - call()
       | m[{"vertex": "v[ripple]", "degree": "d[0].l"}] |
       | m[{"vertex": "v[peter]",  "degree": "d[1].l"}] |
 
+  # Doesn't work because grammar doesn't allow null for traversal but 
GraphTraversal does.
+  # Probably just fix GraphTraversal?
+  #Scenario: g_V_callXdc_mapvar_nullX
+  #  Given the modern graph
+  #  And using the parameter xx1 defined as "m[{\"x\": \"y\"}]"
+  #  And the traversal of
+  #    """
+  #    g.V().as("v").call("tinker.degree.centrality", xx1, null)
+  #    """
+  #  When iterated to list
+  #  Then the result should be unordered
+  #    | result |
+  #    | d[3].l |
+  #    | d[0].l |
+  #    | d[1].l |
+  #    | d[1].l |
+  #    | d[0].l |
+  #    | d[1].l |
+
   Scenario: g_V_callXdc_traversalX
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Combine.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Combine.feature
index f40f5cbe51..d09a295406 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Combine.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Combine.feature
@@ -66,6 +66,16 @@ Feature: Step - combine()
     When iterated to list
     Then the traversal will raise an error with message containing text of 
"combine step can only take an array or an Iterable as an argument, encountered"
 
+  Scenario: g_V_valuesXnameX_fold_combineX2varX
+    Given the modern graph
+    And using the parameter xx1 defined as "2"
+    And the traversal of
+      """
+      g.V().values("name").fold().combine(xx1)
+      """
+    When iterated to list
+    Then the traversal will raise an error with message containing text of 
"combine step can only take an array or an Iterable as an argument, encountered"
+
   Scenario: g_V_valuesXnameX_fold_combineXnullX
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Difference.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Difference.feature
index 18d5043f3c..67e871cbbc 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Difference.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Difference.feature
@@ -66,6 +66,16 @@ Feature: Step - difference()
     When iterated to list
     Then the traversal will raise an error with message containing text of 
"difference step can only take an array or an Iterable as an argument, 
encountered"
 
+  Scenario: g_V_valuesXnameX_fold_differenceX2varX
+    Given the modern graph
+    And using the parameter xx1 defined as "2"
+    And the traversal of
+      """
+      g.V().values("name").fold().difference(xx1)
+      """
+    When iterated to list
+    Then the traversal will raise an error with message containing text of 
"difference step can only take an array or an Iterable as an argument, 
encountered"
+
   Scenario: g_V_valuesXnameX_fold_differenceXnullX
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Disjunct.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Disjunct.feature
index e6fcee1535..90fcafdd3a 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Disjunct.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Disjunct.feature
@@ -66,6 +66,16 @@ Feature: Step - disjunct()
     When iterated to list
     Then the traversal will raise an error with message containing text of 
"disjunct step can only take an array or an Iterable as an argument, 
encountered"
 
+  Scenario: g_V_valuesXnameX_fold_disjunctX3varX
+    Given the modern graph
+    And using the parameter xx1 defined as "3"
+    And the traversal of
+      """
+      g.V().values("name").fold().disjunct(xx1)
+      """
+    When iterated to list
+    Then the traversal will raise an error with message containing text of 
"disjunct step can only take an array or an Iterable as an argument, 
encountered"
+
   Scenario: g_V_valuesXnameX_fold_disjunctXnullX
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Edge.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Edge.feature
index 7d75a251af..c1c8ded961 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Edge.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Edge.feature
@@ -355,4 +355,17 @@ Feature: Step - E(), inV(), outV(), bothV(), otherV()
       | marko |
       | marko |
       | josh |
-      | vadas |
\ No newline at end of file
+      | vadas |
+
+  Scenario: g_V_toEXout_knowsvarX_valuesXweightX
+    Given the modern graph
+    And using the parameter xx1 defined as "knows"
+    And the traversal of
+      """
+      g.V().toE(Direction.OUT, xx1).values("weight")
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[0.5].d |
+      | d[1.0].d |
\ No newline at end of file
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Intersect.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Intersect.feature
index c6b44844f0..37ba287a20 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Intersect.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Intersect.feature
@@ -66,6 +66,16 @@ Feature: Step - intersect()
     When iterated to list
     Then the traversal will raise an error with message containing text of 
"intersect step can only take an array or an Iterable as an argument, 
encountered"
 
+  Scenario: g_V_valuesXnameX_fold_intersectX5varX
+    Given the modern graph
+    And using the parameter xx1 defined as "5"
+    And the traversal of
+      """
+      g.V().values("name").fold().intersect(xx1)
+      """
+    When iterated to list
+    Then the traversal will raise an error with message containing text of 
"intersect step can only take an array or an Iterable as an argument, 
encountered"
+
   Scenario: g_V_valuesXnameX_fold_intersectXnullX
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/MergeEdge.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/MergeEdge.feature
index c14e86883d..0f90acbe11 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/MergeEdge.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/MergeEdge.feature
@@ -86,6 +86,7 @@ Feature: Step - mergeE()
   #   - vertices already exists
   #   - results in two new edges
   # g_mergeEXnullX
+  # g_mergeEXnullvarX
   # g_V_mergeEXnullX
   #   - mergeE(null) and no option
   #   - vertices already exists
@@ -273,6 +274,37 @@ Feature: Step - mergeE()
     When iterated to list
     Then the traversal will raise an error with message containing text of 
"Out Vertex not specified"
 
+  # Doesn't work, GValue.of() gives an UNKNOWN type for null which makes the 
grammar
+  # use the map argument rather than the GValue one for MergeE
+  Scenario: g_mergeEXnullvarX
+    Given the empty graph
+    And the graph initializer of
+      """
+      g.addV("person").property("name", "marko").property("age", 29)
+      """
+    And using the parameter xx1 defined as "null"
+    And the traversal of
+      """
+      g.mergeE(xx1)
+      """
+    When iterated to list
+    Then the traversal will raise an error with message containing text of 
"Out Vertex not specified"
+
+  # same problem as start step mergeE above
+  Scenario: g_V_limitX1X_mergeEXnullvarX
+    Given the empty graph
+    And the graph initializer of
+      """
+      g.addV("person").property("name", "marko").property("age", 29)
+      """
+    And using the parameter xx1 defined as "null"
+    And the traversal of
+      """
+      g.V().limit(1).mergeE(xx1)
+      """
+    When iterated to list
+    Then the traversal will raise an error with message containing text of 
"Out Vertex not specified"
+
   # Directions not specified
   @GremlinLangScriptOnly
   Scenario: g_V_mergeEXnullX
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/MergeVertex.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/MergeVertex.feature
index 5cd3670e86..a631e5bece 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/MergeVertex.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/MergeVertex.feature
@@ -65,6 +65,7 @@ Feature: Step - mergeV()
   #   - mergeV(Map) with no option() - testing child traversal usage
   #   - results in one new vertex and one existing vertex that was just created
   # g_mergeVXnullX
+  # g_mergeVXnullvarX
   # g_V_mergeVXnullX
   #   - mergeV(null) with no option()
   #   - results in no new vertex and nothing returned
@@ -292,6 +293,17 @@ Feature: Step - mergeV()
     Then the result should have a count of 1
     And the graph should return 1 for count of "g.V()"
 
+  Scenario: g_mergeVXnullvarX
+    Given the modern graph
+    And using the parameter xx1 defined as "null"
+    And the traversal of
+      """
+      g.mergeV(xx1)
+      """
+    When iterated to list
+    Then the result should have a count of 6
+    And the graph should return 6 for count of "g.V()"
+
   @GremlinLangScriptOnly
   Scenario: g_V_mergeVXnullX
     Given the empty graph
@@ -945,6 +957,23 @@ Feature: Step - mergeV()
     And the graph should return 1 for count of 
"g.V().has(\"person\",\"name\",\"allen\").has(\"age\")"
     And the graph should return 3 for count of 
"g.V().has(\"person\",\"name\",\"allen\").properties(\"age\")"
 
+  # No matching GValue for visitTraversalMethod_option_Merge_Map_Cardinality
+  Scenario: g_mergeVXname_markoX_optionXonMatch_name_allen_var_singleX
+    Given the empty graph
+    And the graph initializer of
+      """
+      g.addV("person").property("name", "marko")
+      """
+    And using the parameter xx1 defined as "m[{\"name\":\"allen\"}]"
+    And the traversal of
+      """
+      g.mergeV([name: "marko"]).option(Merge.onMatch, xx1, single)
+      """
+    When iterated to list
+    Then the result should have a count of 1
+    And the graph should return 0 for count of 
"g.V().has(\"person\",\"name\",\"marko\")"
+    And the graph should return 1 for count of 
"g.V().has(\"person\",\"name\",\"allen\")"
+
   @MultiProperties
   Scenario: 
g_mergeVXname_markoX_optionXonMatch_name_allen_age_singleX31X_singleX
     Given the empty graph
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Product.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Product.feature
index 5c12867440..a16c62bae2 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Product.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Product.feature
@@ -66,6 +66,16 @@ Feature: Step - product()
     When iterated to list
     Then the traversal will raise an error with message containing text of 
"product step can only take an array or an Iterable as an argument, encountered"
 
+  Scenario: g_V_valuesXnameX_fold_productX7varX
+    Given the modern graph
+    And using the parameter xx1 defined as "7"
+    And the traversal of
+      """
+      g.V().values("name").fold().product(xx1)
+      """
+    When iterated to list
+    Then the traversal will raise an error with message containing text of 
"product step can only take an array or an Iterable as an argument, encountered"
+
   Scenario: g_V_valuesXnameX_fold_productXnullX
     Given the modern graph
     And the traversal of


Reply via email to