Jaikiran,

Thank you for the quick response!

ant -f fetch.xml -Ddest=optional

It helped, thanks for pointing this out!

I can understand that some of the code in the AbstractJUnitResultFormatter
> might appear reusable and would be tempting to reuse/extend, but I wouldn't
> want anything outside of Ant to start using these classes and instead just
> code against the JUnit5 classes/interfaces.

Having said all this, if any of other maintainers of the Ant project feel
> that we should allow these internal classes to be extensible, I won't mind
> having this work reviewed and merged.

I truly understand your point of view. If no-one else needs this
functionality we'll simply implement custom formatters/listeners based on
the existing implementation in *ant* project.

I'll take a look at this one.

Great, thanks.


Best Regards,

Aleksei Zotov.


On Thu, Dec 23, 2021 at 6:34 AM Jaikiran Pai <jai.forums2...@gmail.com>
wrote:

> Hello Aleksei,
>
> On 22/12/21 7:59 pm, Aleksei Zotov wrote:
> > Hi Ant Developers,
> >
> > I'm working on the migration of Apache Cassandra project from JUnit 4 to
> > JUnit 5 (CASSANDRA-16630
> > <https://issues.apache.org/jira/browse/CASSANDRA-16630>) which turned
> out
> > to be larger than I originally expected. At the moment, three PRs got
> > merged:
> >
> >     - https://github.com/apache/ant/pull/147
> >     - https://github.com/apache/ant/pull/168
> >     - https://github.com/apache/ant/pull/172
> >
> > And there are a few more I'd like to discuss with you.
>
> Sorry, I remember seeing a PR from you where you asked for some inputs
> in this area, but I haven't been able to get to it due to some other
> priorities.
>
> >
> > Formatters Extensibility
> > Apache Cassandra extended the existing JUnit 4 formatters in order to
> > integrate them with a custom logic required for a better CI process. It
> was
> > easily achievable for JUnit 4 since the formatters are marked public. On
> > the contrary, for JUnit 5 all formatters are package private. Even
> > *AbstractJUnitResultFormatter* is package private. Of course, we can
> > copy-paste all these classes to our project and customize them based on
> our
> > needs, but that seems to be a bit of an overhead.
> >
> > Currently, we'd like to make *AbstractJUnitResultFormatter *extensible.
> > Here is the corresponding PR: https://github.com/apache/ant/pull/169/
>
> The reason why these formatters are package private and not extensible
> is intentional. When I added these formatters, one of the goals of these
> formatters was to only make them generate output to an extent that it
> matches the JUnit4 style formatters of the "junit" task (hence the name
> "legacy-" to those formatters). All these pre-shipped "legacy-"
> listeners that you see in Ant are only there for minimal support and
> their implementation is considered to be internal to the Ant distribution.
>
> The new JUnit5 framework itself is extensible and also comes with some
> pre-shipped "listeners" (implementations of TestExecutionListener).
> That's one of the reasons why the junitlauncher task's "listener"
> element provides a direct way to use any implementation of the JUnit5
> framework's "org.junit.platform.launcher.TestExecutionListener". i.e.
> for any code that seeks extensibility, the
> org.junit.platform.launcher.TestExecutionListener is expected to be the
> extension point/interface and not Ant's internal
> AbstractJUnitResultFormatter. This allows the junitlauncher task to be
> minimal and allows it to achieve its goal of just being something that
> will launch the JUnit5 framework.
>
> I can understand that some of the code in the
> AbstractJUnitResultFormatter might appear reusable and would be tempting
> to reuse/extend, but I wouldn't want anything outside of Ant to start
> using these classes and instead just code against the JUnit5
> classes/interfaces.
>
> Having said all this, if any of other maintainers of the Ant project
> feel that we should allow these internal classes to be extensible, I
> won't mind having this work reviewed and merged.
>
> > Fork Mode Support
> > Apache Cassandra is a large and complex product and in order to guarantee
> > its quality we run many tests independently. It lets us ensure different
> > test suites do not affect each other. For isolated testing we spin up a
> new
> > JVM per tests suite via *forkMode* property. Unfortunately,
> > *junitlauncher* task
> > does not provide such a functionality.
> >
> > Currently, we'd like *mode* attribute to *fork* element. Here is the
> > corresponding PR: https://github.com/apache/ant/pull/174
>
> I remember there was some bugzilla discussion of a similar question (or
> maybe on some other forum). I'll take a look at this PR soon.
>
> > I'd be glad if you could provide some feedback on that. Also I need some
> > guidance here - I have a suspicion that *JUnitLauncherTaskTest* is not
> > being run during "./build clean test" (I cannot grep it in logs). Could
> you
> > please help me to run this particular test from CLI.
>
> Have you fetched the optional JUnit5 libraries before running these
> tests? A lot of Ant's tasks are optional and their tests are only run if
> the corresponding libraries are available in the classpath. To fetch
> these dependencies you can do:
>
> ant -f fetch.xml -Ddest=optional
>
> and then run the tests using the command you currently use.
>
> > Use File Support
> > Apache Cassandra does not always need to write testing output to a file.
> > Even though it is possible to achieve writing into standard output (by
> > overriding *TestResultFormatter.setDestination *method) instead of a
> file,
> > it is impossible to prevent empty files from being created on the file
> > system. Of course, we can delete these files, however, it would be nice
> to
> > have the functionality similar to *junit* task.
> >
> > I've already started a related discussion on the PR (please, chime in):
> > https://github.com/apache/ant/pull/171
>
> I'll take a look at this one.
>
> -Jaikiran
>
>

Reply via email to