/* * Copyright 2000-2016 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.table; import static com.vaadin.tests.components.table.TableMatchesMouseDownMouseUpElement.CLEAR_BUTTON_ID; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; import com.vaadin.testbench.elements.TableElement; import com.vaadin.tests.tb3.MultiBrowserTest; /** * Regular click cases already covered by @LabelEmbeddedClickThroughForTableTest * Testing cases when mouse down and mouse up positions are different * * @since * @author Vaadin Ltd */ public class TableMatchesMouseDownMouseUpElementTest extends MultiBrowserTest { TableElement table; @Test public void testClick() { openTestURL(); table = $(TableElement.class).first(); testMoveOut(getBoldTag(0, 2)); testMoveIn(getBoldTag(0, 2)); testMoveOut(getLabel(0, 1)); testMoveIn(getLabel(0, 1)); testClickOnDifferentRows(); } /** * MouseDown on element and mouseUp outside element but on same cell */ private void testMoveOut(WebElement element) { clearSelection(); clickAndMove(element, 5, 5, 0, 50); checkSelectedRowCount(1); checkRowSelected(0); } /** * MouseDown outside element but on same cell and mouseUp on element */ private void testMoveIn(WebElement element) { clearSelection(); clickAndMove(element, 5, 55, 0, -50); checkSelectedRowCount(1); checkRowSelected(0); } /** * Mouse down in cell of row1 holds and mouse up in cell of row 2 */ public void testClickOnDifferentRows() { clearSelection(); WebElement elementFrom = getCell(0, 1); WebElement elementTo = getCell(0, 2); clickAndMove(elementFrom, elementTo); checkSelectedRowCount(0); } private WebElement getBoldTag(int row, int column) { return table.getCell(row, column).findElement(By.className("v-label")) .findElement(By.tagName("b")); } private WebElement getLabel(int row, int column) { return table.getCell(row, column).findElement(By.className("v-label")); } private WebElement getCell(int row, int column) { return table.getCell(row, column); } private void clearSelection() { WebElement clearButton = vaadinElementById(CLEAR_BUTTON_ID); clearButton.click(); } /** * Mouse down on element + initial offset -> Moves the "move offset" -> * Mouse up */ private void clickAndMove(WebElement element, int initialX, int initialY, int moveX, int moveY) { new Actions(driver).moveToElement(element, initialX, initialY) .clickAndHold().perform(); new Actions(driver).moveByOffset(moveX, moveY).perform(); new Actions(driver).release().perform(); } /** * Mouse down on elementFrom -> Moves to elementTo -> Mouse up */ private void clickAndMove(WebElement elementFrom, WebElement elementTo) { new Actions(driver).moveToElement(elementFrom, 5, 5).clickAndHold() .perform(); new Actions(driver).moveToElement(elementTo, 5, 5).perform(); new Actions(driver).release().perform(); } private void checkRowSelected(int rowIndex) { assertEquals( "contents of the selected row don't match contents of the row #" + rowIndex, table.getCell(rowIndex, 0).getText(), getSelectedRows().get(0) .findElement(By.className("v-table-cell-wrapper")) .getText()); } private void checkSelectedRowCount(int expected) { assertEquals("unexpected table selection size", expected, getSelectedRows().size()); } private List<WebElement> getSelectedRows() { return table.findElement(By.className("v-table-body")) .findElements(By.className("v-selected")); } }