diff options
author | adam <adam@vaadin.com> | 2016-05-30 15:07:55 +0300 |
---|---|---|
committer | Teemu Suo-Anttila <teemusa@vaadin.com> | 2016-06-07 08:22:14 +0000 |
commit | 5ce9d387a1b0b749f12feb627a3d56556a9727a5 (patch) | |
tree | e9380bb0cf2b0fcb2dd44cb48e9dd89782cd8c92 /uitest | |
parent | bc0dd14e6778390272b754b5e5686a3e40652de0 (diff) | |
download | vaadin-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.java | 64 | ||||
-rw-r--r-- | uitest/src/test/java/com/vaadin/tests/components/grid/GridResizeHiddenColumnTest.java | 116 |
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(); + } +} |