/*
* 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;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.vaadin.testbench.parallel.TestCategory;
import com.vaadin.tests.tb3.MultiBrowserTest;
@TestCategory("grid")
public class GridClientDataSourcesTest extends MultiBrowserTest {
@Before
public void before() {
openTestURL();
}
@Test
public void normalRestishDatasource() throws Exception {
selectMenuPath("DataSources", "RESTish", "Use");
assertCellPresent("cell 0 #0");
scrollToBottom();
assertCellPresent("cell 199 #0");
assertCellNotPresent("cell 200 #0");
}
@Test
public void growOnRequestRestishDatasource() throws Exception {
selectMenuPath("DataSources", "RESTish", "Use");
selectMenuPath("DataSources", "RESTish", "Next request +10");
scrollToBottom();
/* second scroll needed because of scrollsize change after scrolling */
scrollToBottom();
assertCellPresent("cell 209 #1");
assertCellNotPresent("cell 210 #1");
}
@Test
public void shrinkOnRequestRestishDatasource() throws Exception {
selectMenuPath("DataSources", "RESTish", "Use");
scrollToBottom();
selectMenuPath("DataSources", "RESTish", "Next request -10");
scrollToTop();
assertCellPresent("cell 0 #1");
}
@Test
public void pushChangeRestishDatasource() throws Exception {
selectMenuPath("DataSources", "RESTish", "Use");
selectMenuPath("DataSources", "RESTish", "Push data change");
assertCellPresent("cell 0 #1");
assertCellNotPresent("cell 0 #0");
}
@Test
public void growOnPushRestishDatasource() throws Exception {
selectMenuPath("DataSources", "RESTish", "Use");
selectMenuPath("DataSources", "RESTish", "Push data change +10");
assertCellPresent("cell 0 #1");
assertCellNotPresent("cell 0 #0");
scrollToBottom();
assertCellPresent("cell 209 #1");
}
@Test
public void shrinkOnPushRestishDatasource() throws Exception {
selectMenuPath("DataSources", "RESTish", "Use");
scrollToBottom();
selectMenuPath("DataSources", "RESTish", "Push data change -10");
assertCellPresent("cell 189 #1");
assertCellNotPresent("cell 189 #0");
assertCellNotPresent("cell 199 #1");
assertCellNotPresent("cell 199 #0");
}
private void assertCellPresent(String content) {
assertNotNull(
"A cell with content \"" + content + "\" should've been found",
findByXPath("//td[text()='" + content + "']"));
}
private void assertCellNotPresent(String content) {
assertNull(
"A cell with content \"" + content
+ "\" should've not been found",
findByXPath("//td[text()='" + content + "']"));
}
private void scrollToTop() {
scrollVerticallyTo(0);
}
private void scrollToBottom() {
scrollVerticallyTo(9999);
}
private WebElement findByXPath(String string) {
if (isElementPresent(By.xpath(string))) {
return findElement(By.xpath(string));
} else {
return null;
}
}
private void scrollVerticallyTo(int px) {
executeScript("arguments[0].scrollTop = " + px,
findVerticalScrollbar());
}
private Object executeScript(String script, Object args) {
final WebDriver driver = getDriver();
if (driver instanceof JavascriptExecutor) {
final JavascriptExecutor je = (JavascriptExecutor) driver;
return je.executeScript(script, args);
} else {
throw new IllegalStateException("current driver "
+ getDriver().getClass().getName() + " is not a "
+ JavascriptExecutor.class.getSimpleName());
}
}
private WebElement findVerticalScrollbar() {
return getDriver().findElement(By.xpath(
"//div[contains(@class, " + "\"v-grid-scroller-vertical\")]"));
}
@Override
protected void selectMenu(String menuCaption) {
// GWT menu does not need to be clicked.
selectMenu(menuCaption, false);
}
@Override
protected WebElement getMenuElement(String menuCaption) {
return getDriver()
.findElement(By.xpath("//td[text() = '" + menuCaption + "']"));
}
}