On Wed, 28 Aug 2019 at 14:55, Peter Verhas <pe...@verhas.com> wrote:
>
> Bruno P. Kinoshita>But if you could perhaps show the pros and cons,
>
> There is a slight overhead marking and naming the code snippets and also
> the code segments where the snippets should be inserted. It is slightly
> more complex than just copy-paste but not a big deal. If the unit test
> lines are not used verbatim as they are then the lines can also be
> converted using replaceAll style regular expressions. To create these may
> also be more a kind of programming work than just reformatting the
> copy-pasted code manually.
>
> On the other hand when the lines in the snippet change they will update the
> JavaDoc automatically. This is the main advantage.
>
> >what is the maintenance involved
>
> The copy-paste (code generation) is started from the test. If there is any
> change the test signals it with failure. This may seem strange that in that
> case, the test has to be executed again and then it runs fine. This is to
> ensure that the generated code is compiled properly. The final code: manual
> modification + generated modification should be committed and that way the
> test never generates anything new on the CI server and thus it does not
> fail. That way this is a "manual" tool.
>
> >whether it would change anything in the final binary that the user sees or
> not,
>
> The tool was designed to have zero footprints on the final binary. There is
> no run-time dependency, especially when using it for documentation
> generation. The binary will exactly be the same.
>
> When it is used to generate Java code the developer MAY decide to use some
> annotations, but it is not a must. It is a convenience feature. Since these
> annotations have run-time retention they are compiled dependencies, but
> again: it is not a must and all features are available without these. The
> framework works scanning annotation like comments a.k.a.:

Runtime retention is a potential problem, as an extra binary may be needed.
The jar might no longer be a drop-in replacement.

> //@Geci(" .... ")
>
> or just any annotation so long as long the simple name of the annotation is
> "Geci" or the annotation itself is annotated with an annotation that has a
> simple name "Geci" (recursively). The generators may even trigger on
> //<editor-fold ...> comments, no need for annotations. And it is for Java
> code generation. The document generation is totally zero footprint.
>
>
> Silence Tai
> >I am more concerned about what changes the project will need to make after
> relying on the tool.
>
> It is a test dependency. Ignited using unit tests. Writes into the source
> code. To get rid: remove the dependency and delete the tests. All generated
> code is part of the source. No hard-to-get-rid-off dependency. Except if
> you start to write code generators as plugins, then this type of
> metaprogramming is addictive. But that is not a technical issue, more
> psychology.
>
>
> Paul King
>
>
>
>
>
>
> >You can stop using the JavadocAssertionTestSuite at any time.
> >The code will still be in the Javadoc as documentation but just won't
> >be tested any more as part of your test suite.
>
> This is the same for Java::Geci. The difference is that Java::Geci works
> the other way around. It fetches code from the unit test (or for that
> matter from just any text file which contains snippets) and puts it into
> the JavaDoc (or for that matter into any text file that contains a
> segment). In this sense Java::Geci is more general, not a unit test
> specific tool. It is a tool to copy -- alter -- paste text snippets between
> files.
>
> Gary Gregory
>
> I had a brief look at lemma. It is similar to what I used to write my book
> Java Projects - Secon Edition with PACKT. That tool is Python and named
> pyama. Actually the first such tool I wrote in 2006 using Perl. I feel that
> Java::Geci is a bit more flexible than that. I am not sure about that
> though.
>
>
> I think that the next step is that I will create a short sample with a pull
> request.
>
> Peter
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> On Wed, Aug 28, 2019 at 10:12 AM Paul King <paul.king.as...@gmail.com>
> wrote:
>
> > I haven't used Geci, so can't really comment on all the things it
> > might be capable of.
> >
> > With respect to something equivalent to Python doctests, in the Groovy
> > project we
> > have JavadocAssertionTestBuilder and JavadocAssertionTestSuite classes.
> > Feel free to look to those for inspiration (at least).
> >
> > For Javadoc containing specially marked code blocks (assumes code is
> > in <pre>...</pre> tags and has the special attribute
> > class="groovyTestCase") the content is stripped out and placed into
> > JUnit tests and run as a suite - giving the correct line number
> > information if it fails. We do it for Groovy code but it could be done
> > for just Java code.
> >
> > Examples:
> >
> > <pre class="groovyTestCase">assert [4,5] ==
> > [1,2,3,4,5].intersect([4,5,6,7,8])</pre>
> >
> > /**
> >  * Randomly reorders the elements of the specified array.
> >  * <pre class="groovyTestCase">
> >  * Integer[] array = [10, 5, 20]
> >  * def origSize = array.size()
> >  * def copy = array.toList()
> >  * array.shuffle()
> >  * assert array.size() == origSize
> >  * assert copy.every{ array.contains(it) }
> >  * </pre>
> >  *
> >  * @param self an array
> >  * @since 3.0.0
> >  */
> >
> > You can stop using the JavadocAssertionTestSuite at any time.
> > The code will still be in the Javadoc as documentation but just won't
> > be tested any more as part of your test suite.
> >
> > P.S. I haven't used JavadocAssertionTestSuite with Maven, just Gradle.
> >
> > On Wed, Aug 28, 2019 at 11:43 AM Bruno P. Kinoshita <ki...@apache.org>
> > wrote:
> > >
> > >  In Python doctests are handy, where you can write documentation with
> > code blocks, that can be executed with a unit-test running tool, validating
> > the docs.
> > > It's the first time I heard about Geci. But if you could perhaps show
> > the pros and cons, what is the maintenance involved, whether it would
> > change anything in the final binary that the user sees or not, and any
> > other risks/issues.
> > > If you are keen to show it in a PR, maybe just one or two examples would
> > be enough to show how it works.
> > > Thanks! And thanks for your recent contributions to Commons Lang too
> > Peter.
> > > Bruno
> > >
> > >     On Wednesday, 28 August 2019, 1:00:50 am NZST, Peter Verhas <
> > pe...@verhas.com> wrote:
> > >
> > >  I have seen looking over the code of the LANG3 project that there are a
> > lot
> > > of places where the code is copy/paste. Many times these copy/paste code
> > is
> > > the result of the shortages of the Java language. We implement methods
> > that
> > > look more or less the same but they have to be created for all primitive
> > > types. The maintenance of this code is cumbersome, changed at one place
> > has
> > > to be changed at the other places as well.
> > >
> > > The framework Java::Geci can automate the maintenance of those code
> > > fragments. The framework is a test dependency ONLY, so it does not
> > present
> > > an extra dependency for the users.
> > >
> > > The application of the framework can also be used to automatically
> > > copy/update code from the unit tests into the JavaDoc documentation, like
> > > copying and converting assertion statements into tables with inputs and
> > > results.
> > >
> > > I would be happy to create a few pull requests as a demonstration of how
> > > Java::Geci can be used for the purposes.
> > >
> > > QUESTION:
> > >
> > > What is your attitude towards a new tool like this? I do not ask a final
> > > decision for "yes we want to use it" or "no we do not want". I just want
> > to
> > > know if the developer community would consider the use of such a tool.
> > >
> > > A last note: The tool is extremely non-invasive. Any project using it can
> > > decide at any point to discontinue the use. All it needs is to delete the
> > > tests that start the tool, remove the dependency from the POM file and
> > that
> > > is it.
> > >
> > > --
> > > Peter Verhas
> > > pe...@verhas.com
> > > t: +41791542095
> > > skype: verhas
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> > For additional commands, e-mail: dev-h...@commons.apache.org
> >
> >
>
> --
> Peter Verhas
> pe...@verhas.com
> t: +41791542095
> skype: verhas

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to