On Wed, Jun 18, 2014 at 7:36 AM, Magnus Rundberget <mrundber...@hotmail.com>
wrote:

> I'm not sure if this question belongs in the forum or here, but I'll start
> here since I have a hunch that what I'm asking wont be trivial and might
> require extending the tooling api.
>

This is a good place IMO.

>
> A little context first:
> Use Case: Running test from gradle project and show tests inline in editor
> 1) I open a test file (spock, junit).
>  - Light Table recognizes that the file is a (gradle) test and visually
> indicates this to the user
>  - I'm guessing this should be possible through a custom model by getting
> hold of a list of test source directories and associated include/exclude
> patterns
>

I agree. From task that has a type Test you can get classes dir and map it
to a sourceSet to find where sources are living. Include/exclude is in Test
task too.


> 2) I invoke a Light Table command to run the test
>  - Light table through the plugin invokes a gradle task (custom ?) to
> execute the test in question
>

The model should return a map like [ 'test': testSourcesAndOptionalData,
'integTest': integTestSourcesAndOptionalData] so we will know what task to
execute. Note that there can be overlap and one test can be executed using
different tasks (think of testWithInMemoryDB/testWithMysql).


>  - Gradle reports generic progress through the tooling api (typically if
> it has to resolve dependencies, run other tasks first etc)
>

Yup, this remains though we may want to tweak what is send to make it more
useful.


>  - Gradle reports test progress (akin to the TestListener), through the
> tooling api (somehow)
>

It is quite possible that we can use something very similar to
TestListener. I will check what do existing Java IDEs expect when hooking
up custom test runners. I suppose that if Gradle sends information that is
already broadcasted to TestListener instances it should be sufficient.


> - Light Table displays results inline in the editor for the test
> -- Showing ok, fail, error for each test. Ideally showing errors at
> correct line number
>

Errors/failures should send stacktraces to give you chance to annotate
errors in sources or enable navigation. Also we want to be able to initiate
're-run test' action.


>
>
> a) What would be possible to achieve with the current tooling api ?
>

Using IdeaProject model gives you a good approximation where (unit-)test
can be found. Probably covers about 3/4 cases.

b) How would I go about exposing something like a test listener through the
> current tooling api if at all possible ?
>

One possibility is to add TestProgressEvent extending
o.g.tooling.ProgressEvent and then send it to listener registered with
http://www.gradle.org/docs/current/javadoc/org/gradle/tooling/LongRunningOperation.html#addProgressListener(org.gradle.tooling.ProgressListener)
I'm not sure how this would be implemented though. Let me think about it
and I will give you an update when I find some solution. Our infrastructure
that sends data between tooling API client and provider does interesting
things that can make it harder to send events of arbitrary types.

cheers,
Radim


>
> cheers
> Magnus
>
>
>
>
>

Reply via email to