From: Teemu Suo-Anttila Date: Fri, 22 Jan 2016 12:23:55 +0000 (+0200) Subject: Fix Components cleanup on Header/FooterRow remove in Grid (#19497) X-Git-Tag: 7.6.3~5 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=656f5d4ab6beb560f205ee7d194e59f34a6fc315;p=vaadin-framework.git Fix Components cleanup on Header/FooterRow remove in Grid (#19497) Change-Id: Iaa36f2dd6a61487ec49da3adb4cc9a2485641cd9 --- diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java index 06ab8d1581..4074672675 100644 --- a/server/src/com/vaadin/ui/Grid.java +++ b/server/src/com/vaadin/ui/Grid.java @@ -2467,6 +2467,12 @@ public class Grid extends AbstractFocusable implements SelectionNotifier, } abstract protected String getCellTagName(); + + void detach() { + for (CELLTYPE cell : cells.values()) { + cell.detach(); + } + } } /** @@ -2674,6 +2680,10 @@ public class Grid extends AbstractFocusable implements SelectionNotifier, .html())); } } + + void detach() { + removeComponentIfPresent(); + } } protected Grid grid; @@ -2720,6 +2730,7 @@ public class Grid extends AbstractFocusable implements SelectionNotifier, + rowIndex); } ROWTYPE row = rows.remove(rowIndex); + row.detach(); getSectionState().rows.remove(rowIndex); markAsDirty(); diff --git a/uitest/src/com/vaadin/tests/components/grid/GridHeaderFooterComponentsTest.java b/uitest/src/com/vaadin/tests/components/grid/GridHeaderFooterComponentsTest.java index 977b16cebd..e8d3abf42d 100644 --- a/uitest/src/com/vaadin/tests/components/grid/GridHeaderFooterComponentsTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/GridHeaderFooterComponentsTest.java @@ -15,11 +15,15 @@ */ package com.vaadin.tests.components.grid; +import static org.junit.Assert.assertFalse; + import java.util.List; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; +import com.vaadin.testbench.By; import com.vaadin.testbench.elements.ButtonElement; import com.vaadin.testbench.elements.GridElement; import com.vaadin.testbench.elements.GridElement.GridCellElement; @@ -28,9 +32,15 @@ import com.vaadin.tests.tb3.SingleBrowserTest; public class GridHeaderFooterComponentsTest extends SingleBrowserTest { + @Before + public void setUp() { + setDebug(true); + + openTestURL(); + } + @Test public void hideAndShowComponentsInHeader() { - openTestURL(); GridElement grid = $(GridElement.class).first(); int filterRow = 2; @@ -48,6 +58,8 @@ public class GridHeaderFooterComponentsTest extends SingleBrowserTest { textfield.setValue("foo"); Assert.assertEquals("1. value change for field in string to foo", getLogRow(0)); + + assertNoErrorNotifications(); } private TextFieldElement getHeaderElement(GridElement grid, int row, int col) { @@ -66,7 +78,6 @@ public class GridHeaderFooterComponentsTest extends SingleBrowserTest { @Test public void hideAndShowComponentsInFooter() { - openTestURL(); GridElement grid = $(GridElement.class).first(); int filterRow = 0; @@ -84,6 +95,8 @@ public class GridHeaderFooterComponentsTest extends SingleBrowserTest { textfield.setValue("foo"); Assert.assertEquals("1. value change for field in string to foo", getLogRow(0)); + + assertNoErrorNotifications(); } private TextFieldElement getFooterElement(GridElement grid, int row, int col) { @@ -100,4 +113,28 @@ public class GridHeaderFooterComponentsTest extends SingleBrowserTest { } } + @Test + public void testRemoveAllHeadersAndFooters() { + openTestURL(); + + for (int i = 2; i >= 0; --i) { + // Remove Header + $(GridElement.class).first().getHeaderCell(i, 0) + .$(ButtonElement.class).first().click(); + assertFalse( + "Header " + i + " should not be present.", + $(GridElement.class).first().isElementPresent( + By.vaadin("#header[" + i + "]"))); + + // Remove Footer + $(GridElement.class).first().getFooterCell(i, 0) + .$(ButtonElement.class).first().click(); + assertFalse( + "Footer " + i + " should not be present.", + $(GridElement.class).first().isElementPresent( + By.vaadin("#footer[" + i + "]"))); + } + + assertNoErrorNotifications(); + } }