TranslationStrategy (a test framework strategy) now verifies that the Bytecode 
submitted to the translator is equal to the bytecode of the 
generated/translated traversal. This was a nightmare to get everything working. 
We had so many little nick nack bugs. In particular, VertexProperty and 
Property GraphSON serialization needs to have their element() serialized or 
else you can't attach/argument. This is still a problem in Gryo and we will 
need to solve it for 3.3.0. In short, lots of test cases added, lots of tweaks 
to the various translators made, graphson.py updated significantly (though 
backwards compatible), etc. Crazy shiiiiiiiet.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6aa6fc5a
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6aa6fc5a
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6aa6fc5a

Branch: refs/heads/TINKERPOP-1520
Commit: 6aa6fc5adc47170e1c049bc47970bcaaf54b5ff2
Parents: 997e94f
Author: Marko A. Rodriguez <okramma...@gmail.com>
Authored: Wed Nov 16 16:08:19 2016 -0700
Committer: Marko A. Rodriguez <okramma...@gmail.com>
Committed: Wed Nov 16 16:08:19 2016 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  6 ++
 .../remote/traversal/step/map/RemoteStep.java   |  8 +-
 .../gremlin/process/traversal/Bytecode.java     |  4 +-
 .../finalization/MatchAlgorithmStrategy.java    |  6 +-
 .../io/graphson/GraphSONSerializersV2d0.java    | 98 +++++++++++++-------
 .../structure/io/graphson/GraphSONTokens.java   |  1 +
 .../gremlin/structure/io/gryo/GryoMapper.java   | 49 +++++++++-
 .../structure/io/gryo/GryoSerializers.java      | 11 +--
 .../gremlin/process/traversal/BytecodeTest.java |  4 +-
 .../ser/GraphSONMessageSerializerV2d0Test.java  |  2 +-
 .../step/map/GroovyPropertiesTest.groovy        |  6 ++
 .../step/sideEffect/GroovySackTest.groovy       |  8 +-
 .../gremlin/groovy/jsr223/GroovyTranslator.java | 18 +++-
 .../python/GraphTraversalSourceGenerator.groovy | 11 ++-
 .../gremlin/python/jsr223/PythonTranslator.java | 31 +++++--
 .../gremlin_python/process/graph_traversal.py   | 11 ++-
 .../jython/gremlin_python/process/strategies.py |  2 +-
 .../jython/gremlin_python/structure/graph.py    | 11 ++-
 .../gremlin_python/structure/io/graphson.py     | 65 ++++++++++---
 .../driver/test_driver_remote_connection.py     |  2 +-
 .../jython/tests/structure/io/test_graphson.py  | 38 ++++++--
 .../main/jython/tests/structure/test_graph.py   | 12 ++-
 .../gremlin/python/jsr223/PythonProvider.java   |  3 -
 .../RemoteGraphGroovyTranslatorProvider.java    | 29 +++++-
 .../process/traversal/CoreTraversalTest.java    | 32 +++++--
 .../traversal/step/map/PropertiesTest.java      | 16 ++++
 .../traversal/step/sideEffect/SackTest.java     |  8 +-
 .../decoration/TranslationStrategy.java         | 16 +++-
 .../TinkerGraphGroovyTranslatorProvider.java    |  4 -
 .../TinkerGraphJavaTranslatorProvider.java      |  2 -
 .../TinkerGraphGraphSONTranslatorProvider.java  |  6 --
 .../gryo/TinkerGraphGryoTranslatorProvider.java |  8 +-
 32 files changed, 393 insertions(+), 135 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 0613a39..c1f2a17 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,12 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.4 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Added support for `VertexProperty.element()` and `Property.element()` in 
GraphSON to enable attachment.
+* Added `Vertex`, `Edge`, `VertexProperty`, and `Property` serializers to 
Gremlin-Python and exposed tests that use graph object arguments.
+* `Bytecode.getSourceInstructions()` and `Bytecode.getStepInstructions()` now 
returns `List<Instruction>` instead of `Iterable<Instruction>`.
+* Added various `TraversalStrategy` registrations with `GryoMapper`.
+* Fixed a naming mistake in Gremlin-Python: `IdentityRemoveStrategy` is now 
called `IdentityRemovalStrategy`.
+* Added `TranslationStrategy` test infrastructure that verifies `Bytecode` 
generated from a translation is equal to the original `Bytecode`.
 * Converted Spark process suite tests to "integration" tests.
 * Fixed a bug in `InlineFilterStrategy` having to do with folding 
`HasContainers` into `VertexStep`.
 * Deprecated `HasContainer.makeHasContainers()` which was used to dissect 
`AndP` and shouldn't be used at the TinkerPop-level.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/map/RemoteStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/map/RemoteStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/map/RemoteStep.java
index 6b2be96..7db8e00 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/map/RemoteStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/map/RemoteStep.java
@@ -22,8 +22,10 @@ import 
org.apache.tinkerpop.gremlin.process.remote.RemoteConnection;
 import org.apache.tinkerpop.gremlin.process.remote.RemoteConnectionException;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.NoSuchElementException;
@@ -36,6 +38,8 @@ import java.util.NoSuchElementException;
  */
 public final class RemoteStep<S, E> extends AbstractStep<S, E> {
 
+    private static final boolean IS_TESTING = 
Boolean.valueOf(System.getProperty("is.testing", "false"));
+
     private transient RemoteConnection remoteConnection;
     private RemoteTraversal<?, E> remoteTraversal;
 
@@ -53,7 +57,9 @@ public final class RemoteStep<S, E> extends AbstractStep<S, 
E> {
     protected Traverser.Admin<E> processNextStart() throws 
NoSuchElementException {
         if (null == this.remoteTraversal) {
             try {
-                this.remoteTraversal = 
this.remoteConnection.submit(this.traversal.getBytecode());
+                this.remoteTraversal = this.remoteConnection.submit(IS_TESTING 
? BytecodeHelper.filterInstructions(this.traversal.getBytecode(),
+                        instruction -> 
!(instruction.getOperator().equals(TraversalSource.Symbols.withStrategies) &&
+                                
instruction.getArguments()[0].toString().contains("TranslationStrategy"))) : 
this.traversal.getBytecode());
                 
this.traversal.setSideEffects(this.remoteTraversal.getSideEffects());
             } catch (final RemoteConnectionException sce) {
                 throw new IllegalStateException(sce);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
index da09362..d81028a 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
@@ -94,7 +94,7 @@ public final class Bytecode implements Cloneable, 
Serializable {
      *
      * @return an iterable of instructions
      */
-    public Iterable<Instruction> getSourceInstructions() {
+    public List<Instruction> getSourceInstructions() {
         return this.sourceInstructions;
     }
 
@@ -103,7 +103,7 @@ public final class Bytecode implements Cloneable, 
Serializable {
      *
      * @return an iterable of instructions
      */
-    public Iterable<Instruction> getStepInstructions() {
+    public List<Instruction> getStepInstructions() {
         return this.stepInstructions;
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/MatchAlgorithmStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/MatchAlgorithmStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/MatchAlgorithmStrategy.java
index 06edc7e..a70e22a 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/MatchAlgorithmStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/finalization/MatchAlgorithmStrategy.java
@@ -35,7 +35,11 @@ import java.util.Collections;
 public final class MatchAlgorithmStrategy extends 
AbstractTraversalStrategy<TraversalStrategy.FinalizationStrategy> implements 
TraversalStrategy.FinalizationStrategy {
 
     private static final String MATCH_ALGORITHM = "matchAlgorithm";
-    private final Class<? extends MatchStep.MatchAlgorithm> 
matchAlgorithmClass;
+    private Class<? extends MatchStep.MatchAlgorithm> matchAlgorithmClass;
+
+    private MatchAlgorithmStrategy() {
+        // for serialization
+    }
 
     private MatchAlgorithmStrategy(final Class<? extends 
MatchStep.MatchAlgorithm> matchAlgorithmClass) {
         this.matchAlgorithmClass = matchAlgorithmClass;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
index 31ca6a2..11d77a4 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
@@ -35,6 +35,7 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.Comparators;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
 import 
org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
@@ -54,6 +55,7 @@ import org.javatuples.Pair;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -175,8 +177,10 @@ class GraphSONSerializersV2d0 {
         public void serialize(final Property property, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
             jsonGenerator.writeStartObject();
-            jsonGenerator.writeObjectField(GraphSONTokens.KEY, property.key());
+            jsonGenerator.writeStringField(GraphSONTokens.KEY, property.key());
             jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
property.value());
+            if (null != property.element())
+                jsonGenerator.writeObjectField(GraphSONTokens.ELEMENT, 
DetachedFactory.detach(property.element(), false));
             jsonGenerator.writeEndObject();
         }
     }
@@ -193,15 +197,17 @@ class GraphSONSerializersV2d0 {
         }
 
         @Override
-        public void serialize(final VertexProperty property, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+        public void serialize(final VertexProperty vertexProperty, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException {
             jsonGenerator.writeStartObject();
 
-            jsonGenerator.writeObjectField(GraphSONTokens.ID, property.id());
-            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
property.value());
+            jsonGenerator.writeObjectField(GraphSONTokens.ID, 
vertexProperty.id());
+            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
vertexProperty.value());
+            if (null != vertexProperty.element())
+                jsonGenerator.writeObjectField(GraphSONTokens.VERTEX, 
DetachedFactory.detach(vertexProperty.element(), false));
             if (includeLabel)
-                jsonGenerator.writeStringField(GraphSONTokens.LABEL, 
property.label());
-            tryWriteMetaProperties(property, jsonGenerator, normalize);
+                jsonGenerator.writeStringField(GraphSONTokens.LABEL, 
vertexProperty.label());
+            tryWriteMetaProperties(vertexProperty, jsonGenerator, normalize);
 
             jsonGenerator.writeEndObject();
         }
@@ -299,6 +305,7 @@ class GraphSONSerializersV2d0 {
                 intermediate.put(GraphSONTokens.STRATEGY, 
pair.getValue0().toString());
                 intermediate.put(GraphSONTokens.CATEGORY, 
pair.getValue0().getTraversalCategory().getSimpleName());
                 intermediate.put(GraphSONTokens.TRAVERSAL, 
getStepsAsList(pair.getValue1()));
+                intermediate.put(GraphSONTokens.TRAVERSAL, 
getStepsAsList(pair.getValue1()));
                 intermediates.add(intermediate);
             }
             m.put(GraphSONTokens.INTERMEDIATE, intermediates);
@@ -427,8 +434,8 @@ class GraphSONSerializersV2d0 {
         public Vertex createObject(final Map<String, Object> vertexData) {
             return new DetachedVertex(
                     vertexData.get(GraphSONTokens.ID),
-                    vertexData.get(GraphSONTokens.LABEL).toString(),
-                    (Map<String, Object>) 
vertexData.get(GraphSONTokens.PROPERTIES)
+                    vertexData.getOrDefault(GraphSONTokens.LABEL, 
Vertex.DEFAULT_LABEL).toString(),
+                    (Map<String, Object>) 
vertexData.getOrDefault(GraphSONTokens.PROPERTIES, Collections.emptyMap())
             );
         }
     }
@@ -443,10 +450,10 @@ class GraphSONSerializersV2d0 {
         public Edge createObject(final Map<String, Object> edgeData) {
             return new DetachedEdge(
                     edgeData.get(GraphSONTokens.ID),
-                    edgeData.get(GraphSONTokens.LABEL).toString(),
-                    (Map) edgeData.get(GraphSONTokens.PROPERTIES),
-                    Pair.with(edgeData.get(GraphSONTokens.OUT), 
edgeData.get(GraphSONTokens.OUT_LABEL).toString()),
-                    Pair.with(edgeData.get(GraphSONTokens.IN), 
edgeData.get(GraphSONTokens.IN_LABEL).toString())
+                    edgeData.getOrDefault(GraphSONTokens.LABEL, 
Edge.DEFAULT_LABEL).toString(),
+                    (Map) edgeData.getOrDefault(GraphSONTokens.PROPERTIES, 
Collections.emptyMap()),
+                    Pair.with(edgeData.get(GraphSONTokens.OUT), 
edgeData.getOrDefault(GraphSONTokens.OUT_LABEL, 
Vertex.DEFAULT_LABEL).toString()),
+                    Pair.with(edgeData.get(GraphSONTokens.IN), 
edgeData.getOrDefault(GraphSONTokens.IN_LABEL, Vertex.DEFAULT_LABEL).toString())
             );
         }
     }
@@ -459,9 +466,47 @@ class GraphSONSerializersV2d0 {
 
         @Override
         public Property createObject(final Map<String, Object> propData) {
-            return new DetachedProperty(
-                    (String) propData.get(GraphSONTokens.KEY),
-                    propData.get(GraphSONTokens.VALUE));
+            return propData.containsKey(GraphSONTokens.ELEMENT) ?
+                    new DetachedProperty((String) 
propData.get(GraphSONTokens.KEY), propData.get(GraphSONTokens.VALUE), 
getElement(propData.get(GraphSONTokens.ELEMENT))) :
+                    new DetachedProperty((String) 
propData.get(GraphSONTokens.KEY), propData.get(GraphSONTokens.VALUE));
+        }
+
+        private Element getElement(final Object element) {
+            if (element instanceof Element)
+                return (Element) element;
+            else if (element instanceof Map) {
+                final Map<String, Object> map = (Map<String, Object>) element;
+                if (map.containsKey(GraphSONTokens.IN_LABEL))
+                    return new EdgeJacksonDeserializer().createObject(map);
+                else if (map.containsKey(GraphSONTokens.VALUE))
+                    return new 
VertexPropertyJacksonDeserializer().createObject(map);
+                else
+                    return new VertexJacksonDeserializer().createObject(map);
+            } else
+                throw new IllegalArgumentException("Unknown element structure: 
" + element);
+
+        }
+    }
+
+    static class VertexPropertyJacksonDeserializer extends 
AbstractObjectDeserializer<VertexProperty> {
+
+        protected VertexPropertyJacksonDeserializer() {
+            super(VertexProperty.class);
+        }
+
+        @Override
+        public VertexProperty createObject(final Map<String, Object> propData) 
{
+            return propData.containsKey(GraphSONTokens.VERTEX) ?
+                    new 
DetachedVertexProperty(propData.get(GraphSONTokens.ID), (String) 
propData.get(GraphSONTokens.LABEL), propData.get(GraphSONTokens.VALUE), (Map) 
propData.getOrDefault(GraphSONTokens.PROPERTIES, Collections.emptyMap()), 
getVertex(propData.get(GraphSONTokens.VERTEX))) :
+                    new 
DetachedVertexProperty(propData.get(GraphSONTokens.ID), (String) 
propData.get(GraphSONTokens.LABEL), propData.get(GraphSONTokens.VALUE), (Map) 
propData.getOrDefault(GraphSONTokens.PROPERTIES, Collections.emptyMap()));
+
+        }
+
+        private Vertex getVertex(final Object vertex) {
+            if (vertex instanceof Vertex)
+                return (Vertex) vertex;
+            else
+                return new 
VertexJacksonDeserializer().createObject((Map<String, Object>) vertex);
         }
     }
 
@@ -485,23 +530,6 @@ class GraphSONSerializersV2d0 {
         }
     }
 
-    static class VertexPropertyJacksonDeserializer extends 
AbstractObjectDeserializer<VertexProperty> {
-
-        protected VertexPropertyJacksonDeserializer() {
-            super(VertexProperty.class);
-        }
-
-        @Override
-        public VertexProperty createObject(final Map<String, Object> propData) 
{
-            return new DetachedVertexProperty(
-                    propData.get(GraphSONTokens.ID),
-                    (String) propData.get(GraphSONTokens.LABEL),
-                    propData.get(GraphSONTokens.VALUE),
-                    (Map) propData.get(GraphSONTokens.PROPERTIES)
-            );
-        }
-    }
-
     static class MetricsJacksonDeserializer extends 
AbstractObjectDeserializer<Metrics> {
         public MetricsJacksonDeserializer() {
             super(Metrics.class);
@@ -509,16 +537,16 @@ class GraphSONSerializersV2d0 {
 
         @Override
         public Metrics createObject(final Map<String, Object> metricsData) {
-            final MutableMetrics m = new 
MutableMetrics((String)metricsData.get(GraphSONTokens.ID), 
(String)metricsData.get(GraphSONTokens.NAME));
+            final MutableMetrics m = new MutableMetrics((String) 
metricsData.get(GraphSONTokens.ID), (String) 
metricsData.get(GraphSONTokens.NAME));
 
             m.setDuration(Math.round((Double) 
metricsData.get(GraphSONTokens.DURATION) * 1000000), TimeUnit.NANOSECONDS);
-            for (Map.Entry<String, Long> count : ((Map<String, 
Long>)metricsData.getOrDefault(GraphSONTokens.COUNTS, new 
HashMap<>(0))).entrySet()) {
+            for (Map.Entry<String, Long> count : ((Map<String, Long>) 
metricsData.getOrDefault(GraphSONTokens.COUNTS, new HashMap<>(0))).entrySet()) {
                 m.setCount(count.getKey(), count.getValue());
             }
             for (Map.Entry<String, Long> count : ((Map<String, Long>) 
metricsData.getOrDefault(GraphSONTokens.ANNOTATIONS, new 
HashMap<>(0))).entrySet()) {
                 m.setAnnotation(count.getKey(), count.getValue());
             }
-            for (MutableMetrics nested : 
(List<MutableMetrics>)metricsData.getOrDefault(GraphSONTokens.METRICS, new 
ArrayList<>(0))) {
+            for (MutableMetrics nested : (List<MutableMetrics>) 
metricsData.getOrDefault(GraphSONTokens.METRICS, new ArrayList<>(0))) {
                 m.addNested(nested);
             }
             return m;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
index 9f0648a..4f804ad 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
@@ -38,6 +38,7 @@ public final class GraphSONTokens {
     public static final String EDGES = "edges";
     public static final String VERTEX = "vertex";
     public static final String VERTICES = "vertices";
+    public static final String ELEMENT = "element";
     public static final String IN = "inV";
     public static final String OUT = "outV";
     public static final String IN_E = "inE";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
index fef7288..0c8f27e 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
@@ -21,6 +21,8 @@ package org.apache.tinkerpop.gremlin.structure.io.gryo;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.tinkerpop.gremlin.process.computer.GraphFilter;
 import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
+import 
org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.GraphFilterStrategy;
 import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
 import 
org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
@@ -38,12 +40,32 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupCountStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStepV3d0;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.TreeStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy;
+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;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RangeByIsCountStrategy;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy;
+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.traverser.B_LP_O_P_S_SE_SL_Traverser;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_S_SE_SL_Traverser;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
@@ -350,9 +372,34 @@ public final class GryoMapper implements Mapper<Kryo> {
             add(GryoTypeReg.of(Column.class, 132));
             add(GryoTypeReg.of(Pop.class, 133));
             add(GryoTypeReg.of(SackFunctions.Barrier.class, 135));
-            add(GryoTypeReg.of(TraversalOptionParent.Pick.class, 137)); // 
***LAST ID***
+            add(GryoTypeReg.of(TraversalOptionParent.Pick.class, 137));
             add(GryoTypeReg.of(HashSetSupplier.class, 136, new 
UtilSerializers.HashSetSupplierSerializer()));
 
+            add(GryoTypeReg.of(ConnectiveStrategy.class, 138));
+            add(GryoTypeReg.of(HaltedTraverserStrategy.class, 139));
+            add(GryoTypeReg.of(PartitionStrategy.class, 140, new 
JavaSerializer()));
+            add(GryoTypeReg.of(SubgraphStrategy.class, 141, new 
JavaSerializer()));
+            add(GryoTypeReg.of(VertexProgramStrategy.class, 142, new 
JavaSerializer()));
+            add(GryoTypeReg.of(MatchAlgorithmStrategy.class, 143));
+            add(GryoTypeReg.of(MatchStep.GreedyMatchAlgorithm.class, 144));
+            add(GryoTypeReg.of(AdjacentToIncidentStrategy.class, 145));
+            add(GryoTypeReg.of(FilterRankingStrategy.class, 146));
+            add(GryoTypeReg.of(IdentityRemovalStrategy.class, 147));
+            add(GryoTypeReg.of(IncidentToAdjacentStrategy.class, 148));
+            add(GryoTypeReg.of(InlineFilterStrategy.class, 149));
+            add(GryoTypeReg.of(LazyBarrierStrategy.class, 150));
+            add(GryoTypeReg.of(MatchPredicateStrategy.class, 151));
+            add(GryoTypeReg.of(OrderLimitStrategy.class, 152));
+            add(GryoTypeReg.of(PathProcessorStrategy.class, 153));
+            add(GryoTypeReg.of(PathRetractionStrategy.class, 154));
+            add(GryoTypeReg.of(RangeByIsCountStrategy.class, 155));
+            add(GryoTypeReg.of(RepeatUnrollStrategy.class, 156));
+            add(GryoTypeReg.of(GraphFilterStrategy.class, 157));
+            add(GryoTypeReg.of(LambdaRestrictionStrategy.class, 158));
+            add(GryoTypeReg.of(ReadOnlyStrategy.class, 159));
+            add(GryoTypeReg.of(MatchStep.CountMatchAlgorithm.class, 160)); // 
### LAST_ID
+
+
             add(GryoTypeReg.of(TraverserSet.class, 58));
             add(GryoTypeReg.of(Tree.class, 61));
             add(GryoTypeReg.of(HashSet.class, 62));

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializers.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializers.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializers.java
index dbe85ca..95d706f 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializers.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializers.java
@@ -23,13 +23,11 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.InputShim;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.KryoShim;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.OutputShim;
@@ -41,7 +39,6 @@ import 
org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
 import 
org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -136,12 +133,8 @@ public final class GryoSerializers {
     public final static class BytecodeSerializer implements 
SerializerShim<Bytecode> {
         @Override
         public <O extends OutputShim> void write(final KryoShim<?, O> kryo, 
final O output, final Bytecode bytecode) {
-            final List<Bytecode.Instruction> sourceInstructions = 
IteratorUtils.list(
-                    
IteratorUtils.filter(bytecode.getSourceInstructions().iterator(),
-                            i -> !i.getOperator().equals("withStrategies") && 
!i.getOperator().equals("withComputer")));
-            writeInstructions(kryo, output, sourceInstructions);
-            final List<Bytecode.Instruction> stepInstructions = 
IteratorUtils.list(bytecode.getStepInstructions().iterator());
-            writeInstructions(kryo, output, stepInstructions);
+            writeInstructions(kryo, output, bytecode.getSourceInstructions());
+            writeInstructions(kryo, output, bytecode.getStepInstructions());
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
index 1b655ca..a34778f 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
@@ -102,7 +102,7 @@ public class BytecodeTest {
     public void shouldConvertStrategies() {
         final GraphTraversalSource g = EmptyGraph.instance().traversal();
         Bytecode bytecode = 
g.withStrategies(ReadOnlyStrategy.instance()).getBytecode();
-        assertEquals(ReadOnlyStrategy.instance(), 
bytecode.getSourceInstructions().iterator().next().getArguments()[0]);
+        assertEquals(ReadOnlyStrategy.instance(), 
bytecode.getSourceInstructions().get(0).getArguments()[0]);
         bytecode = 
g.withStrategies(SubgraphStrategy.build().edges(__.hasLabel("knows")).create()).getBytecode();
         
assertEquals(SubgraphStrategy.build().edges(__.hasLabel("knows")).create().getEdgeCriterion().asAdmin().getBytecode(),
                 ((SubgraphStrategy) 
bytecode.getSourceInstructions().iterator().next().getArguments()[0]).getEdgeCriterion().asAdmin().getBytecode());
@@ -112,7 +112,7 @@ public class BytecodeTest {
     public void shouldConvertComputer() {
         final GraphTraversalSource g = EmptyGraph.instance().traversal();
         Bytecode bytecode = 
g.withComputer(Computer.compute().workers(10)).getBytecode();
-        assertEquals(VertexProgramStrategy.build().create(), 
bytecode.getSourceInstructions().iterator().next().getArguments()[0]);
+        assertEquals(VertexProgramStrategy.build().create(), 
bytecode.getSourceInstructions().get(0).getArguments()[0]);
         
assertEquals(VertexProgramStrategy.build().workers(10).create().getConfiguration().getInt(VertexProgramStrategy.WORKERS),
                 ((VertexProgramStrategy) 
bytecode.getSourceInstructions().iterator().next().getArguments()[0]).getConfiguration().getInt(VertexProgramStrategy.WORKERS));
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git 
a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
 
b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
index d3dbecc..2c824a5 100644
--- 
a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
+++ 
b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
@@ -316,7 +316,7 @@ public class GraphSONMessageSerializerV2d0Test {
         assertEquals(1, friendProperties.size());
         final JsonNode friendsProperty = 
friendProperties.get(0).get(GraphSONTokens.VALUEPROP);
         assertNotNull(friendsProperty);
-        assertEquals(3, friendsProperty.size());
+        assertEquals(4, friendsProperty.size());
 
         final String object1 = 
friendsProperty.get(GraphSONTokens.VALUE).get(0).asText();
         assertEquals("x", object1);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPropertiesTest.groovy
----------------------------------------------------------------------
diff --git 
a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPropertiesTest.groovy
 
b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPropertiesTest.groovy
index eb161d7..c74e823 100644
--- 
a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPropertiesTest.groovy
+++ 
b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPropertiesTest.groovy
@@ -49,6 +49,12 @@ public abstract class GroovyPropertiesTest {
         public Traversal<Vertex, VertexProperty<String>> 
get_g_V_hasXageX_propertiesXnameX() {
             new ScriptTraversal<>(g, "gremlin-groovy", 
"g.V.has('age').properties('name')")
         }
+
+        @Override
+        public Traversal<VertexProperty<String>, String> 
get_g_injectXg_VX1X_propertiesXnameX_nextX_value(
+                final Object v1Id) {
+            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.inject(g.V(v1Id).properties('name').next()).value()", "v1Id", v1Id)
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
----------------------------------------------------------------------
diff --git 
a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
 
b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
index 9df18ad..a478f6f 100644
--- 
a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
+++ 
b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
@@ -36,22 +36,22 @@ public abstract class GroovySackTest {
 
         @Override
         public Traversal<Vertex, Double> 
get_g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum() {
-            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.withSack(0.0f).V.outE.sack(sum).by('weight').inV.sack.sum()")
+            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.withSack(0.0d).V.outE.sack(sum).by('weight').inV.sack.sum()")
         }
 
         @Override
         public Traversal<Vertex, Double> 
get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack() {
-            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.withSack(0.0f).V.repeat(__.outE.sack(sum).by('weight').inV).times(2).sack()")
+            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.withSack(0.0d).V.repeat(__.outE.sack(sum).by('weight').inV).times(2).sack()")
         }
 
         @Override
         public Traversal<Vertex, Double> 
get_g_withSackX0X_V_outE_sackXsum_weightX_inV_sack_sum() {
-            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.withSack(0.0f).V().outE.sack(sum, 'weight').inV.sack.sum()")
+            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.withSack(0.0d).V().outE.sack(sum, 'weight').inV.sack.sum()")
         }
 
         @Override
         public Traversal<Vertex, Double> 
get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
-            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.withSack(0.0f).V.repeat(__.outE.sack(sum, 'weight').inV).times(2).sack")
+            new ScriptTraversal<>(g, "gremlin-groovy", 
"g.withSack(0.0d).V.repeat(__.outE.sack(sum, 'weight').inV).times(2).sack")
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
----------------------------------------------------------------------
diff --git 
a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
 
b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
index d102037..a92d920 100644
--- 
a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
+++ 
b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
@@ -31,7 +31,9 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
+import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
@@ -156,9 +158,19 @@ public final class GroovyTranslator implements 
Translator.ScriptTranslator {
             return "TraversalOptionParent.Pick." + object.toString();
         else if (object instanceof Enum)
             return ((Enum) object).getDeclaringClass().getSimpleName() + "." + 
object.toString();
-        else if (object instanceof Element)
-            return convertToString(((Element) object).id()); // hack
-        else if (object instanceof Lambda) {
+        else if (object instanceof Element) {
+            final String id = convertToString(((Element) object).id());
+            String temp = this.traversalSource.equals("__") ? "g" : 
this.traversalSource;
+            if (object instanceof Vertex)
+                temp = temp + ".V(" + id + ").next()";
+            else if (object instanceof Edge)
+                temp = temp + ".E(" + id + ").next()";
+            else {
+                final VertexProperty vertexProperty = (VertexProperty) object;
+                temp = temp + ".V(" + 
convertToString(vertexProperty.element().id()) + ").properties(" + 
convertToString(vertexProperty.key()) + ").hasId(" + id + ").next()";
+            }
+            return temp;
+        } else if (object instanceof Lambda) {
             final String lambdaString = ((Lambda) 
object).getLambdaScript().trim();
             return lambdaString.startsWith("{") ? lambdaString : "{" + 
lambdaString + "}";
         } else if (object instanceof TraversalStrategyProxy) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
 
b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
index ed377bd..1470757 100644
--- 
a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
+++ 
b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
@@ -131,11 +131,16 @@ under the License.
     Traversal.__init__(self, graph, traversal_strategies, bytecode)
   def __getitem__(self, index):
     if isinstance(index, int):
-        return self.range(long(index), long(index + 1))
+        return self.range(long(index),long(index)+1)
     elif isinstance(index, slice):
-        return self.range(long(0) if index.start is None else 
long(index.start), long(sys.maxsize) if index.stop is None else 
long(index.stop))
+        low = long(0) if index.start is None else long(index.start)
+        high = long(sys.maxsize) if index.stop is None else long(index.stop)
+        if low == long(0):
+          return self.limit(high)
+        else:
+          return self.range(low,high)
     else:
-        raise TypeError("Index must be int or slice")
+        raise TypeError("Index must be an int or slice")
   def __getattr__(self, key):
     return self.values(key)
 """)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
 
b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
index 0739c92..71e610f 100644
--- 
a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
+++ 
b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
@@ -33,8 +33,10 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
+import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
@@ -113,9 +115,12 @@ public class PythonTranslator implements 
Translator.ScriptTranslator {
                 continue;
             else if (0 == arguments.length)
                 
traversalScript.append(".").append(SymbolHelper.toPython(methodName)).append("()");
-            else if (methodName.equals("range") && 2 == arguments.length)
-                
traversalScript.append("[").append(arguments[0]).append(":").append(arguments[1]).append("]");
-            else if (methodName.equals("limit") && 1 == arguments.length)
+            else if (methodName.equals("range") && 2 == arguments.length && 
((Number) arguments[0]).intValue() != 0) {
+                if (((Number) arguments[0]).longValue() + 1 == ((Number) 
arguments[1]).longValue())
+                    
traversalScript.append("[").append(arguments[0]).append("]");
+                else
+                    
traversalScript.append("[").append(arguments[0]).append(":").append(arguments[1]).append("]");
+            } else if (methodName.equals("limit") && 1 == arguments.length)
                 traversalScript.append("[0:").append(arguments[0]).append("]");
             else if (methodName.equals("values") && 1 == arguments.length && 
traversalScript.length() > 3 && !STEP_NAMES.contains(arguments[0].toString()))
                 traversalScript.append(".").append(arguments[0]);
@@ -136,7 +141,7 @@ public class PythonTranslator implements 
Translator.ScriptTranslator {
         return traversalScript.toString();
     }
 
-    private String convertToString(final Object object) {
+    protected String convertToString(final Object object) {
         if (object instanceof Bytecode.Binding)
             return ((Bytecode.Binding) object).variable();
         else if (object instanceof Bytecode)
@@ -190,9 +195,21 @@ public class PythonTranslator implements 
Translator.ScriptTranslator {
             return convertStatic(((Enum) 
object).getDeclaringClass().getSimpleName() + ".") + 
SymbolHelper.toPython(object.toString());
         else if (object instanceof P)
             return convertPToString((P) object, new 
StringBuilder()).toString();
-        else if (object instanceof Element)
-            return convertToString(((Element) object).id()); // hack
-        else if (object instanceof Lambda)
+        else if (object instanceof Element) {
+            final String id = convertToString(((Element) object).id());
+            if (object instanceof Vertex)
+                return "Vertex(" + id + "," + convertToString(((Vertex) 
object).label()) + ")";
+            else if (object instanceof Edge) {
+                final Edge edge = (Edge) object;
+                return "Edge(" + id + "," +
+                        convertToString(edge.outVertex()) + "," +
+                        convertToString(edge.label()) + "," +
+                        convertToString(edge.inVertex()) + ")";
+            } else {
+                final VertexProperty vertexProperty = (VertexProperty) object;
+                return "VertexProperty(" + id + "," + 
convertToString(vertexProperty.label()) + "," + 
convertToString(vertexProperty.value()) + "," + 
convertToString(vertexProperty.element()) + ")";
+            }
+        } else if (object instanceof Lambda)
             return convertLambdaToString((Lambda) object);
         else
             return null == object ? "None" : object.toString();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py 
b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index 6165ed3..9f9a31b 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -89,11 +89,16 @@ class GraphTraversal(Traversal):
     Traversal.__init__(self, graph, traversal_strategies, bytecode)
   def __getitem__(self, index):
     if isinstance(index, int):
-        return self.range(long(index), long(index + 1))
+        return self.range(long(index),long(index)+1)
     elif isinstance(index, slice):
-        return self.range(long(0) if index.start is None else 
long(index.start), long(sys.maxsize) if index.stop is None else 
long(index.stop))
+        low = long(0) if index.start is None else long(index.start)
+        high = long(sys.maxsize) if index.stop is None else long(index.stop)
+        if low == long(0):
+          return self.limit(high)
+        else:
+          return self.range(low,high)
     else:
-        raise TypeError("Index must be int or slice")
+        raise TypeError("Index must be an int or slice")
   def __getattr__(self, key):
     return self.values(key)
   def V(self, *args):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/jython/gremlin_python/process/strategies.py
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/main/jython/gremlin_python/process/strategies.py 
b/gremlin-python/src/main/jython/gremlin_python/process/strategies.py
index 4d4cbda..8eb7fbd 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/strategies.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/strategies.py
@@ -114,7 +114,7 @@ class FilterRankingStrategy(TraversalStrategy):
         TraversalStrategy.__init__(self)
 
 
-class IdentityRemoveStrategy(TraversalStrategy):
+class IdentityRemovalStrategy(TraversalStrategy):
     def __init__(self):
         TraversalStrategy.__init__(self)
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py 
b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
index d77cde1..c917213 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
@@ -66,25 +66,30 @@ class Edge(Element):
 
 
 class VertexProperty(Element):
-    def __init__(self, id, label, value):
+    def __init__(self, id, label, value, vertex):
         Element.__init__(self, id, label)
         self.value = value
         self.key = self.label
+        self.vertex = vertex
 
     def __repr__(self):
         return "vp[" + str(self.label) + "->" + str(self.value)[0:20] + "]"
 
 
 class Property(object):
-    def __init__(self, key, value):
+    def __init__(self, key, value, element):
         self.key = key
         self.value = value
+        self.element = element
 
     def __repr__(self):
         return "p[" + str(self.key) + "->" + str(self.value)[0:20] + "]"
 
     def __eq__(self, other):
-        return isinstance(other, self.__class__) and self.key == other.key and 
self.value == other.value
+        return isinstance(other, self.__class__) and \
+               self.key == other.key and \
+               self.value == other.value and \
+               self.element == other.element
 
     def __hash__(self):
         return hash(self.key) + hash(self.value)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py 
b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
index d516058..85dc726 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
@@ -25,7 +25,6 @@ from gremlin_python.statics import FloatType, FunctionType, 
IntType, LongType, T
 from gremlin_python.process.traversal import Binding, Bytecode, P, Traversal, 
Traverser, TraversalStrategy
 from gremlin_python.structure.graph import Edge, Property, Vertex, 
VertexProperty, Path
 
-
 _serializers = {}
 _deserializers = {}
 
@@ -56,9 +55,9 @@ class GraphSONUtil(object):
     def formatType(cls, prefix, type_name):
         return "%s:%s" % (prefix, type_name)
 
+
 # Read/Write classes split to follow precedence of the Java API
 class GraphSONWriter(object):
-
     def __init__(self, serializer_map=None):
         """
         :param serializer_map: map from Python type to serializer instance 
implementing `dictify`
@@ -88,7 +87,6 @@ class GraphSONWriter(object):
 
 
 class GraphSONReader(object):
-
     def __init__(self, deserializer_map=None):
         """
         :param deserializer_map: map from GraphSON type tag to deserializer 
instance implementing `objectify`
@@ -139,7 +137,6 @@ class _GraphSONTypeIO(object):
 
 
 class _BytecodeSerializer(_GraphSONTypeIO):
-
     @classmethod
     def _dictify_instructions(cls, instructions, writer):
         out = []
@@ -169,6 +166,51 @@ class BytecodeSerializer(_BytecodeSerializer):
     python_type = Bytecode
 
 
+class VertexSerializer(_GraphSONTypeIO):
+    python_type = Vertex
+    graphson_type = "g:Vertex"
+
+    @classmethod
+    def dictify(cls, vertex, writer):
+        return GraphSONUtil.typedValue("Vertex", {"id": 
writer.toDict(vertex.id),
+                                                  "label": 
writer.toDict(vertex.label)})
+
+
+class EdgeSerializer(_GraphSONTypeIO):
+    python_type = Edge
+    graphson_type = "g:Edge"
+
+    @classmethod
+    def dictify(cls, edge, writer):
+        return GraphSONUtil.typedValue("Edge", {"id": writer.toDict(edge.id),
+                                                "outV": 
writer.toDict(edge.outV),
+                                                "label": 
writer.toDict(edge.label),
+                                                "inV": 
writer.toDict(edge.inV)})
+
+
+class VertexPropertySerializer(_GraphSONTypeIO):
+    python_type = VertexProperty
+    graphson_type = "g:VertexProperty"
+
+    @classmethod
+    def dictify(cls, vertex_property, writer):
+        return GraphSONUtil.typedValue("VertexProperty", {"id": 
writer.toDict(vertex_property.id),
+                                                          "label": 
writer.toDict(vertex_property.label),
+                                                          "value": 
writer.toDict(vertex_property.value),
+                                                          "vertex": 
writer.toDict(vertex_property.vertex)})
+
+
+class PropertySerializer(_GraphSONTypeIO):
+    python_type = Property
+    graphson_type = "g:Property"
+
+    @classmethod
+    def dictify(cls, property, writer):
+        return GraphSONUtil.typedValue("Property", {"key": 
writer.toDict(property.key),
+                                                    "value": 
writer.toDict(property.value),
+                                                    "element": 
writer.toDict(property.element)})
+
+
 class TraversalStrategySerializer(_GraphSONTypeIO):
     python_type = TraversalStrategy
 
@@ -208,7 +250,7 @@ class PSerializer(_GraphSONTypeIO):
     def dictify(cls, p, writer):
         out = {"predicate": p.operator,
                "value": [writer.toDict(p.value), writer.toDict(p.other)] if 
p.other is not None else
-                        writer.toDict(p.value)}
+               writer.toDict(p.value)}
         return GraphSONUtil.typedValue("P", out)
 
 
@@ -251,7 +293,6 @@ class TypeSerializer(_GraphSONTypeIO):
 
 
 class _NumberIO(_GraphSONTypeIO):
-
     @classmethod
     def dictify(cls, n, writer):
         if isinstance(n, bool):  # because isinstance(False, int) and 
isinstance(True, int)
@@ -291,7 +332,7 @@ class VertexDeserializer(_GraphSONTypeIO):
 
     @classmethod
     def objectify(cls, d, reader):
-        return Vertex(reader.toObject(d["id"]), d.get("label", ""))
+        return Vertex(reader.toObject(d["id"]), d.get("label", "vertex"))
 
 
 class EdgeDeserializer(_GraphSONTypeIO):
@@ -301,7 +342,7 @@ class EdgeDeserializer(_GraphSONTypeIO):
     def objectify(cls, d, reader):
         return Edge(reader.toObject(d["id"]),
                     Vertex(reader.toObject(d["outV"]), ""),
-                    d.get("label", "vertex"),
+                    d.get("label", "edge"),
                     Vertex(reader.toObject(d["inV"]), ""))
 
 
@@ -310,8 +351,10 @@ class VertexPropertyDeserializer(_GraphSONTypeIO):
 
     @classmethod
     def objectify(cls, d, reader):
-        return VertexProperty(reader.toObject(d["id"]), d["label"],
-                              reader.toObject(d["value"]))
+        return VertexProperty(reader.toObject(d["id"]),
+                              d["label"],
+                              reader.toObject(d["value"]),
+                              reader.toObject(d["vertex"]))
 
 
 class PropertyDeserializer(_GraphSONTypeIO):
@@ -319,7 +362,7 @@ class PropertyDeserializer(_GraphSONTypeIO):
 
     @classmethod
     def objectify(cls, d, reader):
-        return Property(d["key"], reader.toObject(d["value"]))
+        return Property(d["key"], reader.toObject(d["value"]), 
reader.toObject(d["element"]))
 
 
 class PathDeserializer(_GraphSONTypeIO):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py 
b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 9f3e466..5039aaf 100644
--- 
a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ 
b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -56,7 +56,7 @@ class TestDriverRemoteConnection(TestCase):
         assert "ripple" in results
         #
         assert 10 == g.V().repeat(both()).times(5)[0:10].count().next()
-        assert 1 == g.V().repeat(both()).times(5)[0].count().next()
+        assert 1 == g.V().repeat(both()).times(5)[0:1].count().next()
         assert 0 == g.V().repeat(both()).times(5)[0:0].count().next()
         assert 4 == g.V()[2:].count().next()
         assert 2 == g.V()[:2].count().next()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py 
b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index f0e8130..5fc797e 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -27,7 +27,7 @@ from unittest import TestCase
 import six
 
 from gremlin_python.statics import *
-from gremlin_python.structure.graph import Vertex
+from gremlin_python.structure.graph import Vertex, Edge, Property, 
VertexProperty
 from gremlin_python.structure.graph import Path
 from gremlin_python.structure.io.graphson import GraphSONWriter, 
GraphSONReader, GraphSONUtil
 import gremlin_python.structure.io.graphson
@@ -125,13 +125,12 @@ class TestGraphSONReader(TestCase):
 
 
 class TestGraphSONWriter(TestCase):
-
     graphson_writer = GraphSONWriter()
 
     def test_number_output(self):
-        assert {"@type":"g:Int64","@value":2} == 
json.loads(self.graphson_writer.writeObject(long(2)))
-        assert {"@type":"g:Int32","@value":1} == 
json.loads(self.graphson_writer.writeObject(1))
-        assert {"@type":"g:Double","@value":3.2} == 
json.loads(self.graphson_writer.writeObject(3.2))
+        assert {"@type": "g:Int64", "@value": 2} == 
json.loads(self.graphson_writer.writeObject(long(2)))
+        assert {"@type": "g:Int32", "@value": 1} == 
json.loads(self.graphson_writer.writeObject(1))
+        assert {"@type": "g:Double", "@value": 3.2} == 
json.loads(self.graphson_writer.writeObject(3.2))
         assert """true""" == self.graphson_writer.writeObject(True)
 
     def test_numbers(self):
@@ -146,13 +145,38 @@ class TestGraphSONWriter(TestCase):
 
     def test_strategies(self):
         # we have a proxy model for now given that we don't want to have to 
have g:XXX all registered on the Gremlin traversal machine (yet)
-        assert {"@type": "g:SubgraphStrategy", "@value": {}} == 
json.loads(self.graphson_writer.writeObject(SubgraphStrategy))
+        assert {"@type": "g:SubgraphStrategy", "@value": {}} == json.loads(
+            self.graphson_writer.writeObject(SubgraphStrategy))
         assert {"@type": "g:SubgraphStrategy", "@value": {
             "vertices": {"@type": "g:Bytecode", "@value": {"step": [["has", 
"name", "marko"]]}}}} == json.loads(
             
self.graphson_writer.writeObject(SubgraphStrategy(vertices=__.has("name", 
"marko"))))
 
-    def test_custom_mapping(self):
+    def test_graph(self):
+        assert {"@type": "g:Vertex",
+                "@value": {"id": {"@type": "g:Int64", "@value": 12}, "label": 
"person"}} == json.loads(
+            self.graphson_writer.writeObject(Vertex(12l, "person")))
+        assert {"@type": "g:Edge", "@value": {"id": {"@type": "g:Int32", 
"@value": 7},
+                                              "outV": {"@type": "g:Vertex",
+                                                       "@value": {"id": {
+                                                           "@type": "g:Int32",
+                                                           "@value": 0}, 
"label": "vertex"}},
+                                              "label": "knows",
+                                              "inV": {"@type": "g:Vertex", 
"@value": {
+                                                  "id": {"@type": "g:Int32", 
"@value": 1},
+                                                  "label": "vertex"}}}} == 
json.loads(
+            self.graphson_writer.writeObject(Edge(7, Vertex(0), "knows", 
Vertex(1))))
+        assert {"@type": "g:VertexProperty", "@value": {"id": "blah", "label": 
"keyA", "value": True,
+                                                        "vertex": {"@type": 
"g:Vertex",
+                                                                   "@value": 
{"id": "stephen",
+                                                                              
"label": "vertex"}}}} == json.loads(
+            self.graphson_writer.writeObject(VertexProperty("blah", "keyA", 
True, Vertex("stephen"))))
+        assert {"@type": "g:Property", "@value": {"key": "name", "value": 
"marko", "element": {"@type": "g:Vertex",
+                                                                               
                "@value": {
+                                                                               
                    "id": "bob",
+                                                                               
                    "label": "guy"}}}} == json.loads(
+            self.graphson_writer.writeObject(Property("name", "marko", 
Vertex("bob", "guy"))))
 
+    def test_custom_mapping(self):
         # extended mapping
         class X(object):
             pass

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py 
b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index c619ad2..e055b93 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -48,23 +48,25 @@ class TestGraph(TestCase):
         assert "phrase" == edge.inV.label
         assert edge.inV != edge.outV
         #
-        vertex_property = VertexProperty(long(24), "name", "marko")
+        vertex_property = VertexProperty(long(24), "name", "marko", Vertex(1))
         assert "vp[name->marko]" == str(vertex_property)
         assert "name" == vertex_property.label
         assert "name" == vertex_property.key
         assert "marko" == vertex_property.value
         assert long(24) == vertex_property.id
+        assert Vertex(1) == vertex_property.vertex
         assert isinstance(vertex_property.id, long)
-        assert vertex_property == VertexProperty(long(24), "name", "marko")
+        assert vertex_property == VertexProperty(long(24), "name", "marko", 
Vertex(1))
         #
-        property = Property("age", 29)
+        property = Property("age", 29, Vertex(1))
         assert "p[age->29]" == str(property)
         assert "age" == property.key
         assert 29 == property.value
+        assert Vertex(1) == property.element
         assert isinstance(property.value, int)
-        assert property == Property("age", 29)
+        assert property == Property("age", 29, Vertex(1))
         if not six.PY3:
-            assert property != Property("age", long(29))
+            assert property != Property("age", long(29), Vertex(1))
         #
         for i in [vertex, edge, vertex_property, property]:
             for j in [vertex, edge, vertex_property, property]:

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
index fe04156..6d9b8d5 100644
--- 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
+++ 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
@@ -66,10 +66,7 @@ public class PythonProvider extends AbstractGraphProvider {
     private static Set<String> SKIP_TESTS = new HashSet<>(Arrays.asList(
             "testProfileStrategyCallback",
             "testProfileStrategyCallbackSideEffect",
-            "g_withSideEffectXa_setX_V_both_name_storeXaX_capXaX",
             "g_VX1X_out_injectXv2X_name",
-            "shouldNeverPropagateANoBulkTraverser",
-            "shouldNeverPropagateANullValuedTraverser",
             "shouldHidePartitionKeyForValues",
             
"g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
             //

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
----------------------------------------------------------------------
diff --git 
a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
 
b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
index e170cb1..7f4d58e 100644
--- 
a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
+++ 
b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/RemoteGraphGroovyTranslatorProvider.java
@@ -19,19 +19,44 @@
 
 package org.apache.tinkerpop.gremlin.groovy.jsr223;
 
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.driver.remote.RemoteGraphProvider;
 import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public class RemoteGraphGroovyTranslatorProvider extends RemoteGraphProvider {
 
+    private static boolean SKIP = false;
+
+    private static Set<String> SKIP_TESTS = new HashSet<>(Arrays.asList(
+            "g_injectXg_VX1X_propertiesXnameX_nextX_value"));
+
+
+    @Override
+    public Map<String, Object> getBaseConfiguration(final String graphName, 
final Class<?> test, final String testMethodName,
+                                                    final 
LoadGraphWith.GraphData loadGraphWith) {
+
+        final Map<String, Object> config = 
super.getBaseConfiguration(graphName, test, testMethodName, loadGraphWith);
+        SKIP = SKIP_TESTS.contains(testMethodName) || 
SKIP_TESTS.contains(test.getCanonicalName());
+        return config;
+    }
+
     @Override
     public GraphTraversalSource traversal(final Graph graph) {
-        final GraphTraversalSource g = graph.traversal();
-        return g.withStrategies(new TranslationStrategy(g, 
GroovyTranslator.of("g")));
+        if (SKIP)
+            return graph.traversal();
+        else {
+            final GraphTraversalSource g = graph.traversal();
+            return g.withStrategies(new TranslationStrategy(g, 
GroovyTranslator.of("g")));
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
index 68f8217..cefbf39 100644
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
@@ -25,6 +25,7 @@ import 
org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
 import 
org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -43,9 +44,14 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
+import static 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.inject;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
 import static 
org.apache.tinkerpop.gremlin.structure.Graph.Features.GraphFeatures.FEATURE_TRANSACTIONS;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -62,17 +68,25 @@ public class CoreTraversalTest extends 
AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith
     public void shouldNeverPropagateANoBulkTraverser() {
-        assertFalse(g.V().dedup().sideEffect(t -> 
t.asAdmin().setBulk(0)).hasNext());
-        assertEquals(0, g.V().dedup().sideEffect(t -> 
t.asAdmin().setBulk(0)).toList().size());
-        g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).sideEffect(t -> 
fail("this should not have happened")).iterate();
+        try {
+            assertFalse(g.V().dedup().sideEffect(t -> 
t.asAdmin().setBulk(0)).hasNext());
+            assertEquals(0, g.V().dedup().sideEffect(t -> 
t.asAdmin().setBulk(0)).toList().size());
+            g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).sideEffect(t 
-> fail("this should not have happened")).iterate();
+        } catch (VerificationException e) {
+            // its okay if lambdas can't be serialized by the test suite
+        }
     }
 
     @Test
     @LoadGraphWith
     public void shouldNeverPropagateANullValuedTraverser() {
-        assertFalse(g.V().map(t -> null).hasNext());
-        assertEquals(0, g.V().map(t -> null).toList().size());
-        g.V().map(t -> null).sideEffect(t -> fail("this should not have 
happened")).iterate();
+        try {
+            assertFalse(g.V().map(t -> null).hasNext());
+            assertEquals(0, g.V().map(t -> null).toList().size());
+            g.V().map(t -> null).sideEffect(t -> fail("this should not have 
happened")).iterate();
+        } catch (VerificationException e) {
+            // its okay if lambdas can't be serialized by the test suite
+        }
     }
 
     @Test
@@ -298,7 +312,7 @@ public class CoreTraversalTest extends 
AbstractGremlinProcessTest {
 
         GraphTraversal.Admin<Object, Object> nestedTraversalAdmin = 
nestedTraversal.asAdmin();
         nestedTraversalAdmin.reset();
-        
nestedTraversalAdmin.addStart(nestedTraversalAdmin.getTraverserGenerator().generate(g.V().has("name",
 "marko").next(), (Step)traversal.asAdmin().getStartStep(), 1l));
+        
nestedTraversalAdmin.addStart(nestedTraversalAdmin.getTraverserGenerator().generate(g.V().has("name",
 "marko").next(), (Step) traversal.asAdmin().getStartStep(), 1l));
 
         try {
             nestedTraversal.next();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
index b5b4310..2b665dc 100644
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
@@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
@@ -51,6 +52,8 @@ public abstract class PropertiesTest extends 
AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, VertexProperty<String>> 
get_g_V_hasXageX_propertiesXnameX();
 
+    public abstract Traversal<VertexProperty<String>, String> 
get_g_injectXg_VX1X_propertiesXnameX_nextX_value(final Object v1Id);
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_hasXageX_propertiesXname_ageX_value() {
@@ -118,6 +121,14 @@ public abstract class PropertiesTest extends 
AbstractGremlinProcessTest {
         assertEquals(4, ids.size());
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_injectXg_VX1X_propertiesXnameX_nextX_value() {
+        final Traversal<VertexProperty<String>, String> traversal = 
get_g_injectXg_VX1X_propertiesXnameX_nextX_value(convertToVertexId(graph, 
"marko"));
+        printTraversalForm(traversal);
+        checkResults(Collections.singletonList("marko"), traversal);
+    }
+
     public static class Traversals extends PropertiesTest {
         @Override
         public Traversal<Vertex, Object> 
get_g_V_hasXageX_propertiesXname_ageX_value() {
@@ -138,6 +149,11 @@ public abstract class PropertiesTest extends 
AbstractGremlinProcessTest {
         public Traversal<Vertex, VertexProperty<String>> 
get_g_V_hasXageX_propertiesXnameX() {
             return (Traversal<Vertex, VertexProperty<String>>) 
g.V().has("age").<String>properties("name");
         }
+
+        @Override
+        public Traversal<VertexProperty<String>, String> 
get_g_injectXg_VX1X_propertiesXnameX_nextX_value(final Object v1Id) {
+            return g.<VertexProperty<String>>inject((VertexProperty) 
g.V(v1Id).properties("name").next()).value();
+        }
     }
 }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
index 678cdb3..07cc143 100644
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
@@ -177,22 +177,22 @@ public abstract class SackTest extends 
AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Double> 
get_g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum() {
-            return 
g.withSack(0.0f).V().outE().sack(sum).by("weight").inV().sack().sum();
+            return 
g.withSack(0.0d).V().outE().sack(sum).by("weight").inV().sack().sum();
         }
 
         @Override
         public Traversal<Vertex, Double> 
get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack() {
-            return 
g.withSack(0.0f).V().repeat(outE().sack(sum).by("weight").inV()).times(2).sack();
+            return 
g.withSack(0.0d).V().repeat(outE().sack(sum).by("weight").inV()).times(2).sack();
         }
 
         @Override
         public Traversal<Vertex, Double> 
get_g_withSackX0X_V_outE_sackXsum_weightX_inV_sack_sum() {
-            return g.withSack(0.0f).V().outE().sack(sum, 
"weight").inV().sack().sum();
+            return g.withSack(0.0d).V().outE().sack(sum, 
"weight").inV().sack().sum();
         }
 
         @Override
         public Traversal<Vertex, Double> 
get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
-            return g.withSack(0.0f).V().repeat(outE().sack(sum, 
"weight").inV()).times(2).sack();
+            return g.withSack(0.0d).V().repeat(outE().sack(sum, 
"weight").inV()).times(2).sack();
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
index c3aa9e0..cf93acf 100644
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
@@ -33,6 +33,7 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
+import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 
 import javax.script.Bindings;
@@ -41,6 +42,8 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
+import static org.junit.Assert.assertEquals;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -48,6 +51,7 @@ public final class TranslationStrategy extends 
AbstractTraversalStrategy<Travers
 
     private final TraversalSource traversalSource;
     private final Translator translator;
+    private final boolean IS_TESTING = 
Boolean.valueOf(System.getProperty("is.testing", "false"));
 
     private static final Set<Class<? extends DecorationStrategy>> POSTS = new 
HashSet<>(Arrays.asList(
             ConnectiveStrategy.class,
@@ -73,7 +77,7 @@ public final class TranslationStrategy extends 
AbstractTraversalStrategy<Travers
             return;
 
         // verifications to ensure unsupported steps do not exist in the 
traversal
-        if (Boolean.valueOf(System.getProperty("is.testing", "false"))) {
+        if (IS_TESTING) {
             if (traversal.getBytecode().toString().contains("$") || 
traversal.getBytecode().toString().contains("HashSetSupplier"))
                 throw new VerificationException("Test suite does not support 
lambdas", traversal);
             if 
(TraversalHelper.hasStepOfAssignableClassRecursively(ProgramVertexProgramStep.class,
 traversal))
@@ -81,7 +85,7 @@ public final class TranslationStrategy extends 
AbstractTraversalStrategy<Travers
         }
 
         final Traversal.Admin<?, ?> translatedTraversal;
-        final Bytecode bytecode = 
Boolean.valueOf(System.getProperty("is.testing", "false")) ?
+        final Bytecode bytecode = IS_TESTING ?
                 insertBindingsForTesting(traversal.getBytecode()) :
                 traversal.getBytecode();
         ////////////////
@@ -103,6 +107,14 @@ public final class TranslationStrategy extends 
AbstractTraversalStrategy<Travers
             throw new IllegalArgumentException("TranslationStrategy does not 
know how to process the provided translator type: " + 
this.translator.getClass().getSimpleName());
         }
         ////////////////
+        if (IS_TESTING && // this tests to ensure that the bytecode going in 
is the same as the bytecode coming out
+                
!BytecodeHelper.getLambdaLanguage(traversal.getBytecode()).isPresent())
+            
assertEquals(BytecodeHelper.filterInstructions(traversal.getBytecode(),
+                    instruction ->
+                            
!(instruction.getOperator().equals(TraversalSource.Symbols.withStrategies) &&
+                                    instruction.getArguments()[0] instanceof 
TranslationStrategy)),
+                    translatedTraversal.getBytecode());
+        ////////////////
         assert !translatedTraversal.isLocked();
         assert !traversal.isLocked();
         traversal.setSideEffects(translatedTraversal.getSideEffects());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
----------------------------------------------------------------------
diff --git 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
index dd118d7..f7e8cc4 100644
--- 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
+++ 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/groovy/jsr223/TinkerGraphGroovyTranslatorProvider.java
@@ -47,10 +47,6 @@ public class TinkerGraphGroovyTranslatorProvider extends 
TinkerGraphProvider {
     private static Set<String> SKIP_TESTS = new HashSet<>(Arrays.asList(
             "testProfileStrategyCallback",
             "testProfileStrategyCallbackSideEffect",
-            "g_withSideEffectXa_setX_V_both_name_storeXaX_capXaX",
-            "g_VX1X_out_injectXv2X_name",
-            "shouldNeverPropagateANoBulkTraverser",
-            "shouldNeverPropagateANullValuedTraverser",
             GraphComputerTest.class.getCanonicalName(),
             ProgramTest.Traversals.class.getCanonicalName(),
             TraversalInterruptionTest.class.getCanonicalName(),

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
----------------------------------------------------------------------
diff --git 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
index f40a8c7..011ad5d 100644
--- 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
+++ 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
@@ -47,8 +47,6 @@ public class TinkerGraphJavaTranslatorProvider extends 
TinkerGraphProvider {
             "testProfileStrategyCallbackSideEffect",
             TraversalInterruptionTest.class.getCanonicalName(),
             TraversalInterruptionComputerTest.class.getCanonicalName(),
-            "shouldNeverPropagateANoBulkTraverser",
-            "shouldNeverPropagateANullValuedTraverser",
             ElementIdStrategyProcessTest.class.getCanonicalName(),
             EventStrategyProcessTest.class.getCanonicalName(),
             ProgramTest.Traversals.class.getCanonicalName()));

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6aa6fc5a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
----------------------------------------------------------------------
diff --git 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
index 88a2327..54a0f5e 100644
--- 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
+++ 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
@@ -49,16 +49,10 @@ public class TinkerGraphGraphSONTranslatorProvider extends 
TinkerGraphProvider {
             "testProfileStrategyCallback",
             "testProfileStrategyCallbackSideEffect",
             //
-            "g_VX1X_out_injectXv2X_name",
-            "g_VXlistXv1_v2_v3XX_name",
-            "g_V_hasLabelXpersonX_asXpX_VXsoftwareX_addInEXuses_pX",
-            "g_VXv1X_hasXage_gt_30X",
-            //
             ProgramTest.Traversals.class.getCanonicalName(),
             TraversalInterruptionTest.class.getCanonicalName(),
             TraversalInterruptionComputerTest.class.getCanonicalName(),
             EventStrategyProcessTest.class.getCanonicalName(),
-            CoreTraversalTest.class.getCanonicalName(),
             ElementIdStrategyProcessTest.class.getCanonicalName()));
 
 

Reply via email to