[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: Ad suggested test unit for "JDK-8234959 FXMLLoader does not populate ENGINE_SCOPE Bindings with 
From:       Kevin Rushforth <kevin.rushforth () oracle ! com>
Date:       2020-02-27 0:06:27
Message-ID: 149dcb0d-960e-2b9a-916c-ac2607a1d9b4 () oracle ! com
[Download RAW message or body]

If you want a preliminary review of a WIP PR, then yes, announcing it 
here is fine.

-- Kevin


On 2/26/2020 7:53 AM, Rony G. Flatscher wrote:
> After studying [1], not sure whether one is supposed to announce a WIP here or not, so in doubt also
> announcing the URL for the suggested test unit (part of the systemTests) for those interested in
> checking it out: <https://github.com/openjdk/jfx/pull/123>.  To run the systemTests tests only one
> can issue:
>
> |    ./gradlew -PFULL_TEST=true :systemTests:test --tests ModuleLauncherTest|
>
> This will include the suggested WIP test unit "testscriptapp1".
>
> ---rony
>
> [1] "Contributing to OpenJFX": <https://github.com/openjdk/jfx/blob/master/CONTRIBUTING.md>
>
>
> On 18.02.2020 14:25, Rony G. Flatscher wrote:
>> For creating a test unit to test whether [1] is present or not, it is necessary to have a Java
>> script engine to test again. As discussed in a different thread it is not advisable to use any
>> concrete, existing Java script engine that is not part of the JDK. Therefore it becomes necessary to
>> come up with a proper implementation of javax.script.ScriptEngine and
>> javax.script.ScriptEngineFactory to serve for the sole purpose of testing.
>>
>> I have come up with such a "pseudo script engine" which will log each script invocation together
>> with the script code, a copy of the ScriptContext in effect (for later inspection) and the time of
>> invocation.
>>
>> For a test unit it is necessary to have this pseudo script engine loaded via the SPI to be able to
>> use from a test application. For this one can define a
>> "META-INF/services/javax.script.ScriptEngineFactory" file and/or a "module-info.java" file. In order
>> to be as flexible as possible both approaches were chosen (also in mind that others may have a need
>> for such a pseudo script engine for testing purposes). This implementation creates a module that
>> contains a test application where the ideas and structures are modelled after the "systemTests"
>> modules (many thanks to Keving Rushforts for pointing at that!).
>>
>> The test application will create a JavaFX application that processes some fxml file "demo_01.fxml"
>> which defines the pseudo script engine to be used for executing all of the scripts defined in that
>> file. The "start" method will fire the Button using  "btn.fire()", "btn.fireEvent( new ActionEvent()
>> )", and "btn.fireEvent( new MouseEvent( ... ) )" to have the event scripts executed. As mentioned
>> the pseudo script engine will log each invocation.
>>
>> Upon return of the "start" method the test application's main method will fetch the log of
>> invocations from the pseudo script engine and then assert that the sequence of invocations, the
>> scripts and the ScriptContext Bindings are correct with respect to some "demo_01.fxml". This not
>> only asserts the proper existence of the entries "javax.script.filename" (also the proper values of
>> the file names) and "javax.script.argv" in the engine Bindings, but also whether the global Bindings
>> are correctly defined and their values (and types) are correct. These assertion tests are dependent
>> on a) how FXMLLoader populates the ScriptContext Bindings and b) how the test case in form of the
>> fxml-file and the supplied pseudo scripts is formulated.
>>
>> The test unit uses assertion methods of its own (like the other module based tests) and if it ends
>> with an exit code of 0 it has passed. In the case of assertion errors (or unexpected errors) an
>> appropriate error message with a stack trace is given and a non-zero exit code is returned via
>> "System.exit()" (again modeled after/copied from the other module tests).
>>
>> To make this test unit as simple as possible the module includes the pseudo script engine (it is not
>> a separate module). It needs to be run on its own JVM (as is the case with the other module tests).
>>
>> Any comments, questions, suggestions?
>>
>> ---rony
>>
>> [1] "JDK-8234959 FXMLLoader does not populate ENGINE_SCOPE Bindings with FILENAME and ARGV":
>> <https://bugs.openjdk.java.net/browse/JI-9062887>
>>

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic