diff options
author | Anna Koskinen <Ansku@users.noreply.github.com> | 2018-10-01 13:34:22 +0300 |
---|---|---|
committer | Sun Zhe <31067185+ZheSun88@users.noreply.github.com> | 2018-10-01 13:34:22 +0300 |
commit | 2aa7a0696a729a3c70ae8bf0ea6293e4a82e0075 (patch) | |
tree | a63b65171b45ec637d57e16a40a72a1918af567c /uitest | |
parent | e093bef0ccabd0843baee19318b61ef254911ab9 (diff) | |
download | vaadin-framework-2aa7a0696a729a3c70ae8bf0ea6293e4a82e0075.tar.gz vaadin-framework-2aa7a0696a729a3c70ae8bf0ea6293e4a82e0075.zip |
Replaced Grid's internal size calculation fix with an indexing fix. (#11154)
- More lightweight, and fixes things for any custom implementations of
Escalator as well.
Fixes #11044
Diffstat (limited to 'uitest')
-rw-r--r-- | uitest/src/main/java/com/vaadin/tests/components/grid/GridScrolledToBottom.java | 47 | ||||
-rw-r--r-- | uitest/src/test/java/com/vaadin/tests/components/grid/GridScrolledToBottomTest.java | 97 |
2 files changed, 144 insertions, 0 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridScrolledToBottom.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridScrolledToBottom.java new file mode 100644 index 0000000000..b1bf8738f1 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridScrolledToBottom.java @@ -0,0 +1,47 @@ +package com.vaadin.tests.components.grid; + +import java.util.ArrayList; +import java.util.List; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.data.bean.Person; +import com.vaadin.ui.Grid; +import com.vaadin.ui.Label; +import com.vaadin.ui.VerticalSplitPanel; + +public class GridScrolledToBottom extends SimpleGridUI { + + @Override + protected void setup(VaadinRequest request) { + Grid<Person> grid = createGrid(); + grid.setSizeFull(); + + VerticalSplitPanel splitPanel = new VerticalSplitPanel(grid, + new Label("Foo")); + splitPanel.setHeight("200px"); + splitPanel.setSplitPosition(100); + getLayout().addComponent(splitPanel); + } + + @Override + protected List<Person> createPersons() { + List<Person> persons = new ArrayList<>(); + for (int i = 0; i < 100; ++i) { + Person person = new Person(); + person.setFirstName("Person " + i); + person.setAge(i); + persons.add(person); + } + return persons; + } + + @Override + protected String getTestDescription() { + return "Resizing a Grid when it's scrolled to bottom shouldn't cause indexing to jump."; + } + + @Override + protected Integer getTicketNumber() { + return 11044; + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridScrolledToBottomTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridScrolledToBottomTest.java new file mode 100644 index 0000000000..e4fd2fc2dd --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridScrolledToBottomTest.java @@ -0,0 +1,97 @@ +package com.vaadin.tests.components.grid; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.number.IsCloseTo.closeTo; +import static org.junit.Assert.assertEquals; + +import java.util.List; + +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.testbench.TestBenchElement; +import com.vaadin.testbench.elements.GridElement; +import com.vaadin.testbench.elements.GridElement.GridRowElement; +import com.vaadin.testbench.elements.VerticalSplitPanelElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class GridScrolledToBottomTest extends MultiBrowserTest { + + @Test + public void testResizingAndBack() { + openTestURL(); + GridElement grid = $(GridElement.class).first(); + grid.scrollToRow(99); + + GridRowElement row99 = grid.getRow(99); + int rowHeight = row99.getSize().getHeight(); + assertThat(grid.getLocation().getY() + grid.getSize().getHeight(), + greaterThan(row99.getLocation().getY() + rowHeight - 2)); + + VerticalSplitPanelElement splitPanel = $( + VerticalSplitPanelElement.class).first(); + TestBenchElement splitter = splitPanel.getSplitter(); + // resize by three rows + Actions actions = new Actions(driver); + actions.clickAndHold(splitter).moveByOffset(0, -rowHeight * 3).release() + .perform(); + // resize back by two rows + actions.clickAndHold(splitter).moveByOffset(0, rowHeight * 2).release() + .perform(); + + GridRowElement row95 = grid.getRow(95); + GridRowElement row97 = grid.getRow(97); + assertThat((double) row97.getLocation().getY(), + greaterThan(row95.getLocation().getY() + rowHeight * 1.5)); + } + + @Test + public void testResizingHalfRow() { + openTestURL(); + GridElement grid = $(GridElement.class).first(); + grid.scrollToRow(99); + + GridRowElement row99 = grid.getRow(99); + int rowHeight = row99.getSize().getHeight(); + int gridBottomY = grid.getLocation().getY() + + grid.getSize().getHeight(); + + // ensure that grid really is scrolled to bottom + assertThat((double) gridBottomY, + closeTo((double) row99.getLocation().getY() + rowHeight, 1d)); + + VerticalSplitPanelElement splitPanel = $( + VerticalSplitPanelElement.class).first(); + TestBenchElement splitter = splitPanel.getSplitter(); + // resize by half a row + Actions actions = new Actions(driver); + actions.clickAndHold(splitter).moveByOffset(0, -rowHeight / 2).release() + .perform(); + // the last row is now only half visible, and in DOM tree it's actually + // the first row now but positioned to the bottom + + // can't query grid.getRow(99) now or it moves the row position, + // have to use element query instead + List<WebElement> rows = grid.findElement(By.className("v-grid-body")) + .findElements(By.className("v-grid-row")); + WebElement firstRow = rows.get(0); + WebElement lastRow = rows.get(rows.size() - 1); + + // ensure the scrolling didn't jump extra + assertEquals("Person 99", + firstRow.findElement(By.className("v-grid-cell")).getText()); + assertEquals("Person 98", + lastRow.findElement(By.className("v-grid-cell")).getText()); + + // re-calculate current end position + gridBottomY = grid.getLocation().getY() + grid.getSize().getHeight(); + // ensure the correct final row really is only half visible at the + // bottom + assertThat(gridBottomY, greaterThan(firstRow.getLocation().getY())); + assertThat(firstRow.getLocation().getY() + rowHeight, + greaterThan(gridBottomY)); + } +} |