Hi Rony

Your issue has been converted into a JDK issue, with your testcase attached 
[1]. Normally you should’ve received an e-mail at the time of this conversion, 
but you can check this yourself by using the internal review ID as in [2]. If 
you’d like to contribute a fix, see [3].

Kind regards, Anthony

[1] https://bugs.openjdk.java.net/browse/JDK-8234959
[2] https://bugs.openjdk.java.net/browse/JI-9062887
[3] https://github.com/openjdk/jfx


From: Rony G. Flatscher<mailto:rony.flatsc...@wu.ac.at>
Sent: Wednesday, 22 January 2020 14:44
To: openjfx-dev@openjdk.java.net<mailto:openjfx-dev@openjdk.java.net>
Subject: Re: "Internal review ID : 9062887" (Re: FXMLLoader: not supplying 
filename to script engine, not supplying event object as argument to script

Last November I submitted an appropriate bug report and mailed the testcase on 
November 27th per
Oracle's request without hearing anything to this date.

Therefore I was wondering how long such an assessment usually takes place and 
what to do? (Maybe it
"fell off the desk" due to the end-of-year stress and Christmas vacation?) Any 
advice?

---rony


On 21.11.2019 15:39, Rony G. Flatscher wrote:
> As the zip-archive attachment got stripped, for a brief time the zip-archive 
> can be fetched from
> <https://www.dropbox.com/s/l4uesrwm0iw5vb9/testcaseFXMLLoaderScriptEngines.zip?dl=0>.
>
> ---rony
>
> On 21.11.2019 15:29, Rony G. Flatscher wrote:
>> On 15.11.2019 16:08, Rony G. Flatscher wrote:
>>> On 14.11.2019 22:57, Kevin Rushforth wrote:
>>>> On 11/14/2019 10:12 AM, Rony G. Flatscher wrote:
>>>>> On 14.11.2019 16:34, Rony G. Flatscher wrote:
>>>>>> On 13.11.2019 19:50, Kevin Rushforth wrote:
>>>>>>> On 11/13/2019 9:42 AM, Rony G. Flatscher wrote:
>>>>> ... cut ...
>>>>>>>> To reproduce the testcase one would need ooRexx and the Java bridge 
>>>>>>>> BSF4ooRexx (all
>>>>>>>> opensource) for
>>>>>>>> which I could come up with a zip-archive (assuming binaries within 
>>>>>>>> should be 64-bit) and a
>>>>>>>> script to
>>>>>>>> set up the environment either for Windows, Linux or MacOS, whatever 
>>>>>>>> you advise. Would that be
>>>>>>>> o.k.?
>>>>>>> We prefer not to rely on third-party libraries for test cases. In any 
>>>>>>> case we would not be able to
>>>>>>> use that for a regression test / unit test.
>>>>> If test units really seem to be important in this particular case, one 
>>>>> possibility would be to
>>>>> create a minimalistic ScriptEngine implementation in pure Java just for 
>>>>> the sole purpose to allow
>>>>> the creation of a test unit that is able to assert that FXMLLoader puts 
>>>>> the ScriptEngine.ARGV and
>>>>> ScriptEngine.FILENAME entries into the ENGINE_SCOPE Bindings. E.g. having 
>>>>> the ScriptEngine's eval()
>>>>> methods return the ScriptContext at invocation time in order to allow 
>>>>> inspection of the Bindings.
>>>>> This way it would become also possible to write in addition test units 
>>>>> that also check whether all
>>>>> FXML elements that carry a fx:id are really placed into the GLOBAL_SCOPE 
>>>>> Bindings.
>>>> Something like that seems reasonable, and would avoid a dependence on 
>>>> Nashorn, which in addition
>>>> to having all the problems you mentioned, is deprecated for removal.
>>>>
>>>>> However,
>>>> Did you have something more to add?
>>> No, sorry for that. Rewrote my e-mail and had sent it too early by mistake 
>>> and without noticing.
>>>
>>> Will study all the procedures and create a testcase to be submitted at 
>>> <https://bugreport.java.com/>
>>> as per your advice (and will report back under this thread once submitted). 
>>> The testcase would use
>>> an artificial ScriptEngine implementation that could be used for testunit 
>>> testing as well. This
>>> might take a while due to other obligations that I will have to meet during 
>>> the next few days.
>>>
>>> ---rony
>> O.K., so came up with a test case that contains an artificial script engine 
>> implementation for
>> logging the eval() invocations together with the scripts to execute and the 
>> ScriptContext
>> ENGINE_SCOPE and GLOBAL_SCOPE Bindings at the time of the invocation. (It is 
>> meant to be also usable
>> for creating script engine related test units for Java script hosts.)
>>
>> Packaged the source and binaries of that script engine as jar file that one 
>> merely needs to put on
>> the CLASSPATH or add as a module.
>>
>> An updated FXMLLoader patch suggesting a fix is included as well. This 
>> version appends the line
>> number to the file name if the script to be evaluated is embedded in the 
>> fxml-file, such that in
>> case of an error it becomes possible to quickly find it in larger fxml files.
>>
>> With the zip-archive done I went to the Oracle Java Bug Database and just 
>> entered a bug report at
>> <https://bugreport.java.com/bugreport/submit_start.do> got the internal "ID 
>> : 9062887".
>>
>> As it was not possible to attach/upload the zip-archive at this point, I 
>> will attach the zip-archive
>> (contains all sources and binaries) to this e-mail. The contained 
>> <readme.txt> reads:
>>
>>     Testcase that demonstrates that FXMLLoader does not set [1]
>>     ScriptEngine.FILENAME and [2] ScriptEngine.ARGV entries in
>>     ScriptContext.ENGINE_SCOPE Bindings.
>>
>>     To run the test case:
>>
>>     - unzip testcaseFXMLLoaderScriptEngines.zip,
>>
>>     - change into "testcaseFXMLLoaderScriptEngines" subdirectory,
>>
>>     - run the testcase by issuing the following command:
>>
>>       - Unix:
>>
>>             java -cp .:RgfPseudoScriptEngine.jar 
>> FXMLLoaderTestCase4ScriptEngineScope
>>
>>       - Windows:
>>
>>             java -cp .;RgfPseudoScriptEngine.jar 
>> FXMLLoaderTestCase4ScriptEngineScope
>>
>>     FXMLLoaderTestCase4ScriptEngineScope loads "demo_01.fxml" which is a 
>> controller
>>     that uses the pseudo script language 
>> rgf.scriptEngine.RgfPseudoScriptEngine,
>>     which logs the eval() invocations with the script code and the Bindings 
>> of the
>>     ScriptContext.
>>
>>     Comparing "demo_01.fxml" and the output of the above test case 
>> demonstrates that
>>     FXMLLoader does not popuplate the [3] ENGINE_SCOPE Bindings with the 
>> filename of
>>     the script that gets evaluated, nor does add the ARGV entry to the 
>> ENGINE_SCOPE
>>     Bindings in the case of events (just an entry named "event").
>>
>>     In case of errors (during development or deployment) it is not possible
>>     therefore to point to the file (external file or the fxml-file defining
>>     explicitly script code) in which a runtime error has occurred.
>>
>>     In the case of an event callback, if ARGV was defined the script code 
>> could
>>     directly fetch and interact with the supplied event object argument.  In 
>> the
>>     case that a script engine does not automatically make Bindings entry 
>> available
>>     as implicit variables (e.g.  for scoping reasons) it becomes cumbersome 
>> or even
>>     impossible in some script engine implementations (if they do not provide 
>> access
>>     to the Bindings) to get at the event argument of the callback invocation.
>>
>>     The JSR-223 specifications lists all the (reserved) ScriptEngine 
>> constants that
>>     are meant to be used as reserved keys for the ENGINE_SCOPE Bindings, 
>> whenever
>>     appropriate cf.  [0] p.  l50 ff.  (A ScriptEngine is supposed to 
>> populate and
>>     maintain the ENGINE_SCOPE Bindings hence the definition of these 
>> constants with
>>     the class.)
>>
>>     Running the above program on Windows yields the output captured and 
>> supplied in
>>     [4].
>>
>>     The supplied patch [5] changes FXMLLoader.java such,
>>
>>     - that the ScriptEngine.FILENAME entry is always set in the ENGINE_SCOPE
>>       Bindings. In the case that the scripts are hosted in a fxml-file that 
>> file
>>       path will be used together with an appended string that hints at the 
>> location
>>       in the fxml file from where the script has been taken for evaluation. 
>> In the
>>       case of event handling scripts that appended string hints at the 
>> location in
>>       the fxml-file where the event attribute with the script code got used.
>>
>>     - and that the ScriptEngine.ARGV entry is always set in the ENGINE_SCOPE
>>       Bindings for event callbacks using the 'event' object as the single 
>> argument.
>>
>>     Applying the patch and running the above program on Linux yields the 
>> output
>>     captured and supplied in [6].
>>
>>     ---
>>
>>     The jar-file [7] needs merely to be put on the CLASSPATH (or MODULE_PATH 
>> as a
>>     proper module-info.class is included, the module name is 
>> "rgf.scriptEngine") to
>>     make the pseudo scripting language available and to run the supplied 
>> testcase.
>>     The RgfPseudoScriptEngine (script engine name and extension is "rpsl")
>>     implementation should also make it possible to create test units for 
>> asserting
>>     that Java script hosts are populating the ScriptContext Bindings 
>> according to
>>     specifications.
>>
>>     All Java classes come with their source code (the script engine service 
>> file and
>>     module-info.{java|class} are contained in the jar file).
>>
>>     Having signed the OCA you may use all of the supplied code freely.
>>
>>     If there is anything you need or that I could provide, please let me 
>> know.
>>
>>     ---rony
>>
>>     [0] JSR-223 specification at <https://jcp.org/en/jsr/detail?id=223>, 
>> download
>>         <https://jcp.org/aboutJava/communityprocess/pfd/jsr223/index.html>:
>>         "java_scripting-1_0-fr-spec.pdf"
>>
>>     [1]
>>     
>> <https://docs.oracle.com/en/java/javase/11/docs/api/java.scripting/javax/script/ScriptEngine.html#FILENAME>
>>
>>     [2]
>>     
>> <https://docs.oracle.com/en/java/javase/11/docs/api/java.scripting/javax/script/ScriptEngine.html#ARGV>
>>
>>     [3]
>>     
>> <https://docs.oracle.com/en/java/javase/11/docs/api/java.scripting/javax/script/ScriptContext.html#ENGINE_SCOPE>
>>
>>     [4] Output of running the testcase on Windows (Java 8): 
>> "info/Demo_output_without_fix.txt"
>>
>>     [5] FXMLLoader patch: 
>> "info/diff_add_FILENAME_ARGV_to_FXMLLoader_preferable_20191121.txt"
>>
>>     [6] Output of running the testcase after patching FXMLLoader with [5] on 
>> Linux (OpenJDK 11.0.5):
>>         "info/Demo_output_with_fix_and_linenumbers.txt"
>>
>>     [7] Pseudo script engine implementation to be put on the CLASSPATH or 
>> MODULE_PATH (module
>>         name "rgf.scriptEngine"): <RgfPseudoScriptEngine.jar>
>>
>>     [8] FXML test case:
>>
>>         - FXMLLoaderTestCase4ScriptEngineScope.{java|class}
>>           ... loads "demo_01.rxml" and dumps the engine and global Bindings
>>
>>         - demo_01.fxml
>>         ... FXML file using scripts in the pseudo script language [7] as 
>> controller,
>>             either as external or embedded scripts, including scripts for 
>> event
>>             handling Action and MouseClicked events
>>
>>         - demo_01_bottomscript.rpsl  ... serving as external script file
>>
>>         - demo_01_middlescript.rpsl  ... serving as external script file
>>
>>         - demo_01_topscript.rpsl     ... serving as external script file
>>
>> If there is anything else I can/should do, please advise.
>> (Being on the road in the next few days it might take me until the beginning 
>> of next week to get back.)
>>
>> ---rony

Reply via email to