On Mon, 16 Jun 2025 17:44:48 GMT, Andy Goryachev <[email protected]> wrote:
>> Currently, the VirtualFlowTestUtils used ONLY for tests has many utility
>> methods to get and do something with the VirtualFlow of Virtualized Controls.
>>
>> It has one flaw: It may creates a temporary Stage with the StageLoader, when
>> the Control was never inside a Scene (and Stage) yet. This is done to get
>> the VirtualFlow, which is not possible otherwise.
>>
>> Take the following test code:
>>
>> VirtualFlowTestUtils.clickOnRow(tableView, 2);
>> VirtualFlowTestUtils.clickOnRow(tableView, 4);
>>
>>
>> What it does it to create a Stage for the first method and dispose it after.
>> And create another Stage for the second method and dispose it after.
>>
>> This does not test a realistic scenario and the chance is quite high that
>> developers used that methods without even knowing that it contains such
>> logic.
>>
>> So the idea is to remove the StageLoader code from VirtualFlowTestUtils and
>> rather use it in the Test code before calling the Util methods.
>>
>> For the example above, this would result in:
>>
>> stageLoader = new StageLoader(tableView);
>> VirtualFlowTestUtils.clickOnRow(tableView, 2);
>> VirtualFlowTestUtils.clickOnRow(tableView, 4);
>>
>>
>> The stageLoader should be disposed in an @AfterEach.
>>
>> Note: Nearly all touched tests are indeed much older test code. New tests
>> are not affected and already use it correcty.
>> Sometimes a call to `Toolkit.getToolkit().firePulse();` was needed.
>> Previously, creating a new Stage for every call to the util methods did that
>> implicitly.
>
> modules/javafx.controls/src/test/java/test/com/sun/javafx/scene/control/infrastructure/VirtualFlowTestUtils.java
> line 349:
>
>> 347: flow = (VirtualFlow<?>)control.lookup("#virtual-flow");
>> 348:
>> 349: if (sl != null) {
>
> should we have a check here with a helpful message (which recommends to use
> `StageLoader`), instead of returning `null`?
I thought about this as well. No strong opinion from my side.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1829#discussion_r2154281361