summaryrefslogtreecommitdiffstats
path: root/uitest
diff options
context:
space:
mode:
Diffstat (limited to 'uitest')
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManager.java37
-rw-r--r--uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorBasicClientFeaturesWidget.java68
-rw-r--r--uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java5
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsTest.java49
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridScrolledToBottomTest.java13
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/GridColumnResizeModeTest.java8
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorBasicsTest.java22
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorSpacerTest.java52
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java492
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridDetailsManagerTest.java22
10 files changed, 663 insertions, 105 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManager.java b/uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManager.java
index 5699ee4372..8fb9a358e4 100644
--- a/uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManager.java
+++ b/uitest/src/main/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManager.java
@@ -48,7 +48,7 @@ public class TreeGridBigDetailsManager extends AbstractTestUI {
treeGrid.setSizeFull();
treeGrid.addColumn(String::toString).setCaption("String")
.setId("string");
- treeGrid.addColumn((i) -> "--").setCaption("Nothing");
+ treeGrid.addColumn((i) -> items.indexOf(i)).setCaption("Index");
treeGrid.setHierarchyColumn("string");
treeGrid.setDetailsGenerator(
row -> new Label("details for " + row.toString()));
@@ -77,21 +77,54 @@ public class TreeGridBigDetailsManager extends AbstractTestUI {
treeGrid.collapse(items);
});
collapseAll.setId("collapseAll");
+ @SuppressWarnings("deprecation")
Button scrollTo55 = new Button("Scroll to 55",
event -> treeGrid.scrollTo(55));
scrollTo55.setId("scrollTo55");
scrollTo55.setVisible(false);
+ Button scrollTo3055 = new Button("Scroll to 3055",
+ event -> treeGrid.scrollTo(3055));
+ scrollTo3055.setId("scrollTo3055");
+ scrollTo3055.setVisible(false);
+ Button scrollToEnd = new Button("Scroll to end",
+ event -> treeGrid.scrollToEnd());
+ scrollToEnd.setId("scrollToEnd");
+ scrollToEnd.setVisible(false);
+ Button scrollToStart = new Button("Scroll to start",
+ event -> treeGrid.scrollToStart());
+ scrollToStart.setId("scrollToStart");
+ scrollToStart.setVisible(false);
+
+ Button toggle15 = new Button("Toggle 15",
+ event -> treeGrid.setDetailsVisible(items.get(15),
+ !treeGrid.isDetailsVisible(items.get(15))));
+ toggle15.setId("toggle15");
+ toggle15.setVisible(false);
+
+ Button toggle3000 = new Button("Toggle 3000",
+ event -> treeGrid.setDetailsVisible(items.get(3000),
+ !treeGrid.isDetailsVisible(items.get(3000))));
+ toggle3000.setId("toggle3000");
+ toggle3000.setVisible(false);
+
Button addGrid = new Button("Add grid", event -> {
addComponent(treeGrid);
getLayout().setExpandRatio(treeGrid, 2);
scrollTo55.setVisible(true);
+ scrollTo3055.setVisible(true);
+ scrollToEnd.setVisible(true);
+ scrollToStart.setVisible(true);
+ toggle15.setVisible(true);
+ toggle3000.setVisible(true);
});
addGrid.setId("addGrid");
addComponents(
new HorizontalLayout(showDetails, hideDetails, expandAll,
collapseAll),
- new HorizontalLayout(addGrid, scrollTo55));
+ new HorizontalLayout(scrollTo55, scrollTo3055, scrollToEnd,
+ scrollToStart),
+ new HorizontalLayout(addGrid, toggle15, toggle3000));
getLayout().getParent().setHeight("100%");
getLayout().setHeight("100%");
diff --git a/uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorBasicClientFeaturesWidget.java b/uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorBasicClientFeaturesWidget.java
index 2d7dd5cc37..941f1ce928 100644
--- a/uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorBasicClientFeaturesWidget.java
+++ b/uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorBasicClientFeaturesWidget.java
@@ -1,9 +1,12 @@
package com.vaadin.tests.widgetset.client.grid;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import com.google.gwt.core.client.Duration;
+import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.TableCellElement;
import com.google.gwt.user.client.DOM;
@@ -16,6 +19,8 @@ import com.vaadin.client.widget.escalator.RowContainer;
import com.vaadin.client.widget.escalator.RowContainer.BodyRowContainer;
import com.vaadin.client.widget.escalator.Spacer;
import com.vaadin.client.widget.escalator.SpacerUpdater;
+import com.vaadin.client.widget.escalator.events.SpacerIndexChangedEvent;
+import com.vaadin.client.widget.escalator.events.SpacerIndexChangedHandler;
import com.vaadin.client.widgets.Escalator;
import com.vaadin.shared.ui.grid.ScrollDestination;
import com.vaadin.tests.widgetset.client.v7.grid.PureGWTTestApplication;
@@ -156,6 +161,7 @@ public class EscalatorBasicClientFeaturesWidget
private int rowCounter = 0;
private final List<Integer> columns = new ArrayList<>();
private final List<Integer> rows = new ArrayList<>();
+ private final Map<Integer, Integer> spacers = new HashMap<>();
@SuppressWarnings("boxing")
public void insertRows(final int offset, final int amount) {
@@ -247,6 +253,11 @@ public class EscalatorBasicClientFeaturesWidget
cell.setColSpan(2);
}
}
+ if (spacers.containsKey(cell.getRow()) && !escalator
+ .getBody().spacerExists(cell.getRow())) {
+ escalator.getBody().setSpacer(cell.getRow(),
+ spacers.get(cell.getRow()));
+ }
}
@Override
@@ -262,7 +273,12 @@ public class EscalatorBasicClientFeaturesWidget
public void removeRows(final int offset, final int amount) {
for (int i = 0; i < amount; i++) {
rows.remove(offset);
+ if (spacers.containsKey(offset + i)) {
+ spacers.remove(offset + i);
+ }
}
+ // the following spacers get their indexes updated through
+ // SpacerIndexChangedHandler
}
public void removeColumns(final int offset, final int amount) {
@@ -313,6 +329,21 @@ public class EscalatorBasicClientFeaturesWidget
createFrozenMenu();
createColspanMenu();
createSpacerMenu();
+
+ escalator.addHandler(new SpacerIndexChangedHandler() {
+ @Override
+ public void onSpacerIndexChanged(SpacerIndexChangedEvent event) {
+ // remove spacer from old index and move to new index
+ Integer height = data.spacers.remove(event.getOldIndex());
+ if (height != null) {
+ data.spacers.put(event.getNewIndex(), height);
+ } else {
+ // no height, make sure the new index doesn't
+ // point to anything else either
+ data.spacers.remove(event.getNewIndex());
+ }
+ }
+ }, SpacerIndexChangedEvent.TYPE);
}
private void createFrozenMenu() {
@@ -558,11 +589,24 @@ public class EscalatorBasicClientFeaturesWidget
@Override
public void init(Spacer spacer) {
spacer.getElement().appendChild(DOM.createInputText());
+ updateRowPositions(spacer);
}
@Override
public void destroy(Spacer spacer) {
spacer.getElement().removeAllChildren();
+ updateRowPositions(spacer);
+ }
+
+ private void updateRowPositions(Spacer spacer) {
+ if (spacer.getRow() < escalator.getBody()
+ .getRowCount()) {
+ Scheduler.get().scheduleFinally(() -> {
+ escalator.getBody().updateRowPositions(
+ spacer.getRow(),
+ escalator.getBody().getRowCount());
+ });
+ }
}
}), menupath);
@@ -575,12 +619,18 @@ public class EscalatorBasicClientFeaturesWidget
private void createSpacersMenuForRow(final int rowIndex,
String[] menupath) {
menupath = new String[] { menupath[0], menupath[1], "Row " + rowIndex };
- addMenuCommand("Set 100px",
- () -> escalator.getBody().setSpacer(rowIndex, 100), menupath);
- addMenuCommand("Set 50px",
- () -> escalator.getBody().setSpacer(rowIndex, 50), menupath);
- addMenuCommand("Remove",
- () -> escalator.getBody().setSpacer(rowIndex, -1), menupath);
+ addMenuCommand("Set 100px", () -> {
+ escalator.getBody().setSpacer(rowIndex, 100);
+ data.spacers.put(rowIndex, 100);
+ }, menupath);
+ addMenuCommand("Set 50px", () -> {
+ escalator.getBody().setSpacer(rowIndex, 50);
+ data.spacers.put(rowIndex, 50);
+ }, menupath);
+ addMenuCommand("Remove", () -> {
+ escalator.getBody().setSpacer(rowIndex, -1);
+ data.spacers.remove(rowIndex);
+ }, menupath);
addMenuCommand("Scroll here (ANY, 0)", () -> escalator
.scrollToSpacer(rowIndex, ScrollDestination.ANY, 0), menupath);
addMenuCommand("Scroll here row+spacer below (ANY, 0)", () -> escalator
@@ -596,6 +646,9 @@ public class EscalatorBasicClientFeaturesWidget
} else {
container.insertRows(offset, number);
}
+ if (container.getRowCount() > offset + number) {
+ container.refreshRows(offset + number, container.getRowCount());
+ }
}
private void removeRows(final RowContainer container, int offset,
@@ -606,6 +659,9 @@ public class EscalatorBasicClientFeaturesWidget
} else {
container.removeRows(offset, number);
}
+ if (container.getRowCount() > offset) {
+ container.refreshRows(offset, container.getRowCount());
+ }
}
private void insertColumns(final int offset, final int number) {
diff --git a/uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java b/uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java
index fe6f7ab94b..5d5148109b 100644
--- a/uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java
+++ b/uitest/src/main/java/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java
@@ -125,6 +125,11 @@ public class EscalatorProxy extends Escalator {
throw new UnsupportedOperationException(
"setNewRowCallback is not supported");
}
+
+ @Override
+ public void updateRowPositions(int index, int numberOfRows) {
+ rowContainer.updateRowPositions(index, numberOfRows);
+ }
}
private class RowContainerProxy implements RowContainer {
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsTest.java
index 3ff3d61809..d0122cd9df 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsTest.java
@@ -1,5 +1,9 @@
package com.vaadin.tests.components.grid;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import java.util.Locale;
import java.util.stream.IntStream;
import java.util.stream.Stream;
@@ -21,10 +25,6 @@ import com.vaadin.testbench.elements.TextFieldElement;
import com.vaadin.testbench.parallel.BrowserUtil;
import com.vaadin.tests.tb3.MultiBrowserTest;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
public class GridComponentsTest extends MultiBrowserTest {
@Test
@@ -219,19 +219,14 @@ public class GridComponentsTest extends MultiBrowserTest {
getScrollLeft(grid));
// Navigate back to fully visible TextField
- new Actions(getDriver()).sendKeys(Keys.chord(Keys.SHIFT, Keys.TAB))
- .perform();
+ pressKeyWithModifier(Keys.SHIFT, Keys.TAB);
assertEquals(
"Grid should not scroll when focusing the text field again. ",
scrollMax, getScrollLeft(grid));
// Navigate to out of viewport TextField in Header
- new Actions(getDriver()).sendKeys(Keys.chord(Keys.SHIFT, Keys.TAB))
- .perform();
- // After Chrome 75, sendkeys issues
- if (BrowserUtil.isChrome(getDesiredCapabilities())) {
- grid.getHeaderCell(1, 0).findElement(By.id("headerField")).click();
- }
+ pressKeyWithModifier(Keys.SHIFT, Keys.TAB);
+
assertEquals("Focus should be in TextField in Header", "headerField",
getFocusedElement().getAttribute("id"));
assertEquals("Grid should've scrolled back to start.", 0,
@@ -248,10 +243,30 @@ public class GridComponentsTest extends MultiBrowserTest {
// Navigate to currently out of viewport TextField on Row 8
new Actions(getDriver()).sendKeys(Keys.TAB, Keys.TAB).perform();
- assertTrue("Grid should be scrolled to show row 7",
+ assertTrue("Grid should be scrolled to show row 8",
Integer.parseInt(grid.getVerticalScroller()
.getAttribute("scrollTop")) > scrollTopRow7);
+ // Focus button in first visible row of Grid
+ grid.getCell(2, 2).findElement(By.id("row_2")).click();
+ int scrollTopRow2 = Integer
+ .parseInt(grid.getVerticalScroller().getAttribute("scrollTop"));
+
+ // Navigate to currently out of viewport Button on Row 1
+ pressKeyWithModifier(Keys.SHIFT, Keys.TAB);
+ pressKeyWithModifier(Keys.SHIFT, Keys.TAB);
+ int scrollTopRow1 = Integer
+ .parseInt(grid.getVerticalScroller().getAttribute("scrollTop"));
+ assertTrue("Grid should be scrolled to show row 1",
+ scrollTopRow1 < scrollTopRow2);
+
+ // Continue further to the very first row
+ pressKeyWithModifier(Keys.SHIFT, Keys.TAB);
+ pressKeyWithModifier(Keys.SHIFT, Keys.TAB);
+ assertTrue("Grid should be scrolled to show row 0",
+ Integer.parseInt(grid.getVerticalScroller()
+ .getAttribute("scrollTop")) < scrollTopRow1);
+
// Focus button in last row of Grid
grid.getCell(999, 2).findElement(By.id("row_999")).click();
// Navigate to out of viewport TextField in Footer
@@ -288,4 +303,12 @@ public class GridComponentsTest extends MultiBrowserTest {
assertFalse("Row " + i + " should not have a button",
row.getCell(2).isElementPresent(ButtonElement.class));
}
+
+ // Workaround for Chrome 75, sendKeys(Keys.chord(Keys.SHIFT, Keys.TAB))
+ // doesn't work anymore
+ private void pressKeyWithModifier(Keys keyModifier, Keys key) {
+ new Actions(getDriver()).keyDown(keyModifier).perform();
+ new Actions(getDriver()).sendKeys(key).perform();
+ new Actions(getDriver()).keyUp(keyModifier).perform();
+ }
}
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
index e4fd2fc2dd..a37e266d30 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/grid/GridScrolledToBottomTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridScrolledToBottomTest.java
@@ -70,28 +70,27 @@ public class GridScrolledToBottomTest extends MultiBrowserTest {
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
+ // the last row is now only half visible
// 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);
+ WebElement secondToLastRow = rows.get(rows.size() - 2);
// 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());
+ assertEquals("Person 98", secondToLastRow
+ .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,
+ assertThat(gridBottomY, greaterThan(lastRow.getLocation().getY()));
+ assertThat(lastRow.getLocation().getY() + rowHeight,
greaterThan(gridBottomY));
}
}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/GridColumnResizeModeTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/GridColumnResizeModeTest.java
index df51706ddb..812052a13c 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/GridColumnResizeModeTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/GridColumnResizeModeTest.java
@@ -103,12 +103,12 @@ public class GridColumnResizeModeTest extends GridBasicsTest {
// ANIMATED resize mode
drag(handle, 100);
- assertTrue(
+ assertTrue("Expected width: " + cell.getSize().getWidth(),
getLogRow(0).contains("Column resized: caption=Column 1, width="
+ cell.getSize().getWidth()));
drag(handle, -100);
- assertTrue(
+ assertTrue("Expected width: " + cell.getSize().getWidth(),
getLogRow(0).contains("Column resized: caption=Column 1, width="
+ cell.getSize().getWidth()));
@@ -117,12 +117,12 @@ public class GridColumnResizeModeTest extends GridBasicsTest {
sleep(250);
drag(handle, 100);
- assertTrue(
+ assertTrue("Expected width: " + cell.getSize().getWidth(),
getLogRow(0).contains("Column resized: caption=Column 1, width="
+ cell.getSize().getWidth()));
drag(handle, -100);
- assertTrue(
+ assertTrue("Expected width: " + cell.getSize().getWidth(),
getLogRow(0).contains("Column resized: caption=Column 1, width="
+ cell.getSize().getWidth()));
}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorBasicsTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorBasicsTest.java
index 3e8e7d65a3..87fbb358b9 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorBasicsTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorBasicsTest.java
@@ -3,12 +3,16 @@ package com.vaadin.tests.components.grid.basicfeatures.escalator;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import com.vaadin.testbench.TestBenchElement;
import com.vaadin.testbench.elements.NotificationElement;
import com.vaadin.tests.components.grid.basicfeatures.EscalatorBasicClientFeaturesTest;
@@ -49,13 +53,29 @@ public class EscalatorBasicsTest extends EscalatorBasicClientFeaturesTest {
scrollHorizontallyTo(50);
selectMenuPath(GENERAL, DETACH_ESCALATOR);
+ waitForElementNotPresent(By.className("v-escalator"));
selectMenuPath(GENERAL, ATTACH_ESCALATOR);
+ waitForElementPresent(By.className("v-escalator"));
assertEquals("Vertical scroll position", 50, getScrollTop());
assertEquals("Horizontal scroll position", 50, getScrollLeft());
+ TestBenchElement bodyCell = getBodyCell(2, 0);
+ WebElement viewport = findElement(
+ By.className("v-escalator-tablewrapper"));
+ WebElement header = findElement(By.className("v-escalator-header"));
+ // ensure this is the first (partially) visible cell
+ assertTrue(
+ viewport.getLocation().getX() > bodyCell.getLocation().getX());
+ assertTrue(viewport.getLocation().getX() < bodyCell.getLocation().getX()
+ + bodyCell.getSize().getWidth());
+ assertTrue(header.getLocation().getY()
+ + header.getSize().getHeight() > bodyCell.getLocation().getY());
+ assertTrue(header.getLocation().getY()
+ + header.getSize().getHeight() < bodyCell.getLocation().getY()
+ + bodyCell.getSize().getHeight());
assertEquals("First cell of first visible row", "Row 2: 0,2",
- getBodyCell(0, 0).getText());
+ bodyCell.getText());
}
private void assertEscalatorIsRemovedCorrectly() {
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorSpacerTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorSpacerTest.java
index 7924b67503..45e08f9683 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorSpacerTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/basicfeatures/escalator/EscalatorSpacerTest.java
@@ -275,12 +275,17 @@ public class EscalatorSpacerTest extends EscalatorBasicClientFeaturesTest {
selectMenuPath(FEATURES, SPACERS, ROW_1, SET_100PX);
/*
- * we check for row -3 instead of -1, because escalator has two rows
+ * we check for row -2 instead of -1, because escalator has one row
* buffered underneath the footer
*/
selectMenuPath(COLUMNS_AND_ROWS, BODY_ROWS, SCROLL_TO, ROW_75);
Thread.sleep(500);
- assertEquals("Row 75: 0,75", getBodyCell(-3, 0).getText());
+ TestBenchElement cell75 = getBodyCell(-2, 0);
+ assertEquals("Row 75: 0,75", cell75.getText());
+ // confirm the scroll position
+ WebElement footer = findElement(By.className("v-escalator-footer"));
+ assertEquals(footer.getLocation().y,
+ cell75.getLocation().y + cell75.getSize().height);
selectMenuPath(COLUMNS_AND_ROWS, BODY_ROWS, SCROLL_TO, ROW_25);
Thread.sleep(500);
@@ -406,17 +411,52 @@ public class EscalatorSpacerTest extends EscalatorBasicClientFeaturesTest {
}
@Test
- public void spacersAreInCorrectDomPositionAfterScroll() {
+ public void spacersAreInCorrectDomPositionAfterScroll()
+ throws InterruptedException {
selectMenuPath(FEATURES, SPACERS, ROW_1, SET_100PX);
- scrollVerticallyTo(32); // roughly one row's worth
+ scrollVerticallyTo(40); // roughly two rows' worth
+ // both rows should still be within DOM after this little scrolling, so
+ // the spacer should be the third element within the body (index: 2)
WebElement tbody = getEscalator().findElement(By.tagName("tbody"));
- WebElement spacer = getChild(tbody, 1);
+ WebElement spacer = getChild(tbody, 2);
String cssClass = spacer.getAttribute("class");
assertTrue(
- "element index 1 was not a spacer (class=\"" + cssClass + "\")",
+ "element index 2 was not a spacer (class=\"" + cssClass + "\")",
cssClass.contains("-spacer"));
+
+ // Scroll to last DOM row (Row 20). The exact position varies a bit
+ // depending on the browser.
+ int scrollTo = 172;
+ while (scrollTo < 176) {
+ scrollVerticallyTo(scrollTo);
+ Thread.sleep(500);
+
+ // if spacer is still the third (index: 2) body element, i.e. not
+ // enough scrolling to re-purpose any rows, scroll a bit further
+ spacer = getChild(tbody, 2);
+ cssClass = spacer.getAttribute("class");
+ if (cssClass.contains("-spacer")) {
+ ++scrollTo;
+ } else {
+ break;
+ }
+ }
+ if (getChild(tbody, 20).getText().startsWith("Row 22:")) {
+ // Some browsers scroll too much, spacer should be out of visual
+ // range
+ assertNull("Element found where there should be none",
+ getChild(tbody, 21));
+ } else {
+ // second row should still be within DOM but the first row out of
+ // it, so the spacer should be the second element within the body
+ // (index: 1)
+ spacer = getChild(tbody, 1);
+ cssClass = spacer.getAttribute("class");
+ assertTrue("element index 1 was not a spacer (class=\"" + cssClass
+ + "\")", cssClass.contains("-spacer"));
+ }
}
@Test
diff --git a/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java b/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java
index 76c700ec8f..b145dc99bc 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBigDetailsManagerTest.java
@@ -1,12 +1,16 @@
package com.vaadin.tests.components.treegrid;
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
+import static org.hamcrest.Matchers.not;
import static org.hamcrest.number.IsCloseTo.closeTo;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import java.util.List;
+import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
@@ -15,6 +19,7 @@ import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import com.vaadin.testbench.By;
+import com.vaadin.testbench.TestBenchElement;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.TreeGridElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
@@ -33,13 +38,18 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
private static final String HIDE_DETAILS = "hideDetails";
private static final String ADD_GRID = "addGrid";
private static final String SCROLL_TO_55 = "scrollTo55";
+ private static final String SCROLL_TO_3055 = "scrollTo3055";
+ private static final String SCROLL_TO_END = "scrollToEnd";
+ private static final String SCROLL_TO_START = "scrollToStart";
+ private static final String TOGGLE_15 = "toggle15";
+ private static final String TOGGLE_3000 = "toggle3000";
private TreeGridElement treeGrid;
private int expectedSpacerHeight = 0;
private int expectedRowHeight = 0;
private ExpectedCondition<Boolean> expectedConditionDetails(final int root,
- final int branch, final int leaf) {
+ final Integer branch, final Integer leaf) {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver arg0) {
@@ -49,9 +59,14 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
@Override
public String toString() {
// waiting for...
+ if (leaf != null) {
+ return String.format(
+ "Leaf %s/%s/%s details row contents to be found",
+ root, branch, leaf);
+ }
return String.format(
- "Leaf %s/%s/%s details row contents to be found", root,
- branch, leaf);
+ "Branch %s/%s details row contents to be found", root,
+ branch);
}
};
}
@@ -87,6 +102,11 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
return null;
}
+ private WebElement getRow(int index) {
+ return treeGrid.getBody().findElements(By.className("v-treegrid-row"))
+ .get(index);
+ }
+
private void ensureExpectedSpacerHeightSet() {
if (expectedSpacerHeight == 0) {
expectedSpacerHeight = treeGrid
@@ -94,9 +114,6 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
.getHeight();
assertThat((double) expectedSpacerHeight, closeTo(27d, 2d));
}
- if (expectedRowHeight == 0) {
- expectedRowHeight = treeGrid.getRow(0).getSize().getHeight();
- }
}
private void assertSpacerCount(int expectedSpacerCount) {
@@ -129,10 +146,6 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
previousSpacer = spacer;
continue;
}
- if (spacer.getLocation().y == 0) {
- // FIXME: find out why there are cases like this out of order
- continue;
- }
// -1 should be enough, but increased tolerance to -3 for FireFox
// and IE11 since a few pixels' discrepancy isn't relevant for this
// fix
@@ -148,16 +161,24 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
treeGrid.findElements(By.className(CLASSNAME_ERROR)).size());
}
- @Test
- public void expandAllOpenAllInitialDetails_toggleOneTwice_hideAll() {
- openTestURL();
- $(ButtonElement.class).id(EXPAND_ALL).click();
- $(ButtonElement.class).id(SHOW_DETAILS).click();
+ private void addGrid() {
$(ButtonElement.class).id(ADD_GRID).click();
-
waitForElementPresent(By.className(CLASSNAME_TREEGRID));
treeGrid = $(TreeGridElement.class).first();
+ expectedRowHeight = treeGrid.getRow(0).getSize().getHeight();
+ }
+
+ @Before
+ public void before() {
+ openTestURL();
+ }
+
+ @Test
+ public void expandAllOpenAllInitialDetails_toggleOneTwice_hideAll() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ $(ButtonElement.class).id(SHOW_DETAILS).click();
+ addGrid();
waitUntil(expectedConditionDetails(0, 0, 0));
ensureExpectedSpacerHeightSet();
@@ -205,14 +226,9 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
@Test
public void expandAllOpenAllInitialDetails_toggleAll() {
- openTestURL();
$(ButtonElement.class).id(EXPAND_ALL).click();
$(ButtonElement.class).id(SHOW_DETAILS).click();
- $(ButtonElement.class).id(ADD_GRID).click();
-
- waitForElementPresent(By.className(CLASSNAME_TREEGRID));
-
- treeGrid = $(TreeGridElement.class).first();
+ addGrid();
waitUntil(expectedConditionDetails(0, 0, 0));
ensureExpectedSpacerHeightSet();
@@ -231,9 +247,9 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
assertSpacerPositions();
// FIXME: TreeGrid fails to update cache correctly when you expand all
- // and after a long, long wait you end up with 3321 open details rows
- // and row 63/8/0 in view instead of 95 and 0/0/0 as expected.
- // WaitUntil timeouts by then.
+ // and triggers client-side exceptions for rows that fall outside of the
+ // cache because they try to extend the cache with a range that isn't
+ // connected to the cached range
if (true) {// remove this block after fixed
return;
}
@@ -241,7 +257,7 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
$(ButtonElement.class).id(EXPAND_ALL).click();
// State should have returned to what it was before collapsing.
- waitUntil(expectedConditionDetails(0, 0, 0));
+ waitUntil(expectedConditionDetails(0, 0, 0), 15);
assertSpacerCount(spacerCount);
assertSpacerHeights();
assertSpacerPositions();
@@ -251,13 +267,8 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
@Test
public void expandAllOpenNoInitialDetails_showSeveral_toggleOneByOne() {
- openTestURL();
$(ButtonElement.class).id(EXPAND_ALL).click();
- $(ButtonElement.class).id(ADD_GRID).click();
-
- waitForElementPresent(By.className(CLASSNAME_TREEGRID));
-
- treeGrid = $(TreeGridElement.class).first();
+ addGrid();
// open details for several rows, leave one out from the hierarchy that
// is to be collapsed
@@ -310,17 +321,29 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
}
@Test
+ public void expandAllOpenAllInitialDetails_hideOne() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ $(ButtonElement.class).id(SHOW_DETAILS).click();
+ addGrid();
+
+ // check the position of a row
+ int oldY = treeGrid.getCell(2, 0).getLocation().getY();
+
+ // hide the spacer from previous row
+ treeGrid.getCell(1, 0).click();
+
+ // ensure the investigated row moved
+ assertNotEquals(oldY, treeGrid.getCell(2, 0).getLocation().getY());
+ }
+
+ @Test
public void expandAllOpenAllInitialDetailsScrolled_toggleOne_hideAll() {
- openTestURL();
$(ButtonElement.class).id(EXPAND_ALL).click();
$(ButtonElement.class).id(SHOW_DETAILS).click();
- $(ButtonElement.class).id(ADD_GRID).click();
+ addGrid();
- waitForElementPresent(By.className(CLASSNAME_TREEGRID));
$(ButtonElement.class).id(SCROLL_TO_55).click();
- treeGrid = $(TreeGridElement.class).first();
-
waitUntil(expectedConditionDetails(1, 2, 0));
ensureExpectedSpacerHeightSet();
int spacerCount = treeGrid.findElements(By.className(CLASSNAME_SPACER))
@@ -333,8 +356,7 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
waitUntil(ExpectedConditions.not(expectedConditionDetails(1, 2, 0)));
assertSpacerHeights();
assertSpacerPositions();
- // FIXME: gives 128, not 90 as expected
- // assertSpacerCount(spacerCount);
+ assertSpacerCount(spacerCount);
treeGrid.expandWithClick(50);
@@ -342,8 +364,7 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
waitUntil(expectedConditionDetails(1, 2, 0));
assertSpacerHeights();
assertSpacerPositions();
- // FIXME: gives 131, not 90 as expected
- // assertSpacerCount(spacerCount);
+ assertSpacerCount(spacerCount);
// test that repeating the toggle still doesn't change anything
@@ -352,16 +373,14 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
waitUntil(ExpectedConditions.not(expectedConditionDetails(1, 2, 0)));
assertSpacerHeights();
assertSpacerPositions();
- // FIXME: gives 128, not 90 as expected
- // assertSpacerCount(spacerCount);
+ assertSpacerCount(spacerCount);
treeGrid.expandWithClick(50);
waitUntil(expectedConditionDetails(1, 2, 0));
assertSpacerHeights();
assertSpacerPositions();
- // FIXME: gives 131, not 90 as expected
- // assertSpacerCount(spacerCount);
+ assertSpacerCount(spacerCount);
// test that hiding all still won't break things
@@ -373,17 +392,13 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
@Test
public void expandAllOpenAllInitialDetailsScrolled_toggleAll() {
- openTestURL();
$(ButtonElement.class).id(EXPAND_ALL).click();
$(ButtonElement.class).id(SHOW_DETAILS).click();
- $(ButtonElement.class).id(ADD_GRID).click();
+ addGrid();
- waitForElementPresent(By.className(CLASSNAME_TREEGRID));
$(ButtonElement.class).id(SCROLL_TO_55).click();
- treeGrid = $(TreeGridElement.class).first();
-
- waitUntil(expectedConditionDetails(1, 1, 0));
+ waitUntil(expectedConditionDetails(1, 3, 0));
ensureExpectedSpacerHeightSet();
int spacerCount = treeGrid.findElements(By.className(CLASSNAME_SPACER))
@@ -400,7 +415,8 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
assertSpacerHeights();
assertSpacerPositions();
- // FIXME: collapsing too many rows after scrolling still causes a chaos
+ // FIXME: collapsing and expanding too many rows after scrolling still
+ // fails to reset to the same state
if (true) { // remove this block after fixed
return;
}
@@ -408,7 +424,7 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
$(ButtonElement.class).id(EXPAND_ALL).click();
// State should have returned to what it was before collapsing.
- waitUntil(expectedConditionDetails(1, 1, 0));
+ waitUntil(expectedConditionDetails(1, 3, 0));
assertSpacerCount(spacerCount);
assertSpacerHeights();
assertSpacerPositions();
@@ -418,27 +434,24 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
@Test
public void expandAllOpenNoInitialDetailsScrolled_showSeveral_toggleOneByOne() {
- openTestURL();
$(ButtonElement.class).id(EXPAND_ALL).click();
- $(ButtonElement.class).id(ADD_GRID).click();
+ addGrid();
- waitForElementPresent(By.className(CLASSNAME_TREEGRID));
$(ButtonElement.class).id(SCROLL_TO_55).click();
- treeGrid = $(TreeGridElement.class).first();
assertSpacerCount(0);
// open details for several rows, leave one out from the hierarchy that
// is to be collapsed
- treeGrid.getCell(50, 0).click();
- treeGrid.getCell(51, 0).click();
- treeGrid.getCell(52, 0).click();
- // no click for cell (53, 0)
- treeGrid.getCell(54, 0).click();
- treeGrid.getCell(55, 0).click();
- treeGrid.getCell(56, 0).click();
- treeGrid.getCell(57, 0).click();
- treeGrid.getCell(58, 0).click();
+ treeGrid.getCell(50, 0).click(); // Branch 1/2
+ treeGrid.getCell(51, 0).click(); // Leaf 1/2/0
+ treeGrid.getCell(52, 0).click(); // Leaf 1/2/1
+ // no click for cell (53, 0) // Leaf 1/2/2
+ treeGrid.getCell(54, 0).click(); // Branch 1/3
+ treeGrid.getCell(55, 0).click(); // Leaf 1/3/0
+ treeGrid.getCell(56, 0).click(); // Leaf 1/3/1
+ treeGrid.getCell(57, 0).click(); // Leaf 1/3/2
+ treeGrid.getCell(58, 0).click(); // Branch 1/4
int spacerCount = 8;
waitUntil(expectedConditionDetails(1, 2, 0));
@@ -507,4 +520,351 @@ public class TreeGridBigDetailsManagerTest extends MultiBrowserTest {
assertNoErrors();
}
+ @Test
+ public void expandAllOpenAllInitialDetailsScrolled_hideOne() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ $(ButtonElement.class).id(SHOW_DETAILS).click();
+ addGrid();
+
+ $(ButtonElement.class).id(SCROLL_TO_55).click();
+
+ // check the position of a row
+ int oldY = treeGrid.getCell(52, 0).getLocation().getY();
+
+ // hide the spacer from previous row
+ treeGrid.getCell(51, 0).click();
+
+ // ensure the investigated row moved
+ assertNotEquals(oldY, treeGrid.getCell(52, 0).getLocation().getY());
+ }
+
+ @Test
+ public void expandAllOpenAllInitialDetailsScrolledFar_toggleOne_hideAll() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ $(ButtonElement.class).id(SHOW_DETAILS).click();
+ addGrid();
+
+ $(ButtonElement.class).id(SCROLL_TO_3055).click();
+
+ waitUntil(expectedConditionDetails(74, 4, 0));
+ ensureExpectedSpacerHeightSet();
+ int spacerCount = treeGrid.findElements(By.className(CLASSNAME_SPACER))
+ .size();
+ assertSpacerPositions();
+
+ treeGrid.collapseWithClick(3051);
+
+ // collapsing one shouldn't affect spacer count, just update the cache
+ waitUntil(ExpectedConditions.not(expectedConditionDetails(1, 2, 0)));
+ assertSpacerHeights();
+ assertSpacerPositions();
+ assertSpacerCount(spacerCount);
+
+ treeGrid.expandWithClick(3051);
+
+ // expanding back shouldn't affect spacer count, just update the cache
+ waitUntil(expectedConditionDetails(74, 4, 0));
+ assertSpacerHeights();
+ assertSpacerPositions();
+ assertSpacerCount(spacerCount);
+
+ // test that repeating the toggle still doesn't change anything
+
+ treeGrid.collapseWithClick(3051);
+
+ waitUntil(ExpectedConditions.not(expectedConditionDetails(74, 4, 0)));
+ assertSpacerHeights();
+ assertSpacerPositions();
+ assertSpacerCount(spacerCount);
+
+ treeGrid.expandWithClick(3051);
+
+ waitUntil(expectedConditionDetails(74, 4, 0));
+ assertSpacerHeights();
+ assertSpacerPositions();
+ assertSpacerCount(spacerCount);
+
+ // test that hiding all still won't break things
+
+ $(ButtonElement.class).id(HIDE_DETAILS).click();
+ waitForElementNotPresent(By.className(CLASSNAME_SPACER));
+
+ assertNoErrors();
+ }
+
+ @Test
+ public void expandAllOpenAllInitialDetailsScrolledFar_toggleAll() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ $(ButtonElement.class).id(SHOW_DETAILS).click();
+ addGrid();
+
+ $(ButtonElement.class).id(SCROLL_TO_3055).click();
+
+ waitUntil(expectedConditionDetails(74, 4, 0));
+ ensureExpectedSpacerHeightSet();
+
+ int spacerCount = treeGrid.findElements(By.className(CLASSNAME_SPACER))
+ .size();
+ assertSpacerPositions();
+
+ $(ButtonElement.class).id(COLLAPSE_ALL).click();
+
+ waitForElementNotPresent(By.className(CLASSNAME_LEAF));
+
+ // There should still be a full cache's worth of details rows open,
+ // just not the same rows than before collapsing all.
+ assertSpacerCount(spacerCount);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ // FIXME: collapsing and expanding too many rows after scrolling still
+ // fails to reset to the same state
+ if (true) { // remove this block after fixed
+ return;
+ }
+
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+
+ // State should have returned to what it was before collapsing.
+ waitUntil(expectedConditionDetails(74, 4, 0));
+ assertSpacerCount(spacerCount);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ assertNoErrors();
+ }
+
+ @Test
+ public void expandAllOpenNoInitialDetailsScrolledFar_showSeveral_toggleOneByOne() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ addGrid();
+
+ $(ButtonElement.class).id(SCROLL_TO_3055).click();
+
+ assertSpacerCount(0);
+
+ // open details for several rows, leave one out from the hierarchy that
+ // is to be collapsed
+ treeGrid.getCell(3051, 0).click(); // Branch 74/4
+ treeGrid.getCell(3052, 0).click(); // Leaf 74/4/0
+ treeGrid.getCell(3053, 0).click(); // Leaf 74/4/1
+ // no click for cell (3054, 0) // Leaf 74/4/2
+ treeGrid.getCell(3055, 0).click(); // Branch 74/5
+ treeGrid.getCell(3056, 0).click(); // Leaf 74/5/0
+ treeGrid.getCell(3057, 0).click(); // Leaf 74/5/1
+ treeGrid.getCell(3058, 0).click(); // Leaf 74/5/2
+ treeGrid.getCell(3059, 0).click(); // Branch 74/6
+ int spacerCount = 8;
+
+ waitUntil(expectedConditionDetails(74, 4, 0));
+ assertSpacerCount(spacerCount);
+ ensureExpectedSpacerHeightSet();
+ assertSpacerPositions();
+
+ // toggle the branch with partially open details rows
+ treeGrid.collapseWithClick(3051);
+
+ waitUntil(ExpectedConditions.not(expectedConditionDetails(74, 4, 0)));
+ assertSpacerCount(spacerCount - 2);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ treeGrid.expandWithClick(3051);
+
+ waitUntil(expectedConditionDetails(74, 4, 0));
+ assertSpacerCount(spacerCount);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ // toggle the branch with fully open details rows
+ treeGrid.collapseWithClick(3055);
+
+ waitUntil(ExpectedConditions.not(expectedConditionDetails(74, 5, 0)));
+ assertSpacerCount(spacerCount - 3);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ treeGrid.expandWithClick(3055);
+
+ waitUntil(expectedConditionDetails(74, 5, 0));
+ assertSpacerCount(spacerCount);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ // repeat both toggles to ensure still no errors
+ treeGrid.collapseWithClick(3051);
+
+ waitUntil(ExpectedConditions.not(expectedConditionDetails(74, 4, 0)));
+ assertSpacerCount(spacerCount - 2);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ treeGrid.expandWithClick(3051);
+
+ waitUntil(expectedConditionDetails(74, 4, 0));
+ assertSpacerCount(spacerCount);
+ assertSpacerHeights();
+ assertSpacerPositions();
+ treeGrid.collapseWithClick(3055);
+
+ waitUntil(ExpectedConditions.not(expectedConditionDetails(74, 5, 0)));
+ assertSpacerCount(spacerCount - 3);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ treeGrid.expandWithClick(3055);
+
+ waitUntil(expectedConditionDetails(74, 5, 0));
+ assertSpacerCount(spacerCount);
+ assertSpacerHeights();
+ assertSpacerPositions();
+
+ assertNoErrors();
+ }
+
+ @Test
+ public void expandAllOpenAllInitialDetailsScrolledFar_hideOne() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ $(ButtonElement.class).id(SHOW_DETAILS).click();
+ addGrid();
+
+ $(ButtonElement.class).id(SCROLL_TO_3055).click();
+
+ // check the position of a row
+ int oldY = treeGrid.getCell(3052, 0).getLocation().getY();
+
+ // hide the spacer from previous row
+ treeGrid.getCell(3051, 0).click();
+
+ // ensure the investigated row moved
+ assertNotEquals(oldY, treeGrid.getCell(52, 0).getLocation().getY());
+ }
+
+ @Test
+ public void expandAllOpenAllInitialDetails_checkScrollPositions() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ $(ButtonElement.class).id(SHOW_DETAILS).click();
+ addGrid();
+
+ TestBenchElement tableWrapper = treeGrid.getTableWrapper();
+
+ $(ButtonElement.class).id(SCROLL_TO_55).click();
+ waitUntil(expectedConditionDetails(1, 3, 0));
+
+ WebElement detailsRow = getSpacer(1, 3, 0);
+ assertNotNull("Spacer for row 55 not found", detailsRow);
+
+ int wrapperY = tableWrapper.getLocation().getY();
+ int wrapperHeight = tableWrapper.getSize().getHeight();
+
+ int detailsY = detailsRow.getLocation().getY();
+ int detailsHeight = detailsRow.getSize().getHeight();
+
+ assertThat("Scroll to 55 didn't scroll as expected",
+ (double) detailsY + detailsHeight,
+ closeTo(wrapperY + wrapperHeight, 1d));
+
+ $(ButtonElement.class).id(SCROLL_TO_3055).click();
+ waitUntil(expectedConditionDetails(74, 5, null));
+
+ detailsRow = getSpacer(74, 5, null);
+ assertNotNull("Spacer for row 3055 not found", detailsRow);
+
+ detailsY = detailsRow.getLocation().getY();
+ detailsHeight = detailsRow.getSize().getHeight();
+
+ assertThat("Scroll to 3055 didn't scroll as expected",
+ (double) detailsY + detailsHeight,
+ closeTo(wrapperY + wrapperHeight, 1d));
+
+ $(ButtonElement.class).id(SCROLL_TO_END).click();
+ waitUntil(expectedConditionDetails(99, 9, 2));
+
+ detailsRow = getSpacer(99, 9, 2);
+ assertNotNull("Spacer for last row not found", detailsRow);
+
+ detailsY = detailsRow.getLocation().getY();
+ detailsHeight = detailsRow.getSize().getHeight();
+
+ // the layout jumps sometimes, check again
+ wrapperY = tableWrapper.getLocation().getY();
+ wrapperHeight = tableWrapper.getSize().getHeight();
+
+ assertThat("Scroll to end didn't scroll as expected",
+ (double) detailsY + detailsHeight,
+ closeTo(wrapperY + wrapperHeight, 1d));
+
+ $(ButtonElement.class).id(SCROLL_TO_START).click();
+ waitUntil(expectedConditionDetails(0, 0, 0));
+
+ WebElement firstRow = getRow(0);
+ TestBenchElement header = treeGrid.getHeader();
+
+ assertThat("Scroll to start didn't scroll as expected",
+ (double) firstRow.getLocation().getY(),
+ closeTo(wrapperY + header.getSize().getHeight(), 1d));
+ }
+
+ @Test
+ public void expandAllOpenNoInitialDetails_testToggleScrolling() {
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ addGrid();
+
+ TestBenchElement tableWrapper = treeGrid.getTableWrapper();
+ int wrapperY = tableWrapper.getLocation().getY();
+
+ WebElement firstRow = getRow(0);
+ int firstRowY = firstRow.getLocation().getY();
+
+ TestBenchElement header = treeGrid.getHeader();
+ int headerHeight = header.getSize().getHeight();
+
+ assertThat("Unexpected initial scroll position", (double) firstRowY,
+ closeTo(wrapperY + headerHeight, 1d));
+
+ $(ButtonElement.class).id(TOGGLE_15).click();
+
+ firstRowY = firstRow.getLocation().getY();
+
+ assertThat(
+ "Toggling row 15's details open should have caused scrolling",
+ (double) firstRowY, not(closeTo(wrapperY + headerHeight, 1d)));
+
+ $(ButtonElement.class).id(SCROLL_TO_START).click();
+
+ firstRowY = firstRow.getLocation().getY();
+
+ assertThat("Scrolling to start failed", (double) firstRowY,
+ closeTo(wrapperY + headerHeight, 1d));
+
+ $(ButtonElement.class).id(TOGGLE_15).click();
+
+ firstRowY = firstRow.getLocation().getY();
+
+ assertThat(
+ "Toggling row 15's details closed should not have caused scrolling",
+ (double) firstRowY, closeTo(wrapperY + headerHeight, 1d));
+
+ $(ButtonElement.class).id(TOGGLE_3000).click();
+
+ firstRowY = firstRow.getLocation().getY();
+
+ assertThat(
+ "Toggling row 3000's details open should not have caused scrolling",
+ (double) firstRowY, closeTo(wrapperY + headerHeight, 1d));
+
+ $(ButtonElement.class).id(SCROLL_TO_55).click();
+
+ WebElement row = getRow(0);
+ assertNotEquals("First row should be out of visual range", firstRowY,
+ row);
+
+ $(ButtonElement.class).id(TOGGLE_15).click();
+
+ assertEquals(
+ "Toggling row 15's details open should not have caused scrolling "
+ + "when row 15 is outside of visual range",
+ row, getRow(0));
+ }
+
}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridDetailsManagerTest.java b/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridDetailsManagerTest.java
index e5301a4731..9ca8b2a974 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridDetailsManagerTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridDetailsManagerTest.java
@@ -3,6 +3,7 @@ package com.vaadin.tests.components.treegrid;
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.hamcrest.number.IsCloseTo.closeTo;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
@@ -292,4 +293,25 @@ public class TreeGridDetailsManagerTest extends MultiBrowserTest {
assertNoErrors();
}
+ @Test
+ public void expandAllOpenAllInitialDetails_hideOne() {
+ openTestURL();
+ $(ButtonElement.class).id(EXPAND_ALL).click();
+ $(ButtonElement.class).id(SHOW_DETAILS).click();
+ $(ButtonElement.class).id(ADD_GRID).click();
+
+ waitForElementPresent(By.className(CLASSNAME_TREEGRID));
+
+ treeGrid = $(TreeGridElement.class).first();
+
+ // check the position of a row
+ int oldY = treeGrid.getCell(2, 0).getLocation().getY();
+
+ // hide the spacer from previous row
+ treeGrid.getCell(1, 0).click();
+
+ // ensure the investigated row moved
+ assertNotEquals(oldY, treeGrid.getCell(2, 0).getLocation().getY());
+ }
+
}