Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1427 3c241bca0 -> b30b56b44


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b30b56b4/gremlin-python/src/main/jython/tests/structure/io/test_graphsonV3d0.py
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/main/jython/tests/structure/io/test_graphsonV3d0.py 
b/gremlin-python/src/main/jython/tests/structure/io/test_graphsonV3d0.py
new file mode 100644
index 0000000..65425e4
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphsonV3d0.py
@@ -0,0 +1,287 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
+
+import json
+from mock import Mock
+
+import six
+
+from gremlin_python.statics import *
+from gremlin_python.structure.graph import Vertex, Edge, Property, 
VertexProperty
+from gremlin_python.structure.graph import Path
+from gremlin_python.structure.io.graphsonV3d0 import GraphSONWriter, 
GraphSONReader, GraphSONUtil
+import gremlin_python.structure.io.graphsonV3d0
+from gremlin_python.process.traversal import P
+from gremlin_python.process.strategies import SubgraphStrategy
+from gremlin_python.process.graph_traversal import __
+
+class TestGraphSONReader(object):
+    graphson_reader = GraphSONReader()
+
+    def test_number_input(self):
+        x = self.graphson_reader.readObject(json.dumps({
+            "@type": "g:Int32",
+            "@value": 31
+        }))
+        assert isinstance(x, int)
+        assert 31 == x
+        ##
+        x = self.graphson_reader.readObject(json.dumps({
+            "@type": "g:Int64",
+            "@value": 31
+        }))
+        assert isinstance(x, long)
+        assert long(31) == x
+        ##
+        x = self.graphson_reader.readObject(json.dumps({
+            "@type": "g:Float",
+            "@value": 31.3
+        }))
+        assert isinstance(x, float)
+        assert 31.3 == x
+        ##
+        x = self.graphson_reader.readObject(json.dumps({
+            "@type": "g:Double",
+            "@value": 31.2
+        }))
+        assert isinstance(x, float)
+        assert 31.2 == x
+
+    def test_graph(self):
+        vertex = self.graphson_reader.readObject("""
+        {"@type":"g:Vertex", 
"@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Double","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29}}]}}}""")
+        assert isinstance(vertex, Vertex)
+        assert "person" == vertex.label
+        assert 1 == vertex.id
+        assert isinstance(vertex.id, int)
+        assert vertex == Vertex(1)
+        ##
+        vertex = self.graphson_reader.readObject("""
+        {"@type":"g:Vertex", 
"@value":{"id":{"@type":"g:Float","@value":45.23}}}""")
+        assert isinstance(vertex, Vertex)
+        assert 45.23 == vertex.id
+        assert isinstance(vertex.id, FloatType)
+        assert "vertex" == vertex.label
+        assert vertex == Vertex(45.23)
+        ##
+        vertex_property = self.graphson_reader.readObject("""
+        {"@type":"g:VertexProperty", 
"@value":{"id":"anId","label":"aKey","value":true,"vertex":{"@type":"g:Int32","@value":9}}}""")
+        assert isinstance(vertex_property, VertexProperty)
+        assert "anId" == vertex_property.id
+        assert "aKey" == vertex_property.label
+        assert vertex_property.value
+        assert vertex_property.vertex == Vertex(9)
+        ##
+        vertex_property = self.graphson_reader.readObject("""
+        {"@type":"g:VertexProperty", 
"@value":{"id":{"@type":"g:Int32","@value":1},"label":"name","value":"marko"}}""")
+        assert isinstance(vertex_property, VertexProperty)
+        assert 1 == vertex_property.id
+        assert "name" == vertex_property.label
+        assert "marko" == vertex_property.value
+        assert vertex_property.vertex is None
+        ##
+        edge = self.graphson_reader.readObject("""
+        {"@type":"g:Edge", 
"@value":{"id":{"@type":"g:Int64","@value":17},"label":"knows","inV":"x","outV":"y","inVLabel":"xLab","properties":{"aKey":"aValue","bKey":true}}}""")
+        # print edge
+        assert isinstance(edge, Edge)
+        assert 17 == edge.id
+        assert "knows" == edge.label
+        assert edge.inV == Vertex("x", "xLabel")
+        assert edge.outV == Vertex("y", "vertex")
+        ##
+        property = self.graphson_reader.readObject("""
+        {"@type":"g:Property", 
"@value":{"key":"aKey","value":{"@type":"g:Int64","@value":17},"element":{"@type":"g:Edge","@value":{"id":{"@type":"g:Int64","@value":122},"label":"knows","inV":"x","outV":"y","inVLabel":"xLab"}}}}""")
+        # print property
+        assert isinstance(property, Property)
+        assert "aKey" == property.key
+        assert 17 == property.value
+        assert Edge(122, Vertex("x"), "knows", Vertex("y")) == property.element
+
+    def test_path(self):
+        path = self.graphson_reader.readObject(
+            
"""{"@type":"g:Path","@value":{"labels":[["a"],["b","c"],[]],"objects":[{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":0},"value":"marko","label":"name"}}],"age":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29},"label":"age"}}]}}},{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":3},"label":"software","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":4},"value":"lop","label":"name"}}],"lang":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":5},"value":"java","label":"lang"}}]}}},"lop"]}}"""
+        )
+        assert isinstance(path, Path)
+        if six.PY3:
+            assert "[v[1], v[3], 'lop']" == str(path)
+        else:
+            assert "[v[1], v[3], u'lop']" == str(path)
+        assert Vertex(1) == path[0]
+        assert Vertex(1) == path["a"]
+        assert "lop" == path[2]
+        assert 3 == len(path)
+
+    def test_custom_mapping(self):
+
+        # extended mapping
+        class X(object):
+            pass
+
+        type_string = "test:Xtype"
+        override_string = "g:Int64"
+        serdes = Mock()
+
+        reader = GraphSONReader(deserializer_map={type_string: serdes})
+        assert type_string in reader.deserializers
+
+        # base dicts are not modified
+        assert type_string not in 
gremlin_python.structure.io.graphsonV3d0._deserializers
+
+        x = X()
+        o = reader.toObject({GraphSONUtil.TYPE_KEY: type_string, 
GraphSONUtil.VALUE_KEY: x})
+        serdes.objectify.assert_called_once_with(x, reader)
+        assert o is serdes.objectify()
+
+        # overridden mapping
+        type_string = "g:Int64"
+        serdes = Mock()
+        reader = GraphSONReader(deserializer_map={type_string: serdes, 
override_string: serdes})
+        assert 
gremlin_python.structure.io.graphsonV3d0._deserializers[type_string] is not 
reader.deserializers[
+            type_string]
+
+        value = 3
+        o = reader.toObject({GraphSONUtil.TYPE_KEY: type_string, 
GraphSONUtil.VALUE_KEY: value})
+        serdes.objectify.assert_called_once_with(value, reader)
+        assert o is serdes.objectify()
+
+
+class TestGraphSONWriter(object):
+    graphson_writer = GraphSONWriter()
+
+    def test_collections(self):
+        assert {"@type": "g:List", "@value": [{"@type": "g:Int32", "@value": 
1},
+                                              {"@type": "g:Int32", "@value": 
2},
+                                              {"@type": "g:Int32", "@value": 
3}]} == json.loads(
+            self.graphson_writer.writeObject([1, 2, 3]))
+        assert {"@type": "g:Set", "@value": [{"@type": "g:Int32", "@value": 1},
+                                             {"@type": "g:Int32", "@value": 2},
+                                             {"@type": "g:Int32", "@value": 
3}]} == json.loads(
+            self.graphson_writer.writeObject(set([1, 2, 3, 3])))
+        assert {"@type": "g:Map",
+                "@value": ['a', {"@type": "g:Int32", "@value": 1},
+                           'b', {"@type": "g:Int32", "@value": 2}]} == 
json.loads(
+            self.graphson_writer.writeObject({'a': 1, 'b': 2}))
+
+    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 """true""" == self.graphson_writer.writeObject(True)
+
+    def test_numbers(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 """true""" == self.graphson_writer.writeObject(True)
+
+    def test_P(self):
+        result = {'@type': 'g:P',
+                  '@value': {
+                      'predicate': 'and',
+                      'value': [{
+                          '@type': 'g:P',
+                          '@value': {
+                              'predicate': 'or',
+                              'value': [{
+                                  '@type': 'g:P',
+                                  '@value': {'predicate': 'lt', 'value': 'b'}
+                              },
+                                  {'@type': 'g:P', '@value': {'predicate': 
'gt', 'value': 'c'}}
+                              ]
+                          }
+                      },
+                          {'@type': 'g:P', '@value': {'predicate': 'neq', 
'value': 'd'}}]}}
+
+        assert result == json.loads(
+            
self.graphson_writer.writeObject(P.lt("b").or_(P.gt("c")).and_(P.neq("d"))))
+
+        result = {'@type': 'g:P', '@value': {'predicate':'within','value': 
{'@type': 'g:List', '@value':[{"@type": "g:Int32", "@value": 1},{"@type": 
"g:Int32", "@value": 2}]}}}
+        assert result == 
json.loads(self.graphson_writer.writeObject(P.within([1,2])))
+
+    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": {
+            "vertices": {"@type": "g:Bytecode", "@value": {"step": [["has", 
"name", "marko"]]}}}} == json.loads(
+            
self.graphson_writer.writeObject(SubgraphStrategy(vertices=__.has("name", 
"marko"))))
+
+    def test_graph(self):
+        # TODO: this assert is not compatible with python 3 and now that we 
test with both 2 and 3 it fails
+        assert {"@type": "g:Vertex",
+                "@value": {"id": {"@type": "g:Int64", "@value": 12}, "label": 
"person"}} == json.loads(
+            self.graphson_writer.writeObject(Vertex(long(12), "person")))
+
+        assert {"@type": "g:Edge", "@value": {"id": {"@type": "g:Int32", 
"@value": 7},
+                                              "outV": {"@type": "g:Int32", 
"@value": 0},
+                                              "outVLabel": "person",
+                                              "label": "knows",
+                                              "inV": {"@type": "g:Int32", 
"@value": 1},
+                                              "inVLabel": "dog"}} == 
json.loads(
+            self.graphson_writer.writeObject(Edge(7, Vertex(0, "person"), 
"knows", Vertex(1, "dog"))))
+        assert {"@type": "g:VertexProperty", "@value": {"id": "blah", "label": 
"keyA", "value": True,
+                                                        "vertex": "stephen"}} 
== json.loads(
+            self.graphson_writer.writeObject(VertexProperty("blah", "keyA", 
True, Vertex("stephen"))))
+
+        assert {"@type": "g:Property",
+                "@value": {"key": "name", "value": "marko", "element": 
{"@type": "g:VertexProperty",
+                                                                        
"@value": {
+                                                                            
"vertex": "vertexId",
+                                                                            
"id": {"@type": "g:Int32", "@value": 1234},
+                                                                            
"label": "aKey"}}}} == json.loads(
+            self.graphson_writer.writeObject(
+                Property("name", "marko", VertexProperty(1234, "aKey", 21345, 
Vertex("vertexId")))))
+
+    def test_custom_mapping(self):
+        # extended mapping
+        class X(object):
+            pass
+
+        serdes = Mock()
+        writer = GraphSONWriter(serializer_map={X: serdes})
+        assert X in writer.serializers
+
+        # base dicts are not modified
+        assert X not in gremlin_python.structure.io.graphsonV3d0._serializers
+
+        obj = X()
+        d = writer.toDict(obj)
+        serdes.dictify.assert_called_once_with(obj, writer)
+        assert d is serdes.dictify()
+
+        # overridden mapping
+        serdes = Mock()
+        writer = GraphSONWriter(serializer_map={int: serdes})
+        assert gremlin_python.structure.io.graphsonV3d0._serializers[int] is 
not writer.serializers[int]
+
+        value = 3
+        d = writer.toDict(value)
+        serdes.dictify.assert_called_once_with(value, writer)
+        assert d is serdes.dictify()
+
+    def test_write_long(self):
+        mapping = self.graphson_writer.toDict(1)
+        assert mapping['@type'] == 'g:Int32'
+        assert mapping['@value'] == 1
+
+        mapping = self.graphson_writer.toDict(long(1))
+        assert mapping['@type'] == 'g:Int64'
+        assert mapping['@value'] == 1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b30b56b4/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
index a4fe1ed..bfbd8c4 100644
--- 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
+++ 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
@@ -49,9 +49,12 @@ public class JythonScriptEngineSetup {
             jythonEngine.eval("from gremlin_python.structure.graph import 
Edge");
             jythonEngine.eval("from gremlin_python.structure.graph import 
VertexProperty");
             jythonEngine.eval("from gremlin_python.structure.graph import 
Property");
-            jythonEngine.eval("from gremlin_python.structure.io.graphson 
import GraphSONReader, GraphSONWriter");
-            jythonEngine.eval("graphson_reader = GraphSONReader()");
-            jythonEngine.eval("graphson_writer = GraphSONWriter()");
+            jythonEngine.eval("import 
gremlin_python.structure.io.graphsonV2d0");
+            jythonEngine.eval("import 
gremlin_python.structure.io.graphsonV3d0");
+            jythonEngine.eval("graphsonV2d0_reader = 
gremlin_python.structure.io.graphsonV2d0.GraphSONReader()");
+            jythonEngine.eval("graphsonV2d0_writer = 
gremlin_python.structure.io.graphsonV2d0.GraphSONWriter()");
+            jythonEngine.eval("graphsonV3d0_reader = 
gremlin_python.structure.io.graphsonV3d0.GraphSONReader()");
+            jythonEngine.eval("graphsonV3d0_writer = 
gremlin_python.structure.io.graphsonV3d0.GraphSONWriter()");
             return jythonEngine;
         } catch (final ScriptException e) {
             throw new IllegalStateException(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b30b56b4/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
index 9f6dfbd..6c77867 100644
--- 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
+++ 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonGraphSONJavaTranslator.java
@@ -52,16 +52,24 @@ final class PythonGraphSONJavaTranslator<S extends 
TraversalSource, T extends Tr
     private final boolean IS_TESTING = 
Boolean.valueOf(System.getProperty("is.testing", "false"));
     private final PythonTranslator pythonTranslator;
     private final JavaTranslator<S, T> javaTranslator;
-    private final GraphSONReader reader = GraphSONReader.build().mapper(
-            
GraphSONMapper.build().addCustomModule(GraphSONXModuleV2d0.build().create(false))
-                    .version(GraphSONVersion.V2_0).create()).create();
-    private final GraphSONWriter writer = GraphSONWriter.build().mapper(
-            
GraphSONMapper.build().addCustomModule(GraphSONXModuleV2d0.build().create(false))
-                    .version(GraphSONVersion.V2_0).create()).create();
+    private final GraphSONReader reader;
+    private final GraphSONWriter writer;
+    private final GraphSONVersion version;
 
-    public PythonGraphSONJavaTranslator(final PythonTranslator 
pythonTranslator, final JavaTranslator<S, T> javaTranslator) {
+    public PythonGraphSONJavaTranslator(final PythonTranslator 
pythonTranslator, final JavaTranslator<S, T> javaTranslator, final 
GraphSONVersion version) {
         this.pythonTranslator = pythonTranslator;
         this.javaTranslator = javaTranslator;
+        this.version = version;
+        this.reader = GraphSONReader.build().mapper(
+                
GraphSONMapper.build().addCustomModule(version.equals(GraphSONVersion.V2_0) ?
+                        GraphSONXModuleV2d0.build().create(false) :
+                        GraphSONXModuleV3d0.build().create(false))
+                        .version(version).create()).create();
+        this.writer = GraphSONWriter.build().mapper(
+                
GraphSONMapper.build().addCustomModule(version.equals(GraphSONVersion.V2_0) ?
+                        GraphSONXModuleV2d0.build().create(false) :
+                        GraphSONXModuleV3d0.build().create(false))
+                        .version(version).create()).create();
     }
 
     @Override
@@ -82,7 +90,10 @@ final class PythonGraphSONJavaTranslator<S extends 
TraversalSource, T extends Tr
             
bindings.putAll(jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE));
             bindings.put(this.pythonTranslator.getTraversalSource(), 
jythonEngine.eval("Graph().traversal()"));
             bindings.putAll(bytecode.getBindings());
-            final String translatedGraphSONBytecode = 
jythonEngine.eval("graphson_writer.writeObject(" + 
this.pythonTranslator.translate(bytecode) + ")", bindings).toString();
+            final String translatedGraphSONBytecode = 
jythonEngine.eval((this.version.equals(GraphSONVersion.V2_0) ?
+                    "graphsonV2d0_writer" :
+                    "graphsonV3d0_writer") +
+                    ".writeObject(" + 
this.pythonTranslator.translate(bytecode) + ")", bindings).toString();
             if (IS_TESTING) {
                 // verify that the GraphSON sent to Python is the same as the 
GraphSON returned by Python
                 final ByteArrayOutputStream output = new 
ByteArrayOutputStream();
@@ -91,6 +102,7 @@ final class PythonGraphSONJavaTranslator<S extends 
TraversalSource, T extends Tr
                 this.writer.writeObject(output, bytecode);
                 final String originalGraphSONBytecode = new 
String(output.toByteArray());
                 final ObjectMapper mapper = new ObjectMapper(new 
JsonFactory());
+                // System.out.println(originalGraphSONBytecode + "\n" + 
translatedGraphSONBytecode + "\n\n");
                 final Map<String, Object> original = 
mapper.readValue(originalGraphSONBytecode, Map.class);
                 final Map<String, Object> translated = 
mapper.readValue(translatedGraphSONBytecode, Map.class);
                 assertEquals(originalGraphSONBytecode.length(), 
translatedGraphSONBytecode.length());
@@ -98,7 +110,6 @@ final class PythonGraphSONJavaTranslator<S extends 
TraversalSource, T extends Tr
             }
             return this.javaTranslator.translate(this.reader.readObject(new 
ByteArrayInputStream(translatedGraphSONBytecode.getBytes()), Bytecode.class));
 
-
         } catch (final Exception e) {
             throw new IllegalArgumentException(e.getMessage(), e);
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b30b56b4/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 4a6dc4d..e745fe5 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
@@ -33,6 +33,7 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventS
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerEdge;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerElement;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
@@ -54,8 +55,10 @@ import java.util.Set;
  */
 public class PythonProvider extends AbstractGraphProvider {
 
+    private static final Random RANDOM = new Random();
     protected static final boolean IMPORT_STATICS = new Random().nextBoolean();
 
+
     static {
         JythonScriptEngineSetup.setup();
     }
@@ -147,7 +150,11 @@ public class PythonProvider extends AbstractGraphProvider {
                 throw new IllegalStateException(e.getMessage(), e);
             }
             final GraphTraversalSource g = graph.traversal();
-            return g.withStrategies(new TranslationStrategy(g, new 
PythonGraphSONJavaTranslator<>(PythonTranslator.of("g", IMPORT_STATICS), 
JavaTranslator.of(g))));
+            return g.withStrategies(new TranslationStrategy(g,
+                    new PythonGraphSONJavaTranslator<>(
+                            PythonTranslator.of("g", IMPORT_STATICS),
+                            JavaTranslator.of(g),
+                            RANDOM.nextBoolean() ? GraphSONVersion.V2_0 : 
GraphSONVersion.V3_0)));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b30b56b4/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONReaderTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONReaderTest.java
 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONReaderTest.java
index 86bdd21..48d2e80 100644
--- 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONReaderTest.java
+++ 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONReaderTest.java
@@ -39,9 +39,11 @@ import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import java.math.BigInteger;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -51,83 +53,98 @@ import static org.junit.Assert.assertTrue;
  */
 public class GraphSONReaderTest {
 
-    private static final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
-    private static final ObjectMapper mapper = 
GraphSONMapper.build().version(GraphSONVersion.V2_0).create().createMapper();
+    private static final Set<GraphSONVersion> VERSIONS = new 
HashSet<>(Arrays.asList(GraphSONVersion.V2_0, GraphSONVersion.V3_0));
     private static final GraphTraversalSource g = 
TinkerFactory.createModern().traversal();
 
-
     @Test
     public void shouldDeserializeGraphObjects() throws Exception {
-        final Vertex vertex = g.V(1).next();
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(vertex));
-        assertEquals(vertex.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),Vertex)"));
-        //
-        final Edge edge = g.V(1).outE("created").next();
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(edge));
-        assertEquals(edge.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),Edge)"));
-        //
-        final VertexProperty vertexProperty = (VertexProperty) 
g.V(1).properties("name").next();
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(vertexProperty));
-        assertEquals(vertexProperty.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),VertexProperty)"));
-        //
-        final Property property = 
g.V(1).outE("created").properties("weight").next();
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(property));
-        assertEquals(property.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),Property)"));
-        //
-        final Traverser<Vertex> traverser = new 
DefaultRemoteTraverser<>(vertex, 3L);
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(traverser));
-        assertEquals(traverser.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertEquals(BigInteger.valueOf(3L), 
jythonEngine.eval("graphson_reader.readObject(x).bulk")); // jython uses big 
integer in Java
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x).object,Vertex)"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),Traverser)"));
+        for (final GraphSONVersion version : VERSIONS) {
+            final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
+            jythonEngine.eval("graphson_reader = " + 
(version.equals(GraphSONVersion.V2_0) ? "graphsonV2d0_reader" : 
"graphsonV3d0_reader"));
+            final ObjectMapper mapper = 
GraphSONMapper.build().version(version).create().createMapper();
+            //
+            final Vertex vertex = g.V(1).next();
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(vertex));
+            assertEquals(vertex.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),Vertex)"));
+            //
+            final Edge edge = g.V(1).outE("created").next();
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(edge));
+            assertEquals(edge.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),Edge)"));
+            //
+            final VertexProperty vertexProperty = (VertexProperty) 
g.V(1).properties("name").next();
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(vertexProperty));
+            assertEquals(vertexProperty.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),VertexProperty)"));
+            //
+            final Property property = 
g.V(1).outE("created").properties("weight").next();
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(property));
+            assertEquals(property.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),Property)"));
+            //
+            final Traverser<Vertex> traverser = new 
DefaultRemoteTraverser<>(vertex, 3L);
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(traverser));
+            assertEquals(traverser.toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertEquals(BigInteger.valueOf(3L), 
jythonEngine.eval("graphson_reader.readObject(x).bulk")); // jython uses big 
integer in Java
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x).object,Vertex)"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),Traverser)"));
+        }
     }
 
     @Test
     public void shouldDeserializeNumbers() throws Exception {
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(1));
-        assertEquals("1", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),int)"));
-        //
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(1L));
-        assertEquals("1", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),long)"));
-        //
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(1.2f));
-        assertEquals("1.2", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),float)"));
-        //
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(1.3d));
-        assertEquals("1.3", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),float)"));
+        for (final GraphSONVersion version : VERSIONS) {
+            final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
+            jythonEngine.eval("graphson_reader = " + 
(version.equals(GraphSONVersion.V2_0) ? "graphsonV2d0_reader" : 
"graphsonV3d0_reader"));
+            final ObjectMapper mapper = 
GraphSONMapper.build().version(version).create().createMapper();
+            //
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(1));
+            assertEquals("1", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),int)"));
+            //
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(1L));
+            assertEquals("1", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),long)"));
+            //
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(1.2f));
+            assertEquals("1.2", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),float)"));
+            //
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(1.3d));
+            assertEquals("1.3", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x),float)"));
+        }
     }
 
     @Test
     public void shouldDeserializeCollections() throws Exception {
-        final Map<String, Number> map = new LinkedHashMap<>();
-        map.put("a", 2);
-        map.put("b", 2.3d);
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(map));
-        assertEquals("{u'a': 2, u'b': 2.3}", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertEquals(2, 
jythonEngine.eval("graphson_reader.readObject(x)['a']"));
-        assertEquals(2.3d, 
jythonEngine.eval("graphson_reader.readObject(x)['b']")); // jython is smart 
about double
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)['a'],int)"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)['b'],float)"));
-        //
-        final List<Object> list = Arrays.asList(g.V(1).next(), "hello", map, 
true);
-        jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(list));
-        assertEquals("[v[1], u'hello', {u'a': 2, u'b': 2.3}, True]", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
-        assertEquals(g.V(1).next().toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x)[0])"));
-        assertEquals("hello", 
jythonEngine.eval("graphson_reader.readObject(x)[1]"));
-        assertEquals("{u'a': 2, u'b': 2.3}", 
jythonEngine.eval("str(graphson_reader.readObject(x)[2])"));
-        assertTrue((Boolean) 
jythonEngine.eval("graphson_reader.readObject(x)[3]"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)[0],Vertex)"));
-        // assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)[1],str)")); // its 
python unicode jython object
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)[2],dict)"));
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)[3],bool)"));
+        for (final GraphSONVersion version : VERSIONS) {
+            final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
+            jythonEngine.eval("graphson_reader = " + 
(version.equals(GraphSONVersion.V2_0) ? "graphsonV2d0_reader" : 
"graphsonV3d0_reader"));
+            final ObjectMapper mapper = 
GraphSONMapper.build().version(version).create().createMapper();
+            //
+            final Map<String, Number> map = new LinkedHashMap<>();
+            map.put("a", 2);
+            map.put("b", 2.3d);
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(map));
+            assertEquals("{u'a': 2, u'b': 2.3}", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertEquals(2, 
jythonEngine.eval("graphson_reader.readObject(x)['a']"));
+            assertEquals(2.3d, 
jythonEngine.eval("graphson_reader.readObject(x)['b']")); // jython is smart 
about double
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)['a'],int)"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)['b'],float)"));
+            //
+            final List<Object> list = Arrays.asList(g.V(1).next(), "hello", 
map, true);
+            jythonEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("x", 
mapper.writeValueAsString(list));
+            assertEquals("[v[1], u'hello', {u'a': 2, u'b': 2.3}, True]", 
jythonEngine.eval("str(graphson_reader.readObject(x))"));
+            assertEquals(g.V(1).next().toString(), 
jythonEngine.eval("str(graphson_reader.readObject(x)[0])"));
+            assertEquals("hello", 
jythonEngine.eval("graphson_reader.readObject(x)[1]"));
+            assertEquals("{u'a': 2, u'b': 2.3}", 
jythonEngine.eval("str(graphson_reader.readObject(x)[2])"));
+            assertTrue((Boolean) 
jythonEngine.eval("graphson_reader.readObject(x)[3]"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)[0],Vertex)"));
+            // assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)[1],str)")); // its 
python unicode jython object
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)[2],dict)"));
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance(graphson_reader.readObject(x)[3],bool)"));
+        }
     }
-
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b30b56b4/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
index 2ad1964..3ae4e55 100644
--- 
a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
+++ 
b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
@@ -39,9 +39,11 @@ import org.python.jsr223.PyScriptEngine;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -51,81 +53,109 @@ import static org.junit.Assert.assertTrue;
  */
 public class GraphSONWriterTest {
 
-    private static final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
-    private static final ObjectMapper mapper = 
GraphSONMapper.build().version(GraphSONVersion.V2_0).create().createMapper();
+    private static final Set<GraphSONVersion> VERSIONS = new 
HashSet<>(Arrays.asList(GraphSONVersion.V2_0, GraphSONVersion.V3_0));
 
     @Test
     public void shouldSerializeNumbers() throws Exception {
-        assertEquals(1, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(1)").toString(),
 Object.class));
-        assertEquals(mapper.writeValueAsString(1), 
jythonEngine.eval("graphson_writer.writeObject(1)").toString().replace(" ", 
""));
-        //
-        assertEquals(2L, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(2L)").toString(),
 Object.class));
-        assertEquals(mapper.writeValueAsString(2L), 
jythonEngine.eval("graphson_writer.writeObject(2L)").toString().replace(" ", 
""));
-        //
-        assertEquals(3.4, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(3.4)").toString(),
 Object.class));
-        assertEquals(mapper.writeValueAsString(3.4), 
jythonEngine.eval("graphson_writer.writeObject(3.4)").toString().replace(" ", 
""));
+        for (final GraphSONVersion version : VERSIONS) {
+            final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
+            jythonEngine.eval("graphson_writer = " + 
(version.equals(GraphSONVersion.V2_0) ? "graphsonV2d0_writer" : 
"graphsonV3d0_writer"));
+            final ObjectMapper mapper = 
GraphSONMapper.build().version(version).create().createMapper();
+            //
+            assertEquals(1, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(1)").toString(),
 Object.class));
+            assertEquals(mapper.writeValueAsString(1), 
jythonEngine.eval("graphson_writer.writeObject(1)").toString().replace(" ", 
""));
+            //
+            assertEquals(2L, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(2L)").toString(),
 Object.class));
+            assertEquals(mapper.writeValueAsString(2L), 
jythonEngine.eval("graphson_writer.writeObject(2L)").toString().replace(" ", 
""));
+            //
+            assertEquals(3.4, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(3.4)").toString(),
 Object.class));
+            assertEquals(mapper.writeValueAsString(3.4), 
jythonEngine.eval("graphson_writer.writeObject(3.4)").toString().replace(" ", 
""));
+        }
     }
 
     @Test
     public void shouldSerializeCollections() throws Exception {
-        final Map<String, Number> map = new LinkedHashMap<>();
-        map.put("a", 2);
-        map.put("b", 2.3);
-        assertEquals(map, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject({'a':2,'b':2.3})").toString(),
 Object.class));
-        //
-        final List<Object> list = Arrays.asList(new 
DefaultRemoteTraverser<>("hello", 3L), "hello", map, true);
-        assertTrue((Boolean) 
jythonEngine.eval("isinstance([Traverser('hello',3L),'hello',{'a':2,'b':2.3},True],list)"));
-        assertEquals(list, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject([Traverser('hello',3L),'hello',{'a':2,'b':2.3},True])").toString(),
 Object.class));
+        for (final GraphSONVersion version : VERSIONS) {
+            final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
+            jythonEngine.eval("graphson_writer = " + 
(version.equals(GraphSONVersion.V2_0) ? "graphsonV2d0_writer" : 
"graphsonV3d0_writer"));
+            final ObjectMapper mapper = 
GraphSONMapper.build().version(version).create().createMapper();
+            //
+            final Map<String, Number> map = new LinkedHashMap<>();
+            map.put("a", 2);
+            map.put("b", 2.3);
+            assertEquals(map, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject({'a':2,'b':2.3})").toString(),
 Object.class));
+            //
+            final List<Object> list = Arrays.asList(new 
DefaultRemoteTraverser<>("hello", 3L), "hello", map, true);
+            assertTrue((Boolean) 
jythonEngine.eval("isinstance([Traverser('hello',3L),'hello',{'a':2,'b':2.3},True],list)"));
+            assertEquals(list, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject([Traverser('hello',3L),'hello',{'a':2,'b':2.3},True])").toString(),
 Object.class));
+        }
     }
 
     @Test
     public void shouldSerializeTraverser() throws Exception {
-        assertEquals(
-                new DefaultRemoteTraverser<>("hello", 3L),
-                
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Traverser('hello',3L))").toString(),
 Object.class));
-        assertEquals(3L, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Traverser('hello',3L))").toString(),
 Traverser.class).bulk());
-        assertEquals("hello", 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Traverser('hello',3L))").toString(),
 Traverser.class).get());
+        for (final GraphSONVersion version : VERSIONS) {
+            final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
+            jythonEngine.eval("graphson_writer = " + 
(version.equals(GraphSONVersion.V2_0) ? "graphsonV2d0_writer" : 
"graphsonV3d0_writer"));
+            final ObjectMapper mapper = 
GraphSONMapper.build().version(version).create().createMapper();
+            //
+            assertEquals(
+                    new DefaultRemoteTraverser<>("hello", 3L),
+                    
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Traverser('hello',3L))").toString(),
 Object.class));
+            assertEquals(3L, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Traverser('hello',3L))").toString(),
 Traverser.class).bulk());
+            assertEquals("hello", 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Traverser('hello',3L))").toString(),
 Traverser.class).get());
+        }
     }
 
     @Test
     public void shouldSerializeBytecode() throws Exception {
-        assertEquals(P.eq(7L), 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(P.eq(7L))").toString(),
 Object.class));
-        // TODO: assertEquals(mapper.writeValueAsString(P.between(1, 
2).and(P.eq(7L))), 
jythonEngine.eval("graphson_writer.writeObject(P.eq(7L)._and(P.between(1,2)))").toString().replace("
 ",""));
-        assertEquals(AndP.class, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(P.eq(7L).and_(P.between(1,2)))").toString(),
 Object.class).getClass());
-        //
-        assertEquals(new Bytecode.Binding<>("a", 5L), 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Binding('a',5L))").toString(),
 Object.class));
-        //
-        for (final Column t : Column.values()) {
-            assertEquals(t, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Column." + 
t.name() + ")").toString(), Object.class));
+        for (final GraphSONVersion version : VERSIONS) {
+            final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
+            jythonEngine.eval("graphson_writer = " + 
(version.equals(GraphSONVersion.V2_0) ? "graphsonV2d0_writer" : 
"graphsonV3d0_writer"));
+            final ObjectMapper mapper = 
GraphSONMapper.build().version(version).create().createMapper();
+            //
+            assertEquals(P.eq(7L), 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(P.eq(7L))").toString(),
 Object.class));
+            // TODO: assertEquals(mapper.writeValueAsString(P.between(1, 
2).and(P.eq(7L))), 
jythonEngine.eval("graphson_writer.writeObject(P.eq(7L)._and(P.between(1,2)))").toString().replace("
 ",""));
+            assertEquals(AndP.class, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(P.eq(7L).and_(P.between(1,2)))").toString(),
 Object.class).getClass());
+            //
+            assertEquals(new Bytecode.Binding<>("a", 5L), 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Binding('a',5L))").toString(),
 Object.class));
+            //
+            for (final Column t : Column.values()) {
+                assertEquals(t, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Column." + 
t.name() + ")").toString(), Object.class));
+            }
+            for (final T t : T.values()) {
+                assertEquals(t, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(T." + t.name() 
+ ")").toString(), Object.class));
+            }
+            assertEquals(Pop.first, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.first)").toString(),
 Object.class));
+            assertEquals(Pop.last, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.last)").toString(),
 Object.class));
+            assertEquals(Pop.all, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.all_)").toString(),
 Object.class));
+            assertEquals(Pop.mixed, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.mixed)").toString(),
 Object.class));
+            assertEquals(Scope.global, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Scope.global_)").toString(),
 Object.class));
+            assertEquals(Scope.local, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Scope.local)").toString(),
 Object.class));
         }
-        for (final T t : T.values()) {
-            assertEquals(t, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(T." + t.name() 
+ ")").toString(), Object.class));
-        }
-        assertEquals(Pop.first, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.first)").toString(),
 Object.class));
-        assertEquals(Pop.last, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.last)").toString(),
 Object.class));
-        assertEquals(Pop.all, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.all_)").toString(),
 Object.class));
-        assertEquals(Pop.mixed, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Pop.mixed)").toString(),
 Object.class));
-        assertEquals(Scope.global, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Scope.global_)").toString(),
 Object.class));
-        assertEquals(Scope.local, 
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(Scope.local)").toString(),
 Object.class));
     }
 
     @Test
     public void shouldSerializeLambda() throws Exception {
-        assertEquals(
-                Lambda.function("lambda z : 1+2", "gremlin-python"),
-                
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 'z : 
1+2')").toString(), Object.class));
-        assertEquals(
-                Lambda.function("lambda z : z+ 7", "gremlin-python"),
-                
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 
'lambda z : z+ 7')").toString(), Object.class));
-        assertEquals(
-                Lambda.supplier("lambda : 23", "gremlin-python"),
-                
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 
'lambda : 23')").toString(), Object.class));
-        assertEquals(
-                Lambda.consumer("lambda z : z + 23", "gremlin-python"),
-                
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 
'lambda z : z + 23')").toString(), Object.class));
-        assertEquals(
-                Lambda.biFunction("lambda z,y : z - y + 2", "gremlin-python"),
-                
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 
'lambda z,y : z - y + 2')").toString(), Object.class));
+        for (final GraphSONVersion version : VERSIONS) {
+            final ScriptEngine jythonEngine = 
JythonScriptEngineSetup.setup((PyScriptEngine) new 
ScriptEngineManager().getEngineByName("jython"));
+            jythonEngine.eval("graphson_writer = " + 
(version.equals(GraphSONVersion.V2_0) ? "graphsonV2d0_writer" : 
"graphsonV3d0_writer"));
+            final ObjectMapper mapper = 
GraphSONMapper.build().version(version).create().createMapper();
+            //
+            assertEquals(
+                    Lambda.function("lambda z : 1+2", "gremlin-python"),
+                    
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 'z : 
1+2')").toString(), Object.class));
+            assertEquals(
+                    Lambda.function("lambda z : z+ 7", "gremlin-python"),
+                    
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 
'lambda z : z+ 7')").toString(), Object.class));
+            assertEquals(
+                    Lambda.supplier("lambda : 23", "gremlin-python"),
+                    
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 
'lambda : 23')").toString(), Object.class));
+            assertEquals(
+                    Lambda.consumer("lambda z : z + 23", "gremlin-python"),
+                    
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 
'lambda z : z + 23')").toString(), Object.class));
+            assertEquals(
+                    Lambda.biFunction("lambda z,y : z - y + 2", 
"gremlin-python"),
+                    
mapper.readValue(jythonEngine.eval("graphson_writer.writeObject(lambda : 
'lambda z,y : z - y + 2')").toString(), Object.class));
+        }
     }
-
 }

Reply via email to