/*
* 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;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import com.vaadin.testbench.By;
import com.vaadin.testbench.elements.GridElement;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.GridElement.GridCellElement;
import com.vaadin.testbench.elements.NotificationElement;
import com.vaadin.testbench.parallel.TestCategory;
import com.vaadin.tests.tb3.MultiBrowserTest;
/**
* TB tests for the various builtin widget-based renderers.
*
* @since
* @author Vaadin Ltd
*/
@TestCategory("grid")
public class WidgetRenderersTest extends MultiBrowserTest {
@Override
public void setup() throws Exception {
super.setup();
openTestURL();
}
@Test
public void testProgressBarRenderer() {
assertTrue(getGridCell(0, 0)
.isElementPresent(By.className("v-progressbar")));
}
@Test
public void testButtonRenderer() {
WebElement button = getGridCell(0, 1)
.findElement(By.className("v-nativebutton"));
button.click();
waitUntilTextUpdated(button, "Clicked!");
}
@Test
public void testButtonRendererAfterCellBeingFocused() {
GridCellElement buttonCell = getGridCell(0, 1);
assertFalse("cell should not be focused before focusing",
buttonCell.isFocused());
// avoid clicking on the button
buttonCell.click(buttonCell.getSize().getWidth() - 10, 5);
assertTrue("cell should be focused after focusing",
buttonCell.isFocused());
WebElement button = buttonCell
.findElement(By.className("v-nativebutton"));
assertNotEquals("Button should not be clicked before click", "Clicked!",
button.getText());
new Actions(getDriver()).moveToElement(button).click().perform();
waitUntilTextUpdated(button, "Clicked!");
}
@Test
public void testImageRenderer() {
final WebElement image = getGridCell(0, 2)
.findElement(By.className("gwt-Image"));
waitUntilmageSrcEndsWith(image, "window/img/close.png");
image.click();
waitUntilmageSrcEndsWith(image, "window/img/maximize.png");
}
private void waitUntilmageSrcEndsWith(final WebElement image,
final String expectedText) {
waitUntil(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver input) {
return image.getAttribute("src").endsWith(expectedText);
}
@Override
public String toString() {
// Timed out after 10 seconds waiting for ...
return String.format(
"image source to update. Supposed to end with '%s' (was: '%s').",
expectedText, image.getAttribute("src"));
}
});
}
@Test
public void testColumnReorder() {
$(ButtonElement.class).caption("Change column order").first().click();
assertFalse("Notification was present",
isElementPresent(NotificationElement.class));
assertTrue(
getGridCell(0, 0).isElementPresent(By.className("gwt-Image")));
assertTrue(getGridCell(0, 1)
.isElementPresent(By.className("v-progressbar")));
assertTrue(getGridCell(0, 2)
.isElementPresent(By.className("v-nativebutton")));
}
@Test
public void testPropertyIdInEvent() {
WebElement button = getGridCell(0, 3)
.findElement(By.className("v-nativebutton"));
button.click();
waitUntilTextUpdated(button, WidgetRenderers.PROPERTY_ID);
}
GridCellElement getGridCell(int row, int col) {
return $(GridElement.class).first().getCell(row, col);
}
private void waitUntilTextUpdated(final WebElement button,
final String expectedText) {
waitUntil(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver input) {
return button.getText().equals(expectedText);
}
@Override
public String toString() {
// Timed out after 10 seconds waiting for ...
return String.format("button's text to become '%s' (was: '').",
expectedText, button.getText());
}
});
}
}