You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by va...@apache.org on 2023/04/21 00:56:54 UTC

[tinkerpop] branch valentyn/TINKERPOP-2928-master created (now 65e7b7fdc3)

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

valentyn pushed a change to branch valentyn/TINKERPOP-2928-master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


      at 65e7b7fdc3 TINKERPOP-2928 Fixed bug in element() with edge properties CTR

This branch includes the following new commits:

     new 65e7b7fdc3 TINKERPOP-2928 Fixed bug in element() with edge properties CTR

The 1 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.



[tinkerpop] 01/01: TINKERPOP-2928 Fixed bug in element() with edge properties CTR

Posted by va...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

valentyn pushed a commit to branch valentyn/TINKERPOP-2928-master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 65e7b7fdc3ae00048b3b86e0db683f0423ff2d3e
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Thu Apr 20 14:57:02 2023 -0400

    TINKERPOP-2928 Fixed bug in element() with edge properties CTR
---
 CHANGELOG.asciidoc                                 |  1 +
 docs/src/reference/the-traversal.asciidoc          |  2 +-
 .../process/traversal/step/map/ElementStep.java    |  2 +-
 .../strategy/optimization/LazyBarrierStrategy.java |  7 +-
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 19 ++---
 gremlin-go/driver/cucumber/gremlin.go              | 16 ++---
 .../gremlin-javascript/test/cucumber/gremlin.js    | 16 ++---
 gremlin-python/src/main/python/radish/gremlin.py   | 16 ++---
 .../gremlin/test/features/map/Element.feature      | 81 ++++++++++++++++++++--
 9 files changed, 110 insertions(+), 50 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 401ed18e3b..77f2385623 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -57,6 +57,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <<release-3-5-6, 3.5.6>>.
 
+* Fixed bug in `element()` when traversing from edges where bulking was enabled.
 * Refactored `PropertyMapStep` to improve extensibility by providers.
 * Fixed bug in grammar that prevented declaration of a `Map` key named `new` without quotes.
 * Fixed bug in grammar that prevented parsing of `Map` key surrounded by parenthesis which is allowable in Groovy.
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index eeca98e5ed..cd4dba58a9 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -1260,7 +1260,7 @@ link:++https://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gre
 
 The `element()` step is a no-argument step that traverses from a `Property` to the `Element` that owns it.
 
-[gremlin-groovy]
+[gremlin-groovy,theCrew]
 ----
 g.V().properties().element() <1>
 g.E().properties().element() <2>
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ElementStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ElementStep.java
index 092289c7a3..62b2bf33c2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ElementStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ElementStep.java
@@ -28,7 +28,7 @@ import java.util.Collections;
 import java.util.Set;
 
 /**
- * Traverse from a Property to its Element.
+ * Traverse from a {@link Property} to its {@link Element}.
  *
  * @author Mike Personick (http://github.com/mikepersonick)
  */
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/LazyBarrierStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/LazyBarrierStrategy.java
index d7cf224baa..adb7b40460 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/LazyBarrierStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/LazyBarrierStrategy.java
@@ -26,13 +26,13 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.PathProcessor;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NoneStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ElementStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.FlatMapStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.NoOpBarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -78,12 +78,13 @@ public final class LazyBarrierStrategy extends AbstractTraversalStrategy<Travers
 
     @Override
     public void apply(final Traversal.Admin<?, ?> traversal) {
-        // drop() is a problem for bulked edge/meta properties because of Property equality changes in TINKERPOP-2318
+        // drop()/element() is a problem for bulked edge/meta properties because of Property equality changes in TINKERPOP-2318
         // which made it so that a Property is equal if the key/value is equal. as a result, they bulk together which
         // is fine for almost all cases except when you wish to drop the property.
         if (TraversalHelper.onGraphComputer(traversal) ||
                 traversal.getTraverserRequirements().contains(TraverserRequirement.PATH) ||
-                TraversalHelper.hasStepOfAssignableClass(DropStep.class, traversal))
+                TraversalHelper.hasStepOfAssignableClass(DropStep.class, traversal)||
+                TraversalHelper.hasStepOfAssignableClass(ElementStep.class, traversal))
             return;
 
         boolean foundFlatMap = false;
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 5d60290ddc..1e2a08eabc 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -27,7 +27,6 @@
 //* Do NOT edit this file directly - generated by build/generate.groovy
 //********************************************************************************
 
-#nullable disable
 
 using System;
 using System.Collections.Generic;
@@ -498,15 +497,13 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_E_sampleX1X_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.E().Sample(1).Count()}}, 
                {"g_V_sampleX1X_byXageX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Sample(1).By("age").Count()}}, 
                {"g_V_order_byXnoX_count", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Order().By("no").Count()}}, 
-               {"g_V_EX11X", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().E(p["eid11"])}}, 
-               {"g_EX11X_E", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.E(p["eid11"]).E()}}, 
-               {"g_V_EXnullX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().E(null)}}, 
-               {"g_V_EXlistXnullXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().E(p["xx1"])}}, 
-               {"g_injectX1X_EX11_nullX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject(1).E(p["eid11"],null)}}, 
-               {"g_injectX1X_coalesceXEX_hasLabelXtestsX_addEXtestsX_from_V_hasXnameX_XjoshXX_toXV_hasXnameX_XvadasXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV("person").Property("name","josh").AddV("person").Property("name","vadas"), (g,p) =>g.Inject(1).Coalesce<object>(__.E().HasLabel("tests"),__.AddE("tests").From(__.V().Has("name","josh")).To(__.V().Has("name","vadas"))), (g,p) =>g.E().HasLabel("tests")}}, 
-               {"g_V_properties_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["xx1"]).Properties<object>().Element().Limit<object>(1)}}, 
-               {"g_E_properties_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.E(p["xx1"]).Properties<object>().Element().Limit<object>(1)}}, 
-               {"g_V_properties_properties_element_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["xx1"]).Properties<object>().Properties<object>().Element().Element().Limit<object>(1)}}, 
+               {"g_VX1X_properties_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V((Vertex) p["v2"]).Properties<object>().Element().Limit<object>(1)}}, 
+               {"g_V_properties_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Properties<object>().Element()}}, 
+               {"g_V_propertiesXageX_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Properties<object>("age").Element()}}, 
+               {"g_EX_properties_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.E(p["eid11"]).Properties<object>().Element().Limit<object>(1)}}, 
+               {"g_E_properties_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.E().Properties<object>().Element()}}, 
+               {"g_VXv7_properties_properties_element_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V((Vertex) p["v7"]).Properties<object>().Properties<object>().Element().Element().Limit<object>(1)}}, 
+               {"g_V_properties_properties_element_element", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V((Vertex) p["v7"]).Properties<object>().Properties<object>().Element().Element()}}, 
                {"g_V_elementMap", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().ElementMap<object>()}}, 
                {"g_V_elementMapXname_ageX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().ElementMap<object>("name","age")}}, 
                {"g_EX11X_elementMap", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.E(p["eid11"]).ElementMap<object>()}}, 
@@ -1150,5 +1147,3 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
     }
 }
 
-#nullable restore
-
diff --git a/gremlin-go/driver/cucumber/gremlin.go b/gremlin-go/driver/cucumber/gremlin.go
index f9de10690f..63f255b3fd 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -468,15 +468,13 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[
     "g_E_sampleX1X_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E().Sample(1).Count()}}, 
     "g_V_sampleX1X_byXageX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Sample(1).By("age").Count()}}, 
     "g_V_order_byXnoX_count": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Order().By("no").Count()}}, 
-    "g_V_EX11X": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().E(p["eid11"])}}, 
-    "g_EX11X_E": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E(p["eid11"]).E()}}, 
-    "g_V_EXnullX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().E(nil)}}, 
-    "g_V_EXlistXnullXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().E(p["xx1"])}}, 
-    "g_injectX1X_EX11_nullX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(1).E(p["eid11"], nil)}}, 
-    "g_injectX1X_coalesceXEX_hasLabelXtestsX_addEXtestsX_from_V_hasXnameX_XjoshXX_toXV_hasXnameX_XvadasXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "josh").AddV("person").Property("name", "vadas")}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(1).Coalesce(gremlingo.T__.E().HasLabel("tests"), gremlingo.T__.AddE("tests").From(gremli [...]
-    "g_V_properties_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["xx1"]).Properties().Element().Limit(1)}}, 
-    "g_E_properties_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E(p["xx1"]).Properties().Element().Limit(1)}}, 
-    "g_V_properties_properties_element_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["xx1"]).Properties().Properties().Element().Element().Limit(1)}}, 
+    "g_VX1X_properties_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["v2"]).Properties().Element().Limit(1)}}, 
+    "g_V_properties_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Properties().Element()}}, 
+    "g_V_propertiesXageX_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Properties("age").Element()}}, 
+    "g_EX_properties_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E(p["eid11"]).Properties().Element().Limit(1)}}, 
+    "g_E_properties_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E().Properties().Element()}}, 
+    "g_VXv7_properties_properties_element_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["v7"]).Properties().Properties().Element().Element().Limit(1)}}, 
+    "g_V_properties_properties_element_element": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["v7"]).Properties().Properties().Element().Element()}}, 
     "g_V_elementMap": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().ElementMap()}}, 
     "g_V_elementMapXname_ageX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().ElementMap("name", "age")}}, 
     "g_EX11X_elementMap": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E(p["eid11"]).ElementMap()}}, 
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 62a47e2362..e01cd30e54 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
@@ -487,15 +487,13 @@ const gremlins = {
     g_E_sampleX1X_count: [function({g}) { return g.E().sample(1).count() }], 
     g_V_sampleX1X_byXageX_count: [function({g}) { return g.V().sample(1).by("age").count() }], 
     g_V_order_byXnoX_count: [function({g}) { return g.V().order().by("no").count() }], 
-    g_V_EX11X: [function({g, eid11}) { return g.V().E(eid11) }], 
-    g_EX11X_E: [function({g, eid11}) { return g.E(eid11).E() }], 
-    g_V_EXnullX: [function({g}) { return g.V().E(null) }], 
-    g_V_EXlistXnullXX: [function({g, xx1}) { return g.V().E(xx1) }], 
-    g_injectX1X_EX11_nullX: [function({g, eid11}) { return g.inject(1).E(eid11,null) }], 
-    g_injectX1X_coalesceXEX_hasLabelXtestsX_addEXtestsX_from_V_hasXnameX_XjoshXX_toXV_hasXnameX_XvadasXXX: [function({g}) { return g.addV("person").property("name","josh").addV("person").property("name","vadas") }, function({g}) { return g.inject(1).coalesce(__.E().hasLabel("tests"),__.addE("tests").from_(__.V().has("name","josh")).to(__.V().has("name","vadas"))) }, function({g}) { return g.E().hasLabel("tests") }], 
-    g_V_properties_element: [function({g, xx1}) { return g.V(xx1).properties().element().limit(1) }], 
-    g_E_properties_element: [function({g, xx1}) { return g.E(xx1).properties().element().limit(1) }], 
-    g_V_properties_properties_element_element: [function({g, xx1}) { return g.V(xx1).properties().properties().element().element().limit(1) }], 
+    g_VX1X_properties_element: [function({g, v2}) { return g.V(v2).properties().element().limit(1) }], 
+    g_V_properties_element: [function({g}) { return g.V().properties().element() }], 
+    g_V_propertiesXageX_element: [function({g}) { return g.V().properties("age").element() }], 
+    g_EX_properties_element: [function({g, eid11}) { return g.E(eid11).properties().element().limit(1) }], 
+    g_E_properties_element: [function({g}) { return g.E().properties().element() }], 
+    g_VXv7_properties_properties_element_element: [function({g, v7}) { return g.V(v7).properties().properties().element().element().limit(1) }], 
+    g_V_properties_properties_element_element: [function({g, v7}) { return g.V(v7).properties().properties().element().element() }], 
     g_V_elementMap: [function({g}) { return g.V().elementMap() }], 
     g_V_elementMapXname_ageX: [function({g}) { return g.V().elementMap("name","age") }], 
     g_EX11X_elementMap: [function({g, eid11}) { return g.E(eid11).elementMap() }], 
diff --git a/gremlin-python/src/main/python/radish/gremlin.py b/gremlin-python/src/main/python/radish/gremlin.py
index bb100c6e3f..6aeddf7f47 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -469,15 +469,13 @@ world.gremlins = {
     'g_E_sampleX1X_count': [(lambda g:g.E().sample(1).count())], 
     'g_V_sampleX1X_byXageX_count': [(lambda g:g.V().sample(1).by('age').count())], 
     'g_V_order_byXnoX_count': [(lambda g:g.V().order().by('no').count())], 
-    'g_V_EX11X': [(lambda g, eid11=None:g.V().E(eid11))], 
-    'g_EX11X_E': [(lambda g, eid11=None:g.E(eid11).E())], 
-    'g_V_EXnullX': [(lambda g:g.V().E(None))], 
-    'g_V_EXlistXnullXX': [(lambda g, xx1=None:g.V().E(xx1))], 
-    'g_injectX1X_EX11_nullX': [(lambda g, eid11=None:g.inject(1).E(eid11,None))], 
-    'g_injectX1X_coalesceXEX_hasLabelXtestsX_addEXtestsX_from_V_hasXnameX_XjoshXX_toXV_hasXnameX_XvadasXXX': [(lambda g:g.addV('person').property('name','josh').addV('person').property('name','vadas')), (lambda g:g.inject(1).coalesce(__.E().hasLabel('tests'),__.addE('tests').from_(__.V().has('name','josh')).to(__.V().has('name','vadas')))), (lambda g:g.E().hasLabel('tests'))], 
-    'g_V_properties_element': [(lambda g, xx1=None:g.V(xx1).properties().element()[0:1])], 
-    'g_E_properties_element': [(lambda g, xx1=None:g.E(xx1).properties().element()[0:1])], 
-    'g_V_properties_properties_element_element': [(lambda g, xx1=None:g.V(xx1).properties().properties().element().element()[0:1])], 
+    'g_VX1X_properties_element': [(lambda g, v2=None:g.V(v2).properties().element()[0:1])], 
+    'g_V_properties_element': [(lambda g:g.V().properties().element())], 
+    'g_V_propertiesXageX_element': [(lambda g:g.V().properties('age').element())], 
+    'g_EX_properties_element': [(lambda g, eid11=None:g.E(eid11).properties().element()[0:1])], 
+    'g_E_properties_element': [(lambda g:g.E().properties().element())], 
+    'g_VXv7_properties_properties_element_element': [(lambda g, v7=None:g.V(v7).properties().properties().element().element()[0:1])], 
+    'g_V_properties_properties_element_element': [(lambda g, v7=None:g.V(v7).properties().properties().element().element())], 
     'g_V_elementMap': [(lambda g:g.V().elementMap())], 
     'g_V_elementMapXname_ageX': [(lambda g:g.V().elementMap('name','age'))], 
     'g_EX11X_elementMap': [(lambda g, eid11=None:g.E(eid11).elementMap())], 
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Element.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Element.feature
index a94e4bde31..6f5556d939 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Element.feature
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Element.feature
@@ -19,41 +19,110 @@
 Feature: Step - element()
 
   # VertexProperty -> Vertex
+  Scenario: g_VX1X_properties_element
+    Given the modern graph
+    And using the parameter v2 defined as "v[josh]"
+    And the traversal of
+      """
+      g.V(v2).properties().element().limit(1)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[josh] |
+
   Scenario: g_V_properties_element
     Given the modern graph
-    And using the parameter xx1 defined as "v[josh]"
     And the traversal of
       """
-      g.V(xx1).properties().element().limit(1)
+      g.V().properties().element()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[marko] |
+      | v[marko] |
+      | v[vadas] |
+      | v[vadas] |
+      | v[lop] |
+      | v[lop] |
+      | v[josh] |
+      | v[josh] |
+      | v[ripple] |
+      | v[ripple] |
+      | v[peter] |
+      | v[peter] |
+
+  Scenario: g_V_propertiesXageX_element
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().properties("age").element()
       """
     When iterated to list
     Then the result should be unordered
       | result |
+      | v[marko] |
+      | v[vadas] |
       | v[josh] |
+      | v[peter] |
 
   # EdgeProperty -> Edge
+  Scenario: g_EX_properties_element
+    Given the modern graph
+    And using the parameter eid11 defined as "e[josh-created->lop].id"
+    And the traversal of
+      """
+      g.E(eid11).properties().element().limit(1)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | e[josh-created->lop] |
+
   Scenario: g_E_properties_element
     Given the modern graph
-    And using the parameter xx1 defined as "e[josh-created->lop].id"
     And the traversal of
       """
-      g.E(xx1).properties().element().limit(1)
+      g.E().properties().element()
       """
     When iterated to list
     Then the result should be unordered
       | result |
+      | e[marko-created->lop] |
+      | e[marko-knows->josh] |
+      | e[marko-knows->vadas] |
+      | e[peter-created->lop] |
       | e[josh-created->lop] |
+      | e[josh-created->ripple] |
 
   # MetaProperty -> VertexProperty
+  @MultiMetaProperties
+  Scenario: g_VXv7_properties_properties_element_element
+    Given the crew graph
+    And using the parameter v7 defined as "v[stephen]"
+    And the traversal of
+      """
+      g.V(v7).properties().properties().element().element().limit(1)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[stephen] |
+
   @MultiMetaProperties
   Scenario: g_V_properties_properties_element_element
     Given the crew graph
-    And using the parameter xx1 defined as "v[stephen]"
+    And using the parameter v7 defined as "v[stephen]"
     And the traversal of
       """
-      g.V(xx1).properties().properties().element().element().limit(1)
+      g.V(v7).properties().properties().element().element()
       """
     When iterated to list
     Then the result should be unordered
       | result |
+      | v[stephen] |
+      | v[stephen] |
+      | v[stephen] |
+      | v[stephen] |
       | v[stephen] |
\ No newline at end of file