/*
* The focus is no longer on a selected row. Move
* focus to the selected row. (#10522)
+ *
+ * Don't do this for multiselect (#13341).
+ *
+ * Checking the selection mode here instead of in
+ * setRowFocus allows keyboard shift+downarrow
+ * selection to work as expected.
*/
+ if (isSingleSelectMode()) {
+ setRowFocus(row);
+ }
- setRowFocus(row);
}
}
if (selected != row.isSelected()) {
// Set new focused row
focusedRow = row;
- /*
- * Don't scroll to the focused row when in multiselect mode.
- * (#13341)
- */
-
- if (isSingleSelectMode()) {
- ensureRowIsVisible(row);
- }
+ ensureRowIsVisible(row);
return true;
}
table.addItem(new Object[] { new Integer(i) }, new Integer(i));
}
- table.setCurrentPageFirstItemIndex(185);
+ table.setCurrentPageFirstItemIndex(178);
final CssLayout layout = new CssLayout();
layout.addComponent(selectAllCheckbox);
@Override
protected String getTestDescription() {
- return "The scroll position of a table with many items should remain constant if all items are selected.";
+ return "The scroll position of a table with many items should remain constant if all items are "
+ + "selected. The scroll position should change if the user uses the keyboard to select "
+ + "multiple lines with shift+arrowkeys.";
}
/*
*/
package com.vaadin.tests.components.table;
+import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import java.io.IOException;
+import java.util.List;
import org.junit.Test;
+import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedCondition;
import com.vaadin.testbench.By;
public class SelectAllConstantViewportTest extends MultiBrowserTest {
@Test
- public void testViewportUnchanged() throws IOException {
+ public void testViewportUnchangedwithMultiSel() throws IOException {
openTestURL();
CheckBoxElement checkbox = $(CheckBoxElement.class).first();
int rowLocation = row.getLocation().getY();
- // use click x,y with non-zero offset to actually toggle the checkbox. (#13763)
+ // use click x,y with non-zero offset to actually toggle the checkbox.
+ // (#13763)
checkbox.click(5, 5);
int newRowLocation = row.getLocation().getY();
assertThat(newRowLocation, is(rowLocation));
}
+
+ @Test
+ public void testViewportChangedwithKeyboardSel() throws IOException {
+ openTestURL();
+
+ WebElement cell = $(TableElement.class).first().getCell(190, 0);
+ final WebElement scrollPositionDisplay = getDriver().findElement(
+ By.className("v-table-scrollposition"));
+ waitUntilNot(new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ return scrollPositionDisplay.isDisplayed();
+ }
+ }, 10);
+
+ int rowLocation = cell.getLocation().getY();
+
+ // select downwards with shift (#14094)
+
+ cell.click();
+
+ final WebElement row = getDriver().findElement(
+ By.className("v-selected"));
+
+ assertThat(row.getAttribute("class"), containsString("selected"));
+
+ // for some reason phantomJS does not support keyboard actions
+
+ Actions action = new Actions(getDriver());
+ action.keyDown(Keys.SHIFT)
+ .sendKeys(Keys.ARROW_DOWN, Keys.ARROW_DOWN, Keys.ARROW_DOWN,
+ Keys.ARROW_DOWN, Keys.ARROW_DOWN, Keys.ARROW_DOWN,
+ Keys.ARROW_DOWN).keyUp(Keys.SHIFT).build().perform();
+
+ int newRowLocation = cell.getLocation().getY();
+
+ assertThat(newRowLocation, is(not(rowLocation)));
+
+ }
+
+ @Override
+ public List<DesiredCapabilities> getBrowsersToTest() {
+ // phantomJS does not support keyboard actions
+ return getBrowsersExcludingPhantomJS();
+ }
}
public abstract class MultiBrowserTest extends PrivateTB3Configuration {
protected List<DesiredCapabilities> getBrowsersExcludingIE() {
- List<DesiredCapabilities> browsers = new ArrayList<DesiredCapabilities>(getAllBrowsers());
+ List<DesiredCapabilities> browsers = new ArrayList<DesiredCapabilities>(
+ getAllBrowsers());
browsers.remove(Browser.IE8.getDesiredCapabilities());
browsers.remove(Browser.IE9.getDesiredCapabilities());
browsers.remove(Browser.IE10.getDesiredCapabilities());
return browsers;
}
+ protected List<DesiredCapabilities> getBrowsersExcludingPhantomJS() {
+ List<DesiredCapabilities> browsers = new ArrayList<DesiredCapabilities>(
+ getAllBrowsers());
+ browsers.remove(Browser.PHANTOMJS.getDesiredCapabilities());
+ return browsers;
+ }
+
public enum Browser {
FIREFOX(BrowserUtil.firefox(24)), CHROME(BrowserUtil.chrome(33)), SAFARI(
BrowserUtil.safari(7)), IE8(BrowserUtil.ie(8)), IE9(BrowserUtil