RFR: 8277785: ListView scrollTo jumps to wrong location when CellHeight is changed

Johan Vos jvos at openjdk.org
Thu Jul 7 10:18:54 UTC 2022


On Wed, 6 Jul 2022 11:40:40 GMT, Kevin Rushforth <kcr at openjdk.org> wrote:

> The fix looks good to me, although I did leave a question about one of the boundary checks. This will need additional testing. Several of the `assertEquals` calls have the expected and actual args backwards. I also left a few minor formatting comments (I didn't note all of them).

I did a reformat on the sections that you mentioned. Doing a reformat with NetBeans on the whole file would cause too many changes that would hide the real changes, so that is probably a bit too much?

> modules/javafx.controls/src/main/java/javafx/scene/control/skin/VirtualFlow.java line 2321:
> 
>> 2319:      */
>> 2320:     void getCellSizesInExpectedViewport(int index) {
>> 2321:               double estlength = getOrCreateCellSize(index);
> 
> Minor: indentation.

done

> modules/javafx.controls/src/main/java/javafx/scene/control/skin/VirtualFlow.java line 2323:
> 
>> 2321:               double estlength = getOrCreateCellSize(index);
>> 2322:         int i = index;
>> 2323:         while ((estlength < viewportLength) && (++i < getCellCount())){
> 
> Minor: need space before `{`

done

> modules/javafx.controls/src/main/java/javafx/scene/control/skin/VirtualFlow.java line 2328:
> 
>> 2326:         if (estlength < viewportLength) {
>> 2327:             int j = index;
>> 2328:             while ((estlength < viewportLength) && (--j > 0)) {
> 
> Is the `> 0` intentional or should it be `>= 0`?

it should also allow cases where j == 0 indeed. Fixed by replacing `--j` to `j--`

> modules/javafx.controls/src/main/java/javafx/scene/control/skin/VirtualFlow.java line 3098:
> 
>> 3096:         estSize = estimatedSize / itemCount;
>> 3097: 
>> 3098:         if (keepRatio ) {
> 
> Minor: there is an extra space before the `)`

done

> modules/javafx.controls/src/test/java/test/javafx/scene/control/ListViewKeyInputTest.java line 1837:
> 
>> 1835:     }
>> 1836: 
>> 1837:     @Ignore // there is no guarantee that there will be 8 selected items (can be 7 as well)
> 
> Ideally we would have an open bug ID for an `@Ignore`d test. In this case, it might or might not be worth filing one to fix the test.

I filed https://bugs.openjdk.org/browse/JDK-8289909 for this.

> modules/javafx.controls/src/test/java/test/javafx/scene/control/ListViewTest.java line 2189:
> 
>> 2187: 
>> 2188:     @Test public void testUnfixedCellScrollResize() {
>> 2189:         final ObservableList<Integer> items = FXCollections.observableArrayList(300,300,70,20);
> 
> Minor: add spaces after the commas.

done

> modules/javafx.controls/src/test/java/test/javafx/scene/control/ListViewTest.java line 2374:
> 
>> 2372:         double viewportLength = listViewHeight - 2; // it would be better to calculate this from listView but there is no API for this
>> 2373: 
>> 2374:         for(int height: heights) {
> 
> Minor: space after `for`

done

> modules/javafx.controls/src/test/java/test/javafx/scene/control/ListViewTest.java line 2400:
> 
>> 2398:         assertTrue("Our cell must be visible!", scrollToCell.isVisible());
>> 2399: 
>> 2400:         if(lastCell.isVisible() && sumOfHeights >= viewportLength) {
> 
> Minor: space after `if`

done

> modules/javafx.controls/src/test/java/test/javafx/scene/control/ListViewTest.java line 2410:
> 
>> 2408:         if(shouldScrollToBottom && sumOfHeights > viewportLength) {
>> 2409:             // If we scroll to the bottom, then the last cell should be exactly at the bottom
>> 2410:             // assertEquals("", lastCell.getLayoutY(), viewportLength - lastCellSize,1.);
> 
> Expected and actual args are backwards.

this particular assert was commented out, and I removed it. I reverted the args in the previous one though.

> modules/javafx.controls/src/test/java/test/javafx/scene/control/ListViewTest.java line 2414:
> 
>> 2412:         if(!shouldScrollToBottom && sumOfHeights > viewportLength) {
>> 2413:             // If we don't scroll to the bottom, and the cells are bigger than the available space, then our cell should be at the top.
>> 2414:             assertEquals("Our cell mut be at the top", scrollToCell.getLayoutY(), 0,1.);
> 
> Expected and actual args are backwards.

done

-------------

PR: https://git.openjdk.org/jfx/pull/808


More information about the openjfx-dev mailing list