You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Stephen Mallette (Jira)" <ji...@apache.org> on 2022/01/26 14:10:00 UTC

[jira] [Created] (TINKERPOP-2696) Refactor Gherkin test framework to better handle bindings

Stephen Mallette created TINKERPOP-2696:
-------------------------------------------

             Summary: Refactor Gherkin test framework to better handle bindings
                 Key: TINKERPOP-2696
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2696
             Project: TinkerPop
          Issue Type: Improvement
          Components: test-suite
    Affects Versions: 3.5.2
            Reporter: Stephen Mallette


The process by which gherkin tests run for GLVs involves a {{generate.groovy}} script which examines the feature files, extracts Gremlin and passes it through a specially configured {{GremlinGroovyScriptEngine}} to get traversal bytecode. The special configuration it receives is the {{VarAsBindingASTTransformation}} which has the important job of detecting variables in the Gremlin being evaluated and replacing them with {{Bindings.of()}} declarations which will then capture those in the bytecode. When captured in the bytecode it becomes possible for a {{Translator}} to regenerate the script with variable names in the native language that is being tested. 

The problem that arises is that the {{VarAsBindingASTTransformation}} has to make a guess at the type the variable represents. Consider {{mergeV()}} which has both {{Map}} and {{Traversal}} overloads. {{VarAsBindingASTTransformation}} chooses {{Map}} by default. The choice really isn't all that relevant except when it comes to translations in a type-safe language like C# where the guess choice of {{Map}} leads to a translation of {{mergeV((IDictionary<object,object>) __.identity())}} which obviously leads to a casting problem. 

This problem seems reasonably tied to C# and specific to this odd use case we have with testing. Most users would likely not be translating in this fashion which is why it hasn't come up. They certainly wouldn't be looking to use {{VarAsBindingASTTransformation}} in their code. Since it is a testing problem perhaps a solution would be to better bind {{VarAsBindingASTTransformation}} to the Gherkin framework and maybe use the variable names to hint at what the type should be. They are already somewhat named according to type in some respects, but it is probably not yet fully consistent.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)