I've been looking into Gherkin support for .NET: SpecFlow, the cucumber implementation for .NET <https://cucumber.io/docs#cucumber-implementations>, does not support .NET Core platform (we use .NET Core build tools for the .NET GLV) and only supports .NET Framework.
>From what I can see <https://github.com/techtalk/SpecFlow/projects/2>, .NET Core support on SpecFlow is coming at a very slow pace and we shouldn't expect to land any time soon (there were some design decisions in SpecFlow library that makes supporting other platforms non-trivial, like requiring code gen). The alternative would be to implement our own harness to support it: from a xunit test, look for certain types and parse the annotations, and execute them using the Gherkin features. There is a .NET cross-platform Gherkin parser: https://github.com/cucumber/gherkin-dotnet I'll continue looking into this option and try to understand the effort required... On Tue, Sep 19, 2017 at 6:21 PM, Jorge Bay Gondra <jorgebaygon...@gmail.com> wrote: > Nice! Gherkin will make our lives easier with a growing number of GLVs. > > We should find a way to define the different features supported by each > GLV, as it's reasonable to have different maturity levels per GLV (ie: > lambdas support, traversal strategy, ...). I don't know if it will be > beneficial to do it in the Gherkin files or within each GLV implementation. > Also, we should consider the process of rolling out a new method / class > in the java implementation, how that could affect each GLV. > > On Thu, Sep 14, 2017 at 11:12 PM, Stephen Mallette <spmalle...@gmail.com> > wrote: > >> that's what i meant by "reflection" or as you suggest eval(). I guess the >> point is that if the language can support some way of taking the string >> value and turning it automatically into a traversal in that GLVs style >> then >> we should do that. >> >> On Thu, Sep 14, 2017 at 4:45 PM, Daniel Kuppitz <m...@gremlin.guru> wrote: >> >> > For unparameterized queries it can probably be as easy as: >> > >> > @given("the traversal of") >> > def translate_traversal(step): >> > g = step.context.g >> > step.context.traversal = eval(step.text) >> > >> > >> > Cheers, >> > Daniel >> > >> > >> > On Thu, Sep 14, 2017 at 1:39 PM, Daniel Kuppitz <m...@gremlin.guru> >> wrote: >> > >> > > That's great stuff. I haven't used Cucumber / Gherkin for years, but I >> > > really like the BDD approach. >> > > >> > > and then you can look at the GLV Gremlin translations specifically >> here: >> > >> https://github.com/apache/tinkerpop/blob/TINKERPOP-1784/grem >> > >> lin-python/src/main/jython/radish/count_features_step.py#L34-L46 >> > > >> > > >> > > This part is the only thing that looks weird to me. You're basically >> > > writing every query twice; is there really no easier way to do that? >> > > >> > > Cheers, >> > > Daniel >> > > >> > > >> > > On Thu, Sep 14, 2017 at 1:17 PM, Stephen Mallette < >> spmalle...@gmail.com> >> > > wrote: >> > > >> > >> I've brought this issue up in the past and had suggested some >> options I >> > >> had >> > >> in mind but now I've finally put the basics of those ideas in place >> so I >> > >> figured I'd start a fresh thread. Recall that the issue at hand is >> that >> > we >> > >> don't have a test suite for GLVs as gremlin-test is bound to the >> JVM. We >> > >> have some tricks that let us test gremlin-python with it but those >> > tricks >> > >> won't work for every language and we now have the first language in >> > >> gremlin-dotnet and upcoming gremlin-javascript which won't support it >> > >> (yes, >> > >> i know that gremlin-javascript can run on the jvm but there are >> issues >> > >> with >> > >> getting it all to work with the test framework that make it unduly >> > >> complicated). >> > >> >> > >> On other threads I offered the idea that we look to use Gherkin to >> write >> > >> general Gremlin test specifications, which then could be read and >> > >> processed >> > >> by the wide variety of test frameworks that can read that format - >> there >> > >> tend to be Gherkin processors in just about every language - for >> > example, >> > >> see: >> > >> >> > >> https://cucumber.io/ >> > >> >> > >> I just created this issue: >> > >> >> > >> https://issues.apache.org/jira/browse/TINKERPOP-1784 >> > >> >> > >> and pushed this branch: >> > >> >> > >> https://github.com/apache/tinkerpop/tree/TINKERPOP-1784 >> > >> >> > >> which demonstrates how this works with gremlin-python. The basic >> anatomy >> > >> of >> > >> this setup involves this new directory in gremlin-test: >> > >> >> > >> https://github.com/apache/tinkerpop/tree/TINKERPOP-1784/grem >> > >> lin-test/features >> > >> >> > >> It contains the Gherkin .features files. These are the test >> > >> specifications. >> > >> They are written using gremlin-java as the "model" language. GLVs >> will >> > >> then >> > >> need to write some infrastructure to process these Gherkin files. The >> > key >> > >> to making this "easy" to implement will lie in our abiilty to keep >> the >> > >> assertions we want to have relatively simple. The more simplistic the >> > >> language in the Gherkin .feature files the easier the job it will be >> for >> > >> GLVs to build their infrastructure. Of course, once that >> infrastructure >> > is >> > >> in place, the GLV developer just has to write the GLV version of the >> > >> Gremlin specified in the .feature file. So you can look at all the >> > >> "infrastructure" code here in this pair of files: >> > >> >> > >> https://github.com/apache/tinkerpop/tree/TINKERPOP-1784/grem >> > >> lin-python/src/main/jython/radish >> > >> >> > >> and then you can look at the GLV Gremlin translations specifically >> here: >> > >> >> > >> https://github.com/apache/tinkerpop/blob/TINKERPOP-1784/grem >> > >> lin-python/src/main/jython/radish/count_features_step.py#L34-L46 >> > >> >> > >> I think this approach works pretty well and solves our general >> problems >> > >> for >> > >> GLV testing. There is some pain up front in implementing the >> > >> "infrastructure" but after that new Gremlin tests added to .feature >> > files >> > >> just need to translated in the GLV. I suppose we could "automate" a >> good >> > >> portion of the translation with reflection of some sort. Anything >> else >> > >> could just be handled manually. >> > >> >> > >> Not sure if we need to use this new model to wholly replace the old >> one. >> > >> The process test suite has its place in helping graph database >> providers >> > >> test their stuff. I also imagine that introducing this approach in >> that >> > >> context would create a breaking change which we would then need to >> push >> > >> off >> > >> to 3.4.0. I suppose that gives us time to think, but for now it >> might >> > not >> > >> be best to conflate the two and just treat them as separate aspects >> of >> > the >> > >> test suite. >> > >> >> > >> Anyway - it's important we settle on an approach to testing as we >> really >> > >> shouldn't do a GA release of the Gremlin .NET GLV without getting the >> > test >> > >> suite solid. please yell if you have any ideas or feedback on this >> > >> approach. >> > >> >> > > >> > > >> > >> > >