Hi,

The way I have it set up currently is that for each GLV there is a 
XXXTranslator.

In particular a ScriptTranslator (a sub-interface of Translator) will turn 
Bytecode into a String.

* If its PythonTranslator, it will turn bytecode into a Python string 
representing that traversal.
        
https://github.com/apache/tinkerpop/blob/master/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
 
<https://github.com/apache/tinkerpop/blob/master/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java>
* If its GroovyTranslator, it will turn bytecode into a Groovy string 
representing that traversal.
        
https://github.com/apache/tinkerpop/blob/master/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
 
<https://github.com/apache/tinkerpop/blob/master/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java>

Then from there you can see how it ties into the test suite:
        
https://github.com/apache/tinkerpop/blob/master/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProcessStandardTest.java
 
<https://github.com/apache/tinkerpop/blob/master/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProcessStandardTest.java>
        
https://github.com/apache/tinkerpop/blob/master/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java#L158
 
<https://github.com/apache/tinkerpop/blob/master/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java#L158>
                - I check BOTH that GraphSON translation and Python translation 
work for each traversal in the ProcessXXXTestSuite.

In this way, we really don’t need the gremlin-groovy-test/ 
ProcessStandard/ComputerSuite anymore as each Java traversal in 
ProcessStandard/ComputerSuite can be turned into the String representation for 
any GLV.

Is this sufficient? Note that this model ONLY works for languages that have a 
JVM ScriptEngine implementation — e.g. Ruby, Clojure, Scala, JavaScript, 
Python, Groovy, PHP, R, etc.
        https://en.wikipedia.org/wiki/List_of_JVM_languages 
<https://en.wikipedia.org/wiki/List_of_JVM_languages>

Marko.

http://markorodriguez.com



> On Sep 21, 2016, at 7:13 AM, Stephen Mallette <[email protected]> wrote:
> 
> I was thinking about how to test our GLVs (existing and more importantly
> future ones to come) and how to best leverage our existing test
> infrastructure. We have about 600 "process" suite tests (i.e. test methods
> that contain assertions for a particular traversal). Those tests are
> re-used in a variety of different ways to validate traversal operations
> over graph computer, groovy, bytecode, etc. Together those tests give us
> confidence that Gremlin "works".
> 
> If we're content with the logic the bytecode processing is sound, then a
> GLV should be satisfied that it will work if it produces compliant
> bytecode. Therefore, the validation of GLV compliance with Gremlin really
> just means validating that it produces good bytecode.
> 
> If you're still with that logic, the perhaps a good way to provide GLVs a
> platform independent set of compliance tests would be to include a body of
> Cucumber specs in our gremlin-test suite. Cucumber is supported in just
> about every language and implementing a parser in a language that isn't
> supported is pretty simple.
> 
> The spec could take the form of:
> 
> Feature: Filter Steps
>    Scenario: Dedup Step
>        Given a Java traversal of g.V().dedup()
>        When translated to the GLV native language
>        Then the Bytecode representation should be [[], [V(), dedup()]]
> 
> then all the GLV has to do is implement the Cucumber steps to process the
> spec. Processing would be pretty simple, just use the Java traversal (which
> will be String representation going into cucumber) to lookup the GLV
> representation of the traversal and then use that to generate the Bytecode
> you would submit to the server and assert it as part of the "Then".
> 
> btw, i'm not saying that this approach should replace GLV unit tests or
> that a GLV shouldn't have integration tests directly to Gremlin Server.
> Using Cucumber just provide a means for centralizing GLV compliance on
> Bytecode which should be enough to give us reasonably solid assurance that
> that Gremlin semantics are being met.

Reply via email to