|
|
@@ -15,19 +15,22 @@ |
|
|
|
*/ |
|
|
|
package com.vaadin.tests.components.table; |
|
|
|
|
|
|
|
import static org.hamcrest.CoreMatchers.is; |
|
|
|
import static org.hamcrest.MatcherAssert.assertThat; |
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
import static org.junit.Assert.assertFalse; |
|
|
|
import static org.junit.Assert.assertTrue; |
|
|
|
|
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import com.vaadin.tests.tb3.MultiBrowserTest; |
|
|
|
import com.vaadin.tests.tb3.SingleBrowserTest; |
|
|
|
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; |
|
|
|
import org.openqa.selenium.interactions.Actions; |
|
|
|
|
|
|
|
/** |
|
|
|
* Tests that clicking on active fields doesn't change Table selection, nor does |
|
|
@@ -36,203 +39,174 @@ import com.vaadin.tests.tb3.MultiBrowserTest; |
|
|
|
* @author Vaadin Ltd |
|
|
|
*/ |
|
|
|
public class TableClickAndDragOnIconAndComponentsTest extends MultiBrowserTest { |
|
|
|
@Test |
|
|
|
public void testClickingAndDragging() { |
|
|
|
|
|
|
|
@Override |
|
|
|
public void setup() throws Exception { |
|
|
|
super.setup(); |
|
|
|
|
|
|
|
openTestURL(); |
|
|
|
} |
|
|
|
|
|
|
|
TableElement table = $(TableElement.class).first(); |
|
|
|
@Test |
|
|
|
public void clickOnTextFieldDoesNotSelectRow() { |
|
|
|
selectRow(1); |
|
|
|
|
|
|
|
// ensure there's no initial selection |
|
|
|
List<WebElement> selected = table.findElements(By |
|
|
|
.className("v-selected")); |
|
|
|
assertTrue("selection found when there should be none", |
|
|
|
selected.isEmpty()); |
|
|
|
|
|
|
|
// click a cell |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 2nd row expected)", |
|
|
|
"red 1foo", table.getCell(1, 2).getText()); |
|
|
|
table.getCell(1, 2).click(); |
|
|
|
|
|
|
|
// ensure the correct row and nothing but that got selected |
|
|
|
selected = table.findElements(By.className("v-selected")); |
|
|
|
assertFalse("no selection found when there should be some", |
|
|
|
selected.isEmpty()); |
|
|
|
// find cell contents (row header included) |
|
|
|
List<WebElement> cellContents = selected.get(0).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 2nd row expected)", |
|
|
|
"red 1foo", cellContents.get(2).getText()); |
|
|
|
assertEquals("unexpected table selection size", 1, selected.size()); |
|
|
|
clickOnTextField(2); |
|
|
|
assertThatFocusTextFieldHasText("foo 2foo"); |
|
|
|
|
|
|
|
List<WebElement> rows = table.findElement(By.className("v-table-body")) |
|
|
|
.findElements(By.tagName("tr")); |
|
|
|
assertEquals("unexpected table row count", 5, rows.size()); |
|
|
|
assertThat(getSelectedRowTextValue(), is(1)); |
|
|
|
} |
|
|
|
|
|
|
|
// find a row that isn't the one selected |
|
|
|
cellContents = rows.get(2).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 3rd row expected)", |
|
|
|
"red 2foo", cellContents.get(2).getText()); |
|
|
|
|
|
|
|
// click on a TextField on that row |
|
|
|
WebElement textField = rows.get(2) |
|
|
|
.findElements(By.className("v-textfield")).get(0); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (6th column of the 3rd row expected)", |
|
|
|
"foo 2foo", textField.getAttribute("value")); |
|
|
|
textField.click(); |
|
|
|
@Test |
|
|
|
public void clickOnReadOnlyTextFieldSelectsRow() { |
|
|
|
selectRow(1); |
|
|
|
|
|
|
|
clickOnReadOnlyTextField(2); |
|
|
|
|
|
|
|
assertThat(getSelectedRowTextValue(), is(2)); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void clickOnLabelSelectsRow() { |
|
|
|
selectRow(1); |
|
|
|
|
|
|
|
clickOnLabel(2); |
|
|
|
|
|
|
|
// ensure the focus shifted correctly |
|
|
|
List<WebElement> focused = table.findElements(By |
|
|
|
assertThat(getSelectedRowTextValue(), is(2)); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void clickOnEmbeddedIconSelectsRow() { |
|
|
|
selectRow(1); |
|
|
|
|
|
|
|
clickOnEmbeddedIcon(2); |
|
|
|
|
|
|
|
assertThat(getSelectedRowTextValue(), is(2)); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void dragAndDroppingRowDoesNotSelectRow() { |
|
|
|
selectRow(1); |
|
|
|
|
|
|
|
moveRow(0, 3); |
|
|
|
|
|
|
|
assertThat(getSelectedRowTextValue(), is(1)); |
|
|
|
assertThat(getSelectedRowIndex(), is(0)); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void dragAndDroppingSelectedRowStaysSelected() { |
|
|
|
selectRow(1); |
|
|
|
|
|
|
|
moveRow(1, 4); |
|
|
|
|
|
|
|
assertThat(getSelectedRowTextValue(), is(1)); |
|
|
|
assertThat(getSelectedRowIndex(), is(4)); |
|
|
|
} |
|
|
|
|
|
|
|
private void assertThatFocusTextFieldHasText(String text) { |
|
|
|
List<WebElement> focused = getTable().findElements(By |
|
|
|
.className("v-textfield-focus")); |
|
|
|
assertEquals("unexpected amount of focused textfields", 1, |
|
|
|
focused.size()); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (6th column of the 3rd row expected)", |
|
|
|
"foo 2foo", focused.get(0).getAttribute("value")); |
|
|
|
|
|
|
|
// ensure the selection didn't change |
|
|
|
selected = table.findElements(By.className("v-selected")); |
|
|
|
assertEquals("unexpected table selection size", 1, selected.size()); |
|
|
|
cellContents = selected.get(0).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 2nd row expected)", |
|
|
|
"red 1foo", cellContents.get(2).getText()); |
|
|
|
|
|
|
|
// click on a Label on that row |
|
|
|
WebElement label = rows.get(2).findElements(By.className("v-label")) |
|
|
|
.get(0); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (5th column of the 3rd row expected)", |
|
|
|
"foo 2foo", label.getText()); |
|
|
|
label.click(); |
|
|
|
|
|
|
|
// ensure the focus shifted correctly |
|
|
|
focused = table.findElements(By.className("v-textfield-focus")); |
|
|
|
assertTrue("focused textfields found when there should be none", |
|
|
|
focused.isEmpty()); |
|
|
|
assertThat(focused.get(0).getAttribute("value"), is(text)); |
|
|
|
} |
|
|
|
|
|
|
|
private int getSelectedRowTextValue() { |
|
|
|
WebElement selectedRow = getSelectedRow(); |
|
|
|
|
|
|
|
// ensure the selection changed |
|
|
|
selected = table.findElements(By.className("v-selected")); |
|
|
|
assertEquals("unexpected table selection size", 1, selected.size()); |
|
|
|
cellContents = selected.get(0).findElements( |
|
|
|
//i.e. 'red 1foo' |
|
|
|
String text = getText(selectedRow, 2); |
|
|
|
|
|
|
|
return Integer.parseInt(text.substring(4, 5)); |
|
|
|
} |
|
|
|
|
|
|
|
private String getText(WebElement row, int column) { |
|
|
|
List<WebElement> cellContents = getCellContents(row); |
|
|
|
|
|
|
|
return cellContents.get(column).getText(); |
|
|
|
} |
|
|
|
|
|
|
|
private List<WebElement> getCellContents(WebElement row) { |
|
|
|
return row.findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 3rd row expected)", |
|
|
|
"red 2foo", cellContents.get(2).getText()); |
|
|
|
} |
|
|
|
|
|
|
|
private WebElement getSelectedRow() { |
|
|
|
return getTable().findElement(By |
|
|
|
.className("v-selected")); |
|
|
|
} |
|
|
|
|
|
|
|
private void clickOnTextField(int row) { |
|
|
|
WebElement textField = getTextField(row, 0); |
|
|
|
|
|
|
|
// click on the selected row's textfield (same as earlier) |
|
|
|
textField.click(); |
|
|
|
} |
|
|
|
|
|
|
|
private void clickOnReadOnlyTextField(int row) { |
|
|
|
WebElement textField = getTextField(row, 1); |
|
|
|
|
|
|
|
// ensure the focus shifted correctly |
|
|
|
focused = table.findElements(By.className("v-textfield-focus")); |
|
|
|
assertEquals("unexpected amount of focused textfields", 1, |
|
|
|
focused.size()); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (6th column of the 3rd row expected)", |
|
|
|
"foo 2foo", focused.get(0).getAttribute("value")); |
|
|
|
|
|
|
|
// ensure the selection didn't change |
|
|
|
selected = table.findElements(By.className("v-selected")); |
|
|
|
assertEquals("unexpected table selection size", 1, selected.size()); |
|
|
|
cellContents = selected.get(0).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 3rd row expected)", |
|
|
|
"red 2foo", cellContents.get(2).getText()); |
|
|
|
|
|
|
|
// find the readOnly TextField of the previously selected row |
|
|
|
textField = rows.get(1).findElements(By.className("v-textfield")) |
|
|
|
.get(1); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (7th column of the 2nd row expected)", |
|
|
|
"foo 1foo", textField.getAttribute("value")); |
|
|
|
assertEquals( |
|
|
|
"expected readonly status not found, wrong cell or contents (7th column of the 2nd row expected)", |
|
|
|
"true", textField.getAttribute("readonly")); |
|
|
|
|
|
|
|
// click on that TextField |
|
|
|
textField.click(); |
|
|
|
} |
|
|
|
|
|
|
|
// ensure the focus shifted correctly |
|
|
|
focused = table.findElements(By.className("v-textfield-focus")); |
|
|
|
assertTrue("focused textfields found when there should be none", |
|
|
|
focused.isEmpty()); |
|
|
|
private WebElement getTextField(int row, int index) { |
|
|
|
return getElement(row, index, "v-textfield"); |
|
|
|
} |
|
|
|
|
|
|
|
// ensure the selection changed |
|
|
|
selected = table.findElements(By.className("v-selected")); |
|
|
|
assertEquals("unexpected table selection size", 1, selected.size()); |
|
|
|
cellContents = selected.get(0).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 2nd row expected)", |
|
|
|
"red 1foo", cellContents.get(2).getText()); |
|
|
|
|
|
|
|
// click the embedded icon of the other row |
|
|
|
WebElement embedded = rows.get(2).findElement( |
|
|
|
By.className("v-embedded")); |
|
|
|
embedded.click(); |
|
|
|
|
|
|
|
// ensure the selection changed |
|
|
|
selected = table.findElements(By.className("v-selected")); |
|
|
|
assertEquals("unexpected table selection size", 1, selected.size()); |
|
|
|
cellContents = selected.get(0).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 3rd row expected)", |
|
|
|
"red 2foo", cellContents.get(2).getText()); |
|
|
|
private WebElement getElement(int row, String className) { |
|
|
|
return getElement(row, 0, className); |
|
|
|
} |
|
|
|
|
|
|
|
// check row you are about to drag |
|
|
|
cellContents = rows.get(4).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 5th row expected)", |
|
|
|
"red 4foo", cellContents.get(2).getText()); |
|
|
|
private WebElement getElement(int row, int index, String className) { |
|
|
|
return getRows() |
|
|
|
.get(row) |
|
|
|
.findElements(By.className(className)) |
|
|
|
.get(index); |
|
|
|
} |
|
|
|
|
|
|
|
// check the row above it |
|
|
|
cellContents = rows.get(3).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 4th row expected)", |
|
|
|
"red 3foo", cellContents.get(2).getText()); |
|
|
|
private List<WebElement> getRows() { |
|
|
|
return getTable().findElement(By.className("v-table-body")) |
|
|
|
.findElements(By.tagName("tr")); |
|
|
|
} |
|
|
|
|
|
|
|
// drag the row to the row that's two places above it (gets dropped |
|
|
|
// below that) |
|
|
|
cellContents = rows.get(4).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
new Actions(getDriver()).moveToElement(cellContents.get(2)) |
|
|
|
.clickAndHold().moveToElement(rows.get(2)).release().perform(); |
|
|
|
private void selectRow(int row) { |
|
|
|
TableElement table = getTable(); |
|
|
|
|
|
|
|
table.getCell(row, 2).click(); |
|
|
|
} |
|
|
|
|
|
|
|
// find the current order of the rows |
|
|
|
rows = table.findElement(By.className("v-table-body")).findElements( |
|
|
|
By.tagName("tr")); |
|
|
|
assertEquals("unexpected table row count", 5, rows.size()); |
|
|
|
private TableElement getTable() { |
|
|
|
return $(TableElement.class).first(); |
|
|
|
} |
|
|
|
|
|
|
|
// ensure the row got dragged |
|
|
|
cellContents = rows.get(3).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the dragged row expected, should be on 4th row now)", |
|
|
|
"red 4foo", cellContents.get(2).getText()); |
|
|
|
|
|
|
|
cellContents = rows.get(4).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the previous 4th row expected, should be on 5th row now)", |
|
|
|
"red 3foo", cellContents.get(2).getText()); |
|
|
|
|
|
|
|
// ensure the selection didn't change |
|
|
|
selected = table.findElements(By.className("v-selected")); |
|
|
|
assertEquals("unexpected table selection size", 1, selected.size()); |
|
|
|
cellContents = selected.get(0).findElements( |
|
|
|
By.className("v-table-cell-content")); |
|
|
|
assertEquals( |
|
|
|
"expected value not found, wrong cell or contents (3rd column of the 3rd row expected)", |
|
|
|
"red 2foo", cellContents.get(2).getText()); |
|
|
|
private void clickOnLabel(int row) { |
|
|
|
WebElement label = getElement(row, "v-label"); |
|
|
|
label.click(); |
|
|
|
} |
|
|
|
|
|
|
|
private void clickOnEmbeddedIcon(int row) { |
|
|
|
WebElement embeddedIcon = getElement(row, "v-embedded"); |
|
|
|
embeddedIcon.click(); |
|
|
|
} |
|
|
|
|
|
|
|
private void moveRow(int from, int to) { |
|
|
|
List<WebElement> rows = getRows(); |
|
|
|
List<WebElement> cellContents = getCellContents(rows.get(from)); |
|
|
|
|
|
|
|
new Actions(getDriver()).moveToElement(cellContents.get(2)) |
|
|
|
.clickAndHold().moveToElement(rows.get(to)).release().perform(); |
|
|
|
} |
|
|
|
|
|
|
|
private int getSelectedRowIndex() { |
|
|
|
List<WebElement> rows = getRows(); |
|
|
|
|
|
|
|
//Unfortunately rows.getIndexOf(getSelectedRow()) doesn't work. |
|
|
|
for(WebElement r : rows) { |
|
|
|
if(r.getAttribute("class").contains("v-selected")) { |
|
|
|
return rows.indexOf(r); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |