summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorArtur <artur@vaadin.com>2017-01-09 11:18:49 +0200
committerAleksi Hietanen <aleksi@vaadin.com>2017-01-09 11:18:49 +0200
commitef729f355b559edf38b3ba7c0a78c17c61602703 (patch)
tree31029daf6116677fb5d4c54fb57fad01ffb82cb1 /server
parenteb7391b2a27287f22825ecf215480866031cfefb (diff)
downloadvaadin-framework-ef729f355b559edf38b3ba7c0a78c17c61602703.tar.gz
vaadin-framework-ef729f355b559edf38b3ba7c0a78c17c61602703.zip
Correctly detach components in merged cells when a static row is removed (#8142)
Fixes #8140
Diffstat (limited to 'server')
-rw-r--r--server/src/main/java/com/vaadin/ui/Grid.java3
-rw-r--r--server/src/test/java/com/vaadin/tests/server/component/grid/GridChildrenTest.java61
2 files changed, 57 insertions, 7 deletions
diff --git a/server/src/main/java/com/vaadin/ui/Grid.java b/server/src/main/java/com/vaadin/ui/Grid.java
index 2cccc51212..7dd4c00609 100644
--- a/server/src/main/java/com/vaadin/ui/Grid.java
+++ b/server/src/main/java/com/vaadin/ui/Grid.java
@@ -2506,6 +2506,9 @@ public class Grid extends AbstractFocusable implements SelectionNotifier,
for (CELLTYPE cell : cells.values()) {
cell.detach();
}
+ for (CELLTYPE cell : cellGroups.values()) {
+ cell.detach();
+ }
}
}
diff --git a/server/src/test/java/com/vaadin/tests/server/component/grid/GridChildrenTest.java b/server/src/test/java/com/vaadin/tests/server/component/grid/GridChildrenTest.java
index 028b13f997..374a93a98c 100644
--- a/server/src/test/java/com/vaadin/tests/server/component/grid/GridChildrenTest.java
+++ b/server/src/test/java/com/vaadin/tests/server/component/grid/GridChildrenTest.java
@@ -18,6 +18,7 @@ package com.vaadin.tests.server.component.grid;
import java.util.Iterator;
import org.junit.Assert;
+import org.junit.Before;
import org.junit.Test;
import com.vaadin.ui.Component;
@@ -28,12 +29,19 @@ import com.vaadin.ui.Label;
public class GridChildrenTest {
- @Test
- public void componentsInMergedHeader() {
- Grid grid = new Grid();
+ private Grid grid;
+
+ @Before
+ public void createGrid() {
+ grid = new Grid();
grid.addColumn("foo");
grid.addColumn("bar");
grid.addColumn("baz");
+
+ }
+
+ @Test
+ public void iteratorFindsComponentsInMergedHeader() {
HeaderCell merged = grid.getDefaultHeaderRow().join("foo", "bar",
"baz");
Label label = new Label();
@@ -44,16 +52,55 @@ public class GridChildrenTest {
}
@Test
+ public void removeComponentInMergedHeaderCell() {
+ HeaderCell merged = grid.getDefaultHeaderRow().join("foo", "bar",
+ "baz");
+ Label label = new Label();
+ merged.setComponent(label);
+ Assert.assertEquals(grid, label.getParent());
+ merged.setText("foo");
+ Assert.assertNull(label.getParent());
+ }
+
+ @Test
+ public void removeHeaderWithComponentInMergedHeaderCell() {
+ HeaderCell merged = grid.getDefaultHeaderRow().join("foo", "bar",
+ "baz");
+ Label label = new Label();
+ merged.setComponent(label);
+ Assert.assertEquals(grid, label.getParent());
+ grid.removeHeaderRow(0);
+ Assert.assertNull(label.getParent());
+ }
+
+ @Test
+ public void removeComponentInMergedFooterCell() {
+ FooterCell merged = grid.addFooterRowAt(0).join("foo", "bar", "baz");
+ Label label = new Label();
+ merged.setComponent(label);
+ Assert.assertEquals(grid, label.getParent());
+ merged.setText("foo");
+ Assert.assertNull(label.getParent());
+ }
+
+ @Test
+ public void removeFooterWithComponentInMergedFooterCell() {
+ FooterCell merged = grid.addFooterRowAt(0).join("foo", "bar", "baz");
+ Label label = new Label();
+ merged.setComponent(label);
+ Assert.assertEquals(grid, label.getParent());
+ grid.removeFooterRow(0);
+ Assert.assertNull(label.getParent());
+ }
+
+ @Test
public void componentsInMergedFooter() {
- Grid grid = new Grid();
- grid.addColumn("foo");
- grid.addColumn("bar");
- grid.addColumn("baz");
FooterCell merged = grid.addFooterRowAt(0).join("foo", "bar", "baz");
Label label = new Label();
merged.setComponent(label);
Iterator<Component> i = grid.iterator();
Assert.assertEquals(label, i.next());
Assert.assertFalse(i.hasNext());
+ Assert.assertEquals(grid, label.getParent());
}
}