Skip to content

Commit 02d3c71

Browse files
committed
call destroyData before removing item from keyMapper
1 parent 674b07f commit 02d3c71

File tree

2 files changed

+12
-21
lines changed

2 files changed

+12
-21
lines changed

flow-data/src/main/java/com/vaadin/flow/data/provider/hierarchy/HierarchicalDataCommunicator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -745,8 +745,8 @@ public void confirmUpdate(int updateId) {
745745
// Remove those items from the keyMapper and dataGenerator to
746746
// release any associated client-side resources.
747747
itemsToRemove.forEach((item) -> {
748-
keyMapper.remove(item);
749748
dataGenerator.destroyData(item);
749+
keyMapper.remove(item);
750750
});
751751
}
752752

flow-data/src/test/java/com/vaadin/flow/data/provider/hierarchy/HierarchicalDataCommunicatorDataGenerationTest.java

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.Arrays;
1919

20+
import org.junit.Assert;
2021
import org.junit.Before;
2122
import org.junit.Test;
2223
import org.mockito.Mock;
@@ -48,6 +49,16 @@ public void init() {
4849
dataCommunicator.setDataProvider(treeDataProvider, null);
4950

5051
compositeDataGenerator.addDataGenerator(dataGenerator);
52+
53+
Mockito.doAnswer((invocation) -> {
54+
Item item = invocation.getArgument(0);
55+
56+
Assert.assertTrue(
57+
"Item should be in keyMapper when generateData is called",
58+
dataCommunicator.getKeyMapper().has(item));
59+
60+
return null;
61+
}).when(dataGenerator).destroyData(Mockito.any());
5162
}
5263

5364
@Test
@@ -153,24 +164,4 @@ public void collapseItems_destroyDataCalledForCollapsedChildrenInKeyMapper() {
153164
Mockito.verify(dataGenerator, Mockito.never())
154165
.destroyData(new Item("Item 1"));
155166
}
156-
157-
@Test
158-
public void collapseItems_destroyDataCalledBeforeItemRemovedFromKeyMapper() {
159-
populateTreeData(treeData, 4, 2, 2);
160-
dataCommunicator.expand(
161-
Arrays.asList(new Item("Item 0"), new Item("Item 0-0")));
162-
dataCommunicator.setViewportRange(0, 4);
163-
fakeClientCommunication();
164-
165-
Mockito.doAnswer((invocation) -> {
166-
Item item = invocation.getArgument(0);
167-
if (!dataCommunicator.getKeyMapper().has(item)) {
168-
throw new AssertionError(
169-
"Item should still be in keyMapper when destroyData is called");
170-
}
171-
return null;
172-
}).when(dataGenerator).destroyData(Mockito.any());
173-
174-
dataCommunicator.collapse(new Item("Item 0"));
175-
}
176167
}

0 commit comments

Comments
 (0)