package com.vaadin.tests.components.grid; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; import org.openqa.selenium.WebElement; import com.vaadin.testbench.By; import com.vaadin.testbench.elements.GridElement.GridCellElement; import com.vaadin.tests.components.grid.basics.GridBasicsTest; public class GridSelectAllTest extends GridBasicsTest { @Test public void testSelectAllCheckbox() { setSelectionModelMulti(); 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 < GridBasicsTest.ROWS; i += 100) { assertTrue("Row " + i + " was not selected.", getGridElement().getRow(i).isSelected()); } header.findElement(By.tagName("input")).click(); assertFalse("Row 100 was still selected", getGridElement().getRow(100).isSelected()); } @Test public void testSelectAllAndSort() { setSelectionModelMulti(); GridCellElement header = getGridElement().getHeaderCell(0, 0); header.findElement(By.tagName("input")).click(); getGridElement().getHeaderCell(0, 1).click(); WebElement selectionBox = getGridElement().getCell(4, 0) .findElement(By.tagName("input")); selectionBox.click(); selectionBox.click(); assertFalse("Exception occured on row reselection.", logContainsText( "Exception occured, java.lang.IllegalStateException: No item id for key 101 found.")); } @Test public void testSelectAllCheckboxWhenChangingModels() { GridCellElement header; header = getGridElement().getHeaderCell(0, 0); assertFalse( "Check box shouldn't have been in header for Single 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(); header = getGridElement().getHeaderCell(0, 0); assertFalse( "Check box shouldn't have been in header for Single Selection Model", header.isElementPresent(By.tagName("input"))); // Single selection model shouldn't have selection column to begin with assertFalse( "Selection columnn shouldn't have been in grid for Single Selection Model", getGridElement().getCell(0, 1) .isElementPresent(By.tagName("input"))); setSelectionModelSingle(); 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 testSelectAllCheckboxWithHeaderOperations() { setSelectionModelMulti(); selectMenuPath("Component", "Header", "Prepend header row"); assertEquals(2, getGridElement().getHeaderCount()); selectMenuPath("Component", "Header", "Append header row"); assertEquals(3, getGridElement().getHeaderCount()); GridCellElement header = getGridElement().getHeaderCell(1, 0); assertTrue("Multi Selection Model should have select all checkbox", header.isElementPresent(By.tagName("input"))); } @Test public void testSelectAllCheckboxAfterPrependHeaderOperations() { selectMenuPath("Component", "Header", "Prepend header row"); assertEquals(2, getGridElement().getHeaderCount()); setSelectionModelMulti(); GridCellElement header = getGridElement().getHeaderCell(1, 0); assertTrue("Multi Selection Model should have select all checkbox", header.isElementPresent(By.tagName("input"))); setSelectionModelSingle(); header = getGridElement().getHeaderCell(1, 0); assertFalse( "Check box shouldn't have been in header for Single Selection Model", header.isElementPresent(By.tagName("input"))); selectMenuPath("Component", "Header", "Append header row"); assertEquals(3, getGridElement().getHeaderCount()); setSelectionModelMulti(); header = getGridElement().getHeaderCell(1, 0); assertTrue("Multi Selection Model should have select all checkbox", header.isElementPresent(By.tagName("input"))); } @Test public void testSelectAllCheckbox_selectedAllFromClient_afterDeselectingOnClientSide_notSelected() { setSelectionModelMulti(); verifyAllSelected(false); getSelectAllCheckbox().click(); verifyAllSelected(true); getGridElement().getCell(5, 0).click(); verifyAllSelected(false); getGridElement().getCell(5, 0).click(); verifyAllSelected(false); // EXPECTED since multiselection model can't // verify that all have been selected } @Test public void testSelectAllCheckbox_selectedAllFromClient_afterDeselectingOnServerSide_notSelected() { setSelectionModelMulti(); verifyAllSelected(false); getSelectAllCheckbox().click(); verifyAllSelected(true); toggleFirstRowSelection(); verifyAllSelected(false); toggleFirstRowSelection(); verifyAllSelected(false); // EXPECTED since multiselection model can't // verify that all have been selected } @Test public void testSelectAllCheckbox_selectedAllFromServer_afterDeselectingOnClientSide_notSelected() { selectAll(); // triggers selection model change verifyAllSelected(true); getGridElement().getCell(5, 0).click(); verifyAllSelected(false); getGridElement().getCell(5, 0).click(); verifyAllSelected(false); // EXPECTED since multiselection model can't // verify that all have been selected } @Test public void testSelectAllCheckbox_selectedAllFromServer_afterDeselectingOnServerSide_notSelected() { selectAll(); // triggers selection model change verifyAllSelected(true); toggleFirstRowSelection(); verifyAllSelected(false); toggleFirstRowSelection(); verifyAllSelected(false); // EXPECTED since multiselection model can't // verify that all have been selected } @Test public void testSelectAllCheckbox_triggerVisibility() { verifySelectAllNotVisible(); setSelectionModelMulti(); verifySelectAllVisible(); setSelectAllCheckBoxHidden(); verifySelectAllNotVisible(); setSelectAllCheckBoxDefault(); verifySelectAllVisible(); // visible because in memory data provider setSelectAllCheckBoxHidden(); verifySelectAllNotVisible(); setSelectAllCheckBoxVisible(); verifySelectAllVisible(); } @Test public void testSelectAllCheckboxNotVisible_selectAllFromServer_staysHidden() { setSelectionModelMulti(); verifySelectAllVisible(); setSelectAllCheckBoxHidden(); verifySelectAllNotVisible(); selectAll(); verifySelectAllNotVisible(); } @Test public void testSelectAll_immediatelyWhenSettingSelectionModel() { verifySelectAllNotVisible(); selectAll(); // changes selection model too verifyAllSelected(true); } @Test public void testSelectAllCheckBoxHidden_immediatelyWhenChaningModel() { verifySelectAllNotVisible(); setSelectAllCheckBoxHidden(); // changes selection model verifySelectAllNotVisible(); } private void verifyAllSelected(boolean selected) { verifySelectAllVisible(); assertEquals("Select all checkbox selection state wrong", selected, getSelectAllCheckbox().isSelected()); } private void verifySelectAllVisible() { assertTrue("Select all checkbox should be displayed", getSelectAllCheckbox().isDisplayed()); } private void verifySelectAllNotVisible() { assertEquals("Select all checkbox should not be displayed", 0, getGridElement().getHeaderCell(0, 0) .findElements(By.tagName("input")).size()); } }