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
