summaryrefslogtreecommitdiffstats
path: root/uitest
diff options
context:
space:
mode:
authorAnna Miroshnik <anna.miroshnik@arcadia.spb.ru>2014-09-15 17:11:56 +0400
committerSauli Tähkäpää <sauli@vaadin.com>2014-11-10 11:50:16 +0200
commit46878a5f5e39bf70e37f83df2563a4c23f38b7ac (patch)
treeccb2e46d0cbe0719fe043a61f2d7fe76d2fca7ef /uitest
parent6143c8bcfda9e00f894f96d1fc41db6e3187272a (diff)
downloadvaadin-framework-46878a5f5e39bf70e37f83df2563a4c23f38b7ac.tar.gz
vaadin-framework-46878a5f5e39bf70e37f83df2563a4c23f38b7ac.zip
Re-adding all rows in Table causes table to loose scroll position (#14581)
Fix: if to remove (container.removeAllItems()) and then to re-add(container.addAll(..)) the same collection in table container - > scroll position is not loosed now. The hash code and scroll position of the old container is stored when a new container is added. If the new container has the same hash code, we restore the scroll position. The scroll position is not restored if another items added to the container. Change-Id: I52a22c3c1c7b71f1b3447b9d592ab8fececd67b8
Diffstat (limited to 'uitest')
-rw-r--r--uitest/src/com/vaadin/tests/components/table/TableRepairsScrollPositionOnReAddingAllRows.java73
-rw-r--r--uitest/src/com/vaadin/tests/components/table/TableRepairsScrollPositionOnReAddingAllRowsTest.java73
2 files changed, 146 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/components/table/TableRepairsScrollPositionOnReAddingAllRows.java b/uitest/src/com/vaadin/tests/components/table/TableRepairsScrollPositionOnReAddingAllRows.java
new file mode 100644
index 0000000000..d9cbf007df
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/TableRepairsScrollPositionOnReAddingAllRows.java
@@ -0,0 +1,73 @@
+package com.vaadin.tests.components.table;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+
+public class TableRepairsScrollPositionOnReAddingAllRows extends AbstractTestUI {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final BeanItemContainer<TableItem> cont = new BeanItemContainer<TableItem>(
+ TableItem.class);
+ final List<TableItem> itemList = new ArrayList<TableItem>();
+
+ Button button1 = new Button("ReAdd rows");
+ button1.setId("button1");
+ button1.addClickListener(new ClickListener() {
+
+ @Override
+ public void buttonClick(com.vaadin.ui.Button.ClickEvent event) {
+ cont.removeAllItems();
+ cont.addAll(itemList);
+ }
+ });
+
+ for (int i = 0; i < 80; i++) {
+ TableItem ti = new TableItem();
+ ti.setName("Name_" + i);
+ itemList.add(ti);
+ cont.addBean(ti);
+ }
+
+ final Table table = new Table();
+ table.setPageLength(-1);
+ table.setContainerDataSource(cont);
+ table.setSelectable(true);
+
+ getLayout().addComponent(button1);
+ getLayout().addComponent(table);
+ }
+
+ public class TableItem implements Serializable {
+ private static final long serialVersionUID = -745849615488792221L;
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 14581;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "The scroll position should not be changed if removing and re-adding all rows in Table.";
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/table/TableRepairsScrollPositionOnReAddingAllRowsTest.java b/uitest/src/com/vaadin/tests/components/table/TableRepairsScrollPositionOnReAddingAllRowsTest.java
new file mode 100644
index 0000000000..807a80d182
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/TableRepairsScrollPositionOnReAddingAllRowsTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.table;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+
+import com.vaadin.testbench.commands.TestBenchCommandExecutor;
+import com.vaadin.testbench.elements.TableElement;
+import com.vaadin.testbench.screenshot.ImageComparison;
+import com.vaadin.testbench.screenshot.ReferenceNameGenerator;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class TableRepairsScrollPositionOnReAddingAllRowsTest extends
+ MultiBrowserTest {
+
+ @Test
+ public void testScrollRepairsAfterReAddingAllRows()
+ throws InterruptedException {
+ openTestURL();
+
+ WebElement buttonReAddRows = findElement(By.id("button1"));
+
+ scrollUp();
+
+ waitUntilNot(new ExpectedCondition<Boolean>() {
+ @Override
+ public Boolean apply(WebDriver input) {
+ return $(TableElement.class).first().getCell(49, 0) == null;
+ }
+ }, 10);
+
+ WebElement row = $(TableElement.class).first().getCell(49, 0);
+ int rowLocation = row.getLocation().getY();
+
+ buttonReAddRows.click();
+
+ row = $(TableElement.class).first().getCell(49, 0);
+ int newRowLocation = row.getLocation().getY();
+
+ assertThat(
+ "Scroll position should be the same as before Re-Adding all rows",
+ rowLocation == newRowLocation, is(true));
+ }
+
+ private void scrollUp() {
+ WebElement actualElement = getDriver().findElement(
+ By.className("v-table-body-wrapper"));
+ JavascriptExecutor js = new TestBenchCommandExecutor(getDriver(),
+ new ImageComparison(), new ReferenceNameGenerator());
+ js.executeScript("arguments[0].scrollTop = " + 1200, actualElement);
+ }
+}