RFR: 8264127: ListCell editing status is true, when index changes while editing [v6]
Jeanette Winzenburg
fastegal at openjdk.java.net
Thu Apr 22 12:45:25 UTC 2021
On Thu, 22 Apr 2021 11:00:43 GMT, Florian Kirmaier <fkirmaier at openjdk.org> wrote:
>> Fixing ListCell editing status is true, when index changes while editing.
>
> Florian Kirmaier has updated the pull request incrementally with one additional commit since the last revision:
>
> 8264127:
> Fixed another index case based on code review
Fix and tests are not yet quite complete - see my inline comments :)
A general suggestion for the tests: I would prefer to have them consistent in both toEditing and offEditing (or whileEditing)
The transitions in the direction `cell-not-editing` to `cell-editing` are factored into a common method `assertChangeIndexToEditing(...)` and have test methods calling that common method with varied concrete indices (f.i `0 ->1`, `-1 -> 1` etc). The other way round - `cell-editing` to `cell-not-editing` - should be factored in a similar way, with the same index pairs. The advantages, IMO: guaranteed same setup and test completeness for both directions and easy read of the variations
modules/javafx.controls/src/main/java/javafx/scene/control/ListCell.java line 549:
> 547: cancelEdit();
> 548: }
> 549: } else {
minor: not a big fan of local fields, but .. if there already _is_ a local field, we should use it instead of calling the method again (here: editing vs. isEditing)
minor: the code comment does no longer fit the code
major: this will change the editing state of the list - the call to cancelEdit must be wrapped into un/setting the updateEditingIndex flag (see the else-if block later in the method)
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 845:
> 843: events.add(e);
> 844: });
> 845: list.setEditable(true);
missing setup of focus to -1
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 850:
> 848: list.edit(1);
> 849: cell.updateIndex(0);
> 850: assertTrue(!cell.isEditing());
let's not confuse the code reader: `assertTrue(!boolean)` should be `assertFalse(boolean)`
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 851:
> 849: cell.updateIndex(0);
> 850: assertTrue(!cell.isEditing());
> 851: assertEquals("Should still be editing 1", list.getEditingIndex(), 1);
the assert should go the other way round: assert(expected, actual)
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 852:
> 850: assertTrue(!cell.isEditing());
> 851: assertEquals("Should still be editing 1", list.getEditingIndex(), 1);
> 852: assertTrue("cell re-use must trigger cancel events", events.size() == 1);
don't "hide" information in an assert: `assertEquals(1, events.size())`
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 867:
> 865: @Test
> 866: public void testChangeIndexToEditing3_jdk_8264127() {
> 867: assertChangeIndexToEditing(1, -1);
hmm .. don't quite understand this: the list's editing state shouldn't be changed and here it is never editing. What's the intention?
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 895:
> 893: } else {
> 894: // -1 represents "not editing" for the listview and "no index" for the list cell.
> 895: assertTrue(!cell.isEditing());
same as above
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 896:
> 894: // -1 represents "not editing" for the listview and "no index" for the list cell.
> 895: assertTrue(!cell.isEditing());
> 896: assertTrue("cell re-use must trigger edit events", events.size() == 0);
same as above
modules/javafx.controls/src/test/java/test/javafx/scene/control/ListCellTest.java line 911:
> 909: assertTrue("sanity: cell must be editing", cell.isEditing());
> 910: cell.updateIndex(-1); // change cell index to negative
> 911: assertFalse("cell must not be editing if cell index is " + cell.getIndex(), cell.isEditing());
missing: assert that a cancelEvent is fired and the list editing state is unchanged (they fail until updateEditing is fixed)
-------------
Changes requested by fastegal (Committer).
PR: https://git.openjdk.java.net/jfx/pull/441
More information about the openjfx-dev
mailing list