package com.vaadin.tests.components.grid; import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.Dimension; import org.openqa.selenium.Keys; import org.openqa.selenium.interactions.Actions; import com.vaadin.testbench.elements.ButtonElement; import com.vaadin.testbench.elements.GridElement; import com.vaadin.testbench.elements.GridElement.GridCellElement; import com.vaadin.testbench.elements.LabelElement; import com.vaadin.testbench.elements.TextFieldElement; import com.vaadin.tests.tb3.MultiBrowserTest; public class GridColumnResizingTest extends MultiBrowserTest { @Test public void serverSetWidth() { openTestURL(); serverSideSetWidth(50); assertColumnWidth(50, 0); serverSideSetWidth(500); assertColumnWidth(500, 0); } @Test public void setResizable() { openTestURL(); ButtonElement toggleResizableButton = $(ButtonElement.class).get(4); GridCellElement cell = getGrid().getHeaderCell(0, 0); Assert.assertEquals(true, cell.isElementPresent( By.cssSelector("div.v-grid-column-resize-handle"))); toggleResizableButton.click(); Assert.assertEquals(false, cell.isElementPresent( By.cssSelector("div.v-grid-column-resize-handle"))); } @Test public void setExpandRatio() { openTestURL(); ButtonElement setExpandRatioButton = $(ButtonElement.class).get(1); setExpandRatioButton.click(); assertColumnWidthWithThreshold(375, 0, 2); assertColumnWidthWithThreshold(125, 1, 2); } @Test public void setMinimumWidth() { openTestURL(); setMinWidth(100); serverSideSetWidth(50); assertColumnWidth(100, 0); serverSideSetWidth(150); dragResizeColumn(0, 0, -100); assertColumnWidth(100, 0); } @Test public void setMaximumWidth() { openTestURL(); serverSideSetWidth(50); setMaxWidth(100); serverSideSetWidth(150); assertColumnWidth(100, 0); // TODO add the following when grid column width recalculation has been // fixed in the case where the sum of column widths exceeds the visible // area // serverSideSetWidth(50); // dragResizeColumn(0, 0, 200); // assertColumnWidth(100, 0); } @Test public void resizeEventListener() { openTestURL(); Assert.assertEquals("not resized", $(LabelElement.class).get(1).getText()); serverSideSetWidth(150); Assert.assertEquals("server resized", $(LabelElement.class).get(1).getText()); dragResizeColumn(0, 0, 100); Assert.assertEquals("client resized", $(LabelElement.class).get(1).getText()); } private GridElement getGrid() { return $(GridElement.class).first(); } private void serverSideSetWidth(double width) { TextFieldElement textField = $(TextFieldElement.class).first(); ButtonElement setWidthButton = $(ButtonElement.class).get(0); textField.clear(); textField.sendKeys(String.valueOf(width), Keys.ENTER); setWidthButton.click(); } private void setMinWidth(double minWidth) { TextFieldElement textField = $(TextFieldElement.class).first(); ButtonElement setMinWidthButton = $(ButtonElement.class).get(2); textField.clear(); textField.sendKeys(String.valueOf(minWidth), Keys.ENTER); setMinWidthButton.click(); } private void setMaxWidth(double maxWidth) { TextFieldElement textField = $(TextFieldElement.class).first(); ButtonElement setMaxWidthButton = $(ButtonElement.class).get(3); textField.clear(); textField.sendKeys(String.valueOf(maxWidth), Keys.ENTER); setMaxWidthButton.click(); } private void dragResizeColumn(int columnIndex, int posX, int offset) { GridCellElement headerCell = getGrid().getHeaderCell(0, columnIndex); Dimension size = headerCell.getSize(); new Actions(getDriver()) .moveToElement(headerCell, size.getWidth() + posX, size.getHeight() / 2) .clickAndHold().moveByOffset(offset, 0).release().perform(); } private void assertColumnWidth(int width, int columnIndex) { Assert.assertEquals(width, getGrid().getCell(0, columnIndex).getSize().getWidth()); } private void assertColumnWidthWithThreshold(int width, int columnIndex, int threshold) { Assert.assertTrue( Math.abs(getGrid().getCell(0, columnIndex).getSize().getWidth() - width) <= threshold); } }