/*
* 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.v7.tests.components.grid.basicfeatures.client;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.openqa.selenium.Keys;
import org.openqa.selenium.interactions.Actions;
import com.vaadin.testbench.By;
import com.vaadin.testbench.elements.GridElement.GridCellElement;
import com.vaadin.v7.tests.components.grid.basicfeatures.GridBasicClientFeaturesTest;
public class GridClientSelectionTest extends GridBasicClientFeaturesTest {
@Test
public void testChangeSelectionMode() {
openTestURL();
setSelectionModelNone();
assertTrue("First column was selection column",
getGridElement().getCell(0, 0).getText().equals("(0, 0)"));
setSelectionModelMulti();
assertTrue("First column was not selection column",
getGridElement().getCell(0, 1).getText().equals("(0, 0)"));
}
@Test
public void testSelectAllCheckbox() {
openTestURL();
setSelectionModelMulti();
selectMenuPath("Component", "DataSource",
"Reset with 100 rows of Data");
GridCellElement header = getGridElement().getHeaderCell(0, 0);
assertTrue("No checkbox", header.isElementPresent(By.tagName("input")));
header.findElement(By.tagName("input")).click();
for (int i = 0; i < 100; i += 10) {
assertTrue("Row " + i + " was not selected.",
getGridElement().getRow(i).isSelected());
}
header.findElement(By.tagName("input")).click();
assertFalse("Row 52 was still selected",
getGridElement().getRow(52).isSelected());
}
@Test
public void testSelectAllCheckboxWhenChangingModels() {
openTestURL();
GridCellElement header;
header = getGridElement().getHeaderCell(0, 0);
assertFalse(
"Check box shouldn't have been in header for None Selection Model",
header.isElementPresent(By.tagName("input")));
setSelectionModelMulti();
header = getGridElement().getHeaderCell(0, 0);
assertTrue("Multi Selection Model should have select all checkbox",
header.isElementPresent(By.tagName("input")));
setSelectionModelSingle(true);
header = getGridElement().getHeaderCell(0, 0);
assertFalse(
"Check box shouldn't have been in header for Single Selection Model",
header.isElementPresent(By.tagName("input")));
setSelectionModelNone();
header = getGridElement().getHeaderCell(0, 0);
assertFalse(
"Check box shouldn't have been in header for None Selection Model",
header.isElementPresent(By.tagName("input")));
}
@Test
public void testDeselectAllowedMouseInput() {
openTestURL();
setSelectionModelSingle(true);
getGridElement().getCell(5, 1).click();
assertTrue("Row 5 should be selected after clicking", isRowSelected(5));
getGridElement().getCell(7, 1).click();
assertFalse("Row 5 should be deselected after clicking another row",
isRowSelected(5));
assertTrue("Row 7 should be selected after clicking", isRowSelected(7));
getGridElement().getCell(7, 1).click();
assertFalse("Row should be deselected after clicking again",
isRowSelected(7));
}
@Test
public void testDeselectAllowedKeyboardInput() {
openTestURL();
setSelectionModelSingle(true);
getGridElement().getHeaderCell(0, 0).click();
new Actions(getDriver()).sendKeys(Keys.ARROW_DOWN).perform();
new Actions(getDriver()).sendKeys(Keys.SPACE).perform();
assertTrue("Row 0 should be selected after pressing space",
isRowSelected(0));
new Actions(getDriver()).sendKeys(Keys.ARROW_DOWN).perform();
new Actions(getDriver()).sendKeys(Keys.SPACE).perform();
assertFalse(
"Row 0 should be deselected after pressing space another row",
isRowSelected(0));
assertTrue("Row 1 should be selected after pressing space",
isRowSelected(1));
new Actions(getDriver()).sendKeys(Keys.SPACE).perform();
assertFalse("Row should be deselected after pressing space again",
isRowSelected(1));
}
@Test
public void testDeselectNotAllowedMouseInput() {
openTestURL();
setSelectionModelSingle(false);
getGridElement().getCell(5, 1).click();
assertTrue("Row 5 should be selected after clicking", isRowSelected(5));
getGridElement().getCell(7, 1).click();
assertFalse("Row 5 should be deselected after clicking another row",
isRowSelected(5));
assertTrue("Row 7 should be selected after clicking", isRowSelected(7));
getGridElement().getCell(7, 1).click();
assertTrue("Row should remain selected after clicking again",
isRowSelected(7));
}
@Test
public void testDeselectNotAllowedKeyboardInput() {
openTestURL();
setSelectionModelSingle(false);
getGridElement().getHeaderCell(0, 0).click();
new Actions(getDriver()).sendKeys(Keys.ARROW_DOWN).perform();
new Actions(getDriver()).sendKeys(Keys.SPACE).perform();
assertTrue("Row 0 should be selected after pressing space",
isRowSelected(0));
new Actions(getDriver()).sendKeys(Keys.ARROW_DOWN).perform();
new Actions(getDriver()).sendKeys(Keys.SPACE).perform();
assertFalse(
"Row 0 should be deselected after pressing space another row",
isRowSelected(0));
assertTrue("Row 1 should be selected after pressing space",
isRowSelected(1));
new Actions(getDriver()).sendKeys(Keys.SPACE).perform();
assertTrue("Row should remain selected after pressing space again",
isRowSelected(1));
}
@Test
public void testChangeSelectionModelUpdatesUI() {
openTestURL();
setSelectionModelSingle(true);
getGridElement().getCell(5, 1).click();
assertTrue("Row 5 should be selected after clicking", isRowSelected(5));
setSelectionModelNone();
assertFalse(
"Row 5 should not be selected after changing selection model",
isRowSelected(5));
}
}