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)); + } } - }