summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Hyvönen <pekka@vaadin.com>2015-04-23 14:29:25 +0300
committerPekka Hyvönen <pekka@vaadin.com>2015-04-27 06:53:08 +0000
commit98f22b3a664034b655c08f7c20dbe4219052865b (patch)
tree4c772e5f94759f48c490630a9cc76430710061a2
parent0435a27fc9ed0e04f33d7b046e66f571ab4b09e0 (diff)
downloadvaadin-framework-98f22b3a664034b655c08f7c20dbe4219052865b.tar.gz
vaadin-framework-98f22b3a664034b655c08f7c20dbe4219052865b.zip
Fixed Grid details row height regression and refactored tests (#17423)
Fixed regression caused by initial #17423 change Refactored tests for Grid's details row and added @TestCategory("grid"). Change-Id: I0b68eb7d6650d16700104f76b00972483d615855
-rw-r--r--client/src/com/vaadin/client/widgets/Grid.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/GridDetailsLocation.java (renamed from uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetails.java)20
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/GridDetailsLocationTest.java (renamed from uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetailsTest.java)168
3 files changed, 127 insertions, 63 deletions
diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java
index 005532a849..08a86fe6a7 100644
--- a/client/src/com/vaadin/client/widgets/Grid.java
+++ b/client/src/com/vaadin/client/widgets/Grid.java
@@ -2901,7 +2901,7 @@ public class Grid<T> extends ResizeComposite implements
* re-measure it to make sure that it's the correct height.
*/
double measuredHeight = WidgetUtil
- .getRequiredHeightBoundingClientRectDouble(spacerElement);
+ .getRequiredHeightBoundingClientRectDouble(element);
assert getElement().isOrHasChild(spacerElement) : "The spacer element wasn't in the DOM during measurement, but was assumed to be.";
spacerHeight = measuredHeight;
}
diff --git a/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetails.java b/uitest/src/com/vaadin/tests/components/grid/GridDetailsLocation.java
index 5659f01bdd..2880df44b0 100644
--- a/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetails.java
+++ b/uitest/src/com/vaadin/tests/components/grid/GridDetailsLocation.java
@@ -37,7 +37,7 @@ import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
@Theme(ValoTheme.THEME_NAME)
-public class GridScrollToRowWithDetails extends UI {
+public class GridDetailsLocation extends UI {
private final DetailsGenerator detailsGenerator = new DetailsGenerator() {
@Override
@@ -45,6 +45,8 @@ public class GridScrollToRowWithDetails extends UI {
Person person = (Person) rowReference.getItemId();
Label label = new Label(person.getFirstName() + " "
+ person.getLastName());
+ // currently the decorator row doesn't change its height when the
+ // content height is different.
label.setHeight("30px");
return label;
}
@@ -77,23 +79,9 @@ public class GridScrollToRowWithDetails extends UI {
layout.addComponent(checkbox);
numberTextField = new TextField("Row");
- numberTextField.setImmediate(false);
+ numberTextField.setImmediate(true);
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
diff --git a/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetailsTest.java b/uitest/src/com/vaadin/tests/components/grid/GridDetailsLocationTest.java
index b6ecd3f6e2..06e79ac509 100644
--- a/uitest/src/com/vaadin/tests/components/grid/GridScrollToRowWithDetailsTest.java
+++ b/uitest/src/com/vaadin/tests/components/grid/GridDetailsLocationTest.java
@@ -15,39 +15,46 @@
*/
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.Assert;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.StaleElementReferenceException;
+import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedCondition;
-import com.vaadin.shared.ui.grid.Range;
+import com.vaadin.testbench.TestBenchElement;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.CheckBoxElement;
+import com.vaadin.testbench.elements.GridElement.GridRowElement;
import com.vaadin.testbench.elements.TextFieldElement;
+import com.vaadin.testbench.parallel.TestCategory;
import com.vaadin.tests.components.grid.basicfeatures.element.CustomGridElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
-public class GridScrollToRowWithDetailsTest extends MultiBrowserTest {
+@TestCategory("grid")
+public class GridDetailsLocationTest extends MultiBrowserTest {
+
+ private static final int decoratorDefaultHeight = 50;
+ private static final int decoratorDefinedHeight = 30;
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) {
+ boolean scrollFirstToBottom) {
this.rowIndex = rowIndex;
this.useGenerator = useGenerator;
this.scrollFirstToBottom = scrollFirstToBottom;
- this.scrollTarget = Math.max(0, scrollTarget);
}
public int getRowIndex() {
@@ -62,45 +69,33 @@ public class GridScrollToRowWithDetailsTest extends MultiBrowserTest {
return scrollFirstToBottom;
}
- public int getScrollTarget() {
- return scrollTarget;
- }
-
@Override
public String toString() {
return "Param [rowIndex=" + getRowIndex() + ", useGenerator="
+ useGenerator() + ", scrollFirstToBottom="
- + scrollFirstToBottom() + ", scrollTarget="
- + getScrollTarget() + "]";
+ + scrollFirstToBottom() + "]";
}
+
}
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 },
+ // row, top+noGen, top+gen
+ { 0, decoratorDefaultHeight, decoratorDefinedHeight },
+ { 500, decoratorDefaultHeight, decoratorDefinedHeight },
+ { 999, decoratorDefaultHeight, decoratorDefinedHeight},
};
// @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));
+
+ data.add(new Param(rowIndex, false, false));
+ data.add(new Param(rowIndex, true, false));
+ data.add(new Param(rowIndex, false, true));
+ data.add(new Param(rowIndex, true, true));
}
return data;
@@ -122,11 +117,7 @@ public class GridScrollToRowWithDetailsTest extends MultiBrowserTest {
// the tested method
toggleAndScroll(param.getRowIndex());
- Range allowedRange = Range.withLength(
- param.getScrollTarget() - 5, 10);
- assertTrue(
- allowedRange + " does not contain " + getScrollTop(),
- allowedRange.contains(getScrollTop()));
+ verifyLocation(param);
} catch (Throwable t) {
throw new Throwable("" + param, t);
}
@@ -144,17 +135,98 @@ public class GridScrollToRowWithDetailsTest extends MultiBrowserTest {
// the tested method
scrollAndToggle(param.getRowIndex());
- Range allowedRange = Range.withLength(
- param.getScrollTarget() - 5, 10);
- assertTrue(
- allowedRange + " does not contain " + getScrollTop(),
- allowedRange.contains(getScrollTop()));
+ verifyLocation(param);
+
} catch (Throwable t) {
throw new Throwable("" + param, t);
}
}
}
+ @Test
+ public void testDecoratorHeightWithNoGenerator() {
+ openTestURL();
+ toggleAndScroll(5);
+
+ verifyDetailsRowHeight(5, decoratorDefaultHeight);
+ }
+
+ @Test
+ public void testDecoratorHeightWithGenerator() {
+ openTestURL();
+ useGenerator(true);
+ toggleAndScroll(5);
+
+ verifyDetailsRowHeight(5, decoratorDefinedHeight);
+ }
+
+ private void verifyDetailsRowHeight(int rowIndex, int expectedHeight) {
+ waitForDetailsVisible();
+ WebElement details = getDetailsElement();
+ Assert.assertEquals("Wrong details row height", expectedHeight, details
+ .getSize().getHeight());
+ }
+
+ private void verifyLocation(Param param) {
+ Assert.assertFalse("Notification was present",
+ isElementPresent(By.className("v-Notification")));
+
+ TestBenchElement headerRow = getGrid().getHeaderRow(0);
+ final int topBoundary = headerRow.getLocation().getX()
+ + headerRow.getSize().height;
+ final int bottomBoundary = getGrid().getLocation().getX()
+ + getGrid().getSize().getHeight()
+ - getHorizontalScrollbar().getSize().height;
+
+ GridRowElement row = getGrid().getRow(param.getRowIndex());
+ final int rowTop = row.getLocation().getX();
+
+ waitForDetailsVisible();
+ WebElement details = getDetailsElement();
+ final int detailsBottom = details.getLocation().getX()
+ + details.getSize().getHeight();
+
+ assertGreaterOrEqual("Row top should be inside grid, gridTop:"
+ + topBoundary + " rowTop" + rowTop, topBoundary, rowTop);
+ assertLessThanOrEqual(
+ "Decorator bottom should be inside grid, gridBottom:"
+ + bottomBoundary + " decoratorBotton:" + detailsBottom,
+ detailsBottom, bottomBoundary);
+
+ Assert.assertFalse("Notification was present",
+ isElementPresent(By.className("v-Notification")));
+ }
+
+ private final By locator = By.className("v-grid-spacer");
+
+ private WebElement getDetailsElement() {
+ return findElement(locator);
+ }
+
+ private void waitForDetailsVisible() {
+ waitUntil(new ExpectedCondition<WebElement>() {
+
+ @Override
+ public WebElement apply(WebDriver driver) {
+ try {
+ WebElement detailsElement = getDetailsElement();
+ return detailsElement.isDisplayed()
+ && detailsElement.getSize().getHeight() > 3 ? detailsElement
+ : null;
+ } catch (StaleElementReferenceException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "visibility of element located by " + locator;
+ }
+
+ }, 5);
+ waitForElementVisible(By.className("v-grid-spacer"));
+ }
+
private void scrollToBottom(boolean scrollFirstToBottom) {
if (scrollFirstToBottom) {
executeScript("arguments[0].scrollTop = 9999999",
@@ -204,21 +276,25 @@ public class GridScrollToRowWithDetailsTest extends MultiBrowserTest {
}
private void setRow(int row) {
- $(TextFieldElement.class).first().setValue(String.valueOf(row));
+ $(TextFieldElement.class).first().clear();
+ $(TextFieldElement.class).first().sendKeys(String.valueOf(row),
+ Keys.ENTER, Keys.TAB);
}
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;
}
+
+ private WebElement getHorizontalScrollbar() {
+ WebElement scrollBar = getGrid().findElement(
+ By.className("v-grid-scroller-horizontal"));
+ return scrollBar;
+ }
+
}