This is an automated email from the ASF dual-hosted git repository. colegreer pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/master by this push: new b0c4a7d57f Disable LazyBarrierStrategy for failing JDK8 test (#2536) b0c4a7d57f is described below commit b0c4a7d57f733028b0b8dad2b8b77ec77b4cf5c4 Author: Ryan Tan <65996005+r...@users.noreply.github.com> AuthorDate: Fri Apr 5 11:51:25 2024 -0700 Disable LazyBarrierStrategy for failing JDK8 test (#2536) --- gremlin-dotnet/build/generate.groovy | 14 ++++++++------ .../Gherkin/GherkinTestRunner.cs | 3 ++- .../test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 2 +- gremlin-go/build/generate.groovy | 11 ++++++----- gremlin-go/driver/cucumber/gremlin.go | 2 +- .../gremlin-javascript/test/cucumber/feature-steps.js | 1 + .../javascript/gremlin-javascript/test/cucumber/gremlin.js | 2 +- gremlin-python/src/main/python/radish/feature_steps.py | 3 ++- gremlin-python/src/main/python/radish/gremlin.py | 2 +- .../tinkerpop/gremlin/test/features/map/Select.feature | 7 ++++--- .../gremlin/tinkergraph/TinkerGraphFeatureTest.java | 3 ++- 11 files changed, 29 insertions(+), 21 deletions(-) diff --git a/gremlin-dotnet/build/generate.groovy b/gremlin-dotnet/build/generate.groovy index ca19e50e1d..4db65801bf 100644 --- a/gremlin-dotnet/build/generate.groovy +++ b/gremlin-dotnet/build/generate.groovy @@ -17,15 +17,15 @@ * under the License. */ -import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph -import org.apache.tinkerpop.gremlin.process.traversal.translator.DotNetTranslator + import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine +import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyCustomizer import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.AmbiguousMethodASTTransformation -import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.VarAsBindingASTTransformation import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.RepeatASTTransformationCustomizer -import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyCustomizer -import org.codehaus.groovy.control.customizers.CompilationCustomizer +import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.VarAsBindingASTTransformation import org.apache.tinkerpop.gremlin.language.corpus.FeatureReader +import org.apache.tinkerpop.gremlin.process.traversal.translator.DotNetTranslator +import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph import javax.script.SimpleBindings import java.nio.file.Paths @@ -127,7 +127,9 @@ radishGremlinFile.withWriter('UTF-8') { Writer writer -> // Groovy can't process certain null oriented calls because it gets confused with the right overload to call // at runtime. using this approach for now as these are the only such situations encountered so far. a better // solution may become necessary as testing of nulls expands. - def staticTranslate = [g_withoutStrategiesXCountStrategyX_V_count: " {\"g_withoutStrategiesXCountStrategyX_V_count\", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithoutStrategies(typeof(CountStrategy)).V().Count()}}, "] + def staticTranslate = [g_withoutStrategiesXCountStrategyX_V_count: " {\"g_withoutStrategiesXCountStrategyX_V_count\", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithoutStrategies(typeof(CountStrategy)).V().Count()}}, ", + g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX: " {\"g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX\", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithoutStrategies(typeof(LazyBarrierStrategy)).V().As(\"label\").Aggregate(Scope.Local,\"x\").Select<object>(\"x\").Select<object>(\"label\")}}, " + ] // SAMPLE: g_injectXnull_nullX: " {\"g_injectXnull_nullX\", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(null,null)}}, ",1\"]).Values<object>(\"age\").Inject(null,null)}}, " gremlins.each { k,v -> diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs index f9c761c575..12c47a0918 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs @@ -50,7 +50,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin // Add here the name of scenarios to ignore and the reason, e.g.: {"g_withStrategiesXProductiveByStrategyX_V_group_byXageX", IgnoreReason.NullKeysInMapNotSupported}, {"g_withStrategiesXProductiveByStrategyX_V_groupCount_byXageX", IgnoreReason.NullKeysInMapNotSupported}, - {"g_withoutStrategiesXCountStrategyX_V_count", IgnoreReason.NoReason} // needs investigation + {"g_withoutStrategiesXCountStrategyX_V_count", IgnoreReason.NoReason}, // needs investigation + {"g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX", IgnoreReason.NoReason} }; private static class Keywords diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index 8b88d53ea9..5e76b1ff25 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -1181,7 +1181,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_withStrategiesXProductiveByStrategyX_V_asXaX_selectXaX_byXageX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithStrategies(new ProductiveByStrategy(productiveKeys: new List<object> {})).V().As("a").Select<object>("a").By("age")}}, {"g_withSideEffectXk_nullX_injectXxX_selectXkX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithSideEffect("k",null).Inject("x").Select<object>("k")}}, {"g_V_out_in_selectXall_a_a_aX_byXunfold_name_foldX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV("A").Property("name","a1").As("a1").AddV("A").Property("name","a2").As("a2").AddV("A").Property("name","a3").As("a3").AddV("B").Property("name","b1").As("b1").AddV("B").Property("name","b2").As("b2").AddV("B").Property("name","b3").As("b3").AddE("ab").From("a1").To("b1").AddE("ab").From("a2").To("b2").AddE("ab").From("a3").To(" [...] - {"g_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().As("label").Aggregate(Scope.Local,"x").Barrier().Select<object>("x").Select<object>("label")}}, + {"g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithoutStrategies(typeof(LazyBarrierStrategy)).V().As("label").Aggregate(Scope.Local,"x").Select<object>("x").Select<object>("label")}}, {"g_V_shortestPath", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Identity().ShortestPath()}}, {"g_V_both_dedup_shortestPath", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Both().Dedup().ShortestPath()}}, {"g_V_shortestPath_edgesIncluded", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Identity().ShortestPath().With("~tinkerpop.shortestPath.includeEdges")}}, diff --git a/gremlin-go/build/generate.groovy b/gremlin-go/build/generate.groovy index 6d2085bca4..d4dea3c04e 100644 --- a/gremlin-go/build/generate.groovy +++ b/gremlin-go/build/generate.groovy @@ -17,15 +17,15 @@ * under the License. */ -import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph -import org.apache.tinkerpop.gremlin.process.traversal.translator.GolangTranslator + import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine +import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyCustomizer import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.AmbiguousMethodASTTransformation -import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.VarAsBindingASTTransformation import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.RepeatASTTransformationCustomizer -import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyCustomizer -import org.codehaus.groovy.control.customizers.CompilationCustomizer +import org.apache.tinkerpop.gremlin.groovy.jsr223.ast.VarAsBindingASTTransformation import org.apache.tinkerpop.gremlin.language.corpus.FeatureReader +import org.apache.tinkerpop.gremlin.process.traversal.translator.GolangTranslator +import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph import javax.script.SimpleBindings import java.nio.file.Paths @@ -109,6 +109,7 @@ radishGremlinFile.withWriter('UTF-8') { Writer writer -> // solution may become necessary as testing of nulls expands. def staticTranslate = [ g_withoutStrategiesXCountStrategyX_V_count: " \"g_withoutStrategiesXCountStrategyX_V_count\": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(6)}}, ", // syntax is all bad for withoutStrategies and who knows what else is causing failures - just do a dummy translation + g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX: " \"g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX\": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}}, ", g_injectXnull_nullX: " \"g_injectXnull_nullX\": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(nil, nil)}}, ", g_VX1X_valuesXageX_injectXnull_nullX: " \"g_VX1X_valuesXageX_injectXnull_nullX\": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p[\"xx1\"]).Values(\"age\").Inject(nil, nil)}}, " ] diff --git a/gremlin-go/driver/cucumber/gremlin.go b/gremlin-go/driver/cucumber/gremlin.go index 6a5a85ea21..25e5f7fed8 100644 --- a/gremlin-go/driver/cucumber/gremlin.go +++ b/gremlin-go/driver/cucumber/gremlin.go @@ -1152,7 +1152,7 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[ "g_withStrategiesXProductiveByStrategyX_V_asXaX_selectXaX_byXageX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.WithStrategies(gremlingo.ProductiveByStrategy(gremlingo.ProductiveByStrategyConfig{ProductiveKeys: []string{}})).V().As("a").Select("a").By("age")}}, "g_withSideEffectXk_nullX_injectXxX_selectXkX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.WithSideEffect("k", nil).Inject("x").Select("k")}}, "g_V_out_in_selectXall_a_a_aX_byXunfold_name_foldX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("A").Property("name", "a1").As("a1").AddV("A").Property("name", "a2").As("a2").AddV("A").Property("name", "a3").As("a3").AddV("B").Property("name", "b1").As("b1").AddV("B").Property("name", "b2").As("b2").AddV("B").Property("name", "b3").As("b3").AddE("ab").From("a1").To("b1").AddE("ab").From("a2").To("b2").AddE("ab").From("a [...] - "g_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().As("label").Aggregate(gremlingo.Scope.Local, "x").Barrier().Select("x").Select("label")}}, + "g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}}, "g_V_shortestPath": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Identity().ShortestPath()}}, "g_V_both_dedup_shortestPath": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Both().Dedup().ShortestPath()}}, "g_V_shortestPath_edgesIncluded": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Identity().ShortestPath().With("~tinkerpop.shortestPath.includeEdges")}}, diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js index c60f2269b0..91d54ad117 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js @@ -77,6 +77,7 @@ const ignoredScenarios = { 'g_withSideEffectXa_setX_V_both_name_aggregateXlocal_aX_capXaX': new IgnoreError(ignoreReason.setNotSupported), 'g_withStrategiesXProductiveByStrategyX_V_groupCount_byXageX': new IgnoreError(ignoreReason.nullKeysInMapNotSupportedWell), 'g_withoutStrategiesXCountStrategyX_V_count': new IgnoreError(ignoreReason.classNotSupported), + 'g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX': new IgnoreError(ignoreReason.classNotSupported), 'g_V_shortestPath_edgesIncluded': new IgnoreError(ignoreReason.needsFurtherInvestigation), 'g_V_shortestPath_edgesIncluded_edgesXoutEX': new IgnoreError(ignoreReason.needsFurtherInvestigation), 'g_V_shortestpath': new IgnoreError(ignoreReason.needsFurtherInvestigation), diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js index bfb46ca621..11bd44668f 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js @@ -1172,7 +1172,7 @@ const gremlins = { g_withStrategiesXProductiveByStrategyX_V_asXaX_selectXaX_byXageX: [function({g}) { return g.withStrategies(new ProductiveByStrategy({productiveKeys:[]})).V().as("a").select("a").by("age") }], g_withSideEffectXk_nullX_injectXxX_selectXkX: [function({g}) { return g.withSideEffect("k",null).inject("x").select("k") }], g_V_out_in_selectXall_a_a_aX_byXunfold_name_foldX: [function({g}) { return g.addV("A").property("name","a1").as("a1").addV("A").property("name","a2").as("a2").addV("A").property("name","a3").as("a3").addV("B").property("name","b1").as("b1").addV("B").property("name","b2").as("b2").addV("B").property("name","b3").as("b3").addE("ab").from_("a1").to("b1").addE("ab").from_("a2").to("b2").addE("ab").from_("a3").to("b3") }, function({g}) { return g.V().as("a").out().as("a").in_().as("a").s [...] - g_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX: [function({g}) { return g.V().as("label").aggregate(Scope.local,"x").barrier().select("x").select("label") }], + g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX: [function({g}) { return g.withoutStrategies(org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy).V().as("label").aggregate(Scope.local,"x").select("x").select("label") }], g_V_shortestPath: [function({g}) { return g.V().identity().shortestPath() }], g_V_both_dedup_shortestPath: [function({g}) { return g.V().both().dedup().shortestPath() }], g_V_shortestPath_edgesIncluded: [function({g}) { return g.V().identity().shortestPath().with_("~tinkerpop.shortestPath.includeEdges") }], diff --git a/gremlin-python/src/main/python/radish/feature_steps.py b/gremlin-python/src/main/python/radish/feature_steps.py index 2092fa5358..78db5744d9 100644 --- a/gremlin-python/src/main/python/radish/feature_steps.py +++ b/gremlin-python/src/main/python/radish/feature_steps.py @@ -36,7 +36,8 @@ project = __.project tail = __.tail ignores = [ - "g.withoutStrategies(CountStrategy).V().count()" # serialization issues with Class in GraphSON + "g.withoutStrategies(CountStrategy).V().count()", # serialization issues with Class in GraphSON + "g.withoutStrategies(LazyBarrierStrategy).V().as(\"label\").aggregate(local,\"x\").select(\"x\").select(\"label\")" ] diff --git a/gremlin-python/src/main/python/radish/gremlin.py b/gremlin-python/src/main/python/radish/gremlin.py index 9e132e5845..5bd67139a0 100644 --- a/gremlin-python/src/main/python/radish/gremlin.py +++ b/gremlin-python/src/main/python/radish/gremlin.py @@ -1154,7 +1154,7 @@ world.gremlins = { 'g_withStrategiesXProductiveByStrategyX_V_asXaX_selectXaX_byXageX': [(lambda g:g.withStrategies(*[TraversalStrategy('ProductiveByStrategy',{'productiveKeys':[],'strategy':'org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy'}, 'org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy')]).V().as_('a').select('a').by('age'))], 'g_withSideEffectXk_nullX_injectXxX_selectXkX': [(lambda g:g.withSideEffect('k',None).inject('x').select('k'))], 'g_V_out_in_selectXall_a_a_aX_byXunfold_name_foldX': [(lambda g:g.addV('A').property('name','a1').as_('a1').addV('A').property('name','a2').as_('a2').addV('A').property('name','a3').as_('a3').addV('B').property('name','b1').as_('b1').addV('B').property('name','b2').as_('b2').addV('B').property('name','b3').as_('b3').addE('ab').from_('a1').to('b1').addE('ab').from_('a2').to('b2').addE('ab').from_('a3').to('b3')), (lambda g:g.V().as_('a').out().as_('a').in_().as_('a').select(Pop.all_,' [...] - 'g_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX': [(lambda g:g.V().as_('label').aggregate(Scope.local,'x').barrier().select('x').select('label'))], + 'g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX': [(lambda g:g.withoutStrategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy')]).V().as_('label').aggregate(Scope.local,'x').select('x').select('label'))], 'g_V_shortestPath': [(lambda g:g.V().identity().shortestPath())], 'g_V_both_dedup_shortestPath': [(lambda g:g.V().both().dedup().shortestPath())], 'g_V_shortestPath_edgesIncluded': [(lambda g:g.V().identity().shortestPath().with_('~tinkerpop.shortestPath.includeEdges'))], diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Select.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Select.feature index 8478989d24..c3a87eabe1 100644 --- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Select.feature +++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Select.feature @@ -901,12 +901,13 @@ Feature: Step - select() | m[{"a":["a1","b1","a1"]}] | | m[{"a":["a2","b2","a2"]}] | | m[{"a":["a3","b3","a3"]}] | - - Scenario: g_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX +@TestTag + @StepClassIntegrated + Scenario: g_withoutStrategiesXLazyBarrierStrategyX_V_asXlabelX_aggregateXlocal_xX_selectXxX_selectXlabelX Given the modern graph And the traversal of """ - g.V().as("label").aggregate(local,"x").barrier().select("x").select("label") + g.withoutStrategies(LazyBarrierStrategy).V().as("label").aggregate(local,"x").select("x").select("label") """ When iterated to list Then the result should be unordered diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphFeatureTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphFeatureTest.java index 8f03a7e991..ab6fe656d8 100644 --- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphFeatureTest.java +++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphFeatureTest.java @@ -30,7 +30,8 @@ import org.junit.runner.RunWith; @RunWith(Cucumber.class) @CucumberOptions( - tags = "not @RemoteOnly and not @GraphComputerOnly and not @AllowNullPropertyValues", + tags = "@TestTag", +// tags = "not @RemoteOnly and not @GraphComputerOnly and not @AllowNullPropertyValues", glue = { "org.apache.tinkerpop.gremlin.features" }, objectFactory = TinkerGraphFeatureTest.TinkerGraphGuiceFactory.class, features = { "classpath:/org/apache/tinkerpop/gremlin/test/features" },