You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by co...@apache.org on 2024/09/19 20:08:47 UTC
(tinkerpop) branch strategyConstruction updated (862d64ca61 -> f37da93801)
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a change to branch strategyConstruction
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
from 862d64ca61 WIP add VertexProgramStrategy to global registry
new 5209ccaaab add new feature tests
new 9be4f6b8e1 Temporary fix for ElementIdStrategy. Should be removed.
new 40131c6e1d update translators, core imports, and parser
new f679634a99 update server remote computer feature test ignores
new f37da93801 python
The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../tinkerpop/gremlin/jsr223/CoreImports.java | 10 +++
.../jsr223/DefaultGremlinScriptEngineManager.java | 2 +-
.../translator/PythonTranslateVisitor.java | 2 +-
.../process/traversal/TraversalStrategies.java | 5 +-
.../strategy/decoration/ElementIdStrategy.java | 7 +-
.../strategy/decoration/OptionsStrategy.java | 2 +-
.../language/translator/GremlinTranslatorTest.java | 9 +++
gremlin-python/build/generate.groovy | 2 +-
.../gremlin_python/process/graph_traversal.py | 2 +-
.../python/gremlin_python/process/strategies.py | 37 ++++++++++-
gremlin-python/src/main/python/radish/gremlin.py | 75 +++++++++++++++++++++-
.../src/main/python/tests/driver/test_client.py | 2 +-
.../main/python/tests/process/test_gremlin_lang.py | 2 +-
.../main/python/tests/process/test_strategies.py | 2 +-
.../GraphBinaryRemoteComputerFeatureTest.java | 2 +-
.../AdjacentToIncidentStrategy.feature} | 44 ++++++-------
.../ByModulatorOptimizationStrategy.feature} | 42 ++++++------
.../ComputerFinalizationStrategy.feature} | 30 ++++-----
.../ComputerVerificationStrategy.feature} | 30 ++++-----
.../ConnectiveStrategy.feature} | 46 ++++++-------
.../CountStrategy.feature} | 32 ++++-----
.../EarlyLimitStrategy.feature} | 36 ++++-------
.../EdgeLabelVerificationStrategy.feature} | 65 +++++++------------
.../ElementIdStrategy.feature} | 30 ++++-----
.../FilterRankingStrategy.feature} | 30 ++++-----
.../GraphFilterStrategy.feature} | 30 ++++-----
.../HaltedTraverserStrategy.feature} | 49 +++++---------
.../IdentityRemovalStrategy.feature} | 38 +++++------
.../IncidentToAdjacentStrategy.feature} | 38 +++++------
.../InlineFilterStrategy.feature} | 30 +++------
.../LambdaRestrictionStrategy.feature} | 32 +++++----
.../LazyBarrierStrategy.feature} | 30 ++++-----
.../integrated/MatchAlgorithmStrategy.feature | 63 ++++++++++++++++++
.../integrated/MatchPredicateStrategy.feature | 49 ++++++++++++++
.../MessagePassingReductionStrategy.feature} | 30 ++++-----
.../OptionsStrategy.feature} | 38 ++++++-----
.../OrderLimitStrategy.feature} | 30 ++++-----
.../PathProcessorStrategy.feature} | 43 ++++++-------
.../PathRetractionStrategy.feature} | 30 ++++-----
.../ProductiveByStrategy.feature} | 32 +++------
.../ProfileStrategy.feature} | 30 ++++-----
.../ReferenceElementStrategy.feature} | 30 ++++-----
.../RepeatUnrollStrategy.feature} | 30 +++------
.../ReservedKeysVerificationStrategy.feature | 50 +++++++++++++++
.../SeedStrategy.feature} | 34 ++++------
.../StandardVerificationStrategy.feature} | 30 ++++-----
.../VertexProgramRestrictionStrategy.feature} | 59 ++++++-----------
.../VertexProgramStrategy.feature} | 30 ++++-----
48 files changed, 746 insertions(+), 655 deletions(-)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{map/Fold.feature => integrated/AdjacentToIncidentStrategy.feature} (67%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/ByModulatorOptimizationStrategy.feature} (63%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/ComputerFinalizationStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/ComputerVerificationStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/ConnectiveStrategy.feature} (54%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/CountStrategy.feature} (65%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/EarlyLimitStrategy.feature} (63%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{map/Fold.feature => integrated/EdgeLabelVerificationStrategy.feature} (56%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/ElementIdStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/FilterRankingStrategy.feature} (67%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/GraphFilterStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{map/Fold.feature => integrated/HaltedTraverserStrategy.feature} (63%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/IdentityRemovalStrategy.feature} (66%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/IncidentToAdjacentStrategy.feature} (66%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/InlineFilterStrategy.feature} (64%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/LambdaRestrictionStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{sideEffect/Fail.feature => integrated/LazyBarrierStrategy.feature} (65%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MatchAlgorithmStrategy.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MatchPredicateStrategy.feature
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/MessagePassingReductionStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Or.feature => integrated/OptionsStrategy.feature} (68%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/OrderLimitStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/PathProcessorStrategy.feature} (61%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/PathRetractionStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/ProductiveByStrategy.feature} (63%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/ProfileStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/ReferenceElementStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/RepeatUnrollStrategy.feature} (65%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ReservedKeysVerificationStrategy.feature
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/SeedStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/StandardVerificationStrategy.feature} (70%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{map/Fold.feature => integrated/VertexProgramRestrictionStrategy.feature} (61%)
copy gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/{filter/Coin.feature => integrated/VertexProgramStrategy.feature} (70%)
(tinkerpop) 05/05: python
Posted by co...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch strategyConstruction
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit f37da938016c48a4d84b196d4f8512d2c37d64b5
Author: Cole-Greer <Co...@improving.com>
AuthorDate: Thu Sep 19 13:08:34 2024 -0700
python
---
gremlin-python/build/generate.groovy | 2 +-
.../gremlin_python/process/graph_traversal.py | 2 +-
.../python/gremlin_python/process/strategies.py | 37 ++++++++++-
gremlin-python/src/main/python/radish/gremlin.py | 75 +++++++++++++++++++++-
.../src/main/python/tests/driver/test_client.py | 2 +-
.../main/python/tests/process/test_gremlin_lang.py | 2 +-
.../main/python/tests/process/test_strategies.py | 2 +-
7 files changed, 115 insertions(+), 7 deletions(-)
diff --git a/gremlin-python/build/generate.groovy b/gremlin-python/build/generate.groovy
index 5672b55add..9ca21c2cdf 100644
--- a/gremlin-python/build/generate.groovy
+++ b/gremlin-python/build/generate.groovy
@@ -58,7 +58,7 @@ radishGremlinFile.withWriter('UTF-8') { Writer writer ->
'import datetime\n' +
'from gremlin_python.statics import long, GremlinType\n' +
'from gremlin_python.process.anonymous_traversal import traversal\n' +
- 'from gremlin_python.process.strategies import SeedStrategy, SubgraphStrategy, PartitionStrategy, ProductiveByStrategy, ReadOnlyStrategy\n' +
+ 'from gremlin_python.process.strategies import *\n' +
'from gremlin_python.process.traversal import TraversalStrategy\n' +
'from gremlin_python.process.graph_traversal import __\n' +
'from gremlin_python.structure.graph import Graph\n' +
diff --git a/gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py
index a5e66371aa..c9c59fda6d 100644
--- a/gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/python/gremlin_python/process/graph_traversal.py
@@ -135,7 +135,7 @@ class GraphTraversalSource(object):
val = True if v is None else v
if options_strategy is None:
- options_strategy = OptionsStrategy({k: val})
+ options_strategy = OptionsStrategy(**{k: val})
source = self.with_strategies(options_strategy)
else:
options_strategy[1].configuration[k] = val
diff --git a/gremlin-python/src/main/python/gremlin_python/process/strategies.py b/gremlin-python/src/main/python/gremlin_python/process/strategies.py
index b1e1619f96..15bca18786 100644
--- a/gremlin-python/src/main/python/gremlin_python/process/strategies.py
+++ b/gremlin-python/src/main/python/gremlin_python/process/strategies.py
@@ -41,6 +41,7 @@ class ConnectiveStrategy(TraversalStrategy):
class ElementIdStrategy(TraversalStrategy):
def __init__(self):
TraversalStrategy.__init__(self, fqcn=decoration_namespace + 'ElementIdStrategy')
+ self.configuration = {}
# EventStrategy doesn't make sense outside JVM traversal machine
@@ -53,7 +54,7 @@ class HaltedTraverserStrategy(TraversalStrategy):
class OptionsStrategy(TraversalStrategy):
- def __init__(self, options=None):
+ def __init__(self, **options):
TraversalStrategy.__init__(self, configuration=options, fqcn=decoration_namespace + 'OptionsStrategy')
@@ -121,6 +122,21 @@ class MatchAlgorithmStrategy(TraversalStrategy):
self.configuration["matchAlgorithm"] = match_algorithm
+class ReferenceElementStrategy(TraversalStrategy):
+ def __init__(self, options=None):
+ TraversalStrategy.__init__(self, configuration=options, fqcn=decoration_namespace + 'ReferenceElementStrategy')
+
+
+class ComputerFinalizationStrategy(TraversalStrategy):
+ def __init__(self, options=None):
+ TraversalStrategy.__init__(self, configuration=options, fqcn=decoration_namespace + 'ComputerFinalizationStrategy')
+
+
+class ProfileStrategy(TraversalStrategy):
+ def __init__(self, options=None):
+ TraversalStrategy.__init__(self, configuration=options, fqcn=decoration_namespace + 'ProfileStrategy')
+
+
###########################
# OPTIMIZATION STRATEGIES #
###########################
@@ -210,10 +226,19 @@ class EarlyLimitStrategy(TraversalStrategy):
def __init__(self):
TraversalStrategy.__init__(self, fqcn=optimization_namespace + 'EarlyLimitStrategy')
+
+class MessagePassingReductionStrategy(TraversalStrategy):
+ def __init__(self, options=None):
+ TraversalStrategy.__init__(self, configuration=options, fqcn=decoration_namespace + 'MessagePassingReductionStrategy')
+
###########################
# VERIFICATION STRATEGIES #
###########################
+class ComputerVerificationStrategy(TraversalStrategy):
+ def __init__(self, options=None):
+ TraversalStrategy.__init__(self, configuration=options, fqcn=decoration_namespace + 'ComputerVerificationStrategy')
+
class LambdaRestrictionStrategy(TraversalStrategy):
def __init__(self):
@@ -237,3 +262,13 @@ class ReservedKeysVerificationStrategy(TraversalStrategy):
self.configuration["logWarning"] = log_warning
self.configuration["throwException"] = throw_exception
self.configuration["keys"] = keys
+
+
+class VertexProgramRestrictionStrategy(TraversalStrategy):
+ def __init__(self):
+ TraversalStrategy.__init__(self, fqcn=verification_namespace + 'VertexProgramRestrictionStrategy')
+
+
+class StandardVerificationStrategy(TraversalStrategy):
+ def __init__(self):
+ TraversalStrategy.__init__(self, fqcn=verification_namespace + 'StandardVerificationStrategy')
diff --git a/gremlin-python/src/main/python/radish/gremlin.py b/gremlin-python/src/main/python/radish/gremlin.py
index e743770e98..df77351516 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -28,7 +28,7 @@ from radish import world
import datetime
from gremlin_python.statics import long, GremlinType
from gremlin_python.process.anonymous_traversal import traversal
-from gremlin_python.process.strategies import SeedStrategy, SubgraphStrategy, PartitionStrategy, ProductiveByStrategy, ReadOnlyStrategy
+from gremlin_python.process.strategies import *
from gremlin_python.process.traversal import TraversalStrategy
from gremlin_python.process.graph_traversal import __
from gremlin_python.structure.graph import Graph
@@ -384,9 +384,58 @@ world.gremlins = {
'g_V_asXnX_whereXorXhasLabelXsoftwareX_hasLabelXpersonXXX_selectXnX_byXnameX': [(lambda g:g.V().as_('n').where(__.or_(__.has_label('software'), __.has_label('person'))).select('n').by('name'))],
'g_V_asXnX_whereXorXselectXnX_hasLabelXsoftwareX_selectXnX_hasLabelXpersonXXX_selectXnX_byXnameX': [(lambda g:g.V().as_('n').where(__.or_(__.select('n').has_label('software'), __.select('n').has_label('person'))).select('n').by('name'))],
'g_V_hasLabelXpersonX_asXxX_whereXinEXknowsX_count_isXgteX1XXX_selectXxX': [(lambda g:g.V().has_label('person').as_('x').where(__.in_e('knows').count().is_(P.gte(1))).select('x'))],
+ 'g_withStrategiesXAdjacentToIncidentStrategyX_V': [(lambda g:g.with_strategies(AdjacentToIncidentStrategy()).V())],
+ 'g_withoutStrategiesXAdjacentToIncidentStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy')]).V())],
+ 'g_withStrategiesXAdjacentToIncidentStrategyX_V_out_count': [(lambda g:g.with_strategies(AdjacentToIncidentStrategy()).V().out().count())],
+ 'g_withStrategiesXAdjacentToIncidentStrategyX_V_whereXoutX': [(lambda g:g.with_strategies(AdjacentToIncidentStrategy()).V().where(__.out()))],
+ 'g_withStrategiesXByModulatorOptimizationStrategyX_V_order_byXvaluesXnameXX': [(lambda g:g.with_strategies(ByModulatorOptimizationStrategy()).V().order().by(__.values('name')))],
+ 'g_withoutStrategiesXByModulatorOptimizationStrategyX_V_order_byXvaluesXnameXX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ByModulatorOptimizationStrategy')]).V().order().by(__.values('name')))],
+ 'g_withStrategiesXComputerFinalizationStrategyX_V': [(lambda g:g.with_strategies(ComputerFinalizationStrategy()).V())],
+ 'g_withoutStrategiesXByModulatorOptimizationStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.finalization.ComputerFinalizationStrategy')]).V())],
+ 'g_withStrategiesXComputerVerificationStrategyX_V': [(lambda g:g.with_strategies(ComputerVerificationStrategy()).V())],
+ 'g_withoutStrategiesXComputerVerificationStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy')]).V())],
+ 'g_withStrategiesXConnectiveStrategyStrategyX_V_hasXname_markoX_or_whereXinXknowsX_hasXname_markoXX': [(lambda g:g.with_strategies(ConnectiveStrategy()).V().has('name', 'marko').or_().where(__.in_('knows').has('name', 'marko')))],
+ 'g_withStrategiesXCountStrategyX_V_whereXoutE_count_isX0XX': [(lambda g:g.with_strategies(CountStrategy()).V().where(__.out_e().count().is_(0)))],
+ 'g_withoutStrategiesXCountStrategyX_V_whereXoutE_count_isX0XX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy')]).V().where(__.out_e().count().is_(0)))],
+ 'g_withStrategiesXEarlyLimitStrategyX_V_out_order_valueMap_limitX3X_selectXnameX': [(lambda g:g.with_strategies(EarlyLimitStrategy()).V().out().order().value_map().limit(3).select('name'))],
+ 'g_withoutStrategiesXEarlyLimitStrategyX_V_out_order_valueMap_limitX3X_selectXnameX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.EarlyLimitStrategy')]).V().out().order().value_map().limit(3).select('name'))],
+ 'g_withStrategiesXEdgeLabelVerificationStrategyXthrowException_true_logWarning_falseXX_V': [(lambda g:g.with_strategies(EdgeLabelVerificationStrategy(throw_exception=True, log_warning=False)).V().out())],
+ 'g_withStrategiesXEdgeLabelVerificationStrategyXthrowException_false_logWarning_falseXX_V': [(lambda g:g.with_strategies(EdgeLabelVerificationStrategy(throw_exception=False, log_warning=False)).V().out())],
+ 'g_withoutStrategiesXEdgeLabelVerificationStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EdgeLabelVerificationStrategy')]).V().out())],
+ 'g_withStrategiesXElementIdStrategyX_V': [(lambda g:g.with_strategies(ElementIdStrategy()).V())],
+ 'g_withoutStrategiesXElementIdStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy')]).V())],
+ 'g_withStrategiesXFilterRankingStrategyX_V_out_order_dedup': [(lambda g:g.with_strategies(FilterRankingStrategy()).V().out().order().dedup())],
+ 'g_withoutStrategiesXFilterRankingStrategyX_V_out_order_dedup': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy')]).V().out().order().dedup())],
+ 'g_withStrategiesXGraphFilterStrategyX_V': [(lambda g:g.with_strategies(GraphFilterStrategy()).V())],
+ 'g_withoutStrategiesXGraphFilterStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.GraphFilterStrategy')]).V())],
+ 'g_withStrategiesXHaltedTraverserStrategyXDetachedFactoryXX_V': [(lambda g:g.with_strategies(HaltedTraverserStrategy(halted_traverser_factory='org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory')).V())],
+ 'g_withStrategiesXHaltedTraverserStrategyXReferenceFactoryXX_V': [(lambda g:g.with_strategies(HaltedTraverserStrategy(halted_traverser_factory='org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceFactory')).V())],
+ 'g_withoutStrategiesXHaltedTraverserStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy')]).V())],
+ 'g_withStrategiesXIdentityRemovalStrategyX_V_identity_out': [(lambda g:g.with_strategies(IdentityRemovalStrategy()).V().identity().out())],
+ 'g_withoutStrategiesXIdentityRemovalStrategyX_V_identity_out': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy')]).V().identity().out())],
+ 'g_withStrategiesXIncidentToAdjacentStrategyX_V_outE_inV': [(lambda g:g.with_strategies(IncidentToAdjacentStrategy()).V().out_e().in_v())],
+ 'g_withoutStrategiesXIncidentToAdjacentStrategyX_V_outE_inV': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IncidentToAdjacentStrategy')]).V().out_e().in_v())],
+ 'g_withStrategiesXInlineFilterStrategyX_V_filterXhasXname_markoXX': [(lambda g:g.with_strategies(InlineFilterStrategy()).V().filter_(__.has('name', 'marko')))],
+ 'g_withoutStrategiesXInlineFilterStrategyX_V_filterXhasXname_markoXX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.InlineFilterStrategy')]).V().filter_(__.has('name', 'marko')))],
+ 'g_withStrategiesXLambdaRestrictionStrategyX_V': [], # skipping as it contains a lambda
+ 'g_withoutStrategiesXLambdaRestrictionStrategyX_V': [], # skipping as it contains a lambda
+ 'g_withStrategiesXLazyBarrierStrategyX_V_out_bothE_count': [(lambda g:g.with_strategies(LazyBarrierStrategy()).V().out().both_e().count())],
+ 'g_withoutStrategiesXLazyBarrierStrategyX_V_out_bothE_count': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy')]).V().out().both_e().count())],
+ 'g_withStrategiesXMatchAlgorithmStrategyXmatchAlgorithm_CountMatchAlgorithmXX_V_matchXa_knows_b__a_created_cX': [(lambda g:g.with_strategies(MatchAlgorithmStrategy(match_algorithm='org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep$CountMatchAlgorithm')).V().match(__.as_('a').out('knows').as_('b'), __.as_('a').out('created').as_('c')))],
+ 'g_withStrategiesXMatchAlgorithmStrategyXmatchAlgorithm_GreedyMatchAlgorithmXX_V_matchXa_knows_b__a_created_cX': [(lambda g:g.with_strategies(MatchAlgorithmStrategy(match_algorithm='org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep$GreedyMatchAlgorithm')).V().match(__.as_('a').out('knows').as_('b'), __.as_('a').out('created').as_('c')))],
+ 'g_withoutStrategiesXMatchAlgorithmStrategyX_V_matchXa_knows_b__a_created_cX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy')]).V().match(__.as_('a').out('knows').as_('b'), __.as_('a').out('created').as_('c')))],
+ 'g_withStrategiesXMatchPredicateStrategyX_V_matchXa_created_lop_b__b_0created_29_cX_whereXc_repeatXoutX_timesX2XX_selectXa_b_cX': [(lambda g:g.with_strategies(MatchPredicateStrategy()).V().match(__.as_('a').out('created').has('name', 'lop').as_('b'), __.as_('b').in_('created').has('age', 29).as_('c')).where(__.as_('c').repeat(__.out()).times(2)).select('a', 'b', 'c'))],
+ 'g_withoutStrategiesXMatchPredicateStrategyX_V_matchXa_created_lop_b__b_0created_29_cX_whereXc_repeatXoutX_timesX2XX_selectXa_b_cX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchPredicateStrategy')]).V().match(__.as_('a').out('created').has('name', 'lop').as_('b'), __.as_('b').in_('created').has('age', 29).as_('c')).where(__.as_('c').repeat(__.out()).times(2)).select('a', 'b', 'c'))],
+ 'g_withStrategiesXMessagePassingReductionStrategyX_V': [(lambda g:g.with_strategies(MessagePassingReductionStrategy()).V())],
+ 'g_withoutStrategiesXMessagePassingReductionStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.MessagePassingReductionStrategy')]).V())],
'g_withoutStrategiesXCountStrategyX_V_count': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy')]).V().count())],
'g_V_coworker': [(lambda g, xx1=None:g.V().has_label('person').filter_(__.out_e('created')).aggregate('p').as_('p1').values('name').as_('p1n').select('p').unfold().where(P.neq('p1')).as_('p2').values('name').as_('p2n').select('p2').out('created').choose(__.in_('created').where(P.eq('p1')), __.values('name'), __.constant(xx1)).group().by(__.select('p1n')).by(__.group().by(__.select('p2n')).by(__.unfold().fold().project('numCoCreated', 'coCreated').by(__.count(Scope.local)).by())).unfo [...]
'g_V_coworker_with_midV': [(lambda g:g.V().has_label('person').filter_(__.out_e('created')).as_('p1').V().has_label('person').where(P.neq('p1')).filter_(__.out_e('created')).as_('p2').map(__.out('created').where(__.in_('created').as_('p1')).values('name').fold()).group().by(__.select('p1').by('name')).by(__.group().by(__.select('p2').by('name')).by(__.project('numCoCreated', 'coCreated').by(__.count(Scope.local)).by())).unfold())],
+ 'g_withStrategiesXOptionsStrategyX_V': [(lambda g:g.with_strategies(OptionsStrategy()).V())],
+ 'g_withStrategiesXOptionsStrategyXmyVar_myValueXX_V': [(lambda g:g.with_strategies(OptionsStrategy(my_var='myValue')).V())],
+ 'g_withoutStrategiesXOptionsStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy')]).V())],
+ 'g_withStrategiesXOrderLimitStrategyX_V': [(lambda g:g.with_strategies(OrderLimitStrategy()).V())],
+ 'g_withoutStrategiesXOrderLimitStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy')]).V())],
'g_withStrategiesXPartitionStrategyXwrite_a_read_aXX_V_name': [(lambda g:g.add_v('person').property('_partition', 'a').property('name', 'alice').add_v('person').property('_partition', 'b').property('name', 'bob')), (lambda g:g.with_strategies(PartitionStrategy(partition_key='_partition', write_partition='a', read_partitions=['a'])).V().values('name'))],
'g_withStrategiesXPartitionStrategyXwrite_a_read_a_bXX_V_name': [(lambda g:g.add_v('person').property('_partition', 'a').property('name', 'alice').add_v('person').property('_partition', 'b').property('name', 'bob')), (lambda g:g.with_strategies(PartitionStrategy(partition_key='_partition', write_partition='a', read_partitions=['a', 'b'])).V().values('name'))],
'g_withStrategiesXPartitionStrategyXwrite_a_read_cXX_V_name': [(lambda g:g.add_v('person').property('_partition', 'a').property('name', 'alice').add_v('person').property('_partition', 'b').property('name', 'bob')), (lambda g:g.with_strategies(PartitionStrategy(partition_key='_partition', write_partition='a', read_partitions=['c'])).V().values('name'))],
@@ -411,7 +460,15 @@ world.gremlins = {
'g_withStrategiesXPartitionStrategyXwrite_a_read_aXX_mergeVXlabel_person_name_aliceX_optionXonMatch_name_bobX': [(lambda g, xx1=None,xx2=None:g.add_v('person').property('_partition', 'a').property('name', 'alice').add_v('person').property('_partition', 'b').property('name', 'alice')), (lambda g, xx1=None,xx2=None:g.with_strategies(PartitionStrategy(partition_key='_partition', write_partition='a', read_partitions=['a'])).merge_v(xx1).option(Merge.on_match, xx2)), (lambda g, xx1=None,x [...]
'g_withStrategiesXPartitionStrategyXwrite_a_read_aXX_mergeV_optionXonCreateX': [(lambda g, xx1=None,xx2=None:g.add_v('person').property('_partition', 'b').property('name', 'alice')), (lambda g, xx1=None,xx2=None:g.with_strategies(PartitionStrategy(partition_key='_partition', write_partition='a', read_partitions=['a'])).merge_v(xx1).option(Merge.on_create, xx2)), (lambda g, xx1=None,xx2=None:g.V().has('name', 'alice').has('age', 35).has('_partition', 'a')), (lambda g, xx1=None,xx2=Non [...]
'g_withStrategiesXPartitionStrategyXwrite_a_read_aXX_injectX0X__mergeV_optionXonCreateX': [(lambda g, xx1=None,xx2=None:g.add_v('person').property('_partition', 'b').property('name', 'alice')), (lambda g, xx1=None,xx2=None:g.with_strategies(PartitionStrategy(partition_key='_partition', write_partition='a', read_partitions=['a'])).inject(0).merge_v(xx1).option(Merge.on_create, xx2)), (lambda g, xx1=None,xx2=None:g.V().has('name', 'alice').has('age', 35).has('_partition', 'a')), (lambd [...]
+ 'g_withStrategiesXPathProcessorStrategyX_V_asXaX_selectXaX_byXvaluesXnameXX': [(lambda g:g.with_strategies(PathProcessorStrategy()).V().as_('a').select('a').by(__.values('name')))],
+ 'g_withoutStrategiesXPathProcessorStrategyX_V_asXaX_selectXaX_byXvaluesXnameXX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy')]).V().as_('a').select('a').by(__.values('name')))],
+ 'g_withStrategiesXPathRetractionStrategyX_V': [(lambda g:g.with_strategies(PathRetractionStrategy()).V())],
+ 'g_withoutStrategiesXPathRetractionStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy')]).V())],
'g_V_shortestpath': [(lambda g:g.V().as_('v').both().as_('v').project('src', 'tgt', 'p').by(__.select(Pop.first, 'v')).by(__.select(Pop.last, 'v')).by(__.select(Pop.all_, 'v')).as_('triple').group('x').by(__.select('src', 'tgt')).by(__.select('p').fold()).select('tgt').barrier().repeat(__.both().as_('v').project('src', 'tgt', 'p').by(__.select(Pop.first, 'v')).by(__.select(Pop.last, 'v')).by(__.select(Pop.all_, 'v')).as_('t').filter_(__.select(Pop.all_, 'p').count(Scope.local).as_('l [...]
+ 'g_withStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX': [(lambda g:g.with_strategies(ProductiveByStrategy()).V().order().by('name').group().by('age').by('name'))],
+ 'g_withoutStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy')]).V().group().by('age').by('name'))],
+ 'g_withStrategiesXProfileStrategyX_V': [(lambda g:g.with_strategies(ProfileStrategy()).V())],
+ 'g_withoutStrategiesXProfileStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy')]).V())],
'g_withStrategiesXReadOnlyStrategyX_V': [(lambda g:g.with_strategies(ReadOnlyStrategy()).V())],
'g_withStrategiesXReadOnlyStrategyX_V_outXknowsX_name': [(lambda g:g.with_strategies(ReadOnlyStrategy()).V().out('knows').values('name'))],
'g_withStrategiesXReadOnlyStrategyX_addVXpersonX': [(lambda g:g.with_strategies(ReadOnlyStrategy()).add_v('person'))],
@@ -420,6 +477,17 @@ world.gremlins = {
'g_withStrategiesXReadOnlyStrategyX_V_propertyXname_joshX': [(lambda g:g.with_strategies(ReadOnlyStrategy()).V().property('name', 'josh'))],
'g_withStrategiesXReadOnlyStrategyX_E_propertyXweight_0X': [(lambda g:g.with_strategies(ReadOnlyStrategy()).E().property('weight', 0))],
'g_V_classic_recommendation': [(lambda g:g.V().has('name', 'DARK STAR').as_('a').out('followedBy').aggregate('stash').in_('followedBy').where(P.neq('a').and_(P.not_(P.within('stash')))).group_count().unfold().project('x', 'y', 'z').by(__.select(Column.keys).values('name')).by(__.select(Column.keys).values('performances')).by(__.select(Column.values)).order().by(__.select('z'), Order.desc).by(__.select('y'), Order.asc).limit(5).aggregate(Scope.local, 'm').select('x'))],
+ 'g_withStrategiesXReferenceElementStrategyX_V': [(lambda g:g.with_strategies(ReferenceElementStrategy()).V())],
+ 'g_withoutStrategiesXReferenceElementStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ReferenceElementStrategy')]).V())],
+ 'g_withStrategiesXRepeatUnrollStrategyX_V_repeatXoutX_timesX2X': [(lambda g:g.with_strategies(RepeatUnrollStrategy()).V().repeat(__.out()).times(2))],
+ 'g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXoutX_timesX2X': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy')]).V().repeat(__.out()).times(2))],
+ 'g_withStrategiesXReservedKeysVerificationStrategyXthrowException_trueXX_addVXpersonX_propertyXid_123X_propertyXname_markoX': [(lambda g:g.with_strategies(ReservedKeysVerificationStrategy(throw_exception=True)).add_v('person').property('id', 123).property('name', 'marko'))],
+ 'g_withStrategiesXReservedKeysVerificationStrategyXthrowException_trueXX_addVXpersonX_propertyXage_29X_propertyXname_markoX': [(lambda g:g.with_strategies(ReservedKeysVerificationStrategy(throw_exception=True, keys=['age'])).add_v('person').property('age', 29).property('name', 'marko'))],
+ 'g_withoutStrategiesXReservedKeysVerificationStrategyX_addVXpersonX_propertyXid_123X_propertyXname_markoX': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReservedKeysVerificationStrategy')]).add_v('person').property('id', 123).property('name', 'marko'))],
+ 'g_withStrategiesXSeedStrategyX_V': [(lambda g:g.with_strategies(SeedStrategy(seed=7)).V().coin(0.5))],
+ 'g_withoutStrategiesXSeedStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy')]).V())],
+ 'g_withStrategiesXStandardVerificationStrategyX_V': [(lambda g:g.with_strategies(StandardVerificationStrategy()).V())],
+ 'g_withoutStrategiesXStandardVerificationStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy')]).V())],
'g_withStrategiesXSubgraphStrategyXsubgraphAXX_V': [(lambda g:g.with_strategies(SubgraphStrategy(vertices=__.has('name', P.within('josh', 'lop', 'ripple')))).V())],
'g_withStrategiesXSubgraphStrategyXsubgraphAXX_E': [(lambda g:g.with_strategies(SubgraphStrategy(vertices=__.has('name', P.within('josh', 'lop', 'ripple')))).E())],
'g_withStrategiesXSubgraphStrategyXsubgraphAXX_VX4X_outE': [(lambda g, vid4=None:g.with_strategies(SubgraphStrategy(vertices=__.has('name', P.within('josh', 'lop', 'ripple')))).V(vid4).out_e())],
@@ -481,6 +549,11 @@ world.gremlins = {
'g_withStrategiesXSubgraphStrategyXsubgraphDXX_EX12X_bothV': [(lambda g, eid12=None:g.with_strategies(SubgraphStrategy(check_adjacent_vertices=False, vertices=__.has('name', P.within('josh', 'lop', 'ripple')), edges=__.or_(__.has('weight', 0.4).has_label('created'), __.has('weight', 1.0).has_label('created')))).E(eid12).both_v())],
'g_withStrategiesXSubgraphStrategyXsubgraphDXX_EX9X_bothV': [(lambda g, eid9=None:g.with_strategies(SubgraphStrategy(check_adjacent_vertices=False, vertices=__.has('name', P.within('josh', 'lop', 'ripple')), edges=__.or_(__.has('weight', 0.4).has_label('created'), __.has('weight', 1.0).has_label('created')))).E(eid9).both_v())],
'g_withStrategiesXSubgraphStrategyXcheckAdjacentVertices_subgraphDXX_EX9X_bothV': [(lambda g, eid9=None:g.with_strategies(SubgraphStrategy(check_adjacent_vertices=True, vertices=__.has('name', P.within('josh', 'lop', 'ripple')), edges=__.or_(__.has('weight', 0.4).has_label('created'), __.has('weight', 1.0).has_label('created')))).E(eid9).both_v())],
+ 'g_withStrategiesXVertexProgramRestrictionStrategyX_withoutStrategiesXVertexProgramStrategyX_V': [(lambda g:g.with_strategies(VertexProgramRestrictionStrategy()).without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy')]).V())],
+ 'g_withStrategiesXVertexProgramRestrictionStrategy_VertexProgramStrategyX_V': [(lambda g:g.with_strategies(VertexProgramRestrictionStrategy(), VertexProgramStrategy()).V())],
+ 'g_withoutStrategiesXVertexProgramRestrictionStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.verification.VertexProgramRestrictionStrategy')]).with_strategies(VertexProgramStrategy()).V())],
+ 'g_withStrategiesXVertexProgramStrategyX_V': [(lambda g:g.with_strategies(VertexProgramStrategy()).V())],
+ 'g_withoutStrategiesXVertexProgramStrategyX_V': [(lambda g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy')]).V())],
'g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('software').property('name', 'ripple').property('lang', 'java').as_('ripple').add_v('person').property('na [...]
'g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX_propertyXweight_2X': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('software').property('name', 'ripple').property('lang', 'java').as_('ripple').add_v('pe [...]
'g_V_outE_propertyXweight_nullX': [(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('age' [...]
diff --git a/gremlin-python/src/main/python/tests/driver/test_client.py b/gremlin-python/src/main/python/tests/driver/test_client.py
index 74f07f51f6..01fdd95916 100644
--- a/gremlin-python/src/main/python/tests/driver/test_client.py
+++ b/gremlin-python/src/main/python/tests/driver/test_client.py
@@ -237,7 +237,7 @@ def test_client_gremlin_lang_options(client):
# smoke test to validate serialization of OptionsStrategy. no way to really validate this from an integration
# test perspective because there's no way to access the internals of the strategy via bytecode
g = GraphTraversalSource(Graph(), TraversalStrategies())
- t = g.with_strategies(OptionsStrategy(options={"x": "test", "y": True})).V()
+ t = g.with_strategies(OptionsStrategy(**{"x": "test", "y": True})).V()
message = create_basic_request_message(t)
result_set = client.submit(message)
assert len(result_set.all().result()) == 6
diff --git a/gremlin-python/src/main/python/tests/process/test_gremlin_lang.py b/gremlin-python/src/main/python/tests/process/test_gremlin_lang.py
index 0457bfe00c..f6126d2008 100644
--- a/gremlin-python/src/main/python/tests/process/test_gremlin_lang.py
+++ b/gremlin-python/src/main/python/tests/process/test_gremlin_lang.py
@@ -367,7 +367,7 @@ class TestGremlinLang(object):
"g.V().count()"])
# 96 Note OptionsStrategy are now extracted into request message and is no longer sent with the script
- tests.append([g.with_strategies(OptionsStrategy({'evaluationTimeout': 500})).V().count(),
+ tests.append([g.with_strategies(OptionsStrategy(evaluationTimeout=500)).V().count(),
"g.V().count()"])
# 97
diff --git a/gremlin-python/src/main/python/tests/process/test_strategies.py b/gremlin-python/src/main/python/tests/process/test_strategies.py
index b6fd0e3015..81f428dd14 100644
--- a/gremlin-python/src/main/python/tests/process/test_strategies.py
+++ b/gremlin-python/src/main/python/tests/process/test_strategies.py
@@ -89,7 +89,7 @@ class TestTraversalStrategies(object):
assert "SubgraphStrategy" in str(gremlin_script)
assert "__.has('name','marko')" in str(gremlin_script)
###
- gremlin_script = g.with_strategies(OptionsStrategy(options={"x": "test", "y": True})).gremlin_lang
+ gremlin_script = g.with_strategies(OptionsStrategy(x="test", y=True)).gremlin_lang
options = gremlin_script.options_strategies
assert "test" == options[0].configuration["x"]
assert options[0].configuration["y"]
(tinkerpop) 04/05: update server remote computer feature test ignores
Posted by co...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch strategyConstruction
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit f679634a994d89a6e69dc6b893dd84a731e6bdf6
Author: Cole-Greer <Co...@improving.com>
AuthorDate: Thu Sep 19 13:06:36 2024 -0700
update server remote computer feature test ignores
---
.../gremlin/driver/remote/GraphBinaryRemoteComputerFeatureTest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryRemoteComputerFeatureTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryRemoteComputerFeatureTest.java
index dd03370c48..73ffe9dc00 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryRemoteComputerFeatureTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryRemoteComputerFeatureTest.java
@@ -30,7 +30,7 @@ import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
- tags = "not @RemoteOnly and not @GraphComputerVerificationElementSupported",
+ tags = "not @RemoteOnly and not @GraphComputerVerificationElementSupported and not @GraphComputerVerificationReferenceOnly",
glue = { "org.apache.tinkerpop.gremlin.features" },
objectFactory = GraphBinaryRemoteComputerFeatureTest.RemoteGuiceFactory.class,
features = { "classpath:/org/apache/tinkerpop/gremlin/test/features" },
(tinkerpop) 02/05: Temporary fix for ElementIdStrategy. Should be removed.
Posted by co...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch strategyConstruction
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 9be4f6b8e151a6c0dd2b4ecd411d8237b27fbf9d
Author: Cole-Greer <Co...@improving.com>
AuthorDate: Thu Sep 19 13:04:12 2024 -0700
Temporary fix for ElementIdStrategy. Should be removed.
---
.../process/traversal/strategy/decoration/ElementIdStrategy.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
index 65cda70de0..e69f9641ee 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategy.java
@@ -34,6 +34,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.IdStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.PropertyType;
@@ -173,7 +174,11 @@ public final class ElementIdStrategy extends AbstractTraversalStrategy<Traversal
final Map<String, Object> map = new HashMap<>();
map.put(STRATEGY, ElementIdStrategy.class.getCanonicalName());
map.put(ID_PROPERTY_KEY, this.idPropertyKey);
- map.put(ID_MAKER, this.idMaker);
+// map.put(ID_MAKER, this.idMaker);
return new MapConfiguration(map);
}
+
+ public static ElementIdStrategy instance() {
+ return build().create();
+ }
}
(tinkerpop) 03/05: update translators, core imports, and parser
Posted by co...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch strategyConstruction
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 40131c6e1dca79578cae3b4bbee31dabbb403f8c
Author: Cole-Greer <Co...@improving.com>
AuthorDate: Thu Sep 19 13:05:16 2024 -0700
update translators, core imports, and parser
---
.../java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java | 10 ++++++++++
.../gremlin/jsr223/DefaultGremlinScriptEngineManager.java | 2 +-
.../gremlin/language/translator/PythonTranslateVisitor.java | 2 +-
.../gremlin/process/traversal/TraversalStrategies.java | 5 ++++-
.../process/traversal/strategy/decoration/OptionsStrategy.java | 2 +-
.../gremlin/language/translator/GremlinTranslatorTest.java | 9 +++++++++
6 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
index e83185382f..28f96bd803 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreImports.java
@@ -50,7 +50,9 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressure;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ShortestPath;
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.finalization.ComputerFinalizationStrategy;
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.GraphFilterStrategy;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.MessagePassingReductionStrategy;
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.verification.VertexProgramRestrictionStrategy;
import org.apache.tinkerpop.gremlin.process.remote.RemoteConnection;
import org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource;
@@ -75,6 +77,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.Connec
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
@@ -88,6 +91,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.Earl
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IncidentToAdjacentStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.InlineFilterStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchPredicateStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy;
@@ -99,6 +103,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.Comp
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EdgeLabelVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LambdaRestrictionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReservedKeysVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
import org.apache.tinkerpop.gremlin.structure.Column;
@@ -247,10 +252,15 @@ public final class CoreImports {
CLASS_IMPORTS.add(Configurations.class);
// strategies
CLASS_IMPORTS.add(ConnectiveStrategy.class);
+ CLASS_IMPORTS.add(ComputerFinalizationStrategy.class);
CLASS_IMPORTS.add(ElementIdStrategy.class);
CLASS_IMPORTS.add(EventStrategy.class);
CLASS_IMPORTS.add(HaltedTraverserStrategy.class);
+ CLASS_IMPORTS.add(InlineFilterStrategy.class);
+ CLASS_IMPORTS.add(MessagePassingReductionStrategy.class);
+ CLASS_IMPORTS.add(OptionsStrategy.class);
CLASS_IMPORTS.add(PartitionStrategy.class);
+ CLASS_IMPORTS.add(ReservedKeysVerificationStrategy.class);
CLASS_IMPORTS.add(SubgraphStrategy.class);
CLASS_IMPORTS.add(LazyBarrierStrategy.class);
CLASS_IMPORTS.add(MatchAlgorithmStrategy.class);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java
index e485c05589..84b3d8fa48 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java
@@ -53,7 +53,7 @@ import java.util.stream.Stream;
* This class is based quite heavily on the workings of the {@code ScriptEngineManager} supplied in the
* {@code javax.script} packages, but adds some additional features that are specific to Gremlin and TinkerPop.
* Unfortunately, it's not easily possible to extend {@code ScriptEngineManager} directly as there certain behaviors
- * don't appear to be be straightforward to implement and member variables are all private. It is important to note
+ * don't appear to be straightforward to implement and member variables are all private. It is important to note
* that this class is designed to provide support for "Gremlin-enabled" {@code ScriptEngine} instances (i.e. those
* that extend from {@link GremlinScriptEngine}) and is not meant to manage just any {@code ScriptEngine} instance
* that may be on the path.
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/PythonTranslateVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/PythonTranslateVisitor.java
index 092c41fe5e..0d2aa7a0d1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/PythonTranslateVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/PythonTranslateVisitor.java
@@ -78,7 +78,7 @@ public class PythonTranslateVisitor extends AbstractTranslateVisitor {
if (ctx.getChildCount() == 1)
sb.append(ctx.getText()).append("()");
else {
- sb.append(ctx.getChild(1).getText()).append("(");
+ sb.append(ctx.getChild(0).getText().equals("new") ? ctx.getChild(1).getText() : ctx.getChild(0).getText()).append("(");
final List<ParseTree> configs = ctx.children.stream().
filter(c -> c instanceof GremlinParser.ConfigurationContext).collect(Collectors.toList());
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index eca8ba75db..c36afa8081 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -23,6 +23,7 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decorati
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.finalization.ComputerFinalizationStrategy;
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.GraphFilterStrategy;
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.MessagePassingReductionStrategy;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.verification.VertexProgramRestrictionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy;
@@ -30,6 +31,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventS
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SackStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SeedStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy;
@@ -263,6 +265,7 @@ public interface TraversalStrategies extends Serializable, Cloneable, Iterable<T
put(LambdaRestrictionStrategy.class.getSimpleName(), LambdaRestrictionStrategy.class);
put(ReadOnlyStrategy.class.getSimpleName(), ReadOnlyStrategy.class);
put(ReservedKeysVerificationStrategy.class.getSimpleName(), ReservedKeysVerificationStrategy.class);
+ put(VertexProgramRestrictionStrategy.class.getSimpleName(), VertexProgramRestrictionStrategy.class);
}};
static {
@@ -328,7 +331,7 @@ public interface TraversalStrategies extends Serializable, Cloneable, Iterable<T
/**
* Unregisters a strategy by its simple name. If the strategy is not in the registry then the grammar cannot
* reference it which means that it cannot be removed from execution using
- * {{@link GraphTraversalSource#withoutStrategies(Class[])}}..
+ * {{@link GraphTraversalSource#withoutStrategies(Class[])}}.
*/
public static void unregisterStrategy(final Class<? extends TraversalStrategy> clazz) {
GLOBAL_REGISTRY.remove(clazz.getSimpleName());
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/OptionsStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/OptionsStrategy.java
index 1a7a81f46b..78ab8a6d2b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/OptionsStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/OptionsStrategy.java
@@ -82,7 +82,7 @@ public class OptionsStrategy extends AbstractTraversalStrategy<TraversalStrategy
private final Map<String, Object> options = new HashMap<>();
/**
- * Adds an key to the configuration with the value of {@code true}.
+ * Adds a key to the configuration with the value of {@code true}.
*/
public Builder with(final String key) {
return with(key, true);
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
index b16fbf057d..c83c2a111e 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
@@ -601,6 +601,15 @@ public class GremlinTranslatorTest {
"g.withStrategies(PartitionStrategy.build().includeMetaProperties(true).partitionKey(\"x\").create())",
"g.withStrategies(new PartitionStrategy({includeMetaProperties: true, partitionKey: \"x\"}))",
"g.with_strategies(PartitionStrategy(include_meta_properties=True, partition_key='x'))"},
+ {"g.withStrategies(PartitionStrategy(includeMetaProperties: true, partitionKey:'x'))",
+ "g.withStrategies(new PartitionStrategy(includeMetaProperties:true, partitionKey:'x'))",
+ "g.withStrategies(new PartitionStrategy(includeMetaProperties:boolean0, partitionKey:string0))",
+ "g.WithStrategies(new PartitionStrategy(includeMetaProperties: true, partitionKey: \"x\"))",
+ "g.WithStrategies(gremlingo.PartitionStrategy(gremlingo.PartitionStrategyConfig{IncludeMetaProperties: true, PartitionKey: \"x\"}))",
+ "g.withStrategies(new PartitionStrategy(includeMetaProperties:true, partitionKey:'x'))",
+ "g.withStrategies(PartitionStrategy.build().includeMetaProperties(true).partitionKey(\"x\").create())",
+ "g.withStrategies(new PartitionStrategy({includeMetaProperties: true, partitionKey: \"x\"}))",
+ "g.with_strategies(PartitionStrategy(include_meta_properties=True, partition_key='x'))"},
{"g.withStrategies(new SubgraphStrategy(vertices:__.has('name', 'vadas'), edges: has('weight', gt(0.5))))",
"g.withStrategies(new SubgraphStrategy(vertices:__.has('name', 'vadas'), edges:__.has('weight', P.gt(0.5))))",
"g.withStrategies(new SubgraphStrategy(vertices:__.has(string0, string1), edges:__.has(string2, P.gt(number0))))",
(tinkerpop) 01/05: add new feature tests
Posted by co...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch strategyConstruction
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 5209ccaaab5fbf4f700c2710ffeff15c0b35c68a
Author: Cole-Greer <Co...@improving.com>
AuthorDate: Thu Sep 19 12:34:38 2024 -0700
add new feature tests
---
.../integrated/AdjacentToIncidentStrategy.feature | 80 ++++++++++++++++++++++
.../ByModulatorOptimizationStrategy.feature | 52 ++++++++++++++
.../ComputerFinalizationStrategy.feature | 52 ++++++++++++++
.../ComputerVerificationStrategy.feature | 52 ++++++++++++++
.../features/integrated/ConnectiveStrategy.feature | 46 +++++++++++++
.../test/features/integrated/CountStrategy.feature | 46 +++++++++++++
.../features/integrated/EarlyLimitStrategy.feature | 46 +++++++++++++
.../EdgeLabelVerificationStrategy.feature | 63 +++++++++++++++++
.../features/integrated/ElementIdStrategy.feature | 52 ++++++++++++++
.../integrated/FilterRankingStrategy.feature | 48 +++++++++++++
.../integrated/GraphFilterStrategy.feature | 52 ++++++++++++++
.../integrated/HaltedTraverserStrategy.feature | 69 +++++++++++++++++++
.../integrated/IdentityRemovalStrategy.feature | 52 ++++++++++++++
.../integrated/IncidentToAdjacentStrategy.feature | 52 ++++++++++++++
.../integrated/InlineFilterStrategy.feature | 42 ++++++++++++
.../integrated/LambdaRestrictionStrategy.feature | 54 +++++++++++++++
.../integrated/LazyBarrierStrategy.feature | 42 ++++++++++++
.../integrated/MatchAlgorithmStrategy.feature | 63 +++++++++++++++++
.../integrated/MatchPredicateStrategy.feature | 49 +++++++++++++
.../MessagePassingReductionStrategy.feature | 52 ++++++++++++++
.../features/integrated/OptionsStrategy.feature | 69 +++++++++++++++++++
.../features/integrated/OrderLimitStrategy.feature | 52 ++++++++++++++
.../integrated/PathProcessorStrategy.feature | 53 ++++++++++++++
.../integrated/PathRetractionStrategy.feature | 52 ++++++++++++++
.../integrated/ProductiveByStrategy.feature | 42 ++++++++++++
.../features/integrated/ProfileStrategy.feature | 52 ++++++++++++++
.../integrated/ReferenceElementStrategy.feature | 52 ++++++++++++++
.../integrated/RepeatUnrollStrategy.feature | 44 ++++++++++++
.../ReservedKeysVerificationStrategy.feature | 50 ++++++++++++++
.../test/features/integrated/SeedStrategy.feature | 48 +++++++++++++
.../StandardVerificationStrategy.feature | 52 ++++++++++++++
.../VertexProgramRestrictionStrategy.feature | 63 +++++++++++++++++
.../integrated/VertexProgramStrategy.feature | 52 ++++++++++++++
33 files changed, 1745 insertions(+)
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/AdjacentToIncidentStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/AdjacentToIncidentStrategy.feature
new file mode 100644
index 0000000000..608f9662c3
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/AdjacentToIncidentStrategy.feature
@@ -0,0 +1,80 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - AdjacentToIncidentStrategy
+
+ @WithAdjacentToIncidentStrategy
+ Scenario: g_withStrategiesXAdjacentToIncidentStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(AdjacentToIncidentStrategy).V()
+ """
+ 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_withoutStrategiesXAdjacentToIncidentStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(AdjacentToIncidentStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
+
+ @WithAdjacentToIncidentStrategy
+ Scenario: g_withStrategiesXAdjacentToIncidentStrategyX_V_out_count
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(AdjacentToIncidentStrategy).V().out().count()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[6].l |
+
+ @WithAdjacentToIncidentStrategy
+ Scenario: g_withStrategiesXAdjacentToIncidentStrategyX_V_whereXoutX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(AdjacentToIncidentStrategy).V().where(__.out())
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[josh] |
+ | v[peter] |
+
+
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ByModulatorOptimizationStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ByModulatorOptimizationStrategy.feature
new file mode 100644
index 0000000000..126bf70e1f
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ByModulatorOptimizationStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ByModulatorOptimizationStrategy
+
+ @WithByModulatorOptimizationStrategy
+ Scenario: g_withStrategiesXByModulatorOptimizationStrategyX_V_order_byXvaluesXnameXX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(ByModulatorOptimizationStrategy).V().order().by(values("name"))
+ """
+ When iterated to list
+ Then the result should be ordered
+ | result |
+ | v[josh] |
+ | v[lop] |
+ | v[marko] |
+ | v[peter] |
+ | v[ripple] |
+ | v[vadas] |
+
+ Scenario: g_withoutStrategiesXByModulatorOptimizationStrategyX_V_order_byXvaluesXnameXX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(ByModulatorOptimizationStrategy).V().order().by(values("name"))
+ """
+ When iterated to list
+ Then the result should be ordered
+ | result |
+ | v[josh] |
+ | v[lop] |
+ | v[marko] |
+ | v[peter] |
+ | v[ripple] |
+ | v[vadas] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ComputerFinalizationStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ComputerFinalizationStrategy.feature
new file mode 100644
index 0000000000..80dc757fa0
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ComputerFinalizationStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ComputerFinalizationStrategy
+
+ @WithComputerFinalizationStrategy
+ Scenario: g_withStrategiesXComputerFinalizationStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(ComputerFinalizationStrategy).V()
+ """
+ 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_withoutStrategiesXByModulatorOptimizationStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(ComputerFinalizationStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ComputerVerificationStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ComputerVerificationStrategy.feature
new file mode 100644
index 0000000000..bd733f5647
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ComputerVerificationStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ComputerVerificationStrategy
+
+ @WithComputerVerificationStrategy
+ Scenario: g_withStrategiesXComputerVerificationStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(ComputerVerificationStrategy).V()
+ """
+ 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_withoutStrategiesXComputerVerificationStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(ComputerVerificationStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ConnectiveStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ConnectiveStrategy.feature
new file mode 100644
index 0000000000..d716796261
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ConnectiveStrategy.feature
@@ -0,0 +1,46 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ConnectiveStrategy
+
+ @WithConnectiveStrategy @GraphComputerVerificationStarGraphExceeded
+ Scenario: g_withStrategiesXConnectiveStrategyStrategyX_V_hasXname_markoX_or_whereXinXknowsX_hasXname_markoXX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(ConnectiveStrategy).V().has("name","marko").or().where(in("knows").has("name","marko"))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[josh] |
+
+# Scenario: g_withoutStrategiesXConnectiveStrategyX_V_hasXname_markoX_or_whereXinXknowsX_hasXname_markoXX
+# Given the modern graph
+# And the traversal of
+# """
+# g.withoutStrategies(ConnectiveStrategy).V().has("name","marko").or().where(in("knows").has("name","marko"))
+# """
+# When iterated to list
+# Then the result should be unordered
+# | result |
+# | v[marko] |
+# | v[vadas] |
+# | v[josh] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/CountStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/CountStrategy.feature
new file mode 100644
index 0000000000..46c26edcb8
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/CountStrategy.feature
@@ -0,0 +1,46 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - CountStrategy
+
+ @WithCountStrategy
+ Scenario: g_withStrategiesXCountStrategyX_V_whereXoutE_count_isX0XX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(CountStrategy).V().where(outE().count().is(0))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[vadas] |
+ | v[lop] |
+ | v[ripple] |
+
+ Scenario: g_withoutStrategiesXCountStrategyX_V_whereXoutE_count_isX0XX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(CountStrategy).V().where(outE().count().is(0))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[vadas] |
+ | v[lop] |
+ | v[ripple] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/EarlyLimitStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/EarlyLimitStrategy.feature
new file mode 100644
index 0000000000..dcbe50be5e
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/EarlyLimitStrategy.feature
@@ -0,0 +1,46 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - EarlyLimitStrategy
+
+ @WithEarlyLimitStrategy
+ Scenario: g_withStrategiesXEarlyLimitStrategyX_V_out_order_valueMap_limitX3X_selectXnameX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(EarlyLimitStrategy).V().out().order().valueMap().limit(3).select("name")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | l[vadas] |
+ | l[lop] |
+ | l[lop] |
+
+ Scenario: g_withoutStrategiesXEarlyLimitStrategyX_V_out_order_valueMap_limitX3X_selectXnameX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(EarlyLimitStrategy).V().out().order().valueMap().limit(3).select("name")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | l[vadas] |
+ | l[lop] |
+ | l[lop] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/EdgeLabelVerificationStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/EdgeLabelVerificationStrategy.feature
new file mode 100644
index 0000000000..4644c624cc
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/EdgeLabelVerificationStrategy.feature
@@ -0,0 +1,63 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - EdgeLabelVerificationStrategy
+
+ @WithEdgeLabelVerificationStrategy
+ Scenario: g_withStrategiesXEdgeLabelVerificationStrategyXthrowException_true_logWarning_falseXX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(EdgeLabelVerificationStrategy(throwException: true, logWarning: false)).V().out()
+ """
+ When iterated to list
+ Then the traversal will raise an error with message containing text of "The provided traversal contains a vertex step without any specified edge label"
+
+ @WithEdgeLabelVerificationStrategy
+ Scenario: g_withStrategiesXEdgeLabelVerificationStrategyXthrowException_false_logWarning_falseXX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(EdgeLabelVerificationStrategy(throwException: false, logWarning: false)).V().out()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[lop] |
+ | v[lop] |
+ | v[vadas] |
+ | v[josh] |
+ | v[ripple] |
+
+ Scenario: g_withoutStrategiesXEdgeLabelVerificationStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(EdgeLabelVerificationStrategy).V().out()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[lop] |
+ | v[lop] |
+ | v[vadas] |
+ | v[josh] |
+ | v[ripple] |
+
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ElementIdStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ElementIdStrategy.feature
new file mode 100644
index 0000000000..337eac6bbe
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ElementIdStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ElementIdStrategy
+
+ @WithElementIdStrategy
+ Scenario: g_withStrategiesXElementIdStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(ElementIdStrategy).V()
+ """
+ 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_withoutStrategiesXElementIdStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(ElementIdStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/FilterRankingStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/FilterRankingStrategy.feature
new file mode 100644
index 0000000000..3c18eb140f
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/FilterRankingStrategy.feature
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - FilterRankingStrategy
+
+ @WithFilterRankingStrategy
+ Scenario: g_withStrategiesXFilterRankingStrategyX_V_out_order_dedup
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(FilterRankingStrategy).V().out().order().dedup()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+
+ Scenario: g_withoutStrategiesXFilterRankingStrategyX_V_out_order_dedup
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(FilterRankingStrategy).V().out().order().dedup()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/GraphFilterStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/GraphFilterStrategy.feature
new file mode 100644
index 0000000000..c4b318e476
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/GraphFilterStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - GraphFilterStrategy
+
+ @WithGraphFilterStrategy
+ Scenario: g_withStrategiesXGraphFilterStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(GraphFilterStrategy).V()
+ """
+ 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_withoutStrategiesXGraphFilterStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(GraphFilterStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/HaltedTraverserStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/HaltedTraverserStrategy.feature
new file mode 100644
index 0000000000..91d80bad39
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/HaltedTraverserStrategy.feature
@@ -0,0 +1,69 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - HaltedTraverserStrategy
+
+ @WithHaltedTraverserStrategy
+ Scenario: g_withStrategiesXHaltedTraverserStrategyXDetachedFactoryXX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(HaltedTraverserStrategy(haltedTraverserFactory: "org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory")).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
+
+ @WithHaltedTraverserStrategy
+ Scenario: g_withStrategiesXHaltedTraverserStrategyXReferenceFactoryXX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(HaltedTraverserStrategy(haltedTraverserFactory: "org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceFactory")).V()
+ """
+ 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_withoutStrategiesXHaltedTraverserStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(HaltedTraverserStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/IdentityRemovalStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/IdentityRemovalStrategy.feature
new file mode 100644
index 0000000000..0697bc86ed
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/IdentityRemovalStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - IdentityRemovalStrategy
+
+ @WithIdentityRemovalStrategy
+ Scenario: g_withStrategiesXIdentityRemovalStrategyX_V_identity_out
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(IdentityRemovalStrategy).V().identity().out()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[lop] |
+ | v[lop] |
+ | v[vadas] |
+ | v[josh] |
+ | v[ripple] |
+
+ Scenario: g_withoutStrategiesXIdentityRemovalStrategyX_V_identity_out
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(IdentityRemovalStrategy).V().identity().out()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[lop] |
+ | v[lop] |
+ | v[vadas] |
+ | v[josh] |
+ | v[ripple] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/IncidentToAdjacentStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/IncidentToAdjacentStrategy.feature
new file mode 100644
index 0000000000..0039518055
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/IncidentToAdjacentStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - IncidentToAdjacentStrategy
+
+ @WithIncidentToAdjacentStrategy
+ Scenario: g_withStrategiesXIncidentToAdjacentStrategyX_V_outE_inV
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(IncidentToAdjacentStrategy).V().outE().inV()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[lop] |
+ | v[lop] |
+ | v[vadas] |
+ | v[josh] |
+ | v[ripple] |
+
+ Scenario: g_withoutStrategiesXIncidentToAdjacentStrategyX_V_outE_inV
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(IncidentToAdjacentStrategy).V().outE().inV()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[lop] |
+ | v[lop] |
+ | v[vadas] |
+ | v[josh] |
+ | v[ripple] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/InlineFilterStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/InlineFilterStrategy.feature
new file mode 100644
index 0000000000..7126571b1a
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/InlineFilterStrategy.feature
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - InlineFilterStrategy
+
+ @WithInlineFilterStrategy
+ Scenario: g_withStrategiesXInlineFilterStrategyX_V_filterXhasXname_markoXX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(InlineFilterStrategy).V().filter(has("name","marko"))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+
+ Scenario: g_withoutStrategiesXInlineFilterStrategyX_V_filterXhasXname_markoXX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(InlineFilterStrategy).V().filter(has("name","marko"))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/LambdaRestrictionStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/LambdaRestrictionStrategy.feature
new file mode 100644
index 0000000000..7e6f3efd98
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/LambdaRestrictionStrategy.feature
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+#
+@StepClassIntegrated
+Feature: Step - LambdaRestrictionStrategy
+
+ @WithLambdaRestrictionStrategy
+ Scenario: g_withStrategiesXLambdaRestrictionStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(LambdaRestrictionStrategy).V()
+ """
+ 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_withoutStrategiesXLambdaRestrictionStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(LambdaRestrictionStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/LazyBarrierStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/LazyBarrierStrategy.feature
new file mode 100644
index 0000000000..c982b47514
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/LazyBarrierStrategy.feature
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - LazyBarrierStrategy
+
+ @WithLazyBarrierStrategy
+ Scenario: g_withStrategiesXLazyBarrierStrategyX_V_out_bothE_count
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(LazyBarrierStrategy).V().out().bothE().count()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[14].l |
+
+ Scenario: g_withoutStrategiesXLazyBarrierStrategyX_V_out_bothE_count
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(LazyBarrierStrategy).V().out().bothE().count()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[14].l |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MatchAlgorithmStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MatchAlgorithmStrategy.feature
new file mode 100644
index 0000000000..2b5680941c
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MatchAlgorithmStrategy.feature
@@ -0,0 +1,63 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - MatchAlgorithmStrategy
+
+ @WithMatchAlgorithmStrategy
+ Scenario: g_withStrategiesXMatchAlgorithmStrategyXmatchAlgorithm_CountMatchAlgorithmXX_V_matchXa_knows_b__a_created_cX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(MatchAlgorithmStrategy(matchAlgorithm: "org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep$CountMatchAlgorithm"))
+ .V().match(__.as("a").out("knows").as("b"),
+ __.as("a").out("created").as("c"))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"a":"v[marko]","b":"v[vadas]","c":"v[lop]"}] |
+ | m[{"a":"v[marko]","b":"v[josh]","c":"v[lop]"}] |
+
+ @WithMatchAlgorithmStrategy
+ Scenario: g_withStrategiesXMatchAlgorithmStrategyXmatchAlgorithm_GreedyMatchAlgorithmXX_V_matchXa_knows_b__a_created_cX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(MatchAlgorithmStrategy(matchAlgorithm: "org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep$GreedyMatchAlgorithm"))
+ .V().match(__.as("a").out("knows").as("b"),
+ __.as("a").out("created").as("c"))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"a":"v[marko]","b":"v[vadas]","c":"v[lop]"}] |
+ | m[{"a":"v[marko]","b":"v[josh]","c":"v[lop]"}] |
+
+ Scenario: g_withoutStrategiesXMatchAlgorithmStrategyX_V_matchXa_knows_b__a_created_cX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(MatchAlgorithmStrategy)
+ .V().match(__.as("a").out("knows").as("b"),
+ __.as("a").out("created").as("c"))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"a":"v[marko]","b":"v[vadas]","c":"v[lop]"}] |
+ | m[{"a":"v[marko]","b":"v[josh]","c":"v[lop]"}] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MatchPredicateStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MatchPredicateStrategy.feature
new file mode 100644
index 0000000000..bcf6c8cc9f
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MatchPredicateStrategy.feature
@@ -0,0 +1,49 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - MatchPredicateStrategy
+
+ @WithMatchPredicateStrategy @GraphComputerVerificationStarGraphExceeded
+ Scenario: g_withStrategiesXMatchPredicateStrategyX_V_matchXa_created_lop_b__b_0created_29_cX_whereXc_repeatXoutX_timesX2XX_selectXa_b_cX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(MatchPredicateStrategy).V().match(__.as("a").out("created").has("name", "lop").as("b"),
+ __.as("b").in("created").has("age", 29).as("c")).where(__.as("c").repeat(__.out()).times(2)).select("a", "b", "c")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"a":"v[marko]","b":"v[lop]","c":"v[marko]"}] |
+ | m[{"a":"v[josh]","b":"v[lop]","c":"v[marko]"}] |
+ | m[{"a":"v[peter]","b":"v[lop]","c":"v[marko]"}] |
+
+ @GraphComputerVerificationStarGraphExceeded
+ Scenario: g_withoutStrategiesXMatchPredicateStrategyX_V_matchXa_created_lop_b__b_0created_29_cX_whereXc_repeatXoutX_timesX2XX_selectXa_b_cX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(MatchPredicateStrategy).V().match(__.as("a").out("created").has("name", "lop").as("b"),
+ __.as("b").in("created").has("age", 29).as("c")).where(__.as("c").repeat(__.out()).times(2)).select("a", "b", "c")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"a":"v[marko]","b":"v[lop]","c":"v[marko]"}] |
+ | m[{"a":"v[josh]","b":"v[lop]","c":"v[marko]"}] |
+ | m[{"a":"v[peter]","b":"v[lop]","c":"v[marko]"}] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MessagePassingReductionStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MessagePassingReductionStrategy.feature
new file mode 100644
index 0000000000..c36adcf659
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/MessagePassingReductionStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - MessagePassingReductionStrategy
+
+ @WithMessagePassingReductionStrategy
+ Scenario: g_withStrategiesXMessagePassingReductionStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(MessagePassingReductionStrategy).V()
+ """
+ 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_withoutStrategiesXMessagePassingReductionStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(MessagePassingReductionStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/OptionsStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/OptionsStrategy.feature
new file mode 100644
index 0000000000..db90e07230
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/OptionsStrategy.feature
@@ -0,0 +1,69 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - OptionsStrategy
+
+ @WithOptionsStrategy
+ Scenario: g_withStrategiesXOptionsStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(OptionsStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
+
+ @WithOptionsStrategy
+ Scenario: g_withStrategiesXOptionsStrategyXmyVar_myValueXX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(OptionsStrategy(myVar: "myValue")).V()
+ """
+ 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_withoutStrategiesXOptionsStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(OptionsStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/OrderLimitStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/OrderLimitStrategy.feature
new file mode 100644
index 0000000000..805c1d66c9
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/OrderLimitStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - OrderLimitStrategy
+
+ @WithOrderLimitStrategy
+ Scenario: g_withStrategiesXOrderLimitStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(OrderLimitStrategy).V()
+ """
+ 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_withoutStrategiesXOrderLimitStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(OrderLimitStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/PathProcessorStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/PathProcessorStrategy.feature
new file mode 100644
index 0000000000..6f4f283aac
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/PathProcessorStrategy.feature
@@ -0,0 +1,53 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - PathProcessorStrategy
+
+ @WithPathProcessorStrategy
+ Scenario: g_withStrategiesXPathProcessorStrategyX_V_asXaX_selectXaX_byXvaluesXnameXX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(PathProcessorStrategy).V().as("a").select("a").by(values("name"))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | marko |
+ | vadas |
+ | lop |
+ | josh |
+ | ripple |
+ | peter |
+
+ @GraphComputerVerificationReferenceOnly
+ Scenario: g_withoutStrategiesXPathProcessorStrategyX_V_asXaX_selectXaX_byXvaluesXnameXX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(PathProcessorStrategy).V().as("a").select("a").by(values("name"))
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | marko |
+ | vadas |
+ | lop |
+ | josh |
+ | ripple |
+ | peter |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/PathRetractionStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/PathRetractionStrategy.feature
new file mode 100644
index 0000000000..54e807f5a8
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/PathRetractionStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - PathRetractionStrategy
+
+ @WithPathRetractionStrategy
+ Scenario: g_withStrategiesXPathRetractionStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(PathRetractionStrategy).V()
+ """
+ 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_withoutStrategiesXPathRetractionStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(PathRetractionStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ProductiveByStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ProductiveByStrategy.feature
new file mode 100644
index 0000000000..60bef9dcae
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ProductiveByStrategy.feature
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ProductiveByStrategy
+
+ @WithProductiveByStrategy
+ Scenario: g_withStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(ProductiveByStrategy).V().order().by("name").group().by("age").by("name")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"null":"l[lop,ripple]","d[32].i":"l[josh]","d[35].i":"l[peter]","d[27].i":"l[vadas]","d[29].i":"l[marko]"}] |
+
+ Scenario: g_withoutStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(ProductiveByStrategy).V().group().by("age").by("name")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"d[32].i":"l[josh]","d[35].i":"l[peter]","d[27].i":"l[vadas]","d[29].i":"l[marko]"}] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ProfileStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ProfileStrategy.feature
new file mode 100644
index 0000000000..e51c7a0275
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ProfileStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ProfileStrategy
+
+ @WithProfileStrategy
+ Scenario: g_withStrategiesXProfileStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(ProfileStrategy).V()
+ """
+ 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_withoutStrategiesXProfileStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(ProfileStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ReferenceElementStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ReferenceElementStrategy.feature
new file mode 100644
index 0000000000..6b50420fa4
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ReferenceElementStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ReferenceElementStrategy
+
+ @WithReferenceElementStrategy
+ Scenario: g_withStrategiesXReferenceElementStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(ReferenceElementStrategy).V()
+ """
+ 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_withoutStrategiesXReferenceElementStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(ReferenceElementStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/RepeatUnrollStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/RepeatUnrollStrategy.feature
new file mode 100644
index 0000000000..13fd68a8c8
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/RepeatUnrollStrategy.feature
@@ -0,0 +1,44 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - RepeatUnrollStrategy
+
+ @WithRepeatUnrollStrategy
+ Scenario: g_withStrategiesXRepeatUnrollStrategyX_V_repeatXoutX_timesX2X
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(RepeatUnrollStrategy).V().repeat(out()).times(2)
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[ripple] |
+
+ Scenario: g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXoutX_timesX2X
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(RepeatUnrollStrategy).V().repeat(out()).times(2)
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[ripple] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ReservedKeysVerificationStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ReservedKeysVerificationStrategy.feature
new file mode 100644
index 0000000000..88142b0c2d
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/ReservedKeysVerificationStrategy.feature
@@ -0,0 +1,50 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - ReservedKeysVerificationStrategy
+
+ @WithReservedKeysVerificationStrategy
+ Scenario: g_withStrategiesXReservedKeysVerificationStrategyXthrowException_trueXX_addVXpersonX_propertyXid_123X_propertyXname_markoX
+ Given the empty graph
+ And the traversal of
+ """
+ g.withStrategies(ReservedKeysVerificationStrategy(throwException: true)).addV("person").property("id", 123).property("name", "marko")
+ """
+ When iterated to list
+ Then the traversal will raise an error with message containing text of "is setting a property key to a reserved word: id"
+
+ @WithReservedKeysVerificationStrategy
+ Scenario: g_withStrategiesXReservedKeysVerificationStrategyXthrowException_trueXX_addVXpersonX_propertyXage_29X_propertyXname_markoX
+ Given the empty graph
+ And the traversal of
+ """
+ g.withStrategies(ReservedKeysVerificationStrategy(throwException: true, keys: ["age"])).addV("person").property("age", 29).property("name", "marko")
+ """
+ When iterated to list
+ Then the traversal will raise an error with message containing text of "is setting a property key to a reserved word: age"
+
+ Scenario: g_withoutStrategiesXReservedKeysVerificationStrategyX_addVXpersonX_propertyXid_123X_propertyXname_markoX
+ Given the empty graph
+ And the traversal of
+ """
+ g.withoutStrategies(ReservedKeysVerificationStrategy).addV("person").property("id", 123).property("name", "marko")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/SeedStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/SeedStrategy.feature
new file mode 100644
index 0000000000..57b76f8325
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/SeedStrategy.feature
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - SeedStrategy
+
+ @WithSeedStrategy @InsertionOrderingRequired
+ Scenario: g_withStrategiesXSeedStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(SeedStrategy(seed: 7)).V().coin(0.5)
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[lop] |
+ | v[peter] |
+
+ Scenario: g_withoutStrategiesXSeedStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(SeedStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/StandardVerificationStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/StandardVerificationStrategy.feature
new file mode 100644
index 0000000000..623c282019
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/StandardVerificationStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - StandardVerificationStrategy
+
+ @WithStandardVerificationStrategy
+ Scenario: g_withStrategiesXStandardVerificationStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(StandardVerificationStrategy).V()
+ """
+ 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_withoutStrategiesXStandardVerificationStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(StandardVerificationStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/VertexProgramRestrictionStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/VertexProgramRestrictionStrategy.feature
new file mode 100644
index 0000000000..f840a3c7ba
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/VertexProgramRestrictionStrategy.feature
@@ -0,0 +1,63 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - VertexProgramRestrictionStrategy
+
+ @WithVertexProgramRestrictionStrategy
+ Scenario: g_withStrategiesXVertexProgramRestrictionStrategyX_withoutStrategiesXVertexProgramStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(VertexProgramRestrictionStrategy).withoutStrategies(VertexProgramStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
+
+ @WithVertexProgramRestrictionStrategy @WithVertexProgramStrategy
+ Scenario: g_withStrategiesXVertexProgramRestrictionStrategy_VertexProgramStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(VertexProgramRestrictionStrategy, VertexProgramStrategy).V()
+ """
+ When iterated to list
+ Then the traversal will raise an error with message containing text of "The TraversalSource does not allow the use of a GraphComputer"
+
+ @WithVertexProgramStrategy
+ Scenario: g_withoutStrategiesXVertexProgramRestrictionStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(VertexProgramRestrictionStrategy).withStrategies(VertexProgramStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/VertexProgramStrategy.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/VertexProgramStrategy.feature
new file mode 100644
index 0000000000..05940a665f
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/VertexProgramStrategy.feature
@@ -0,0 +1,52 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+@StepClassIntegrated
+Feature: Step - VertexProgramStrategy
+
+ @WithVertexProgramStrategy
+ Scenario: g_withStrategiesXVertexProgramStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withStrategies(VertexProgramStrategy).V()
+ """
+ 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_withoutStrategiesXVertexProgramStrategyX_V
+ Given the modern graph
+ And the traversal of
+ """
+ g.withoutStrategies(VertexProgramStrategy).V()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | v[marko] |
+ | v[vadas] |
+ | v[lop] |
+ | v[josh] |
+ | v[ripple] |
+ | v[peter] |