summaryrefslogtreecommitdiffstats
path: root/uitest
diff options
context:
space:
mode:
authoradam <adam@vaadin.com>2016-05-30 15:07:55 +0300
committerTeemu Suo-Anttila <teemusa@vaadin.com>2016-06-07 08:22:14 +0000
commit5ce9d387a1b0b749f12feb627a3d56556a9727a5 (patch)
treee9380bb0cf2b0fcb2dd44cb48e9dd89782cd8c92 /uitest
parentbc0dd14e6778390272b754b5e5686a3e40652de0 (diff)
downloadvaadin-framework-5ce9d387a1b0b749f12feb627a3d56556a9727a5.tar.gz
vaadin-framework-5ce9d387a1b0b749f12feb627a3d56556a9727a5.zip
Fixing messed up column in Grid after hide, resize and show (#19826)
When resizing a column in Grid, widths of all columns without a fixed width (-1) are set to their actual width. This is 0 when the column is hidden. Change-Id: If50e71c748cd0674f44d9e51777518eb48b42c5c
Diffstat (limited to 'uitest')
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridResizeHiddenColumn.java64
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridResizeHiddenColumnTest.java116
2 files changed, 180 insertions, 0 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridResizeHiddenColumn.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridResizeHiddenColumn.java
new file mode 100644
index 0000000000..c970f97500
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridResizeHiddenColumn.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.grid;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.tests.fieldgroup.ComplexPerson;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.ColumnResizeEvent;
+import com.vaadin.ui.Grid.ColumnResizeListener;
+
+@SuppressWarnings("serial")
+public class GridResizeHiddenColumn extends AbstractTestUIWithLog {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Grid grid = new Grid();
+ grid.setContainerDataSource(ComplexPerson.createContainer(100));
+ grid.setColumns("firstName", "lastName", "gender", "birthDate");
+ grid.getColumn("firstName").setHidable(true);
+ grid.getColumn("lastName").setHidable(true).setHidden(true);
+ grid.getColumn("gender").setHidable(true).setHidden(true);
+ grid.getColumn("birthDate").setHidable(true);
+
+ addComponent(grid);
+
+ grid.addColumnResizeListener(new ColumnResizeListener() {
+ @Override
+ public void columnResize(ColumnResizeEvent event) {
+ log(String.format("Column resized: id=%s, width=%s",
+ event.getColumn().getPropertyId(),
+ event.getColumn().getWidth()));
+ }
+ });
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Resize columns and then make hidden column visible. The originally hidden column should have an extended width.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 19826;
+ }
+
+ @Override
+ public String getDescription() {
+ return "Tests resize when columns with undefined width (-1) are hidden";
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridResizeHiddenColumnTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridResizeHiddenColumnTest.java
new file mode 100644
index 0000000000..ab9b90856c
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridResizeHiddenColumnTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.grid;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.testbench.elements.GridElement.GridCellElement;
+import com.vaadin.testbench.parallel.BrowserUtil;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class GridResizeHiddenColumnTest extends MultiBrowserTest {
+
+ @Before
+ public void before() {
+ openTestURL();
+ }
+
+ @Test
+ public void testDragResizeHiddenColumnSize() {
+ GridElement grid = $(GridElement.class).first();
+ Actions action = new Actions(getDriver());
+
+ // Check if column 'Gender' hidden
+ List<GridCellElement> headerCells = grid.getHeaderCells(0);
+ Assert.assertEquals("There should be two visible columns", 2,
+ headerCells.size());
+ Assert.assertFalse("Gender column should be hidden",
+ containsText("Gender", headerCells));
+
+ // Resize first column
+ int dragOffset = -100;
+ int headerCellWidth = headerCells.get(0).getSize().getWidth();
+ dragResizeColumn(headerCells.get(0), 1, dragOffset);
+
+ // When dragging the resizer on IE8, the final offset will be smaller
+ // (might be an issue with the feature that doesn't start resizing until
+ // the cursor moved a few pixels)
+ double delta = BrowserUtil.isIE8(getDesiredCapabilities()) ? 5d : 0;
+ Assert.assertEquals(
+ "Column width should've changed by " + dragOffset + "px",
+ headerCellWidth + dragOffset,
+ headerCells.get(0).getSize().getWidth(), delta);
+
+ // Make column 'Gender' visible
+ WebElement menuButton = grid.findElement(By.className("v-contextmenu"))
+ .findElement(By.tagName("button"));
+ action.click(menuButton).perform(); // Click on menu button
+
+ WebElement sidebarPopup = findElement(
+ By.className("v-grid-sidebar-popup"));
+ WebElement visibilityToggle = findElementByText("Gender",
+ sidebarPopup.findElements(By.className("gwt-MenuItem")));
+ action.click(visibilityToggle).perform(); // Click on 'Gender' menu item
+
+ // Check if column 'Gender' is visible
+ headerCells = grid.getHeaderCells(0);
+ Assert.assertEquals("There should be three visible columns", 3,
+ headerCells.size());
+ Assert.assertTrue("Gender column should be visible",
+ containsText("Gender", headerCells));
+
+ // Check if column 'Gender' has expanded width
+ int widthSum = 0;
+ for (GridCellElement e : headerCells) {
+ widthSum += e.getSize().getWidth();
+ }
+ Assert.assertEquals("Gender column should take up the remaining space",
+ grid.getHeader().getSize().getWidth(), widthSum, 1d);
+ }
+
+ private WebElement findElementByText(String text,
+ List<? extends WebElement> elements) {
+ for (WebElement e : elements) {
+ if (text.equalsIgnoreCase(e.getText())) {
+ return e;
+ }
+ }
+ return null;
+ }
+
+ private boolean containsText(String text,
+ List<? extends WebElement> elements) {
+ return !(findElementByText(text, elements) == null);
+ }
+
+ private void dragResizeColumn(GridCellElement headerCell, int posX,
+ int offset) {
+ Dimension size = headerCell.getSize();
+ new Actions(getDriver())
+ .moveToElement(headerCell, size.getWidth() + posX,
+ size.getHeight() / 2)
+ .clickAndHold().moveByOffset(offset, 0).release().perform();
+ }
+}