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

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

commit 4d83e1573e1c700469824409c1357b03d31cd617
Author: Stephen Mallette <[email protected]>
AuthorDate: Fri Nov 5 13:42:56 2021 -0400

    TINKERPOP-2611 Prevented null T values to addV() and property()
    
    This was allowed in 3.5.x when nulls were added but it could lead to 
confusing situations. It's a breaking change so users will need to switch to 
take a bit of care when calling these methods.
---
 CHANGELOG.asciidoc                                 |  1 +
 docs/src/upgrade/release-3.6.x.asciidoc            | 13 +++++++++++
 .../traversal/dsl/graph/GraphTraversal.java        |  9 ++++++--
 .../traversal/dsl/graph/GraphTraversalSource.java  | 11 +++++-----
 .../dsl/graph/GraphTraversalSourceTest.java        | 14 ++++++++++++
 .../traversal/dsl/graph/GraphTraversalTest.java    | 25 ++++++++++++++++++++++
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |  1 -
 .../gremlin-javascript/test/cucumber/gremlin.js    |  1 -
 gremlin-python/src/main/python/radish/gremlin.py   |  1 -
 gremlin-test/features/map/AddVertex.feature        | 10 ---------
 .../process/traversal/step/map/AddVertexTest.java  | 22 -------------------
 11 files changed, 66 insertions(+), 42 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index d3fc76a..a3ad924 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -24,6 +24,7 @@ limitations under the License.
 === TinkerPop 3.6.0 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Changed TinkerGraph to allow identifiers to be heterogeneous when filtering.
+* Prevented values of `T` to `property()` from being `null`.
 * Fixed query indentation for profile metrics where indent levels were not 
being respected.
 * `TraversalOpProcessor` no longer accepts a `String` representation of 
`Bytecode` for the "gremlin" argument which was left to support older versions 
of the drivers.
 * Removed requirement that "ids" used to filter vertices and edges need to be 
all of a single type.
diff --git a/docs/src/upgrade/release-3.6.x.asciidoc 
b/docs/src/upgrade/release-3.6.x.asciidoc
index 80626f8..e6fa3ca 100644
--- a/docs/src/upgrade/release-3.6.x.asciidoc
+++ b/docs/src/upgrade/release-3.6.x.asciidoc
@@ -49,6 +49,19 @@ package is now explicitly associated to `gremlin-groovy` but 
as an `<optional>`
 
 See:link:https://issues.apache.org/jira/browse/TINKERPOP-2411[TINKERPOP-2411]
 
+==== Null for T
+
+In 3.5.x, calling `property()` with a key that is of type `T` and a value that 
is `null` or calling `addV()` with a
+`null` label is processed as a valid traversal and default values are used. 
That approach allows opportunities for
+unexpected problems should a variable being passed as a parameter end up 
accidentally shifting to `null` without the
+caller's knowledge. Starting in 3.6.0, such traversals will generate an 
exception during construction of the traversal.
+
+It is still possible to call `addV()` with no arguments to assume a default 
`label` and `id` generation remains
+implementation specific with some graphs accepting `id` and others ignoring it 
to generate their own. Both value of
+`T` remain immutable.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-2611[TINKERPOP-2611]
+
 ==== Logging Changes
 
 In Gremlin Server and Gremlin Console distributions, the default logging 
implementation of log4j 1.2.x has been
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 9a45300..9cfe3f9 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -1036,6 +1036,7 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * @since 3.1.0-incubating
      */
     public default GraphTraversal<S, Vertex> addV(final String vertexLabel) {
+        if (null == vertexLabel) throw new 
IllegalArgumentException("vertexLabel cannot be null");
         this.asAdmin().getBytecode().addStep(Symbols.addV, vertexLabel);
         return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), 
vertexLabel));
     }
@@ -1048,8 +1049,9 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * @since 3.3.1
      */
     public default GraphTraversal<S, Vertex> addV(final Traversal<?, String> 
vertexLabelTraversal) {
+        if (null == vertexLabelTraversal) throw new 
IllegalArgumentException("vertexLabelTraversal cannot be null");
         this.asAdmin().getBytecode().addStep(Symbols.addV, 
vertexLabelTraversal);
-        return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), null 
== vertexLabelTraversal ? null : vertexLabelTraversal.asAdmin()));
+        return this.asAdmin().addStep(new AddVertexStep<>(this.asAdmin(), 
vertexLabelTraversal.asAdmin()));
     }
 
     /**
@@ -2244,13 +2246,16 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * @param cardinality the specified cardinality of the property where 
{@code null} will allow the {@link Graph}
      *                    to use its default settings
      * @param key         the key for the property
-     * @param value       the value for the property
+     * @param value       the value for the property which may not be null if 
the {@code key} is of type {@link T}
      * @param keyValues   any meta properties to be assigned to this property
      * @return the traversal with the last step modified to add a property
      * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addproperty-step";
 target="_blank">AddProperty Step</a>
      * @since 3.0.0-incubating
      */
     public default GraphTraversal<S, E> property(final 
VertexProperty.Cardinality cardinality, final Object key, final Object value, 
final Object... keyValues) {
+        if (key instanceof T && null == value)
+            throw new IllegalArgumentException("Value of T cannot be null");
+
         if (null == cardinality)
             this.asAdmin().getBytecode().addStep(Symbols.property, key, value, 
keyValues);
         else
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index b7471b1..402af8a 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -295,16 +295,16 @@ public class GraphTraversalSource implements 
TraversalSource {
 
     //// SPAWNS
 
-
     /**
      * Spawns a {@link GraphTraversal} by adding a vertex with the specified 
label. If the {@code label} is
      * {@code null} then it will default to {@link Vertex#DEFAULT_LABEL}.
      */
-    public GraphTraversal<Vertex, Vertex> addV(final String label) {
+    public GraphTraversal<Vertex, Vertex> addV(final String vertexLabel) {
+        if (null == vertexLabel) throw new 
IllegalArgumentException("vertexLabel cannot be null");
         final GraphTraversalSource clone = this.clone();
-        clone.bytecode.addStep(GraphTraversal.Symbols.addV, label);
+        clone.bytecode.addStep(GraphTraversal.Symbols.addV, vertexLabel);
         final GraphTraversal.Admin<Vertex, Vertex> traversal = new 
DefaultGraphTraversal<>(clone);
-        return traversal.addStep(new AddVertexStartStep(traversal, label));
+        return traversal.addStep(new AddVertexStartStep(traversal, 
vertexLabel));
     }
 
     /**
@@ -312,6 +312,7 @@ public class GraphTraversalSource implements 
TraversalSource {
      * {@code vertexLabelTraversal} is {@code null} then it will default to 
{@link Vertex#DEFAULT_LABEL}.
      */
     public GraphTraversal<Vertex, Vertex> addV(final Traversal<?, String> 
vertexLabelTraversal) {
+        if (null == vertexLabelTraversal) throw new 
IllegalArgumentException("vertexLabelTraversal cannot be null");
         final GraphTraversalSource clone = this.clone();
         clone.bytecode.addStep(GraphTraversal.Symbols.addV, 
vertexLabelTraversal);
         final GraphTraversal.Admin<Vertex, Vertex> traversal = new 
DefaultGraphTraversal<>(clone);
@@ -325,7 +326,7 @@ public class GraphTraversalSource implements 
TraversalSource {
         final GraphTraversalSource clone = this.clone();
         clone.bytecode.addStep(GraphTraversal.Symbols.addV);
         final GraphTraversal.Admin<Vertex, Vertex> traversal = new 
DefaultGraphTraversal<>(clone);
-        return traversal.addStep(new AddVertexStartStep(traversal, 
(String)null));
+        return traversal.addStep(new AddVertexStartStep(traversal, (String) 
null));
     }
 
     /**
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java
index fe60d6b..7c4848c 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSourceTest.java
@@ -20,6 +20,7 @@ package 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
 
 import org.apache.commons.configuration2.MapConfiguration;
 import org.apache.tinkerpop.gremlin.process.remote.RemoteConnection;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
@@ -38,6 +39,9 @@ import static org.mockito.Mockito.verify;
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public class GraphTraversalSourceTest {
+
+    private static final GraphTraversalSource g = 
traversal().withEmbedded(EmptyGraph.instance());
+
     @Test
     public void shouldCloseRemoteConnectionOnWithRemote() throws Exception {
         final RemoteConnection mock = mock(RemoteConnection.class);
@@ -66,4 +70,14 @@ public class GraphTraversalSourceTest {
         g = g.withoutStrategies(ReadOnlyStrategy.class);
         
assertFalse(g.getStrategies().getStrategy(ReadOnlyStrategy.class).isPresent());
     }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void shouldFailAddVWithNullVertexLabel() {
+        g.addV((String) null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void shouldFailAddVWithNullVertexLabelTraversal() {
+        g.addV((Traversal<?, String>) null);
+    }
 }
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
index 166c890..2ffe7bc 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
@@ -22,6 +22,9 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,6 +38,7 @@ import java.util.Random;
 import java.util.Set;
 import java.util.function.Consumer;
 
+import static 
org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -43,11 +47,32 @@ import static org.junit.Assert.assertEquals;
  */
 public class GraphTraversalTest {
     private static final Logger logger = 
LoggerFactory.getLogger(GraphTraversalTest.class);
+    private static final GraphTraversalSource g = 
traversal().withEmbedded(EmptyGraph.instance());
 
     private static Set<String> NO_GRAPH = new 
HashSet<>(Arrays.asList("asAdmin", "by", "read", "write", "with", "option", 
"iterate", "to", "from", "profile", "pageRank", "connectedComponent", 
"peerPressure", "shortestPath", "program", "none"));
     private static Set<String> NO_ANONYMOUS = new 
HashSet<>(Arrays.asList("start", "__"));
     private static Set<String> IGNORES_BYTECODE = new 
HashSet<>(Arrays.asList("asAdmin", "read", "write", "iterate"));
 
+    @Test(expected = IllegalArgumentException.class)
+    public void shouldFailPropertyWithNullVertexId() {
+        g.addV().property(T.id, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void shouldFailPropertyWithNullVertexLabel() {
+        g.addV().property(T.label, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void shouldFailPropertyWithCardinalityNullVertexId() {
+        g.addV().property(VertexProperty.Cardinality.single, T.id, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void shouldFailPropertyWithCardinalityNullVertexLabel() {
+        g.addV().property(VertexProperty.Cardinality.single, T.label, null);
+    }
+
     @Test
     public void shouldHaveMethodsOfGraphTraversalOnAnonymousGraphTraversal() {
         for (Method methodA : GraphTraversal.class.getMethods()) {
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs 
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 2c8d242..0bc0c03 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -355,7 +355,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.AddV("person").Property("name","marko").Property("age",29).As("marko").AddV("person").Property("name","vadas").Property("age",27).As("vadas").AddV("software").Property("name","lop").Property("lang","java").As("lop").AddV("person").Property("name","josh").Property("age",32).As("josh").AddV("software").Property("name","ripp
 [...]
                
{"g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMap_withXtokensX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.AddV("person").Property("name","marko").Property("age",29).As("marko").AddV("person").Property("name","vadas").Property("age",27).As("vadas").AddV("software").Property("name","lop").Property("lang","java").As("lop").AddV("person").Property("name","josh").Property(
 [...]
                {"g_addVXV_hasXname_markoX_propertiesXnameX_keyX_label", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.AddV("person").Property("name","marko").Property("age",29).As("marko").AddV("person").Property("name","vadas").Property("age",27).As("vadas").AddV("software").Property("name","lop").Property("lang","java").As("lop").AddV("person").Property("name","josh").Property("age",32).As("josh").AddV("software").Property("name","ripple").Pro
 [...]
-               {"g_addVXnullX_propertyXid_nullX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) null).Property(T.Id,null), (g,p) 
=>g.V().HasLabel("vertex")}}, 
                {"g_addV_propertyXlabel_personX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV().Property(T.Label,"person"), (g,p) 
=>g.V().HasLabel("person")}}, 
                {"g_addVXpersonX_propertyXname_joshX_propertyXage_nullX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name","josh").Property("age",null), (g,p) 
=>g.V().Has("person","age",(object) null)}}, 
                
{"g_addVXpersonX_propertyXname_markoX_propertyXfriendWeight_null_acl_nullX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.AddV("person").Property("name","marko").Property("friendWeight",null,"acl",null),
 (g,p) =>g.V().Has("person","name","marko").Has("friendWeight",(object) null), 
(g,p) 
=>g.V().Has("person","name","marko").Properties<object>("friendWeight").Has("acl",(object)
 null), (g,p) =>g.V().Has("person","name","marko").Prop [...]
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 8507405..48eb0cc 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
@@ -344,7 +344,6 @@ const gremlins = {
     g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name: 
[function({g}) { return 
g.addV("person").property("name","marko").property("age",29).as("marko").addV("person").property("name","vadas").property("age",27).as("vadas").addV("software").property("name","lop").property("lang","java").as("lop").addV("person").property("name","josh").property("age",32).as("josh").addV("software").property("name","ripple").property("lang","java").as("ripple").addV("person").property("name","pet
 [...]
     
g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMap_withXtokensX:
 [function({g}) { return 
g.addV("person").property("name","marko").property("age",29).as("marko").addV("person").property("name","vadas").property("age",27).as("vadas").addV("software").property("name","lop").property("lang","java").as("lop").addV("person").property("name","josh").property("age",32).as("josh").addV("software").property("name","ripple").property("lan
 [...]
     g_addVXV_hasXname_markoX_propertiesXnameX_keyX_label: [function({g}) { 
return 
g.addV("person").property("name","marko").property("age",29).as("marko").addV("person").property("name","vadas").property("age",27).as("vadas").addV("software").property("name","lop").property("lang","java").as("lop").addV("person").property("name","josh").property("age",32).as("josh").addV("software").property("name","ripple").property("lang","java").as("ripple").addV("person").property("name","peter").pro
 [...]
-    g_addVXnullX_propertyXid_nullX: [function({g}) { return 
g.addV(null).property(T.id,null) }, function({g}) { return 
g.V().hasLabel("vertex") }], 
     g_addV_propertyXlabel_personX: [function({g}) { return 
g.addV().property(T.label,"person") }, function({g}) { return 
g.V().hasLabel("person") }], 
     g_addVXpersonX_propertyXname_joshX_propertyXage_nullX: [function({g}) { 
return g.addV("person").property("name","josh").property("age",null) }, 
function({g}) { return g.V().has("person","age",null) }], 
     g_addVXpersonX_propertyXname_markoX_propertyXfriendWeight_null_acl_nullX: 
[function({g}) { return 
g.addV("person").property("name","marko").property("friendWeight",null,"acl",null)
 }, function({g}) { return 
g.V().has("person","name","marko").has("friendWeight",null) }, function({g}) { 
return 
g.V().has("person","name","marko").properties("friendWeight").has("acl",null) 
}, function({g}) { return 
g.V().has("person","name","marko").properties("friendWeight").count() }], 
diff --git a/gremlin-python/src/main/python/radish/gremlin.py 
b/gremlin-python/src/main/python/radish/gremlin.py
index 5f9535a..19c64b8 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -329,7 +329,6 @@ world.gremlins = {
     'g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name': [(lambda 
g:g.addV('person').property('name','marko').property('age',29).as_('marko').addV('person').property('name','vadas').property('age',27).as_('vadas').addV('software').property('name','lop').property('lang','java').as_('lop').addV('person').property('name','josh').property('age',32).as_('josh').addV('software').property('name','ripple').property('lang','java').as_('ripple').addV('person').property('name','peter').p
 [...]
     
'g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMap_withXtokensX':
 [(lambda 
g:g.addV('person').property('name','marko').property('age',29).as_('marko').addV('person').property('name','vadas').property('age',27).as_('vadas').addV('software').property('name','lop').property('lang','java').as_('lop').addV('person').property('name','josh').property('age',32).as_('josh').addV('software').property('name','ripple').property('lang','jav
 [...]
     'g_addVXV_hasXname_markoX_propertiesXnameX_keyX_label': [(lambda 
g:g.addV('person').property('name','marko').property('age',29).as_('marko').addV('person').property('name','vadas').property('age',27).as_('vadas').addV('software').property('name','lop').property('lang','java').as_('lop').addV('person').property('name','josh').property('age',32).as_('josh').addV('software').property('name','ripple').property('lang','java').as_('ripple').addV('person').property('name','peter').property(
 [...]
-    'g_addVXnullX_propertyXid_nullX': [(lambda 
g:g.addV(None).property(T.id,None)), (lambda g:g.V().hasLabel('vertex'))], 
     'g_addV_propertyXlabel_personX': [(lambda 
g:g.addV().property(T.label,'person')), (lambda g:g.V().hasLabel('person'))], 
     'g_addVXpersonX_propertyXname_joshX_propertyXage_nullX': [(lambda 
g:g.addV('person').property('name','josh').property('age',None)), (lambda 
g:g.V().has('person','age',None))], 
     
'g_addVXpersonX_propertyXname_markoX_propertyXfriendWeight_null_acl_nullX': 
[(lambda 
g:g.addV('person').property('name','marko').property('friendWeight',None,'acl',None)),
 (lambda g:g.V().has('person','name','marko').has('friendWeight',None)), 
(lambda 
g:g.V().has('person','name','marko').properties('friendWeight').has('acl',None)),
 (lambda 
g:g.V().has('person','name','marko').properties('friendWeight').count())], 
diff --git a/gremlin-test/features/map/AddVertex.feature 
b/gremlin-test/features/map/AddVertex.feature
index c149d89..a47369e 100644
--- a/gremlin-test/features/map/AddVertex.feature
+++ b/gremlin-test/features/map/AddVertex.feature
@@ -419,16 +419,6 @@ Feature: Step - addV()
       | result |
       | name |
 
-  Scenario: g_addVXnullX_propertyXid_nullX
-    Given the empty graph
-    And the traversal of
-      """
-      g.addV(null).property(T.id, null)
-      """
-    When iterated to list
-    Then the result should have a count of 1
-    And the graph should return 1 for count of "g.V().hasLabel(\"vertex\")"
-
   Scenario: g_addV_propertyXlabel_personX
     Given the empty graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
index ad0e1dd..a82a3ef 100644
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
@@ -61,8 +61,6 @@ public abstract class AddVertexTest extends 
AbstractGremlinTest {
 
     public abstract Traversal<Vertex, Vertex> 
get_g_V_hasLabelXpersonX_propertyXname_nullX();
 
-    public abstract Traversal<Vertex, Vertex> 
get_g_addVXnullX_propertyXid_nullX();
-
     public abstract Traversal<Vertex, Vertex> 
get_g_addV_propertyXlabel_personX();
 
     public abstract Traversal<Vertex, Vertex> 
get_g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenmX();
@@ -122,20 +120,6 @@ public abstract class AddVertexTest extends 
AbstractGremlinTest {
     @Test
     @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, 
feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
     @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, 
feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
-    public void g_addVXnullX_propertyXid_nullX() {
-        final Traversal<Vertex, Vertex> traversal = 
get_g_addVXnullX_propertyXid_nullX();
-        printTraversalForm(traversal);
-
-        final Vertex vertex = traversal.next();
-        assertEquals(Vertex.DEFAULT_LABEL, vertex.label());
-
-        // should generate an id for the null value
-        assertNotNull(vertex.id());
-    }
-
-    @Test
-    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, 
feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
-    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, 
feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
     public void g_addV_propertyXlabel_personX() {
         final Traversal<Vertex, Vertex> traversal = 
get_g_addV_propertyXlabel_personX();
         printTraversalForm(traversal);
@@ -412,12 +396,6 @@ public abstract class AddVertexTest extends 
AbstractGremlinTest {
         }
 
         @Override
-        public Traversal<Vertex, Vertex> get_g_addVXnullX_propertyXid_nullX() {
-            // testing Traversal but should work the same for String
-            return g.addV((Traversal.Admin<?, String>) null).property(T.id, 
null);
-        }
-
-        @Override
         public Traversal<Vertex, Vertex> get_g_addV_propertyXlabel_personX() {
             return g.addV().property(T.label, "person");
         }

Reply via email to