123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- package com.vaadin.tests.components.grid;
-
- import static org.hamcrest.number.IsCloseTo.closeTo;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertThat;
-
- import java.util.List;
-
- import org.junit.Test;
- import org.openqa.selenium.WebElement;
-
- import com.vaadin.shared.ui.grid.ScrollDestination;
- import com.vaadin.testbench.By;
- import com.vaadin.testbench.TestBenchElement;
- import com.vaadin.testbench.elements.ButtonElement;
- import com.vaadin.testbench.elements.GridElement;
- import com.vaadin.testbench.elements.NativeSelectElement;
- import com.vaadin.tests.tb3.SingleBrowserTest;
-
- public class GridScrollDestinationTest extends SingleBrowserTest {
-
- private ButtonElement button;
- private GridElement grid;
- private TestBenchElement header;
- private TestBenchElement tableWrapper;
-
- @Override
- public void setup() throws Exception {
- super.setup();
- openTestURL();
- button = $(ButtonElement.class).first();
- grid = $(GridElement.class).first();
- header = grid.getHeader();
- tableWrapper = grid.getTableWrapper();
- }
-
- private void assertElementAtTop(WebElement row) {
- assertThat((double) row.getLocation().getY(), closeTo(
- header.getLocation().getY() + header.getSize().getHeight(),
- 1d));
- }
-
- private void assertElementAtBottom(WebElement row) {
- assertThat(
- (double) row.getLocation().getY() + row.getSize().getHeight(),
- closeTo((double) tableWrapper.getLocation().getY()
- + tableWrapper.getSize().getHeight(), 1d));
- }
-
- private void assertElementAtMiddle(WebElement row) {
- assertThat((double) row.getLocation()
- .getY() + (row.getSize().getHeight() / 2), closeTo(
- (double) tableWrapper.getLocation().getY()
- + header.getSize().getHeight()
- + ((tableWrapper.getSize().getHeight()
- - header.getSize().getHeight()) / 2),
- 1d));
- }
-
- @Test
- public void destinationAny() {
- // ScrollDestination.ANY selected by default
-
- // scroll down
- button.click();
-
- // expect the row at the bottom of the viewport
- List<WebElement> rows = grid.getBody()
- .findElements(By.className("v-grid-row"));
- // last rendered row is a buffer row, inspect second to last
- WebElement row = rows.get(rows.size() - 2);
- assertEquals("50", row.getText());
-
- assertElementAtBottom(row);
-
- // scroll to end
- grid.scrollToRow((int) grid.getRowCount() - 1);
-
- // ensure row 50 is out of visual range, first two rows are out of view
- // and getText can't find the contents so inspect the third row
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(2);
-
- assertGreater(row.getText() + " is not greater than 52",
- Integer.valueOf(row.getText()), 52);
-
- // scroll up
- button.click();
-
- // expect the row at the top of the viewport
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- // first rendered row is a buffer row, inspect second
- row = rows.get(1);
- assertEquals("50", row.getText());
-
- assertElementAtTop(row);
-
- // scroll up by a few rows
- grid.scrollToRow(45);
-
- // refresh row references
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(6);
- assertEquals("50", row.getText());
-
- // scroll while already within viewport
- button.click();
-
- // expect no change since the row is still within viewport
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(6);
- assertEquals("50", row.getText());
- }
-
- @Test
- public void destinationEnd() {
- $(NativeSelectElement.class).first()
- .selectByText(ScrollDestination.END.name());
-
- // scroll down
- button.click();
-
- // expect the row at the bottom of the viewport
- List<WebElement> rows = grid.getBody()
- .findElements(By.className("v-grid-row"));
- // last rendered row is a buffer row, inspect second to last
- WebElement row = rows.get(rows.size() - 2);
- assertEquals("50", row.getText());
-
- assertElementAtBottom(row);
-
- // scroll to end
- grid.scrollToRow((int) grid.getRowCount() - 1);
-
- // ensure row 50 is out of visual range, first two rows are out of view
- // and getText can't find the contents so inspect the third row
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(2);
-
- assertGreater(row.getText() + " is not greater than 52",
- Integer.valueOf(row.getText()), 52);
-
- // scroll up
- button.click();
-
- // expect the row at the bottom of the viewport
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- // last rendered row is a buffer row, inspect second to last
- row = rows.get(rows.size() - 2);
- assertEquals("50", row.getText());
-
- assertElementAtBottom(row);
-
- // scroll down by a few rows
- grid.scrollToRow(55);
-
- // refresh row references
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(rows.size() - 7);
- assertEquals("50", row.getText());
-
- // scroll while already within viewport
- button.click();
-
- // expect the row at the bottom of the viewport again
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(rows.size() - 2);
- assertEquals("50", row.getText());
-
- assertElementAtBottom(row);
- }
-
- @Test
- public void destinationStart() {
- $(NativeSelectElement.class).first()
- .selectByText(ScrollDestination.START.name());
-
- // scroll down
- button.click();
-
- // expect the row at the top of the viewport
- List<WebElement> rows = grid.getBody()
- .findElements(By.className("v-grid-row"));
- // first rendered row is a buffer row, inspect second
- WebElement row = rows.get(1);
- assertEquals("50", row.getText());
-
- assertElementAtTop(row);
-
- // scroll to end
- grid.scrollToRow((int) grid.getRowCount() - 1);
-
- // ensure row 50 is out of visual range, first two rows are out of view
- // and getText can't find the contents so inspect the third row
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(2);
-
- assertGreater(row.getText() + " is not greater than 52",
- Integer.valueOf(row.getText()), 52);
-
- // scroll up
- button.click();
-
- // expect the row at the top of the viewport
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- // first rendered row is a buffer row, inspect second
- row = rows.get(1);
- assertEquals("50", row.getText());
-
- assertElementAtTop(row);
-
- // scroll up by a few rows
- grid.scrollToRow(45);
-
- // refresh row references
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(6);
- assertEquals("50", row.getText());
-
- // scroll while already within viewport
- button.click();
-
- // expect the row at the top of the viewport again
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(1);
- assertEquals("50", row.getText());
-
- assertElementAtTop(row);
- }
-
- @Test
- public void destinationMiddle() {
- NativeSelectElement destinationSelect = $(NativeSelectElement.class)
- .first();
- destinationSelect.selectByText(ScrollDestination.MIDDLE.name());
-
- // scroll down
- button.click();
-
- // expect the row at the middle of the viewport
- List<WebElement> rows = grid.getBody()
- .findElements(By.className("v-grid-row"));
- // inspect the middle row
- WebElement row = rows.get(rows.size() / 2);
- assertEquals("50", row.getText());
-
- assertElementAtMiddle(row);
-
- // scroll to end
- grid.scrollToRow((int) grid.getRowCount() - 1);
-
- // ensure row 50 is out of visual range, first two rows are out of view
- // and getText can't find the contents so inspect the third row
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(2);
-
- assertGreater(row.getText() + " is not greater than 52",
- Integer.valueOf(row.getText()), 52);
-
- // scroll up
- button.click();
-
- // expect the row at the middle of the viewport
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- // first rendered row is a buffer row, inspect second
- row = rows.get(rows.size() / 2);
- assertEquals("50", row.getText());
-
- assertElementAtMiddle(row);
-
- // scroll down by a few rows
- destinationSelect.selectByText(ScrollDestination.START.name());
- button.click();
-
- // refresh row references
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(1);
- assertEquals("50", row.getText());
-
- // scroll while already within viewport
- destinationSelect.selectByText(ScrollDestination.MIDDLE.name());
- button.click();
-
- // expect the row at the top of the viewport again
- rows = grid.getBody().findElements(By.className("v-grid-row"));
- row = rows.get(rows.size() / 2);
- assertEquals("50", row.getText());
-
- assertElementAtMiddle(row);
- }
- }
|