On Wed, 13 Nov 2019 21:53:13 GMT, Kevin Rushforth <k...@openjdk.org> wrote:

> On Tue, 12 Nov 2019 10:23:16 GMT, Florian Kirmaier <fkirma...@openjdk.org> 
> wrote:
> 
>> The pull request has been updated with additional changes.
>> 
>> ----------------
>> 
>> Added commits:
>>  - 5cd96a56: JDK-8200224
>> 
>> Changes:
>>   - all: https://git.openjdk.java.net/jfx/pull/25/files
>>   - new: https://git.openjdk.java.net/jfx/pull/25/files/85c87628..5cd96a56
>> 
>> Webrevs:
>>  - full: https://webrevs.openjdk.java.net/jfx/25/webrev.02
>>  - incr: https://webrevs.openjdk.java.net/jfx/25/webrev.01-02
>> 
>>   Issue: https://bugs.openjdk.java.net/browse/JDK-8200224
>>   Stats: 5 lines in 1 file changed: 0 ins; 5 del; 0 mod
>>   Patch: https://git.openjdk.java.net/jfx/pull/25.diff
>>   Fetch: git fetch https://git.openjdk.java.net/jfx pull/25/head:pull/25
> 
> I see that when you made your earlier comment regarding `System.exit`, you 
> really meant that the existing swing test was calling `Platform.exit`, which 
> isn't the same thing; it does shut down the JavaFX runtime, which is intended.
> 
> The problem you are running into is that gradle runs multiple tests in the 
> same VM and in an undefined, and unpredicable, order. This means that tests 
> need to take care not to alter or rely on global state such as threads, 
> static fields, global JavaFX state, and the running (or lack thereof) of the 
> JavaFX runtime. The swing tests violate this rule and are therefore 
> inherently unstable. The only reason this hasn't been a problem up to now is 
> that the javafx.swing module contains a single test class. I will file a new 
> test bug to address it -- probably by moving that test to the `systemTests` 
> project.
> 
> You will need to move your test into the `systemTests` project under the 
> `tests/system/` directory. Such tests are valid in the system tests project 
> because we run each test in that project in its own VM. Once your proposed 
> test is robust (meaning consistently catches the bug without your fix and 
> consistently passes with your fix) on all platforms without using Robot, then 
> `tests/system/src/test/java/test/javafx/embed/swing/` would be the best place 
> to put your new test.
> 
> Regarding the test itself, it still doesn't fail for me on Windows without 
> your fix. I ran the test program attached to the bug and I see something that 
> might help explain this. That test program creates a pair of JFXPanel objects 
> and adds both to the JPanel. If I first click on the first one, then it only 
> shows a single click. Every time after that, if I click on a new JFXPanel, 
> then I get 2 clicks. If, instead, I click on the second JFXPanel right after 
> starting the program, I get 2 clicks the first time. With that in mind, I 
> modified your test to add a dummy JFXPanel to the JPanel before the one you 
> are sending the mouse pressed event to, and then it then does what I expect: 
> it catches the bug without your fix and passes with your fix. That might help 
> you come up with a more robust test. I added some specific comments on the 
> test as well.
> 
> modules/javafx.swing/src/test/java/test/javafx/embed/swing/SwingFXUtilsTest.java
>  line 46:
> 
>> 45: 
>> 46: 
>> 47: public class SwingFXUtilsTest {
> 
> Your proposed fix for this test class is not the right fix, and needs to be 
> reverted. It highlights an existing bug with the swing tests, which I will 
> address in general comments.
> 
> modules/javafx.swing/src/test/java/test/javafx/embed/swing/JFXPanelTest.java 
> line 100:
> 
>> 99:             jpanel.add(fxPnl);
>> 100:             jframe.setContentPane(jpanel);
>> 101:             jframe.setVisible(true);
> 
> You should call `jframe.pack()` here.
> 
> modules/javafx.swing/src/test/java/test/javafx/embed/swing/JFXPanelTest.java 
> line 128:
> 
>> 127: 
>> 128:         Thread.sleep(100); // there should be no pressed event after 
>> the initial one. Let's wait for 0.1s and check again.
>> 129:         assertEquals(1, pressedEventCounter[0]);
> 
> I recommend using 500 msec so we don't risk missing a failing click on slower 
> systems.
> 
> modules/javafx.swing/src/test/java/test/javafx/embed/swing/JFXPanelTest.java 
> line 60:
> 
>> 59:     public static void doSetupOnce() {
>> 60:         if (setupIsDone) return;
>> 61:         Platform.startup(() -> {
> 
> This is not needed if you revert the changes to the other test class.
> 
> modules/javafx.swing/src/test/java/test/javafx/embed/swing/JFXPanelTest.java 
> line 130:
> 
>> 129:         assertEquals(1, pressedEventCounter[0]);
>> 130:     }
>> 131: }
> 
> You will want to add a cleanup method, annotated with `@AfterClass` to call 
> `Platform.exit` and dispose of the JFrame.
> 
> modules/javafx.swing/src/test/java/test/javafx/embed/swing/JFXPanelTest.java 
> line 106:
> 
>> 105:                 Scene scene = new Scene(new Group());
>> 106:                 scene.getRoot().requestFocus();
>> 107: 
> 
> I don't think requesting focus is necessary (or desired).
> 
> ----------------
> 
> Changes requested by kcr (Lead).

It's now removed

done

I've kept the logic of the other JFXPanelTest. Should i change it?

removed

I've removed it

PR: https://git.openjdk.java.net/jfx/pull/25

Reply via email to