summaryrefslogtreecommitdiffstats
path: root/uitest/src
diff options
context:
space:
mode:
authorHenrik Paul <henrik@vaadin.com>2015-03-30 15:28:41 +0300
committerVaadin Code Review <review@vaadin.com>2015-03-31 11:00:53 +0000
commit2080f86e03552c56d52f488e4dcd72282cd64f62 (patch)
tree088f49e449a52b69450dca5ecd3c5f36f000d8ea /uitest/src
parent3eb8110f13d51a859d40da9dfcb9ae2edb890f8c (diff)
downloadvaadin-framework-2080f86e03552c56d52f488e4dcd72282cd64f62.tar.gz
vaadin-framework-2080f86e03552c56d52f488e4dcd72282cd64f62.zip
Server Grid.scrollToRow takes details into account (#17270)
Change-Id: I7b6d67aeb4d625a53e6fe370b729016a84e33214
Diffstat (limited to 'uitest/src')
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetails.java133
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetailsTest.java224
-rw-r--r--uitest/src/com/vaadin/tests/util/PersonContainer.java6
3 files changed, 362 insertions, 1 deletions
diff --git a/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetails.java b/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetails.java
new file mode 100644
index 0000000000..5659f01bdd
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetails.java
@@ -0,0 +1,133 @@
+/*
+ * 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.annotations.Theme;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.util.Person;
+import com.vaadin.tests.util.PersonContainer;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.DetailsGenerator;
+import com.vaadin.ui.Grid.RowReference;
+import com.vaadin.ui.Grid.SelectionMode;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Layout;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.themes.ValoTheme;
+
+@Theme(ValoTheme.THEME_NAME)
+public class GridScrollToRowWithDetails extends UI {
+
+ private final DetailsGenerator detailsGenerator = new DetailsGenerator() {
+ @Override
+ public Component getDetails(RowReference rowReference) {
+ Person person = (Person) rowReference.getItemId();
+ Label label = new Label(person.getFirstName() + " "
+ + person.getLastName());
+ label.setHeight("30px");
+ return label;
+ }
+ };
+
+ private TextField numberTextField;
+ private Grid grid;
+
+ @Override
+ protected void init(VaadinRequest request) {
+
+ Layout layout = new VerticalLayout();
+
+ grid = new Grid(PersonContainer.createWithTestData(1000));
+ grid.setSelectionMode(SelectionMode.NONE);
+ layout.addComponent(grid);
+
+ final CheckBox checkbox = new CheckBox("Details generator");
+ checkbox.addValueChangeListener(new ValueChangeListener() {
+ @Override
+ @SuppressWarnings("boxing")
+ public void valueChange(ValueChangeEvent event) {
+ if (checkbox.getValue()) {
+ grid.setDetailsGenerator(detailsGenerator);
+ } else {
+ grid.setDetailsGenerator(DetailsGenerator.NULL);
+ }
+ }
+ });
+ layout.addComponent(checkbox);
+
+ numberTextField = new TextField("Row");
+ numberTextField.setImmediate(false);
+ layout.addComponent(numberTextField);
+
+ layout.addComponent(new Button("Toggle", new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ toggle();
+ }
+ }));
+
+ layout.addComponent(new Button("Scroll to", new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ scrollTo();
+ }
+ }));
+
+ layout.addComponent(new Button("Toggle and scroll",
+ new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ toggle();
+ scrollTo();
+ }
+ }));
+ layout.addComponent(new Button("Scroll and toggle",
+ new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ scrollTo();
+ toggle();
+ }
+ }));
+
+ setContent(layout);
+ }
+
+ private void toggle() {
+ Object itemId = getItemId();
+ boolean isVisible = grid.isDetailsVisible(itemId);
+ grid.setDetailsVisible(itemId, !isVisible);
+ }
+
+ private void scrollTo() {
+ grid.scrollTo(getItemId());
+ }
+
+ private Object getItemId() {
+ int row = Integer.parseInt(numberTextField.getValue());
+ Object itemId = grid.getContainerDataSource().getIdByIndex(row);
+ return itemId;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetailsTest.java b/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetailsTest.java
new file mode 100644
index 0000000000..b6ecd3f6e2
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetailsTest.java
@@ -0,0 +1,224 @@
+/*
+ * 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 static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.shared.ui.grid.Range;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.CheckBoxElement;
+import com.vaadin.testbench.elements.TextFieldElement;
+import com.vaadin.tests.components.grid.basicfeatures.element.CustomGridElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class GridScrollToRowWithDetailsTest extends MultiBrowserTest {
+
+ private static class Param {
+ private final int rowIndex;
+ private final boolean useGenerator;
+ private final boolean scrollFirstToBottom;
+ private final int scrollTarget;
+
+ public Param(int rowIndex, boolean useGenerator,
+ boolean scrollFirstToBottom, int scrollTarget) {
+ this.rowIndex = rowIndex;
+ this.useGenerator = useGenerator;
+ this.scrollFirstToBottom = scrollFirstToBottom;
+ this.scrollTarget = Math.max(0, scrollTarget);
+ }
+
+ public int getRowIndex() {
+ return rowIndex;
+ }
+
+ public boolean useGenerator() {
+ return useGenerator;
+ }
+
+ public boolean scrollFirstToBottom() {
+ return scrollFirstToBottom;
+ }
+
+ public int getScrollTarget() {
+ return scrollTarget;
+ }
+
+ @Override
+ public String toString() {
+ return "Param [rowIndex=" + getRowIndex() + ", useGenerator="
+ + useGenerator() + ", scrollFirstToBottom="
+ + scrollFirstToBottom() + ", scrollTarget="
+ + getScrollTarget() + "]";
+ }
+ }
+
+ public static Collection<Param> parameters() {
+ List<Param> data = new ArrayList<Param>();
+
+ int[][] params = new int[][] {// @formatter:off
+ // row, top+noGen, top+gen, bot+noGen, bot+gen
+ { 0, 0, 0, 0, 0 },
+ { 500, 18741, 18723, 19000, 19000 },
+ { 999, 37703, 37685, 37703, 37685 },
+ };
+ // @formatter:on
+
+ for (int i[] : params) {
+ int rowIndex = i[0];
+ int targetTopScrollWithoutGenerator = i[1];
+ int targetTopScrollWithGenerator = i[2];
+ int targetBottomScrollWithoutGenerator = i[3];
+ int targetBottomScrollWithGenerator = i[4];
+
+ data.add(new Param(rowIndex, false, false,
+ targetTopScrollWithoutGenerator));
+ data.add(new Param(rowIndex, true, false,
+ targetTopScrollWithGenerator));
+ data.add(new Param(rowIndex, false, true,
+ targetBottomScrollWithoutGenerator));
+ data.add(new Param(rowIndex, true, true,
+ targetBottomScrollWithGenerator));
+ }
+
+ return data;
+ }
+
+ @Before
+ public void setUp() {
+ setDebug(true);
+ }
+
+ @Test
+ public void toggleAndScroll() throws Throwable {
+ for (Param param : parameters()) {
+ try {
+ openTestURL();
+ useGenerator(param.useGenerator());
+ scrollToBottom(param.scrollFirstToBottom());
+
+ // the tested method
+ toggleAndScroll(param.getRowIndex());
+
+ Range allowedRange = Range.withLength(
+ param.getScrollTarget() - 5, 10);
+ assertTrue(
+ allowedRange + " does not contain " + getScrollTop(),
+ allowedRange.contains(getScrollTop()));
+ } catch (Throwable t) {
+ throw new Throwable("" + param, t);
+ }
+ }
+ }
+
+ @Test
+ public void scrollAndToggle() throws Throwable {
+ for (Param param : parameters()) {
+ try {
+ openTestURL();
+ useGenerator(param.useGenerator());
+ scrollToBottom(param.scrollFirstToBottom());
+
+ // the tested method
+ scrollAndToggle(param.getRowIndex());
+
+ Range allowedRange = Range.withLength(
+ param.getScrollTarget() - 5, 10);
+ assertTrue(
+ allowedRange + " does not contain " + getScrollTop(),
+ allowedRange.contains(getScrollTop()));
+ } catch (Throwable t) {
+ throw new Throwable("" + param, t);
+ }
+ }
+ }
+
+ private void scrollToBottom(boolean scrollFirstToBottom) {
+ if (scrollFirstToBottom) {
+ executeScript("arguments[0].scrollTop = 9999999",
+ getVerticalScrollbar());
+ }
+ }
+
+ private void useGenerator(boolean use) {
+ CheckBoxElement checkBox = $(CheckBoxElement.class).first();
+ boolean isChecked = isCheckedValo(checkBox);
+ if (use != isChecked) {
+ clickValo(checkBox);
+ }
+ }
+
+ @SuppressWarnings("boxing")
+ private boolean isCheckedValo(CheckBoxElement checkBoxElement) {
+ WebElement checkbox = checkBoxElement.findElement(By.tagName("input"));
+ Object value = executeScript("return arguments[0].checked;", checkbox);
+ return (Boolean) value;
+ }
+
+ private void clickValo(CheckBoxElement checkBoxElement) {
+ checkBoxElement.findElement(By.tagName("label")).click();
+ }
+
+ private Object executeScript(String string, Object... param) {
+ return ((JavascriptExecutor) getDriver()).executeScript(string, param);
+ }
+
+ private void scrollAndToggle(int row) {
+ setRow(row);
+ getScrollAndToggle().click();
+ }
+
+ private void toggleAndScroll(int row) {
+ setRow(row);
+ getToggleAndScroll().click();
+ }
+
+ private ButtonElement getScrollAndToggle() {
+ return $(ButtonElement.class).caption("Scroll and toggle").first();
+ }
+
+ private ButtonElement getToggleAndScroll() {
+ return $(ButtonElement.class).caption("Toggle and scroll").first();
+ }
+
+ private void setRow(int row) {
+ $(TextFieldElement.class).first().setValue(String.valueOf(row));
+ }
+
+ private CustomGridElement getGrid() {
+ return $(CustomGridElement.class).first();
+ }
+
+ private int getScrollTop() {
+ return ((Long) executeScript("return arguments[0].scrollTop;",
+ getVerticalScrollbar())).intValue();
+ }
+
+ private WebElement getVerticalScrollbar() {
+ WebElement scrollBar = getGrid().findElement(
+ By.className("v-grid-scroller-vertical"));
+ return scrollBar;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/util/PersonContainer.java b/uitest/src/com/vaadin/tests/util/PersonContainer.java
index 611e5d3adb..709086be29 100644
--- a/uitest/src/com/vaadin/tests/util/PersonContainer.java
+++ b/uitest/src/com/vaadin/tests/util/PersonContainer.java
@@ -32,10 +32,14 @@ public class PersonContainer extends BeanItemContainer<Person> implements
}
public static PersonContainer createWithTestData() {
+ return createWithTestData(100);
+ }
+
+ public static PersonContainer createWithTestData(int size) {
PersonContainer c = null;
Random r = new Random(0);
c = new PersonContainer();
- for (int i = 0; i < 100; i++) {
+ for (int i = 0; i < size; i++) {
Person p = new Person();
p.setFirstName(TestDataGenerator.getFirstName(r));
p.setLastName(TestDataGenerator.getLastName(r));