/*
* 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.grid.basics;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import com.vaadin.shared.ui.grid.GridConstants;
import com.vaadin.testbench.TestBenchElement;
import com.vaadin.testbench.elements.GridElement.GridCellElement;
import com.vaadin.testbench.elements.GridElement.GridEditorElement;
import com.vaadin.testbench.elements.NotificationElement;
public class GridEditorBufferedTest extends GridEditorTest {
@Override
@Before
public void setUp() {
super.setUp();
}
@Test
public void testKeyboardSave() {
editRow(100);
WebElement textField = getEditor().getField(0);
textField.click();
// without this, the click in the middle of the field might not be after
// the old text on some browsers
new Actions(getDriver()).sendKeys(Keys.END).perform();
textField.sendKeys(" changed");
// Save from keyboard
new Actions(getDriver()).sendKeys(Keys.ENTER).perform();
assertEditorClosed();
assertEquals("(100, 0) changed",
getGridElement().getCell(100, 0).getText());
}
@Test
public void testKeyboardSaveWithHiddenColumn() {
selectMenuPath("Component", "Columns", "Column 0", "Hidden");
editRow(100);
WebElement textField = getEditor().getField(5);
textField.click();
// without this, the click in the middle of the field might not be after
// the old text on some browsers
new Actions(getDriver()).sendKeys(Keys.END).perform();
textField.sendKeys(" changed");
// Save from keyboard
new Actions(getDriver()).sendKeys(Keys.ENTER).perform();
assertEditorClosed();
assertEquals("100 changed",
getGridElement().getCell(100, 4).getText());
}
@Test
public void testKeyboardSaveWithInvalidEdition() {
makeInvalidEdition();
GridEditorElement editor = getGridElement().getEditor();
TestBenchElement field = editor.getField(7);
field.click();
new Actions(getDriver()).sendKeys(Keys.ENTER).perform();
assertEditorOpen();
assertEquals(
GridBasics.COLUMN_CAPTIONS[7]
+ ": Could not convert value to Integer",
editor.getErrorMessage());
assertTrue("Field 7 should have been marked with an error after error",
isEditorCellErrorMarked(7));
editor.cancel();
editRow(100);
assertFalse("Exception should not exist",
isElementPresent(NotificationElement.class));
assertEquals("There should be no editor error message", null,
getGridElement().getEditor().getErrorMessage());
}
@Test
public void testSave() {
editRow(100);
WebElement textField = getEditor().getField(0);
textField.click();
// without this, the click in the middle of the field might not be after
// the old text on some browsers
new Actions(getDriver()).sendKeys(Keys.END).perform();
textField.sendKeys(" changed");
WebElement saveButton = getEditor()
.findElement(By.className("v-grid-editor-save"));
saveButton.click();
assertEquals("(100, 0) changed",
getGridElement().getCell(100, 0).getText());
}
@Test
public void testProgrammaticSave() {
editRow(100);
WebElement textField = getEditor().getField(0);
textField.click();
// without this, the click in the middle of the field might not be after
// the old text on some browsers
new Actions(getDriver()).sendKeys(Keys.END).perform();
textField.sendKeys(" changed");
selectMenuPath("Component", "Editor", "Save");
assertEquals("(100, 0) changed",
getGridElement().getCell(100, 0).getText());
}
@Test
public void testInvalidEdition() {
makeInvalidEdition();
GridEditorElement editor = getGridElement().getEditor();
editor.save();
assertEquals(
GridBasics.COLUMN_CAPTIONS[7]
+ ": Could not convert value to Integer",
editor.getErrorMessage());
assertTrue("Field 7 should have been marked with an error after error",
isEditorCellErrorMarked(7));
editor.cancel();
editRow(100);
assertFalse("Exception should not exist",
isElementPresent(NotificationElement.class));
assertEquals("There should be no editor error message", null,
getGridElement().getEditor().getErrorMessage());
}
private void makeInvalidEdition() {
editRow(5);
assertFalse(logContainsText(
"Exception occured, java.lang.IllegalStateException"));
GridEditorElement editor = getGridElement().getEditor();
assertFalse(
"Field 7 should not have been marked with an error before error",
editor.isFieldErrorMarked(7));
WebElement intField = editor.getField(7);
intField.clear();
intField.sendKeys("banana phone");
editor.getField(5).click();
}
@Test
public void testEditorInDisabledGrid() {
int originalScrollPos = getGridVerticalScrollPos();
editRow(5);
assertEditorOpen();
selectMenuPath("Component", "State", "Enabled");
assertEditorOpen();
GridEditorElement editor = getGridElement().getEditor();
editor.save();
assertEditorOpen();
editor.cancel();
assertEditorOpen();
selectMenuPath("Component", "State", "Enabled");
scrollGridVerticallyTo(100);
assertEquals(
"Grid shouldn't scroll vertically while editing in buffered mode",
originalScrollPos, getGridVerticalScrollPos());
}
@Test
public void testCaptionChange() {
editRow(5);
assertEquals("Save button caption should've been \""
+ GridConstants.DEFAULT_SAVE_CAPTION + "\" to begin with",
GridConstants.DEFAULT_SAVE_CAPTION, getSaveButton().getText());
assertEquals("Cancel button caption should've been \""
+ GridConstants.DEFAULT_CANCEL_CAPTION + "\" to begin with",
GridConstants.DEFAULT_CANCEL_CAPTION,
getCancelButton().getText());
selectMenuPath("Component", "Editor", "Change save caption");
assertNotEquals(
"Save button caption should've changed while editor is open",
GridConstants.DEFAULT_SAVE_CAPTION, getSaveButton().getText());
getCancelButton().click();
selectMenuPath("Component", "Editor", "Change cancel caption");
editRow(5);
assertNotEquals(
"Cancel button caption should've changed while editor is closed",
GridConstants.DEFAULT_CANCEL_CAPTION,
getCancelButton().getText());
}
@Test(expected = NoSuchElementException.class)
public void testVerticalScrollLocking() {
editRow(5);
getGridElement().getCell(200, 0);
}
@Test
public void testScrollDisabledOnMouseOpen() {
int originalScrollPos = getGridVerticalScrollPos();
GridCellElement cell_5_0 = getGridElement().getCell(5, 0);
new Actions(getDriver()).doubleClick(cell_5_0).perform();
scrollGridVerticallyTo(100);
assertEquals(
"Grid shouldn't scroll vertically while editing in buffered mode",
originalScrollPos, getGridVerticalScrollPos());
}
@Test
public void testScrollDisabledOnKeyboardOpen() {
int originalScrollPos = getGridVerticalScrollPos();
GridCellElement cell_5_0 = getGridElement().getCell(5, 0);
cell_5_0.click();
new Actions(getDriver()).sendKeys(Keys.ENTER).perform();
scrollGridVerticallyTo(100);
assertEquals(
"Grid shouldn't scroll vertically while editing in buffered mode",
originalScrollPos, getGridVerticalScrollPos());
}
@Test
public void testMouseOpeningClosing() {
getGridElement().getCell(4, 0).doubleClick();
assertEditorOpen();
getCancelButton().click();
assertEditorClosed();
selectMenuPath(TOGGLE_EDIT_ENABLED);
getGridElement().getCell(4, 0).doubleClick();
assertEditorClosed();
}
@Test
public void testMouseOpeningDisabledWhenOpen() {
editRow(5);
getGridElement().getCell(2, 0).doubleClick();
assertEquals("Editor should still edit row 5", "(5, 0)",
getEditor().getField(0).getAttribute("value"));
}
@Test
public void testUserSortDisabledWhenOpen() {
editRow(5);
getGridElement().getHeaderCell(0, 0).click();
assertEditorOpen();
assertEquals("(2, 0)", getGridElement().getCell(2, 0).getText());
}
}