/* * 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.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.List; 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.testbench.elements.GridElement.GridCellElement; import com.vaadin.testbench.elements.GridElement.GridEditorElement; import com.vaadin.testbench.parallel.BrowserUtil; import com.vaadin.v7.shared.ui.grid.GridConstants; import com.vaadin.v7.tests.components.grid.basicfeatures.GridBasicClientFeaturesTest; import com.vaadin.v7.tests.components.grid.basicfeatures.GridBasicFeatures; public class GridEditorClientTest extends GridBasicClientFeaturesTest { private static final String[] EDIT_ROW_100 = new String[] { "Component", "Editor", "Edit row 100" }; private static final String[] EDIT_ROW_5 = new String[] { "Component", "Editor", "Edit row 5" }; @Before public void setUp() { openTestURL(); selectMenuPath("Component", "Editor", "Enabled"); } @Test public void testProgrammaticOpeningClosing() { selectMenuPath(EDIT_ROW_5); assertNotNull(getEditor()); selectMenuPath("Component", "Editor", "Cancel edit"); assertNull(getEditor()); assertEquals("Row 5 edit cancelled", findElement(By.className("grid-editor-log")).getText()); } @Test public void testProgrammaticOpeningWithScroll() { selectMenuPath(EDIT_ROW_100); assertNotNull(getEditor()); } @Test(expected = NoSuchElementException.class) public void testVerticalScrollLocking() { selectMenuPath(EDIT_ROW_5); getGridElement().getCell(200, 0); } @Test public void testMouseOpeningClosing() { getGridElement().getCell(4, 0).doubleClick(); assertNotNull(getEditor()); // Move focus to the third input field getEditor().findElements(By.className("gwt-TextBox")).get(2).click(); // Press save button getSaveButton().click(); // Make sure the editor went away assertNull(getEditor()); // Check that focus has moved to cell 4,2 - the last one that was // focused in Editor assertTrue(getGridElement().getCell(4, 2).isFocused()); // Disable editor selectMenuPath("Component", "Editor", "Enabled"); getGridElement().getCell(4, 0).doubleClick(); assertNull(getEditor()); } @Test public void testKeyboardOpeningClosing() { getGridElement().getCell(4, 0).click(); new Actions(getDriver()).sendKeys(Keys.ENTER).perform(); assertNotNull(getEditor()); new Actions(getDriver()).sendKeys(Keys.ESCAPE).perform(); assertNull(getEditor()); assertEquals("Row 4 edit cancelled", findElement(By.className("grid-editor-log")).getText()); // Disable editor selectMenuPath("Component", "Editor", "Enabled"); getGridElement().getCell(5, 0).click(); new Actions(getDriver()).sendKeys(Keys.ENTER).perform(); assertNull(getEditor()); } @Test public void testWidgetBinding() throws Exception { selectMenuPath(EDIT_ROW_100); WebElement editor = getEditor(); List<WebElement> widgets = editor .findElements(By.className("gwt-TextBox")); assertEquals(GridBasicFeatures.EDITABLE_COLUMNS, widgets.size()); assertEquals("(100, 0)", widgets.get(0).getAttribute("value")); assertEquals("(100, 1)", widgets.get(1).getAttribute("value")); assertEquals("(100, 2)", widgets.get(2).getAttribute("value")); assertEquals("100", widgets.get(6).getAttribute("value")); assertEquals("<b>100</b>", widgets.get(8).getAttribute("value")); } @Test public void testWithSelectionColumn() throws Exception { selectMenuPath("Component", "State", "Selection mode", "multi"); selectMenuPath("Component", "State", "Frozen column count", "-1 columns"); selectMenuPath(EDIT_ROW_5); WebElement editorCells = findElements( By.className("v-grid-editor-cells")).get(1); List<WebElement> selectorDivs = editorCells .findElements(By.cssSelector("div")); assertFalse("selector column cell should've had contents", selectorDivs.get(0).getAttribute("innerHTML").isEmpty()); assertFalse("normal column cell shoul've had contents", selectorDivs.get(1).getAttribute("innerHTML").isEmpty()); } @Test public void testSave() { selectMenuPath(EDIT_ROW_100); WebElement textField = getEditor() .findElements(By.className("gwt-TextBox")).get(0); textField.clear(); textField.sendKeys("Changed"); WebElement saveButton = getEditor() .findElement(By.className("v-grid-editor-save")); saveButton.click(); assertEquals("Changed", getGridElement().getCell(100, 0).getText()); } @Test public void testProgrammaticSave() { selectMenuPath(EDIT_ROW_100); WebElement textField = getEditor() .findElements(By.className("gwt-TextBox")).get(0); textField.clear(); textField.sendKeys("Changed"); selectMenuPath("Component", "Editor", "Save"); assertEquals("Changed", getGridElement().getCell(100, 0).getText()); } @Test public void testCaptionChange() { selectMenuPath(EDIT_ROW_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"); selectMenuPath(EDIT_ROW_5); assertNotEquals( "Cancel button caption should've changed while editor is closed", GridConstants.DEFAULT_CANCEL_CAPTION, getCancelButton().getText()); } @Test public void testUneditableColumn() { selectMenuPath("Component", "Editor", "Edit row 5"); assertFalse("Uneditable column should not have an editor widget", getGridElement().getEditor().isEditable(3)); } @Test public void testErrorField() { selectMenuPath(EDIT_ROW_5); GridEditorElement editor = getGridElement().getEditor(); assertTrue("No errors should be present", editor.findElements(By.className("error")).isEmpty()); assertEquals("No error message should be present", null, editor.getErrorMessage()); selectMenuPath("Component", "Editor", "Toggle second editor error"); getSaveButton().click(); assertEquals("Unexpected amount of error fields", 1, editor.findElements(By.className("error")).size()); assertEquals("Unexpedted error message", "Syntethic fail of editor in column 2. " + "This message is so long that it doesn't fit into its box", editor.getErrorMessage()); } @Test public void testFocusOnMouseOpen() { GridCellElement cell = getGridElement().getCell(4, 2); cell.doubleClick(); WebElement focused = getFocusedElement(); assertEquals("", "input", focused.getTagName()); assertEquals("", cell.getText(), focused.getAttribute("value")); } @Test public void testFocusOnKeyboardOpen() { GridCellElement cell = getGridElement().getCell(4, 2); cell.click(); new Actions(getDriver()).sendKeys(Keys.ENTER).perform(); WebElement focused = getFocusedElement(); assertEquals("", "input", focused.getTagName()); assertEquals("", cell.getText(), focused.getAttribute("value")); } @Test public void testNoFocusOnProgrammaticOpen() { selectMenuPath(EDIT_ROW_5); WebElement focused = getFocusedElement(); if (BrowserUtil.isIE(getDesiredCapabilities())) { assertEquals("Focus should be nowhere", null, focused); } else { // GWT menubar loses focus after clicking a menuitem assertEquals("Focus should be in body", "body", focused.getTagName()); } } protected WebElement getSaveButton() { return getEditor().findElement(By.className("v-grid-editor-save")); } protected WebElement getCancelButton() { return getEditor().findElement(By.className("v-grid-editor-cancel")); } }