summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <teemusa@vaadin.com>2016-01-22 14:23:55 +0200
committerTeemu Suo-Anttila <teemusa@vaadin.com>2016-02-15 17:11:45 +0200
commit656f5d4ab6beb560f205ee7d194e59f34a6fc315 (patch)
tree99b748e6a149a1745a54861e32de5dde34a75038
parent0e647a881cd6d23e57c34ac10dbe7cae22e178e2 (diff)
downloadvaadin-framework-656f5d4ab6beb560f205ee7d194e59f34a6fc315.tar.gz
vaadin-framework-656f5d4ab6beb560f205ee7d194e59f34a6fc315.zip
Fix Components cleanup on Header/FooterRow remove in Grid (#19497)
Change-Id: Iaa36f2dd6a61487ec49da3adb4cc9a2485641cd9
-rw-r--r--server/src/com/vaadin/ui/Grid.java11
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/GridHeaderFooterComponentsTest.java41
2 files changed, 50 insertions, 2 deletions
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();
+ }
}