RFR: 8274433: All Cells: misbehavior of startEdit
Marius Hanl
mhanl at openjdk.java.net
Fri Oct 1 13:22:37 UTC 2021
On Thu, 30 Sep 2021 12:00:16 GMT, Jeanette Winzenburg <fastegal at openjdk.org> wrote:
> The misbehavior happens if (super) startEdit didn't succeed (== !cell.isEditing):
>
> - must not fire editStart event
> - must not update control's editing location
>
> fix is to back out of startEdit if super.startEdit doesn't switch the cell into editing mode
>
> Added tests that failed/passed before/after the fix. Note that for Tree-, Table-, TreeTableCell one of the added tests would be a false green due to those cells not updating the editing location on its control [JDK-8187474](https://bugs.openjdk.java.net/browse/JDK-8187474), so it's ignore until that's fixed.
Change looks good, I just left some comments on the tests. :)
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 860:
> 858: cell.updateListView(list);
> 859: cell.updateIndex(list.getItems().size());
> 860: List<EditEvent> events = new ArrayList<>();
Very minor: You can use EditEvent<Object> here so you don't use the raw generic (and also on the other locations). But I guess that's just syntax sugar.
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 874:
> 872: cell.startEdit();
> 873: assertFalse("sanity: off-range cell must not be editing", cell.isEditing());
> 874: assertEquals("list editing location must not be updated", - 1, list.getEditingIndex());
`-1` would look better here (without the space inbetween) given the fact this is not a mathematical context
modules/javafx.controls/src/test/java/test/javafx/scene/control/TableCellTest.java line 726:
> 724: int editingRow = table.getItems().size();
> 725: cell.updateIndex(editingRow);
> 726: List<CellEditEvent> events = new ArrayList<>();
`events` is effectively unused here, maybe you forgot the assert here?
modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeCellTest.java line 870:
> 868: cell.startEdit();
> 869: assertFalse("sanity: off-range cell must not be editing", cell.isEditing());
> 870: assertEquals("editing location", null, tree.getEditingItem());
Minor: This can be replaced with `assertNull`, which would also be a bit more readable :)
modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableCellTest.java line 1051:
> 1049: cell.startEdit();
> 1050: assertFalse("sanity: off-range cell must not be editing", cell.isEditing());
> 1051: assertEquals("editing location", null, tree.getEditingCell());
Minor: This can be replaced with `assertNull`. :)
-------------
PR: https://git.openjdk.java.net/jfx/pull/636
More information about the openjfx-dev
mailing list