aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/com/vaadin/tests
diff options
context:
space:
mode:
authorMatti Hosio <mhosio@vaadin.com>2014-12-17 10:31:33 +0200
committerMatti Hosio <mhosio@vaadin.com>2014-12-17 10:31:33 +0200
commite547f024533bef83b8c8c8e522240f34765c894d (patch)
tree4610ad629b996df6d7882a8f9190922a467046d2 /uitest/src/com/vaadin/tests
parent8a0a1bdb4630f39214a039a2689bfa5a1431a413 (diff)
parenta9f24b00e9ddcd5ca19ac2907e0bf2413f036af4 (diff)
downloadvaadin-framework-e547f024533bef83b8c8c8e522240f34765c894d.tar.gz
vaadin-framework-e547f024533bef83b8c8c8e522240f34765c894d.zip
Merge remote-tracking branch 'origin/master' into declarative
Conflicts: server/src/com/vaadin/ui/TextField.java Change-Id: I289cb9ec80d494ab79aec11a43708abf5b403a00
Diffstat (limited to 'uitest/src/com/vaadin/tests')
-rw-r--r--uitest/src/com/vaadin/tests/components/TooltipPosition.java70
-rw-r--r--uitest/src/com/vaadin/tests/components/TooltipPositionTest.java173
-rw-r--r--uitest/src/com/vaadin/tests/components/accordion/AccordionRemoveTabTest.java13
-rw-r--r--uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerLongEventTest.java55
-rw-r--r--uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerTestUI.java8
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/FilteringTurkishLocale.java57
-rw-r--r--uitest/src/com/vaadin/tests/components/combobox/FilteringTurkishLocaleTest.java80
-rw-r--r--uitest/src/com/vaadin/tests/components/customlayout/CustomLayoutWithoutTemplate.java44
-rw-r--r--uitest/src/com/vaadin/tests/components/customlayout/CustomLayoutWithoutTemplateTest.java43
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupClosing.java43
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupClosingTest.java81
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupPosition.java52
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupPositionTest.java68
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateRangeWithSqlDate.java57
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DateRangeWithSqlDateTest.java51
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DefaultDateFieldPopupPosition.java27
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/DefaultDateFieldPopupPositionTest.java43
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/ValoDateFieldPopupPosition.java30
-rw-r--r--uitest/src/com/vaadin/tests/components/datefield/ValoDateFieldPopupPositionTest.java43
-rw-r--r--uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropRelativeWidth.java58
-rw-r--r--uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropRelativeWidthTest.java57
-rw-r--r--uitest/src/com/vaadin/tests/components/draganddropwrapper/DragStartModesTest.java2
-rw-r--r--uitest/src/com/vaadin/tests/components/menubar/MenuBarSubmenusClosingValo.java60
-rw-r--r--uitest/src/com/vaadin/tests/components/menubar/MenuBarSubmenusClosingValoTest.java72
-rw-r--r--uitest/src/com/vaadin/tests/components/menubar/MenuTooltipTest.java1
-rw-r--r--uitest/src/com/vaadin/tests/components/notification/NotificationsWaiAriaTest.java7
-rw-r--r--uitest/src/com/vaadin/tests/components/select/EnumSelect.java69
-rw-r--r--uitest/src/com/vaadin/tests/components/select/EnumSelectTest.java61
-rw-r--r--uitest/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelHeight.java87
-rw-r--r--uitest/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelHeightTest.java71
-rw-r--r--uitest/src/com/vaadin/tests/components/table/DelayedColumnLayouting.java72
-rw-r--r--uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.html43
-rw-r--r--uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndexTest.java63
-rw-r--r--uitest/src/com/vaadin/tests/components/tabsheet/FirstTabNotVisibleInTabsheet.java44
-rw-r--r--uitest/src/com/vaadin/tests/components/tabsheet/FirstTabNotVisibleInTabsheetTest.java27
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/AlternatingTextFields.java106
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/AlternatingTextFieldsTest.java212
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java1
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java7
-rw-r--r--uitest/src/com/vaadin/tests/components/treetable/MinimalWidthColumns.java44
-rw-r--r--uitest/src/com/vaadin/tests/components/treetable/MinimalWidthColumnsTest.java31
-rw-r--r--uitest/src/com/vaadin/tests/debug/PushVersionInfo.java51
-rw-r--r--uitest/src/com/vaadin/tests/debug/PushVersionInfoTest.java102
-rw-r--r--uitest/src/com/vaadin/tests/fieldgroup/BasicCrud.java110
-rw-r--r--uitest/src/com/vaadin/tests/fieldgroup/BasicCrudTest.java68
-rw-r--r--uitest/src/com/vaadin/tests/fieldgroup/MultipleValidationErrors.java72
-rw-r--r--uitest/src/com/vaadin/tests/fieldgroup/MultipleValidationErrorsTest.java37
-rw-r--r--uitest/src/com/vaadin/tests/fieldgroup/PersonBeanWithValidationAnnotations.java31
-rw-r--r--uitest/src/com/vaadin/tests/layouts/HorizontalLayoutWithLabelAndButton.java43
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7a2/WidgetContainer.java2
-rw-r--r--uitest/src/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonAction.java128
-rw-r--r--uitest/src/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonActionTest.java95
-rw-r--r--uitest/src/com/vaadin/tests/push/PushConfigurationLongPollingTest.java8
-rw-r--r--uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java9
-rw-r--r--uitest/src/com/vaadin/tests/push/PushConfigurationTest.java12
-rw-r--r--uitest/src/com/vaadin/tests/push/PushConfigurationWebSocketTest.java5
-rw-r--r--uitest/src/com/vaadin/tests/push/PushConfigurator.java11
-rw-r--r--uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java12
-rw-r--r--uitest/src/com/vaadin/tests/themes/chameleon/ChameleonNotification.java30
-rw-r--r--uitest/src/com/vaadin/tests/themes/chameleon/ChameleonNotificationTest.java25
-rw-r--r--uitest/src/com/vaadin/tests/themes/valo/ButtonsAndLinks.java5
-rw-r--r--uitest/src/com/vaadin/tests/themes/valo/CheckBoxes.java16
-rw-r--r--uitest/src/com/vaadin/tests/themes/valo/ModalWindowTest.java34
-rw-r--r--uitest/src/com/vaadin/tests/themes/valo/ValoThemeUITest.java4
64 files changed, 3060 insertions, 83 deletions
diff --git a/uitest/src/com/vaadin/tests/components/TooltipPosition.java b/uitest/src/com/vaadin/tests/components/TooltipPosition.java
new file mode 100644
index 0000000000..30222722d9
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/TooltipPosition.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2000-2014 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;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * This UI is used for testing that a tooltip is not positioned partially
+ * outside the browser window when there is enough space to display it.
+ *
+ * @author Vaadin Ltd
+ */
+public class TooltipPosition extends AbstractTestUI {
+
+ public static final int NUMBER_OF_BUTTONS = 5;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ // These tooltip delay settings can be removed once #13854 is resolved.
+ getTooltipConfiguration().setOpenDelay(0);
+ getTooltipConfiguration().setQuickOpenDelay(0);
+ getTooltipConfiguration().setCloseTimeout(1000);
+
+ VerticalLayout layout = new VerticalLayout();
+ layout.setSpacing(true);
+ layout.setHeight(UI.getCurrent().getPage().getBrowserWindowHeight(),
+ Unit.PIXELS);
+ addComponent(layout);
+ for (int i = 0; i < NUMBER_OF_BUTTONS; i++) {
+ Button button = new Button("Button");
+ button.setDescription(generateTooltipText());
+ layout.addComponent(button);
+ }
+ }
+
+ private String generateTooltipText() {
+ StringBuilder result = new StringBuilder();
+ for (int i = 0; i < 50; i++) {
+ result.append("This is the line ").append(i)
+ .append(" of the long tooltip text.<br>");
+ }
+ return result.toString();
+ }
+
+ @Override
+ public String getTestDescription() {
+ return "The tooltips of the buttons should not be clipped when there is enough space to display them.";
+ }
+
+ @Override
+ public Integer getTicketNumber() {
+ return 15129;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/TooltipPositionTest.java b/uitest/src/com/vaadin/tests/components/TooltipPositionTest.java
new file mode 100644
index 0000000000..4106374d64
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/TooltipPositionTest.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2000-2014 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;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.Point;
+import org.openqa.selenium.StaleElementReferenceException;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebDriver.Window;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Tests that the tooltip is positioned so that it fits in the displayed area.
+ *
+ * @author Vaadin Ltd
+ */
+public class TooltipPositionTest extends MultiBrowserTest {
+
+ @Test
+ public void testRegression_EmptyTooltipShouldNotBeAppearedDuringInitialization()
+ throws Exception {
+ openTestURL();
+
+ waitForElementVisible(By.cssSelector(".v-tooltip"));
+ WebElement tooltip = driver.findElement(By.cssSelector(".v-tooltip"));
+
+ Assert.assertTrue(
+ "This init tooltip with text ' ' is present in the DOM and should be entirely outside the browser window",
+ isOutsideOfWindow(tooltip));
+ }
+
+ @Test
+ public void testTooltipPosition() throws Exception {
+ openTestURL();
+ for (int i = 0; i < TooltipPosition.NUMBER_OF_BUTTONS; i++) {
+ ButtonElement button = $(ButtonElement.class).get(i);
+ // Move the mouse to display the tooltip.
+ Actions actions = new Actions(driver);
+ actions.moveToElement(button, 10, 10);
+ actions.build().perform();
+ waitUntil(tooltipToBeInsideWindow(By.cssSelector(".v-tooltip"),
+ driver.manage().window()));
+
+ if (i < TooltipPosition.NUMBER_OF_BUTTONS - 1) {
+ // Remove the tooltip by moving the mouse.
+ actions = new Actions(driver);
+ actions.moveByOffset(300, 0);
+ actions.build().perform();
+ waitUntil(tooltipNotToBeShown(By.cssSelector(".v-tooltip"),
+ driver.manage().window()));
+ }
+ }
+ }
+
+ /*
+ * An expectation for checking that the tooltip found by the given locator
+ * is present in the DOM and entirely inside the browser window. The
+ * coordinate of the top left corner of the window is supposed to be (0, 0).
+ */
+ private ExpectedCondition<Boolean> tooltipToBeInsideWindow(
+ final By tooltipLocator, final Window window) {
+ return new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ List<WebElement> elements = findElements(tooltipLocator);
+ if (elements.isEmpty()) {
+ return false;
+ }
+ WebElement element = elements.get(0);
+ try {
+ if (!element.isDisplayed()) {
+ return false;
+ }
+ Point topLeft = element.getLocation();
+ int xLeft = topLeft.getX();
+ int yTop = topLeft.getY();
+ if (xLeft < 0 || yTop < 0) {
+ return false;
+ }
+ Dimension elementSize = element.getSize();
+ int xRight = xLeft + elementSize.getWidth() - 1;
+ int yBottom = yTop + elementSize.getHeight() - 1;
+ Dimension browserSize = window.getSize();
+ return xRight < browserSize.getWidth()
+ && yBottom < browserSize.getHeight();
+ } catch (StaleElementReferenceException e) {
+ return false;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "the tooltip to be displayed inside the window";
+ }
+ };
+ };
+
+ /*
+ * An expectation for checking that the tooltip found by the given locator
+ * is not shown in the window, even partially. The top left corner of window
+ * should have coordinates (0, 0).
+ */
+ private ExpectedCondition<Boolean> tooltipNotToBeShown(
+ final By tooltipLocator, final Window window) {
+ return new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ List<WebElement> elements = findElements(tooltipLocator);
+ if (elements.isEmpty()) {
+ return true;
+ }
+ WebElement tooltip = elements.get(0);
+ try {
+ return isOutsideOfWindow(tooltip);
+ } catch (StaleElementReferenceException e) {
+ return true;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "the tooltip not to be displayed inside the window";
+ }
+
+ };
+ }
+
+ private boolean isOutsideOfWindow(WebElement tooltip) {
+ if (!tooltip.isDisplayed()) {
+ return true;
+ }
+ // The tooltip is shown, at least partially, if
+ // its intervals of both horizontal and vertical coordinates
+ // overlap those of the window.
+ Point topLeft = tooltip.getLocation();
+ Dimension tooltipSize = tooltip.getSize();
+ Dimension windowSize = driver.manage().window().getSize();
+ int xLeft = topLeft.getX();
+ int yTop = topLeft.getY();
+ int xRight = xLeft + tooltipSize.getWidth() - 1;
+ int yBottom = yTop + tooltipSize.getHeight() - 1;
+ boolean overlapHorizontally = !(xRight < 0 || xLeft >= windowSize
+ .getWidth());
+ boolean overlapVertically = !(yBottom < 0 || yTop >= windowSize
+ .getHeight());
+ return !(overlapHorizontally && overlapVertically);
+ }
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/accordion/AccordionRemoveTabTest.java b/uitest/src/com/vaadin/tests/components/accordion/AccordionRemoveTabTest.java
index f5651e0ada..1047c070c8 100644
--- a/uitest/src/com/vaadin/tests/components/accordion/AccordionRemoveTabTest.java
+++ b/uitest/src/com/vaadin/tests/components/accordion/AccordionRemoveTabTest.java
@@ -44,6 +44,19 @@ public class AccordionRemoveTabTest extends MultiBrowserTest {
checkFirstItemHeight("On third tab");
}
+ @Test
+ public void testConsoleErrorOnSwitch() {
+ setDebug(true);
+ openTestURL();
+ WebElement firstItem = driver.findElement(By
+ .className("v-accordion-item-first"));
+ WebElement caption = firstItem.findElement(By
+ .className("v-accordion-item-caption"));
+ caption.click();
+ Assert.assertEquals("Errors present in console", 0,
+ findElements(By.className("SEVERE")).size());
+ }
+
private void checkFirstItemHeight(String text) {
WebElement firstItem = driver.findElement(By
.className("v-accordion-item-first"));
diff --git a/uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerLongEventTest.java b/uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerLongEventTest.java
new file mode 100644
index 0000000000..0ec196f266
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerLongEventTest.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2000-2014 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.calendar;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.By;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Tests if long event which began before the view period is shown (#15242)
+ */
+public class BeanItemContainerLongEventTest extends MultiBrowserTest {
+
+ @Override
+ protected String getDeploymentPath() {
+ return "/run/BeanItemContainerTestUI?restartApplication";
+ }
+
+ @Test
+ public void testEventDisplayedInWeekView() {
+ openTestURL();
+ WebElement target = driver.findElements(
+ By.className("v-calendar-week-number")).get(1);
+ target.click();
+ target = driver.findElement(By.className("v-calendar-event"));
+ Assert.assertEquals("Wrong event name", "Long event", target.getText());
+ }
+
+ @Test
+ public void testEventDisplayedInDayView() {
+ openTestURL();
+ WebElement target = driver.findElements(
+ By.className("v-calendar-day-number")).get(5);
+ target.click();
+ target = driver.findElement(By.className("v-calendar-event"));
+ Assert.assertEquals("Wrong event name", "Long event", target.getText());
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerTestUI.java b/uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerTestUI.java
index 83fc4a03cb..bda3b34875 100644
--- a/uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerTestUI.java
+++ b/uitest/src/com/vaadin/tests/components/calendar/BeanItemContainerTestUI.java
@@ -17,6 +17,7 @@ package com.vaadin.tests.components.calendar;
import java.util.Arrays;
import java.util.Date;
+import java.util.GregorianCalendar;
import com.vaadin.data.fieldgroup.FieldGroup;
import com.vaadin.data.fieldgroup.FieldGroup.CommitException;
@@ -69,6 +70,13 @@ public class BeanItemContainerTestUI extends UI {
table.setVisibleColumns(new Object[] { "caption", "description",
"start", "end" });
content.addComponent(table);
+
+ BasicEvent longEvent = new BasicEvent();
+ longEvent.setCaption("Long event");
+ longEvent.setAllDay(true);
+ longEvent.setStart(new GregorianCalendar(2000, 1, 3).getTime());
+ longEvent.setEnd(new GregorianCalendar(2000, 2, 5).getTime());
+ events.addBean(longEvent);
}
/**
diff --git a/uitest/src/com/vaadin/tests/components/combobox/FilteringTurkishLocale.java b/uitest/src/com/vaadin/tests/components/combobox/FilteringTurkishLocale.java
new file mode 100644
index 0000000000..ff7faf1965
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/combobox/FilteringTurkishLocale.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2000-2014 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.combobox;
+
+import java.util.Arrays;
+import java.util.Locale;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.NativeSelect;
+
+public class FilteringTurkishLocale extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+
+ final ComboBox comboBox = new ComboBox("Box", Arrays.asList(
+ "I without dot", "Ä° with dot"));
+ comboBox.setNullSelectionAllowed(false);
+
+ NativeSelect localeSelect = new NativeSelect("Locale", Arrays.asList(
+ Locale.ENGLISH, new Locale("tr")));
+ localeSelect.addValueChangeListener(new ValueChangeListener() {
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ comboBox.setLocale((Locale) event.getProperty().getValue());
+ }
+ });
+ localeSelect.setValue(Locale.ENGLISH);
+
+ addComponents(localeSelect, comboBox);
+ }
+
+ @Override
+ public String getDescription() {
+ return "When the Turkish locale is used,"
+ + " filtering for 'i' should show the option with a dot"
+ + " while filtering for 'ı' should show the option witout a dot";
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/combobox/FilteringTurkishLocaleTest.java b/uitest/src/com/vaadin/tests/components/combobox/FilteringTurkishLocaleTest.java
new file mode 100644
index 0000000000..d7f8e233ec
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/combobox/FilteringTurkishLocaleTest.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2000-2014 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.combobox;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.testbench.elements.NativeSelectElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class FilteringTurkishLocaleTest extends MultiBrowserTest {
+
+ @Test
+ public void testEnglishLocale() {
+ openTestURL();
+
+ setLocale("en");
+
+ List<String> suggestions = getFilterSuggestions("i");
+
+ Assert.assertEquals("Both suggestions should be present", 2,
+ suggestions.size());
+ }
+
+ @Test
+ public void testTurkishLocaleWithDot() {
+ openTestURL();
+
+ setLocale("tr");
+
+ List<String> suggestions = getFilterSuggestions("i");
+
+ Assert.assertEquals("There should be only one suggestion", 1,
+ suggestions.size());
+ Assert.assertEquals("Ä° with dot", suggestions.get(0));
+ }
+
+ @Test
+ public void testTurkishLocaleWithoutDot() {
+ openTestURL();
+
+ setLocale("tr");
+
+ List<String> suggestions = getFilterSuggestions("ı");
+
+ Assert.assertEquals("There should be only one suggestion", 1,
+ suggestions.size());
+ Assert.assertEquals("I without dot", suggestions.get(0));
+ }
+
+ private List<String> getFilterSuggestions(String string) {
+ ComboBoxElement comboBox = $(ComboBoxElement.class).first();
+ comboBox.findElement(By.vaadin("#textbox")).sendKeys(string);
+
+ return comboBox.getPopupSuggestions();
+ }
+
+ private void setLocale(String locale) {
+ NativeSelectElement selector = $(NativeSelectElement.class).first();
+ selector.selectByText(locale);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/customlayout/CustomLayoutWithoutTemplate.java b/uitest/src/com/vaadin/tests/components/customlayout/CustomLayoutWithoutTemplate.java
new file mode 100644
index 0000000000..54949a053d
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/customlayout/CustomLayoutWithoutTemplate.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2000-2014 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.customlayout;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Label;
+
+public class CustomLayoutWithoutTemplate extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ CustomLayout cl = new CustomLayout("missing-layout-file.html");
+ cl.addComponent(new Label("This Label should be visible."), "foo");
+ cl.addComponent(new Button("And this Button too."), "bar");
+
+ addComponent(cl);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Verify that CustomLayout renders child components even if the template is missing.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 8696;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/customlayout/CustomLayoutWithoutTemplateTest.java b/uitest/src/com/vaadin/tests/components/customlayout/CustomLayoutWithoutTemplateTest.java
new file mode 100644
index 0000000000..695d9cceff
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/customlayout/CustomLayoutWithoutTemplateTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2000-2014 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.customlayout;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.ElementQuery;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.CustomLayoutElement;
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class CustomLayoutWithoutTemplateTest extends SingleBrowserTest {
+
+ @Test
+ public void testChildComponents() {
+ openTestURL();
+
+ ElementQuery<CustomLayoutElement> customLayout = $(CustomLayoutElement.class);
+
+ // Verify the Button and Label are rendered inside the CustomLayout.
+ assertTrue("Button was not rendered.",
+ customLayout.$(ButtonElement.class).exists());
+ assertTrue("Label was not rendered.", customLayout
+ .$(LabelElement.class).exists());
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupClosing.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupClosing.java
new file mode 100644
index 0000000000..60508a30d4
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupClosing.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.DateField;
+
+public class DateFieldPopupClosing extends AbstractTestUI {
+
+ static final String DATEFIELD_ID = "datefield";
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final DateField df = new DateField();
+ df.setId(DATEFIELD_ID);
+ addComponent(df);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "DateField popup should be closed when click on popup button";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 14857;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupClosingTest.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupClosingTest.java
new file mode 100644
index 0000000000..9fd6fe82e2
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupClosingTest.java
@@ -0,0 +1,81 @@
+package com.vaadin.tests.components.datefield;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+
+import com.vaadin.testbench.elements.DateFieldElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class DateFieldPopupClosingTest extends MultiBrowserTest {
+
+ @Test
+ public void testDateFieldPopupClosingLongClick()
+ throws InterruptedException, IOException {
+ openTestURL();
+
+ fastClickDateDatePickerButton();
+
+ assertThatPopupIsVisible();
+
+ longClickDateDatePickerButton();
+
+ assertThatPopupIsInvisible();
+ }
+
+ private void assertThatPopupIsVisible() {
+ waitUntil(ExpectedConditions.visibilityOfElementLocated(By
+ .className("v-datefield-popup")));
+ }
+
+ private void assertThatPopupIsInvisible() {
+ // ExpectedConditions.invisibilityOfElementLocated doesn't work
+ // with PhantomJS when running with a hub:
+ // https://code.google.com/p/selenium/issues/detail?id=5000
+ // so we need to make our own.
+
+ waitUntil(new ExpectedCondition<Boolean>() {
+ @Override
+ public Boolean apply(WebDriver input) {
+ try {
+ return !(findElement(By.className("v-datefield-popup"))
+ .isDisplayed());
+ } catch (Exception e) {
+ return true;
+ }
+ }
+
+ @Override
+ public String toString() {
+ // Timed out after 10 seconds waiting for ...
+ return "popup to not be visible";
+ }
+ });
+ }
+
+ private void longClickDateDatePickerButton() {
+ WebElement button = getToggleButton();
+
+ new Actions(getDriver()).clickAndHold(button).perform();
+ assertThatPopupIsInvisible();
+
+ new Actions(getDriver()).release(button).perform();
+ }
+
+ private WebElement getToggleButton() {
+ DateFieldElement dateField = $(DateFieldElement.class).first();
+
+ return dateField.findElement(By.tagName("button"));
+ }
+
+ private void fastClickDateDatePickerButton() {
+ getToggleButton().click();
+ }
+
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupPosition.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupPosition.java
new file mode 100644
index 0000000000..4469ad3b1a
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupPosition.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupDateField;
+
+/**
+ * Test UI for date field Popup calendar.
+ *
+ * @author Vaadin Ltd
+ */
+public abstract class DateFieldPopupPosition extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ HorizontalLayout layout = new HorizontalLayout();
+ addComponent(layout);
+ Label gap = new Label();
+ gap.setWidth(250, Unit.PIXELS);
+ layout.addComponent(gap);
+ PopupDateField field = new PopupDateField();
+ layout.addComponent(field);
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 14757;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Calendar popup should not placed on the top of text field when "
+ + "there is no space on bottom.";
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupPositionTest.java b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupPositionTest.java
new file mode 100644
index 0000000000..f896519aae
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateFieldPopupPositionTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.DateFieldElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Test for date field popup calendar position.
+ *
+ * @author Vaadin Ltd
+ */
+public abstract class DateFieldPopupPositionTest extends MultiBrowserTest {
+
+ @Test
+ public void testPopupPosition() {
+ openTestURL();
+
+ int height = getFieldBottom() + 150;
+ adjustBrowserWindow(height);
+
+ openPopup();
+
+ checkPopupPosition();
+ }
+
+ protected abstract void checkPopupPosition();
+
+ protected WebElement getPopup() {
+ return findElement(By.className("v-datefield-popup"));
+ }
+
+ private void adjustBrowserWindow(int height) {
+ Dimension size = getDriver().manage().window().getSize();
+ getDriver().manage().window()
+ .setSize(new Dimension(size.getWidth(), height));
+ }
+
+ private int getFieldBottom() {
+ DateFieldElement dateField = $(DateFieldElement.class).first();
+ return dateField.getLocation().getY() + dateField.getSize().getHeight();
+ }
+
+ private void openPopup() {
+ findElement(By.className("v-datefield-button")).click();
+ if (!isElementPresent(By.className("v-datefield-popup"))) {
+ findElement(By.className("v-datefield-button")).click();
+ }
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateRangeWithSqlDate.java b/uitest/src/com/vaadin/tests/components/datefield/DateRangeWithSqlDate.java
new file mode 100644
index 0000000000..d3bc4267ec
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateRangeWithSqlDate.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.DateField;
+import com.vaadin.ui.InlineDateField;
+
+import java.util.Locale;
+
+public class DateRangeWithSqlDate extends AbstractTestUI {
+
+ // 2014-12-01
+ private static final java.sql.Date startDate = new java.sql.Date(
+ 1417467822699L);
+
+ // 2014-12-02
+ private static final java.sql.Date endDate = new java.sql.Date(
+ 1417554763317L);
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ DateField df = new InlineDateField();
+ df.setLocale(Locale.US);
+ df.setRangeStart(startDate);
+ df.setRangeEnd(endDate);
+
+ df.setValue(startDate);
+
+ addComponent(df);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Test that java.sql.Date can be given to specify date range start and end dates.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 15342;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DateRangeWithSqlDateTest.java b/uitest/src/com/vaadin/tests/components/datefield/DateRangeWithSqlDateTest.java
new file mode 100644
index 0000000000..2352011585
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/DateRangeWithSqlDateTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class DateRangeWithSqlDateTest extends MultiBrowserTest {
+
+ @Test
+ public void testDateRange() {
+ openTestURL();
+
+ // Get all cells of the inline datefield.
+ List<WebElement> cells = driver.findElements(By
+ .className("v-inline-datefield-calendarpanel-day"));
+
+ // Verify the range is rendered correctly.
+ assertCell(cells.get(0), "30", true);
+ assertCell(cells.get(1), "1", false);
+ assertCell(cells.get(2), "2", false);
+ assertCell(cells.get(3), "3", true);
+ }
+
+ private void assertCell(WebElement cell, String text, boolean outsideRange) {
+ assertEquals(text, cell.getText());
+ assertEquals(outsideRange,
+ cell.getAttribute("class").contains("outside-range"));
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DefaultDateFieldPopupPosition.java b/uitest/src/com/vaadin/tests/components/datefield/DefaultDateFieldPopupPosition.java
new file mode 100644
index 0000000000..8e4de77837
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/DefaultDateFieldPopupPosition.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+/**
+ * Test UI for date field Popup calendar in default theme.
+ *
+ * All UI initialization is defined in super class.
+ *
+ * @author Vaadin Ltd
+ */
+public class DefaultDateFieldPopupPosition extends DateFieldPopupPosition {
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/DefaultDateFieldPopupPositionTest.java b/uitest/src/com/vaadin/tests/components/datefield/DefaultDateFieldPopupPositionTest.java
new file mode 100644
index 0000000000..61cc876a3f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/DefaultDateFieldPopupPositionTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+import org.junit.Assert;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.DateFieldElement;
+
+/**
+ * Test for date field popup calendar position in default theme.
+ *
+ * Test method is defined in super class.
+ *
+ * @author Vaadin Ltd
+ */
+public class DefaultDateFieldPopupPositionTest extends
+ DateFieldPopupPositionTest {
+
+ @Override
+ protected void checkPopupPosition() {
+ DateFieldElement field = $(DateFieldElement.class).first();
+ int right = field.getLocation().getX() + field.getSize().getWidth();
+ WebElement popup = getPopup();
+
+ Assert.assertTrue("Calendar popup has wrong X coordinate="
+ + popup.getLocation().getX() + " , right side of the field is "
+ + right, popup.getLocation().getX() >= right);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/ValoDateFieldPopupPosition.java b/uitest/src/com/vaadin/tests/components/datefield/ValoDateFieldPopupPosition.java
new file mode 100644
index 0000000000..59ff6aa9e8
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/ValoDateFieldPopupPosition.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+import com.vaadin.annotations.Theme;
+
+/**
+ * Test UI for date field Popup calendar in Valo theme.
+ *
+ * All UI initialization is defined in super class.
+ *
+ * @author Vaadin Ltd
+ */
+@Theme("valo")
+public class ValoDateFieldPopupPosition extends DateFieldPopupPosition {
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/datefield/ValoDateFieldPopupPositionTest.java b/uitest/src/com/vaadin/tests/components/datefield/ValoDateFieldPopupPositionTest.java
new file mode 100644
index 0000000000..4009b9d991
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/datefield/ValoDateFieldPopupPositionTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2000-2014 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.datefield;
+
+import org.junit.Assert;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.DateFieldElement;
+
+/**
+ * Test for date field popup calendar position in Valo theme.
+ *
+ * Test method is defined in super class.
+ *
+ * @author Vaadin Ltd
+ */
+public class ValoDateFieldPopupPositionTest extends DateFieldPopupPositionTest {
+
+ @Override
+ protected void checkPopupPosition() {
+ DateFieldElement field = $(DateFieldElement.class).first();
+ WebElement popup = getPopup();
+ int left = field.getLocation().getX();
+ int popupRight = popup.getLocation().getX()
+ + popup.getSize().getWidth();
+
+ Assert.assertTrue("Calendar popup has wrong X coordinate=" + popupRight
+ + " , left side of the field is " + left, popupRight <= left);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropRelativeWidth.java b/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropRelativeWidth.java
new file mode 100644
index 0000000000..90ec704a8c
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropRelativeWidth.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2000-2014 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.draganddropwrapper;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
+import com.vaadin.ui.Label;
+
+/**
+ * Test UI for DnD image element size
+ *
+ * @author Vaadin Ltd
+ */
+public class DragAndDropRelativeWidth extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ CssLayout layout = new CssLayout();
+ layout.setWidth(300, Unit.PIXELS);
+
+ Label label = new Label("drag source");
+ label.addStyleName("drag-source");
+ label.setWidth(100, Unit.PERCENTAGE);
+ DragAndDropWrapper wrapper = new DragAndDropWrapper(label);
+ wrapper.setWidth(100, Unit.PERCENTAGE);
+ wrapper.setDragStartMode(DragStartMode.COMPONENT);
+
+ layout.addComponent(wrapper);
+ addComponent(layout);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Set explicit size for drag image element using calclulated size from the source";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 14617;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropRelativeWidthTest.java b/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropRelativeWidthTest.java
new file mode 100644
index 0000000000..9cb7a63046
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropRelativeWidthTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2000-2014 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.draganddropwrapper;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Test to check size of drag image element.
+ *
+ * @author Vaadin Ltd
+ */
+public class DragAndDropRelativeWidthTest extends MultiBrowserTest {
+
+ @Test
+ public void testDragImageElementSize() {
+ openTestURL();
+
+ WebElement label = getDriver().findElement(By.className("drag-source"));
+ Dimension size = label.getSize();
+ int height = size.getHeight();
+ int width = size.getWidth();
+ Actions actions = new Actions(getDriver());
+ actions.moveToElement(label);
+ actions.clickAndHold();
+ actions.moveByOffset(100, 100);
+ actions.build().perform();
+
+ WebElement dragImage = getDriver().findElement(
+ By.className("v-drag-element"));
+
+ Assert.assertEquals("Drag image element height is unexpected", height,
+ dragImage.getSize().getHeight());
+ Assert.assertEquals("Drag image element width is unexpected", width,
+ dragImage.getSize().getWidth());
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragStartModesTest.java b/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragStartModesTest.java
index ba27ee293e..4e60b43ea2 100644
--- a/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragStartModesTest.java
+++ b/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragStartModesTest.java
@@ -40,7 +40,7 @@ public class DragStartModesTest extends MultiBrowserTest {
new Actions(driver).moveToElement(draggable, 10, 10).clickAndHold()
.moveByOffset(5, 0).perform();
new Actions(driver).moveToElement(dropTarget, 12, 10).perform();
- compareScreen("dragMode" + dragMode);
+ compareScreen("dragImageMode" + dragMode);
new Actions(driver).release().perform();
}
diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuBarSubmenusClosingValo.java b/uitest/src/com/vaadin/tests/components/menubar/MenuBarSubmenusClosingValo.java
new file mode 100644
index 0000000000..88d89abbf4
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/menubar/MenuBarSubmenusClosingValo.java
@@ -0,0 +1,60 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.MenuBar;
+import com.vaadin.ui.MenuBar.MenuItem;
+
+@Theme("valo")
+public class MenuBarSubmenusClosingValo extends AbstractTestUI {
+
+ private MenuItem edit;
+ private MenuItem file;
+ private MenuItem help;
+
+ @Override
+ protected String getTestDescription() {
+ return "Tests that when moving mouse fast over menu items "
+ + "previous submenu popup closes before new submenu popup opens";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 15255;
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ // here we increase animation time to 1 second for to do auto testing
+ // possible
+ getPage().getStyles().add(
+ ".valo .v-menubar-popup[class*=\"animate-in\"] {"
+ + "-webkit-animation: valo-overlay-animate-in 1000ms; "
+ + "-moz-animation: valo-overlay-animate-in 1000ms; "
+ + "animation: valo-overlay-animate-in 1000ms;};");
+
+ getPage().getStyles().add(
+ ".valo .v-menubar-popup[class*=\"animate-out\"] {"
+ + "-webkit-animation: valo-animate-out-fade 1000ms; "
+ + "-moz-animation: valo-animate-out-fade 1000ms; "
+ + "animation: valo-animate-out-fade 1000ms;};");
+
+ MenuBar mb = new MenuBar();
+ file = mb.addItem("File", null);
+ file.addItem("File1", null);
+ file.addItem("File2", null);
+ file.addItem("File3", null);
+ edit = mb.addItem("Edit", null);
+ edit.addItem("Edit1", null);
+ edit.addItem("Edit2", null);
+ edit.addItem("Edit3", null);
+ help = mb.addItem("Help", null);
+ help.addItem("Help1", null);
+ help.addItem("Help2", null);
+ MenuItem helpMenuItem = help.addItem("Help3", null);
+ helpMenuItem.addItem("SubHelp3", null);
+
+ addComponent(mb);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuBarSubmenusClosingValoTest.java b/uitest/src/com/vaadin/tests/components/menubar/MenuBarSubmenusClosingValoTest.java
new file mode 100644
index 0000000000..b7ed88c9ca
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/menubar/MenuBarSubmenusClosingValoTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2000-2014 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.menubar;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.HasInputDevices;
+import org.openqa.selenium.interactions.Mouse;
+import org.openqa.selenium.internal.Locatable;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.MenuBarElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class MenuBarSubmenusClosingValoTest extends MultiBrowserTest {
+
+ @Test
+ public void testEnableParentLayoutControlByKeyboard() {
+ openTestURL();
+
+ MenuBarElement menu = $(MenuBarElement.class).get(0);
+ menu.focus();
+ menu.sendKeys(Keys.SPACE);
+ menu.sendKeys(Keys.DOWN);
+
+ waitForElementPresent(By.className("v-menubar-popup"));
+
+ menu.sendKeys(Keys.ARROW_RIGHT);
+ menu.sendKeys(Keys.ARROW_RIGHT);
+
+ int count = driver.findElements(By.className("v-menubar-popup")).size();
+ Assert.assertTrue("The count of open popups should be one", count == 1);
+ }
+
+ @Test
+ public void testEnableParentLayoutControlByMouse() {
+ openTestURL();
+
+ Mouse mouse = ((HasInputDevices) getDriver()).getMouse();
+
+ List<WebElement> menuItemList = driver.findElements(By
+ .className("v-menubar-menuitem"));
+
+ mouse.click(((Locatable) menuItemList.get(0)).getCoordinates());
+ waitForElementPresent(By.className("v-menubar-popup"));
+
+ mouse.mouseMove(((Locatable) menuItemList.get(1)).getCoordinates());
+ mouse.mouseMove(((Locatable) menuItemList.get(2)).getCoordinates());
+
+ waitForElementPresent(By.className("v-menubar-popup"));
+
+ int count = driver.findElements(By.className("v-menubar-popup")).size();
+ Assert.assertTrue("The count of open popups should be one", count == 1);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuTooltipTest.java b/uitest/src/com/vaadin/tests/components/menubar/MenuTooltipTest.java
index 24025b9f39..091f7be954 100644
--- a/uitest/src/com/vaadin/tests/components/menubar/MenuTooltipTest.java
+++ b/uitest/src/com/vaadin/tests/components/menubar/MenuTooltipTest.java
@@ -49,6 +49,7 @@ public class MenuTooltipTest extends MultiBrowserTest {
Coordinates elementCoordinates = getCoordinates($(MenuBarElement.class)
.first());
+ sleep(1000);
Mouse mouse = ((HasInputDevices) getDriver()).getMouse();
diff --git a/uitest/src/com/vaadin/tests/components/notification/NotificationsWaiAriaTest.java b/uitest/src/com/vaadin/tests/components/notification/NotificationsWaiAriaTest.java
index 6b517e9887..252efe2824 100644
--- a/uitest/src/com/vaadin/tests/components/notification/NotificationsWaiAriaTest.java
+++ b/uitest/src/com/vaadin/tests/components/notification/NotificationsWaiAriaTest.java
@@ -19,6 +19,7 @@ import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.WebElement;
+import com.vaadin.data.util.converter.StringToEnumConverter;
import com.vaadin.shared.ui.ui.NotificationRole;
import com.vaadin.testbench.By;
import com.vaadin.testbench.elements.ButtonElement;
@@ -57,7 +58,8 @@ public class NotificationsWaiAriaTest extends MultiBrowserTest {
postfix.clear();
postfix.sendKeys("- press ESC to close");
- type.selectByText(NotificationRole.ALERT.toString());
+ type.selectByText(StringToEnumConverter.enumToString(
+ NotificationRole.ALERT, null));
show.click();
waitForElementPresent(By.className("v-Notification"));
@@ -83,7 +85,8 @@ public class NotificationsWaiAriaTest extends MultiBrowserTest {
} catch (Exception e) {
}
- type.selectByText("STATUS");
+ type.selectByText(StringToEnumConverter.enumToString(
+ NotificationRole.STATUS, null));
show.click();
waitForElementPresent(By.className("v-Notification"));
diff --git a/uitest/src/com/vaadin/tests/components/select/EnumSelect.java b/uitest/src/com/vaadin/tests/components/select/EnumSelect.java
new file mode 100644
index 0000000000..5976952f8c
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/select/EnumSelect.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2000-2014 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.select;
+
+import java.util.Locale;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.combobox.FilteringMode;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.NativeSelect;
+import com.vaadin.ui.Tree;
+
+public class EnumSelect extends AbstractTestUIWithLog {
+
+ public enum Constant {
+ SOME_VALUE, SOME_OTHER_VALUE, FOO, BAR;
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+
+ setLocale(new Locale("fi", "FI"));
+ ComboBox cb = new ComboBox();
+ cb.setFilteringMode(FilteringMode.CONTAINS);
+ for (Constant c : Constant.values()) {
+ cb.addItem(c);
+ }
+ addComponent(cb);
+
+ NativeSelect ns = new NativeSelect();
+ for (Constant c : Constant.values()) {
+ ns.addItem(c);
+ }
+ addComponent(ns);
+
+ Tree t = new Tree();
+ t.addItem(Constant.SOME_OTHER_VALUE);
+ t.addItem(2500.12);
+ t.setParent(2500.12, Constant.SOME_OTHER_VALUE);
+
+ addComponent(t);
+
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Test formatting captions with enum converters in selection components";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11433;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/select/EnumSelectTest.java b/uitest/src/com/vaadin/tests/components/select/EnumSelectTest.java
new file mode 100644
index 0000000000..c0429baa31
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/select/EnumSelectTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2000-2014 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.select;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.TestBenchElement;
+import com.vaadin.testbench.elements.ComboBoxElement;
+import com.vaadin.testbench.elements.NativeSelectElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class EnumSelectTest extends SingleBrowserTest {
+
+ @Test
+ public void enumInNativeSelect() {
+ openTestURL();
+ NativeSelectElement ns = $(NativeSelectElement.class).first();
+ List<TestBenchElement> options = ns.getOptions();
+ Assert.assertEquals("Some value", options.get(1).getText());
+ Assert.assertEquals("Some other value", options.get(2).getText());
+ }
+
+ @Test
+ public void enumInComboBox() {
+ openTestURL();
+ ComboBoxElement cb = $(ComboBoxElement.class).first();
+ cb.openPopup();
+ List<String> options = cb.getPopupSuggestions();
+ Assert.assertEquals("Some value", options.get(1));
+ Assert.assertEquals("Some other value", options.get(2));
+ }
+
+ @Test
+ public void enumInComboBoxFiltering() {
+ openTestURL();
+ ComboBoxElement cb = $(ComboBoxElement.class).first();
+ cb.findElement(By.vaadin("#textbox")).sendKeys(" other ");
+ List<String> options = cb.getPopupSuggestions();
+ Assert.assertEquals("Only one item should match filter", 1,
+ options.size());
+ Assert.assertEquals("Invalid option matched filter",
+ "Some other value", options.get(0));
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelHeight.java b/uitest/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelHeight.java
new file mode 100644
index 0000000000..4da5430cb1
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelHeight.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2000-2014 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.splitpanel;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.MarginInfo;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalSplitPanel;
+
+/**
+ * Test UI for horizontal split panel height.
+ *
+ * @author Vaadin Ltd
+ */
+public class HorizontalSplitPanelHeight extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ getLayout().setMargin(new MarginInfo(true, false, false, false));
+
+ HorizontalSplitPanel panel = new HorizontalSplitPanel();
+ panel.setCaption("Horizontal 1 - no first component, label as second component");
+ panel.setId("Horizontal 1");
+ Label label = new Label("Label");
+ label.addStyleName("target");
+ panel.setSecondComponent(label);
+
+ addComponent(panel);
+
+ panel = new HorizontalSplitPanel();
+ panel.setCaption("Horizontal 2 - button as first component, label as second component");
+ panel.setId("Horizontal 2");
+ label = new Label("Label");
+ label.addStyleName("target");
+ panel.setSecondComponent(label);
+ panel.setFirstComponent(new Button("button"));
+
+ addComponent(panel);
+
+ panel = new HorizontalSplitPanel();
+ panel.setCaption("Horizontal 3 - fixed height, no first component, label as second component");
+ panel.setId("Horizontal 3");
+ label = new Label("Label");
+ label.addStyleName("target");
+ panel.setSecondComponent(label);
+ panel.setHeight(30, Unit.PIXELS);
+
+ addComponent(panel);
+
+ VerticalSplitPanel vPanel = new VerticalSplitPanel();
+ vPanel.setCaption("Vertical 1 - no first component, label as second component");
+ vPanel.setId("Vertical 1");
+ vPanel.setHeight(100, Unit.PIXELS);
+ Label vLabel = new Label("Label");
+ vLabel.addStyleName("target");
+ vPanel.setSecondComponent(vLabel);
+
+ addComponent(vPanel);
+
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 15149;
+ }
+
+ @Override
+ public String getTestDescription() {
+ return "Height of split panel should be greater than height of second component.";
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelHeightTest.java b/uitest/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelHeightTest.java
new file mode 100644
index 0000000000..0ceca66dd3
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/splitpanel/HorizontalSplitPanelHeightTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2000-2014 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.splitpanel;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Test for horizontal split panel height in case when only second component is
+ * set.
+ *
+ * @author Vaadin Ltd
+ */
+public class HorizontalSplitPanelHeightTest extends MultiBrowserTest {
+
+ @Override
+ public void setup() throws Exception {
+ super.setup();
+
+ openTestURL();
+ }
+
+ @Test
+ public void testHorizontalWithoutFirstComponent() {
+ testSplitPanel("Horizontal 1");
+ }
+
+ @Test
+ public void testHorizontalWithFirstComponent() {
+ testSplitPanel("Horizontal 2");
+ }
+
+ @Test
+ public void testHorizontalWithFixedHeight() {
+ testSplitPanel("Horizontal 3");
+ }
+
+ @Test
+ public void testVerticalWithoutFirstComponent() {
+ testSplitPanel("Vertical 1");
+ }
+
+ private void testSplitPanel(String id) {
+ WebElement splitPanel = findElement(By.id(id));
+ WebElement label = splitPanel.findElement(By.className("target"));
+ Assert.assertTrue(id + ": split panel height ("
+ + splitPanel.getSize().getHeight() + ") is less than "
+ + "height of second component (" + label.getSize().getHeight()
+ + ")", splitPanel.getSize().getHeight() >= label.getSize()
+ .getHeight());
+ Assert.assertEquals("Label text in the second panel is not visible",
+ "Label", label.getText());
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/table/DelayedColumnLayouting.java b/uitest/src/com/vaadin/tests/components/table/DelayedColumnLayouting.java
new file mode 100644
index 0000000000..c327ddb6f3
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/DelayedColumnLayouting.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2000-2014 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.table;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * For tables that are contained in a layout, a delayed column layouting should
+ * not be visible (because it makes the column jump around).
+ *
+ * #15189
+ *
+ * @author Vaadin Ltd
+ */
+public class DelayedColumnLayouting extends UI {
+
+ @Override
+ protected void init(VaadinRequest request) {
+ VerticalLayout verticalLayout = new VerticalLayout();
+ verticalLayout.setSizeFull();
+ final VerticalLayout layout = new VerticalLayout();
+ layout.setSizeFull();
+ layout.setSpacing(true);
+
+ Button reset = new Button("Recreate layout with contained table");
+ verticalLayout.addComponent(reset);
+ reset.addClickListener(new ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ fillLayout(layout);
+ }
+ });
+
+ fillLayout(layout);
+
+ verticalLayout.addComponent(layout);
+ verticalLayout.setExpandRatio(layout, 1f);
+
+ setContent(verticalLayout);
+ }
+
+ private void fillLayout(VerticalLayout layout) {
+ layout.removeAllComponents();
+
+ Table table = new Table();
+ table.setSizeFull();
+ table.addContainerProperty("First", String.class, "");
+ table.addContainerProperty("This column jumps", String.class, "");
+
+ layout.addComponent(table);
+ layout.setExpandRatio(table, 1f);
+ }
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.html b/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.html
deleted file mode 100644
index 904f3b0470..0000000000
--- a/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndex.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link rel="selenium.base" href="http://localhost:8888/" />
-<title>New Test</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-<thead>
-<tr><td rowspan="1" colspan="3">New Test</td></tr>
-</thead><tbody>
-
-<tr>
- <td>open</td>
- <td>run/com.vaadin.tests.components.table.SetCurrentPageFirstItemIndex?restartApplication</td>
- <td></td>
-</tr>
-<tr>
- <td>click</td>
- <td>vaadin=runcomvaadintestscomponentstableSetCurrentPageFirstItemIndex::/VVerticalLayout[0]/Slot[1]/VButton[0]/domChild[0]/domChild[0]</td>
- <td></td>
-</tr>
-<tr>
- <td>click</td>
- <td>vaadin=runcomvaadintestscomponentstableSetCurrentPageFirstItemIndex::/VVerticalLayout[0]/Slot[1]/VButton[0]/domChild[0]/domChild[0]</td>
- <td></td>
-</tr>
-<tr>
- <td>pause</td>
- <td>500</td>
- <td></td>
-</tr>
-<tr>
- <td>assertText</td>
- <td>vaadin=runcomvaadintestscomponentstableSetCurrentPageFirstItemIndex::/VVerticalLayout[0]/Slot[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[2]/domChild[0]/domChild[0]</td>
- <td>6</td>
-</tr>
-
-</tbody></table>
-</body>
-</html> \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndexTest.java b/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndexTest.java
new file mode 100644
index 0000000000..8102f82834
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/SetCurrentPageFirstItemIndexTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2000-2014 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.table;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import junit.framework.Assert;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.openqa.selenium.NoSuchElementException;
+
+import com.vaadin.testbench.TestBenchElement;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.TableElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ *
+ * @since
+ * @author Vaadin Ltd
+ */
+@Ignore
+// Enable after #15286 is fixed.
+public class SetCurrentPageFirstItemIndexTest extends MultiBrowserTest {
+
+ @Test
+ public void currentPageIndexChangesTwice() {
+ openTestURL();
+
+ ButtonElement button = $(ButtonElement.class).first();
+ button.click(); // change to 20
+ button.click(); // change to 5
+
+ // When failing, the index stays on 20.
+ assertThatRowIsVisible(5);
+ }
+
+ private void assertThatRowIsVisible(int index) {
+ try {
+ TableElement table = $(TableElement.class).first();
+ TestBenchElement cell = table.getCell(index, 0);
+
+ assertThat(cell.getText(), is(Integer.toString(index + 1)));
+ } catch (NoSuchElementException e) {
+ Assert.fail(String.format("Can't locate row for index: %s", index));
+ }
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/FirstTabNotVisibleInTabsheet.java b/uitest/src/com/vaadin/tests/components/tabsheet/FirstTabNotVisibleInTabsheet.java
new file mode 100644
index 0000000000..c21c702bd0
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/tabsheet/FirstTabNotVisibleInTabsheet.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.tabsheet;
+
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.*;
+
+import javax.servlet.annotation.WebServlet;
+
+@SuppressWarnings("serial")
+public class FirstTabNotVisibleInTabsheet extends AbstractTestUI {
+
+ private TabSheet.Tab firstTab;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ TabSheet tabSheet = new TabSheet();
+ tabSheet.setWidth("600px");
+
+ firstTab = tabSheet.addTab(new Label("first visible tab"), "first visible tab");
+
+ for (int i = 2; i < 10; i++) {
+ tabSheet.addTab(new Label("visible tab " + i), "visible tab " + i);
+ }
+
+ addComponent(new VerticalLayout(tabSheet, new Button("Toggle first tab", new Button.ClickListener() {
+ @Override
+ public void buttonClick(Button.ClickEvent event) {
+ firstTab.setVisible(!firstTab.isVisible());
+ }
+ })));
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 14644;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "First tabsheet tab is not set visible back once it gets invisible";
+ }
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/tabsheet/FirstTabNotVisibleInTabsheetTest.java b/uitest/src/com/vaadin/tests/components/tabsheet/FirstTabNotVisibleInTabsheetTest.java
new file mode 100644
index 0000000000..e57651ba03
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/tabsheet/FirstTabNotVisibleInTabsheetTest.java
@@ -0,0 +1,27 @@
+package com.vaadin.tests.components.tabsheet;
+
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.TabSheetElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+import junit.framework.Assert;
+import org.junit.Test;
+
+public class FirstTabNotVisibleInTabsheetTest extends MultiBrowserTest {
+ @Test
+ public void testFirstTabIsVisibleAfterBeingInvisible() {
+ openTestURL();
+
+ toggleFirstTabVisibility();
+ toggleFirstTabVisibility();
+
+ TabSheetElement tabSheet = $(TabSheetElement.class).first();
+
+ Assert.assertTrue("TabSheet should have first tab visible",
+ tabSheet.getTabCaptions().contains("first visible tab"));
+ }
+
+ private void toggleFirstTabVisibility() {
+ $(ButtonElement.class).caption("Toggle first tab").first().click();
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/textfield/AlternatingTextFields.java b/uitest/src/com/vaadin/tests/components/textfield/AlternatingTextFields.java
new file mode 100644
index 0000000000..3eda11d999
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/textfield/AlternatingTextFields.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2000-2014 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.textfield;
+
+import com.vaadin.event.FieldEvents.TextChangeEvent;
+import com.vaadin.event.FieldEvents.TextChangeListener;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * When two TextFields repeatedly disable each other, ensure that also their
+ * input prompts are removed
+ *
+ * @since
+ * @author Vaadin Ltd
+ */
+public class AlternatingTextFields extends AbstractTestUI {
+
+ public static final String FIRST_TEXTFIELD_INPUT_PROMPT = "Enter first data here";
+ public static final String SECOND_TEXTFIELD_INPUT_PROMPT = "Enter second data here";
+
+ @Override
+ protected void setup(final VaadinRequest request) {
+
+ VerticalLayout layout = new VerticalLayout();
+ layout.setMargin(true);
+ layout.setSpacing(true);
+
+ final TextField firstTextField = createTextField("First",
+ FIRST_TEXTFIELD_INPUT_PROMPT);
+
+ final TextField secondTextField = createTextField("Second",
+ SECOND_TEXTFIELD_INPUT_PROMPT);
+
+ addTextChangeListener(firstTextField, secondTextField);
+ addTextChangeListener(secondTextField, firstTextField);
+
+ layout.addComponent(firstTextField);
+ layout.addComponent(secondTextField);
+
+ addComponent(layout);
+ }
+
+ private static TextField createTextField(String number, String inputPrompt) {
+
+ String caption = " TextField with TextChangeListener";
+
+ TextField textField = new TextField(number + caption);
+ textField.setImmediate(true);
+ textField.setInputPrompt(inputPrompt);
+
+ return textField;
+ }
+
+ private void addTextChangeListener(TextField currentTextField,
+ final TextField otherTextField) {
+
+ final String otherDefaultPrompt = otherTextField.getInputPrompt();
+ currentTextField.addTextChangeListener(new TextChangeListener() {
+
+ @Override
+ public void textChange(TextChangeEvent event) {
+
+ String currentText = event.getText();
+
+ if (currentText.isEmpty() || currentText == null) {
+ // change other to default
+
+ otherTextField.setInputPrompt(otherDefaultPrompt);
+ otherTextField.setEnabled(true);
+ } else {
+ // change other to empty
+
+ otherTextField.setInputPrompt(null);
+ otherTextField.setEnabled(false);
+ }
+
+ }
+ });
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "When two TextFields repeatedly disable each other, ensure that also their input prompts are removed";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 15144;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/textfield/AlternatingTextFieldsTest.java b/uitest/src/com/vaadin/tests/components/textfield/AlternatingTextFieldsTest.java
new file mode 100644
index 0000000000..a7ee3fede2
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/textfield/AlternatingTextFieldsTest.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright 2000-2014 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.textfield;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+
+import com.vaadin.testbench.elements.TextFieldElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class AlternatingTextFieldsTest extends MultiBrowserTest {
+
+ private String RANDOM_INPUT = "Some input here";
+
+ private List<TextFieldElement> textfields;
+
+ @Test
+ public void testInputPrompt() {
+ openTestURL();
+
+ /*
+ * Starting positions
+ */
+
+ createTextFields();
+
+ // test that both input prompts exist in the beginning
+ ensureTextFieldHasInputPrompt(0);
+ ensureTextFieldHasInputPrompt(1);
+
+ /*
+ * Write on and empty the first TextField
+ */
+
+ // select first input prompt
+ ensureSelectionClearsPrompt(0);
+
+ // write on the first TextField
+ ensureWritingDisablesOther(0);
+
+ // empty the text on the first TextField
+ ensureEmptyingAddsPromptAndEnablesOther(0);
+
+ /*
+ * Write on and empty the second TextField
+ */
+
+ // now select the second input prompt
+ ensureSelectionClearsPrompt(1);
+
+ // write on the second TextField
+ ensureWritingDisablesOther(1);
+
+ // empty the text on the second TextField
+ ensureEmptyingAddsPromptAndEnablesOther(1);
+
+ }
+
+ private void ensureEmptyingAddsPromptAndEnablesOther(int index) {
+ // remove the text from the TextField
+ emptyTextField(index);
+
+ // ensure that the TextField really is empty
+ ensureTextFieldEmpty(index);
+
+ // ensure that the other TextField has again been enabled and has an
+ // input prompt
+ if (index == 0) {
+ ensureTextFieldIsEnabledAndHasInputPrompt(1);
+ } else {
+ ensureTextFieldIsEnabledAndHasInputPrompt(0);
+ }
+ }
+
+ private void ensureWritingDisablesOther(int index) {
+ // write some text to the TextField
+ writeOnTextField(index);
+
+ // ensure that the other TextField is disabled and has no input prompt
+ if (index == 0) {
+ ensureTextFieldDisabledAndEmpty(1);
+ } else {
+ ensureTextFieldDisabledAndEmpty(0);
+ }
+ }
+
+ private void ensureSelectionClearsPrompt(int index) {
+ // select the TextField
+ textfields.get(index).click();
+
+ // check that the the prompt was removed
+ ensureTextFieldEmpty(index);
+ }
+
+ /**
+ * Check that the TextField has no input prompt
+ *
+ * @since
+ * @param index
+ * The TextField to be inspected
+ */
+ private void ensureTextFieldEmpty(int index) {
+
+ assertEquals("TextField " + index + " was not empty,", "", textfields
+ .get(index).getValue());
+ }
+
+ /**
+ * Check that the TextField has been enabled and has correct input prompt
+ *
+ * @since
+ * @param index
+ * the TextField to be inspected
+ */
+ private void ensureTextFieldIsEnabledAndHasInputPrompt(final int index) {
+
+ waitUntil(new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ return textfields.get(index).isEnabled();
+ }
+
+ @Override
+ public String toString() {
+ // Timed out after 10 seconds waiting for ...
+ return "TextField " + index + " to be enabled";
+ }
+ });
+
+ ensureTextFieldHasInputPrompt(index);
+ }
+
+ /**
+ * Check that the TextField has the correct input prompt
+ *
+ * @since
+ * @param index
+ * The TextField to be inspected
+ */
+ private void ensureTextFieldHasInputPrompt(final int index) {
+
+ if (index == 0) {
+ assertEquals("Incorrect or missing prompt,",
+ AlternatingTextFields.FIRST_TEXTFIELD_INPUT_PROMPT,
+ textfields.get(index).getValue());
+ } else {
+ assertEquals("Incorrect or missing prompt,",
+ AlternatingTextFields.SECOND_TEXTFIELD_INPUT_PROMPT,
+ textfields.get(index).getValue());
+ }
+ }
+
+ /**
+ * Check that the TextField has been disabled and has no input prompt
+ *
+ * @since
+ * @param index
+ * The TextField to be inspected
+ */
+ private void ensureTextFieldDisabledAndEmpty(final int index) {
+
+ waitUntil(new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ return !textfields.get(index).isEnabled();
+ }
+
+ @Override
+ public String toString() {
+ // Timed out after 10 seconds waiting for ...
+ return "TextField " + index + " to be disabled";
+ }
+ });
+
+ ensureTextFieldEmpty(index);
+ }
+
+ private void createTextFields() {
+ textfields = $(TextFieldElement.class).all();
+ }
+
+ private void writeOnTextField(int index) {
+ textfields.get(index).sendKeys(RANDOM_INPUT);
+ }
+
+ private void emptyTextField(int index) {
+ for (int i = 0; i < 15; i++) {
+ textfields.get(index).sendKeys(Keys.BACK_SPACE);
+ }
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java b/uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java
index 67b3b84688..99e08ae32d 100644
--- a/uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java
+++ b/uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java
@@ -31,6 +31,7 @@ public class EnumTextField extends AbstractTestUIWithLog {
@Override
protected void setup(VaadinRequest request) {
final TextField tf = new TextField();
+ tf.setNullRepresentation("");
tf.addValueChangeListener(new ValueChangeListener() {
@Override
diff --git a/uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java b/uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java
index 113acee3a2..fe26fb7aad 100644
--- a/uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java
+++ b/uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java
@@ -27,8 +27,7 @@ public class EnumTextFieldTest extends SingleBrowserTest {
public void validValues() {
openTestURL();
$(TextFieldElement.class).first().clear();
- $(TextFieldElement.class).first().sendKeys("Value");
- $(TextFieldElement.class).first().sendKeys(Keys.TAB);
+ $(TextFieldElement.class).first().sendKeys("Value", Keys.TAB);
Assert.assertEquals("3. Value (valid)", getLogRow(0));
$(TextFieldElement.class).first().clear();
@@ -41,13 +40,15 @@ public class EnumTextFieldTest extends SingleBrowserTest {
$(TextFieldElement.class).first().sendKeys(Keys.TAB);
Assert.assertEquals("7. The last value (valid)", getLogRow(0));
+ $(TextFieldElement.class).first().clear();
+ Assert.assertEquals("8. null (valid)", getLogRow(0));
+
}
@Test
public void invalidValue() {
openTestURL();
$(TextFieldElement.class).first().clear();
- Assert.assertEquals("2. (INVALID)", getLogRow(0));
$(TextFieldElement.class).first().sendKeys("bar");
$(TextFieldElement.class).first().sendKeys(Keys.TAB);
diff --git a/uitest/src/com/vaadin/tests/components/treetable/MinimalWidthColumns.java b/uitest/src/com/vaadin/tests/components/treetable/MinimalWidthColumns.java
new file mode 100644
index 0000000000..c4679f739b
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/treetable/MinimalWidthColumns.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.treetable;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.TreeTable;
+
+@Theme("valo")
+public class MinimalWidthColumns extends AbstractTestUI {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server.
+ * VaadinRequest)
+ */
+ @Override
+ protected void setup(VaadinRequest request) {
+ TreeTable tt = new TreeTable();
+ tt.addContainerProperty("Foo", String.class, "");
+ tt.addContainerProperty("Bar", String.class, "");
+
+ Object item1 = tt.addItem(new Object[] { "f", "Bar" }, null);
+ Object item2 = tt.addItem(new Object[] { "Foo2", "Bar2" }, null);
+
+ tt.setParent(item2, item1);
+
+ tt.setColumnWidth("Foo", 0);
+ tt.setColumnWidth("Bar", 50);
+ tt.setWidth("300px");
+ addComponent(tt);
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return Integer.valueOf(15118);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "There should be no 1px discrepancy between vertical borders in headers and rows";
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/treetable/MinimalWidthColumnsTest.java b/uitest/src/com/vaadin/tests/components/treetable/MinimalWidthColumnsTest.java
new file mode 100644
index 0000000000..46c2f397b6
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/treetable/MinimalWidthColumnsTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2000-2014 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.treetable;
+
+import org.junit.Test;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class MinimalWidthColumnsTest extends MultiBrowserTest {
+
+ @Test
+ public void testFor1pxDifference() throws Exception {
+ openTestURL();
+ sleep(500);
+ compareScreen("onepixdifference");
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/debug/PushVersionInfo.java b/uitest/src/com/vaadin/tests/debug/PushVersionInfo.java
new file mode 100644
index 0000000000..d8c23a390f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/debug/PushVersionInfo.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2000-2014 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.debug;
+
+import org.atmosphere.util.Version;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.communication.PushMode;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Label;
+
+/**
+ * Test UI for PUSH version string in debug window.
+ *
+ * @author Vaadin Ltd
+ */
+public class PushVersionInfo extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ if (request.getParameter("enablePush") != null) {
+ getPushConfiguration().setPushMode(PushMode.AUTOMATIC);
+ Label label = new Label(Version.getRawVersion());
+ label.addStyleName("atmosphere-version");
+ addComponent(label);
+ }
+ }
+
+ @Override
+ public String getDescription() {
+ return "Debug window shows Push version in info Tab.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 14904;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/debug/PushVersionInfoTest.java b/uitest/src/com/vaadin/tests/debug/PushVersionInfoTest.java
new file mode 100644
index 0000000000..90ea645ab8
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/debug/PushVersionInfoTest.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2000-2014 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.debug;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+
+import com.vaadin.tests.annotations.TestCategory;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Test for PUSH version string in debug window.
+ *
+ * @author Vaadin Ltd
+ */
+@TestCategory("push")
+public class PushVersionInfoTest extends MultiBrowserTest {
+
+ @Test
+ public void testDisabledPush() {
+ setDebug(true);
+ openTestURL();
+
+ selectInfoTab();
+ Assert.assertNull("Found push info server string for disabled Push",
+ getPushRowValue("Push server version"));
+ Assert.assertNull("Found push info client string for disabled Push",
+ getPushRowValue("Push client version"));
+ }
+
+ @Test
+ public void testEnabledPush() {
+ setDebug(true);
+ openTestURL("enablePush=true");
+
+ selectInfoTab();
+ WebElement pushRow = getPushRowValue("Push server version");
+ String atmVersion = findElement(By.className("atmosphere-version"))
+ .getText();
+ Assert.assertTrue("Push row doesn't contain Atmosphere version",
+ pushRow.getText().contains(atmVersion));
+ String jsString = getPushRowValue("Push client version").getText();
+ Assert.assertTrue(
+ "Push client version doesn't contain 'vaadin' string",
+ jsString.contains("vaadin"));
+ Assert.assertTrue(
+ "Push client version doesn't contain 'jquery' string",
+ jsString.contains("jquery"));
+ }
+
+ private void selectInfoTab() {
+ if (isElementPresent(By.className("v-ie8"))) {
+
+ int size = findElements(By.className("v-debugwindow-tab")).size();
+ for (int i = 0; i < size; i++) {
+ WebElement tab = findElement(By
+ .className("v-debugwindow-tab-selected"));
+ String title = tab.getAttribute("title");
+ if (title != null && title.startsWith("General information")) {
+ break;
+ }
+ Actions actions = new Actions(getDriver());
+ actions.sendKeys(Keys.TAB);
+ actions.sendKeys(Keys.SPACE);
+ actions.build().perform();
+ }
+ } else {
+ findElements(By.className("v-debugwindow-tab")).get(0).click();
+ findElements(By.className("v-debugwindow-tab")).get(1).click();
+ }
+ }
+
+ private WebElement getPushRowValue(String key) {
+ List<WebElement> rows = findElements(By.className("v-debugwindow-row"));
+ for (WebElement row : rows) {
+ WebElement caption = row.findElement(By.className("caption"));
+ if (caption.getText().startsWith(key)) {
+ return row.findElement(By.className("value"));
+ }
+ }
+ return null;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/fieldgroup/BasicCrud.java b/uitest/src/com/vaadin/tests/fieldgroup/BasicCrud.java
new file mode 100644
index 0000000000..be0368f4ae
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/fieldgroup/BasicCrud.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2000-2014 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.fieldgroup;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.fieldgroup.BeanFieldGroup;
+import com.vaadin.data.fieldgroup.PropertyId;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.util.Person;
+import com.vaadin.tests.util.PersonContainer;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+@Theme("valo")
+public class BasicCrud extends UI {
+
+ private Form form;
+
+ @Override
+ protected void init(VaadinRequest request) {
+ VerticalLayout main = new VerticalLayout();
+ main.setMargin(true);
+ main.setSpacing(true);
+ final Table t = new Table();
+ // t.setSelectionMode(SelectionMode.SINGLE);
+ t.setSelectable(true);
+
+ PersonContainer c = PersonContainer.createWithTestData();
+
+ c.addBean(new Person("first", "Last", "email", "phone", "street",
+ 12332, "Turku"));
+ c.addBean(new Person("Foo", "Bar", "me@some.where", "123",
+ "homestreet 12", 10000, "Glasgow"));
+ t.setContainerDataSource(c);
+ // t.removeColumn("address");
+ // t.setColumnOrder("firstName", "lastName", "email", "phoneNumber",
+ // "address.streetAddress", "address.postalCode", "address.city");
+ t.setVisibleColumns("firstName", "lastName", "email", "phoneNumber",
+ "address.streetAddress", "address.postalCode", "address.city");
+
+ // t.addSelectionChangeListener(new SelectionChangeListener() {
+ // @Override
+ // public void selectionChange(SelectionChangeEvent event) {
+ // form.edit((Person) t.getSelectedRow());
+ // }
+ // });
+ t.addValueChangeListener(new ValueChangeListener() {
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ form.edit((Person) t.getValue());
+ }
+ });
+
+ form = new Form();
+
+ t.setSizeFull();
+
+ main.setSizeFull();
+ main.addComponent(t);
+ main.addComponent(form);
+ main.setExpandRatio(t, 1);
+ setContent(main);
+ }
+
+ public static class Form extends HorizontalLayout {
+ private TextField firstName = new TextField("First name");
+ private TextField lastName = new TextField("Last name");
+ private TextField email = new TextField("E-mail");
+ @PropertyId("address.streetAddress")
+ private TextField streetAddress = new TextField("Street address");
+ @PropertyId("address.postalCode")
+ private TextField postalCode = new TextField("Postal code");
+
+ BeanFieldGroup<Person> fieldGroup = new BeanFieldGroup<Person>(
+ Person.class);
+
+ public Form() {
+ setSpacing(true);
+ setId("form");
+ fieldGroup.bindMemberFields(this);
+
+ // Stupid integer binding
+ postalCode.setNullRepresentation("");
+ addComponents(firstName, lastName, email, streetAddress, postalCode);
+ }
+
+ public void edit(Person p) {
+ fieldGroup.setItemDataSource(p);
+ }
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/fieldgroup/BasicCrudTest.java b/uitest/src/com/vaadin/tests/fieldgroup/BasicCrudTest.java
new file mode 100644
index 0000000000..a41725dbc9
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/fieldgroup/BasicCrudTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2000-2014 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.fieldgroup;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.AbstractOrderedLayoutElement;
+import com.vaadin.testbench.elements.TableElement;
+import com.vaadin.testbench.elements.TextFieldElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class BasicCrudTest extends SingleBrowserTest {
+
+ @Test
+ public void fieldsInitiallyEmpty() {
+ openTestURL();
+ AbstractOrderedLayoutElement fieldsLayout = $(
+ AbstractOrderedLayoutElement.class).id("form");
+ List<TextFieldElement> textFields = fieldsLayout.$(
+ TextFieldElement.class).all();
+
+ for (TextFieldElement e : textFields) {
+ Assert.assertEquals("TextField should be empty", "", e.getValue());
+ }
+ }
+
+ @Test
+ public void fieldsClearedOnDeselect() {
+ openTestURL();
+ AbstractOrderedLayoutElement fieldsLayout = $(
+ AbstractOrderedLayoutElement.class).id("form");
+
+ // Select row
+ $(TableElement.class).first().getCell(2, 2).click();
+
+ List<TextFieldElement> textFields = fieldsLayout.$(
+ TextFieldElement.class).all();
+
+ for (TextFieldElement e : textFields) {
+ Assert.assertNotEquals("TextField should not be empty", "",
+ e.getValue());
+ }
+
+ // Deselect row
+ $(TableElement.class).first().getCell(2, 2).click();
+
+ for (TextFieldElement e : textFields) {
+ Assert.assertEquals("TextField should be empty", "", e.getValue());
+ }
+
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/fieldgroup/MultipleValidationErrors.java b/uitest/src/com/vaadin/tests/fieldgroup/MultipleValidationErrors.java
new file mode 100644
index 0000000000..5110bf6dcf
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/fieldgroup/MultipleValidationErrors.java
@@ -0,0 +1,72 @@
+package com.vaadin.tests.fieldgroup;
+
+import com.vaadin.data.Validator;
+import com.vaadin.data.fieldgroup.FieldGroup;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.data.validator.BeanValidator;
+import com.vaadin.server.AbstractErrorMessage;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import org.apache.commons.lang.StringEscapeUtils;
+
+public class MultipleValidationErrors extends AbstractTestUI {
+
+ public static final String FIRST_NAME_NOT_NULL_VALIDATION_MESSAGE = "first name is null";
+ public static final String LAST_NAME_NOT_NULL_VALIDATION_MESSAGE = "last name is null";
+ public static final String FIRST_NAME_NOT_EMPTY_VALIDATION_MESSAGE = "first name is empty";
+ public static final String LAST_NAME_NOT_EMPTY_VALIDATION_MESSAGE = "last name is empty";
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ BeanItem<PersonBeanWithValidationAnnotations> item = new BeanItem<PersonBeanWithValidationAnnotations>(
+ new PersonBeanWithValidationAnnotations());
+ final FieldGroup fieldGroup = new FieldGroup(item);
+
+ bindTextField(item, fieldGroup, "First Name", "firstName");
+ bindTextField(item, fieldGroup, "Last Name", "lastName");
+
+ final Label validationErrors = new Label();
+ validationErrors.setId("validationErrors");
+ addComponent(validationErrors);
+
+ addButton("Submit", new Button.ClickListener() {
+ @Override
+ public void buttonClick(Button.ClickEvent event) {
+ validationErrors.setValue("");
+ try {
+ fieldGroup.commit();
+ } catch (FieldGroup.CommitException e) {
+ if (e.getCause() != null && e.getCause() instanceof Validator.InvalidValueException) {
+ validationErrors.setValue(StringEscapeUtils.unescapeHtml(
+ AbstractErrorMessage.getErrorMessageForException(e.getCause()).getFormattedHtmlMessage()));
+ }
+ }
+
+
+ }
+ });
+ }
+
+ private void bindTextField(BeanItem<PersonBeanWithValidationAnnotations> item, FieldGroup fieldGroup,
+ String caption, String propertyId) {
+ TextField textfield = new TextField(caption, item.getItemProperty(propertyId));
+ textfield.addValidator(new BeanValidator(PersonBeanWithValidationAnnotations.class, propertyId));
+
+ fieldGroup.bind(textfield, propertyId);
+
+ addComponent(textfield);
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 14742;
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "All validation errors should be included when committing a field group.";
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/fieldgroup/MultipleValidationErrorsTest.java b/uitest/src/com/vaadin/tests/fieldgroup/MultipleValidationErrorsTest.java
new file mode 100644
index 0000000000..175b650be6
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/fieldgroup/MultipleValidationErrorsTest.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.fieldgroup;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.testbench.elements.TextFieldElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class MultipleValidationErrorsTest extends MultiBrowserTest {
+
+ private void commitTextFields() {
+ $(ButtonElement.class).caption("Submit").first().click();
+ }
+
+ private void clearTextField(String caption) {
+ TextFieldElement textField = $(TextFieldElement.class).caption(caption).first();
+ textField.clear();
+ }
+
+ @Test
+ public void validationErrorsIncludeBothErrors() {
+ openTestURL();
+
+ clearTextField("First Name");
+ clearTextField("Last Name");
+
+ commitTextFields();
+
+ String validationErrors = $(LabelElement.class).id("validationErrors").getText();
+
+ assertThat(validationErrors, containsString(MultipleValidationErrors.FIRST_NAME_NOT_EMPTY_VALIDATION_MESSAGE));
+ assertThat(validationErrors, containsString(MultipleValidationErrors.LAST_NAME_NOT_EMPTY_VALIDATION_MESSAGE));
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/fieldgroup/PersonBeanWithValidationAnnotations.java b/uitest/src/com/vaadin/tests/fieldgroup/PersonBeanWithValidationAnnotations.java
new file mode 100644
index 0000000000..5f81ee248b
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/fieldgroup/PersonBeanWithValidationAnnotations.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.fieldgroup;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+public class PersonBeanWithValidationAnnotations implements Serializable {
+ @NotNull(message = MultipleValidationErrors.FIRST_NAME_NOT_NULL_VALIDATION_MESSAGE)
+ @Size(min = 1, message = MultipleValidationErrors.FIRST_NAME_NOT_EMPTY_VALIDATION_MESSAGE)
+ private String firstName;
+
+ @NotNull(message = MultipleValidationErrors.LAST_NAME_NOT_NULL_VALIDATION_MESSAGE)
+ @Size(min = 1, message = MultipleValidationErrors.LAST_NAME_NOT_EMPTY_VALIDATION_MESSAGE)
+ private String lastName;
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/layouts/HorizontalLayoutWithLabelAndButton.java b/uitest/src/com/vaadin/tests/layouts/HorizontalLayoutWithLabelAndButton.java
new file mode 100644
index 0000000000..9381f2caeb
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/layouts/HorizontalLayoutWithLabelAndButton.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2000-2014 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.layouts;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+public class HorizontalLayoutWithLabelAndButton extends AbstractTestUIWithLog {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ HorizontalLayout hl = new HorizontalLayout();
+ hl.setSpacing(true);
+ hl.setWidth("100%");
+ Label l = new Label();
+ l.setCaption("POTUS Database");
+ l.setSizeUndefined();
+
+ Button b = new Button("Add new");
+ hl.addComponents(l, b);
+ b.setStyleName("primary");
+ hl.setExpandRatio(b, 1);
+
+ addComponent(hl);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7a2/WidgetContainer.java b/uitest/src/com/vaadin/tests/minitutorials/v7a2/WidgetContainer.java
index 8c14ba8bd7..850fa1044f 100644
--- a/uitest/src/com/vaadin/tests/minitutorials/v7a2/WidgetContainer.java
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7a2/WidgetContainer.java
@@ -15,14 +15,12 @@ public class WidgetContainer extends AbstractComponentContainer {
public void addComponent(Component c) {
children.add(c);
super.addComponent(c);
- markAsDirty();
}
@Override
public void removeComponent(Component c) {
children.remove(c);
super.removeComponent(c);
- markAsDirty();
}
@Override
diff --git a/uitest/src/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonAction.java b/uitest/src/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonAction.java
new file mode 100644
index 0000000000..5c78a3f42a
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonAction.java
@@ -0,0 +1,128 @@
+package com.vaadin.tests.navigator;
+
+import com.vaadin.navigator.Navigator;
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class NavigatorViewBlocksBackButtonAction extends AbstractTestUI {
+
+ private Navigator navigator;
+
+ protected static final String LABEL_MAINVIEW_ID = "LABEL_MAINVIEW_ID";
+ protected static final String LABEL_PROMPTEDVIEW_ID = "LABEL_PROMPTEDVIEW_ID";
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ navigator = new Navigator(this, this);
+ navigator.addView(MainView.NAME, new MainView());
+ navigator.addView(ViewWithPromptedLeave.NAME,
+ new ViewWithPromptedLeave());
+ navigator.navigateTo(MainView.NAME);
+ }
+
+ class MainView extends VerticalLayout implements View {
+
+ public static final String NAME = "mainview";
+
+ public MainView() {
+ Label label = new Label("MainView content");
+ label.setId(LABEL_MAINVIEW_ID);
+ addComponent(label);
+
+ Button buttonNavToAnotherView = new Button(
+ "Navigate to another view", new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ navigator.navigateTo(ViewWithPromptedLeave.NAME);
+ }
+ });
+ addComponent(buttonNavToAnotherView);
+ }
+
+ @Override
+ public void enter(ViewChangeEvent event) {
+ }
+
+ }
+
+ class ViewWithPromptedLeave extends VerticalLayout implements View,
+ ViewChangeListener {
+
+ public static final String NAME = "prompted";
+
+ protected boolean okToLeave;
+
+ public ViewWithPromptedLeave() {
+ Label label = new Label("ViewWithPromptedLeave content");
+ label.setId(LABEL_PROMPTEDVIEW_ID);
+ addComponent(label);
+ addComponent(new Label(
+ "Try to navigate back to first view with browser back button."));
+ }
+
+ @Override
+ public void enter(ViewChangeEvent event) {
+ event.getNavigator().addViewChangeListener(this);
+ }
+
+ @Override
+ public boolean beforeViewChange(final ViewChangeEvent event) {
+ if (okToLeave) {
+ okToLeave = false;
+ return true;
+ } else {
+ final Window confirmationWindow = new Window("Confirm");
+ confirmationWindow.setModal(true);
+ confirmationWindow.setClosable(true);
+
+ VerticalLayout confirmationWindowLayout = new VerticalLayout();
+ confirmationWindow.setContent(confirmationWindowLayout);
+ confirmationWindowLayout.setMargin(true);
+ confirmationWindowLayout.setSpacing(true);
+ confirmationWindowLayout.addComponent(new Label(
+ "Really exit this view?"));
+ confirmationWindowLayout.addComponent(new Button("Yeah, sure!",
+ new Button.ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent buttonEvent) {
+ okToLeave = true;
+ getUI().removeWindow(confirmationWindow);
+ event.getNavigator().navigateTo(
+ event.getViewName() + "/"
+ + event.getParameters());
+ }
+ }));
+ getUI().addWindow(confirmationWindow);
+ return false;
+ }
+ }
+
+ @Override
+ public void afterViewChange(ViewChangeEvent event) {
+ if (event.getNewView() != this) {
+ event.getNavigator().removeViewChangeListener(this);
+ }
+ }
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "URL should not be changed when view blocks navigating away from view using the browser's Back-button";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10901;
+ }
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonActionTest.java b/uitest/src/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonActionTest.java
new file mode 100644
index 0000000000..84abdca24b
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/navigator/NavigatorViewBlocksBackButtonActionTest.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2000-2014 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.navigator;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class NavigatorViewBlocksBackButtonActionTest extends MultiBrowserTest {
+
+ @Test
+ public void testIfConfirmBack() {
+ openTestURL();
+
+ // keep URL of main view
+ final String initialUrl = driver.getCurrentUrl();
+
+ // do it 2 times to verify that login is not broken after first time
+ for (int i = 0; i < 2; i++) {
+ // go to prompted view
+ WebElement button = $(ButtonElement.class).first();
+ button.click();
+
+ // click back button
+ driver.navigate().back();
+
+ // confirm "go back by clicking confirm button
+ WebElement buttonConfirmView = $(ButtonElement.class).first();
+ buttonConfirmView.click();
+
+ // verify we are in main view and url is correct
+ waitForElementPresent(By
+ .id(NavigatorViewBlocksBackButtonAction.LABEL_MAINVIEW_ID));
+ String currentUrl = driver.getCurrentUrl();
+ assertEquals(
+ "Current URL should be equal to initial main view URL",
+ initialUrl, currentUrl);
+ }
+ }
+
+ @Test
+ public void testIfCancelBack() {
+ openTestURL();
+
+ // go to prompted view
+ WebElement button = $(ButtonElement.class).first();
+ button.click();
+
+ // keep URL of prompted view
+ final String initialPromptedUrl = driver.getCurrentUrl();
+
+ // click back button
+ driver.navigate().back();
+
+ // verify url is correct (is not changed)
+ waitForElementPresent(By
+ .id(NavigatorViewBlocksBackButtonAction.LABEL_PROMPTEDVIEW_ID));
+ String currentUrl = driver.getCurrentUrl();
+ assertEquals(
+ "Current URL should be equal to initial prompted view URL",
+ initialPromptedUrl, currentUrl);
+
+ WebElement cancelButton = driver.findElement(By
+ .className("v-window-closebox"));
+
+ // click cancel button
+ cancelButton.click();
+
+ // verify we leave in prompted view and url is correct
+ waitForElementPresent(By
+ .id(NavigatorViewBlocksBackButtonAction.LABEL_PROMPTEDVIEW_ID));
+ currentUrl = driver.getCurrentUrl();
+ assertEquals(
+ "Current URL should be equal to initial prompted view URL",
+ initialPromptedUrl, currentUrl);
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/push/PushConfigurationLongPollingTest.java b/uitest/src/com/vaadin/tests/push/PushConfigurationLongPollingTest.java
index a04d569e05..1d5ead7d98 100644
--- a/uitest/src/com/vaadin/tests/push/PushConfigurationLongPollingTest.java
+++ b/uitest/src/com/vaadin/tests/push/PushConfigurationLongPollingTest.java
@@ -18,11 +18,7 @@ package com.vaadin.tests.push;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
-import java.util.List;
-
import org.junit.Test;
-import org.openqa.selenium.remote.DesiredCapabilities;
-import org.openqa.selenium.support.ui.Select;
public class PushConfigurationLongPollingTest extends PushConfigurationTest {
@@ -30,13 +26,13 @@ public class PushConfigurationLongPollingTest extends PushConfigurationTest {
public void testLongPolling() throws InterruptedException {
openDebugLogTab();
- new Select(getTransportSelect()).selectByVisibleText("LONG_POLLING");
+ getTransportSelect().selectByText("Long polling");
assertThat(getStatusText(),
containsString("fallbackTransport: long-polling"));
assertThat(getStatusText(), containsString("transport: long-polling"));
clearDebugMessages();
- new Select(getPushModeSelect()).selectByVisibleText("AUTOMATIC");
+ getPushModeSelect().selectByText("Automatic");
waitForDebugMessage("Push connection established using long-polling",
10);
waitForServerCounterToUpdate();
diff --git a/uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java b/uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java
index f5c015ad12..202db8d6b7 100644
--- a/uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java
+++ b/uitest/src/com/vaadin/tests/push/PushConfigurationStreamingTest.java
@@ -15,25 +15,24 @@
*/
package com.vaadin.tests.push;
-import org.junit.Test;
-import org.openqa.selenium.support.ui.Select;
-
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
+import org.junit.Test;
+
public class PushConfigurationStreamingTest extends PushConfigurationTest {
@Test
public void testStreaming() throws InterruptedException {
openDebugLogTab();
- new Select(getTransportSelect()).selectByVisibleText("STREAMING");
+ getTransportSelect().selectByText("Streaming");
assertThat(getStatusText(),
containsString("fallbackTransport: long-polling"));
assertThat(getStatusText(), containsString("transport: streaming"));
clearDebugMessages();
- new Select(getPushModeSelect()).selectByVisibleText("AUTOMATIC");
+ getPushModeSelect().selectByText("Automatic");
waitForDebugMessage("Push connection established using streaming", 10);
waitForServerCounterToUpdate();
diff --git a/uitest/src/com/vaadin/tests/push/PushConfigurationTest.java b/uitest/src/com/vaadin/tests/push/PushConfigurationTest.java
index bb5b420259..396160cc7d 100644
--- a/uitest/src/com/vaadin/tests/push/PushConfigurationTest.java
+++ b/uitest/src/com/vaadin/tests/push/PushConfigurationTest.java
@@ -20,8 +20,8 @@ import static org.junit.Assert.assertEquals;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
-import org.openqa.selenium.support.ui.Select;
+import com.vaadin.testbench.elements.NativeSelectElement;
import com.vaadin.tests.annotations.TestCategory;
import com.vaadin.tests.tb3.MultiBrowserTest;
@@ -49,7 +49,7 @@ abstract class PushConfigurationTest extends MultiBrowserTest {
}
protected void disablePush() throws InterruptedException {
- new Select(getPushModeSelect()).selectByVisibleText("DISABLED");
+ getPushModeSelect().selectByText("Disabled");
int counter = getServerCounter();
sleep(2000);
@@ -57,12 +57,12 @@ abstract class PushConfigurationTest extends MultiBrowserTest {
getServerCounter());
}
- protected WebElement getPushModeSelect() {
- return vaadinElement("/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VVerticalLayout[0]/Slot[0]/VVerticalLayout[0]/Slot[0]/VNativeSelect[0]/domChild[0]");
+ protected NativeSelectElement getPushModeSelect() {
+ return $(NativeSelectElement.class).caption("Push mode").first();
}
- protected WebElement getTransportSelect() {
- return vaadinElement("/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VVerticalLayout[0]/Slot[0]/VVerticalLayout[0]/Slot[1]/VNativeSelect[0]/domChild[0]");
+ protected NativeSelectElement getTransportSelect() {
+ return $(NativeSelectElement.class).caption("Transport").first();
}
protected int getServerCounter() {
diff --git a/uitest/src/com/vaadin/tests/push/PushConfigurationWebSocketTest.java b/uitest/src/com/vaadin/tests/push/PushConfigurationWebSocketTest.java
index c9a813fac0..475fa2165f 100644
--- a/uitest/src/com/vaadin/tests/push/PushConfigurationWebSocketTest.java
+++ b/uitest/src/com/vaadin/tests/push/PushConfigurationWebSocketTest.java
@@ -23,7 +23,6 @@ import java.util.List;
import org.junit.Test;
import org.openqa.selenium.remote.DesiredCapabilities;
-import org.openqa.selenium.support.ui.Select;
public class PushConfigurationWebSocketTest extends PushConfigurationTest {
@@ -40,8 +39,8 @@ public class PushConfigurationWebSocketTest extends PushConfigurationTest {
@Test
public void testWebsocket() throws InterruptedException {
- new Select(getTransportSelect()).selectByVisibleText("WEBSOCKET");
- new Select(getPushModeSelect()).selectByVisibleText("AUTOMATIC");
+ getTransportSelect().selectByText("Websocket");
+ getPushModeSelect().selectByText("Automatic");
assertThat(getStatusText(),
containsString("fallbackTransport: long-polling"));
diff --git a/uitest/src/com/vaadin/tests/push/PushConfigurator.java b/uitest/src/com/vaadin/tests/push/PushConfigurator.java
index 5a45ab7206..7da58af1da 100644
--- a/uitest/src/com/vaadin/tests/push/PushConfigurator.java
+++ b/uitest/src/com/vaadin/tests/push/PushConfigurator.java
@@ -87,11 +87,9 @@ public class PushConfigurator extends VerticalLayout {
pushMode.addItem(PushMode.AUTOMATIC);
for (Transport t : Transport.values()) {
- transport.addItem(t.toString());
- fallbackTransport.addItem(t.toString());
+ transport.addItem(t);
+ fallbackTransport.addItem(t);
}
- transport.addItem("");
- fallbackTransport.addItem("");
pushMode.setImmediate(true);
transport.setImmediate(true);
@@ -124,7 +122,7 @@ public class PushConfigurator extends VerticalLayout {
transport.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
- Transport t = Transport.valueOf((String) transport.getValue());
+ Transport t = (Transport) transport.getValue();
ui.getPushConfiguration().setTransport(t);
refreshStatus();
}
@@ -133,8 +131,7 @@ public class PushConfigurator extends VerticalLayout {
fallbackTransport.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
- Transport t = Transport.valueOf((String) fallbackTransport
- .getValue());
+ Transport t = (Transport) fallbackTransport.getValue();
ui.getPushConfiguration().setFallbackTransport(t);
refreshStatus();
}
diff --git a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java
index 76b851fd23..b5a345bd30 100644
--- a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java
+++ b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java
@@ -32,7 +32,6 @@ import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;
-import com.vaadin.testbench.elements.TableElement;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
@@ -69,6 +68,7 @@ import com.vaadin.testbench.TestBenchDriverProxy;
import com.vaadin.testbench.TestBenchElement;
import com.vaadin.testbench.TestBenchTestCase;
import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.testbench.elements.TableElement;
import com.vaadin.testbench.elements.VerticalLayoutElement;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.tests.tb3.MultiBrowserTest.Browser;
@@ -257,7 +257,7 @@ public abstract class AbstractTB3Test extends TestBenchTestCase {
@Override
public Object apply(WebDriver input) {
try {
- return table.getCell(row, 0) != null;
+ return table.getCell(row, 0) != null;
} catch (NoSuchElementException e) {
return false;
}
@@ -266,7 +266,8 @@ public abstract class AbstractTB3Test extends TestBenchTestCase {
}
protected void scrollTable(TableElement table, int rows, int rowToWait) {
- testBenchElement(table.findElement(By.className("v-scrollable"))).scroll(rows * 30);
+ testBenchElement(table.findElement(By.className("v-scrollable")))
+ .scroll(rows * 30);
waitUntilRowIsVisible(table, rowToWait);
}
@@ -430,6 +431,11 @@ public abstract class AbstractTB3Test extends TestBenchTestCase {
@After
public void tearDown() throws Exception {
if (driver != null) {
+ try {
+ openTestURL("&closeApplication");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
driver.quit();
}
driver = null;
diff --git a/uitest/src/com/vaadin/tests/themes/chameleon/ChameleonNotification.java b/uitest/src/com/vaadin/tests/themes/chameleon/ChameleonNotification.java
new file mode 100644
index 0000000000..efb953530c
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/themes/chameleon/ChameleonNotification.java
@@ -0,0 +1,30 @@
+package com.vaadin.tests.themes.chameleon;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.themes.ChameleonTheme;
+
+@Theme(ChameleonTheme.THEME_NAME)
+public class ChameleonNotification extends AbstractTestUI {
+ @Override
+ protected void setup(VaadinRequest request) {
+
+
+ addButton("Notification", new Button.ClickListener() {
+ @Override
+ public void buttonClick(Button.ClickEvent event) {
+ Notification notification = new Notification("Notification");
+ notification.setDelayMsec(30000);
+ notification.show(getUI().getPage());
+ }
+ });
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 15351;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/themes/chameleon/ChameleonNotificationTest.java b/uitest/src/com/vaadin/tests/themes/chameleon/ChameleonNotificationTest.java
new file mode 100644
index 0000000000..ef41ef3df9
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/themes/chameleon/ChameleonNotificationTest.java
@@ -0,0 +1,25 @@
+package com.vaadin.tests.themes.chameleon;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.NotificationElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.Assert.assertThat;
+
+public class ChameleonNotificationTest extends MultiBrowserTest {
+ @Test
+ public void gradientPathIsCorrect() throws IOException {
+ openTestURL();
+ $(ButtonElement.class).first().click();
+
+ NotificationElement notificationElement
+ = $(NotificationElement.class).first();
+
+ assertThat(notificationElement.getCssValue("background-image"),
+ containsString("chameleon/img/grad"));
+ }
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/themes/valo/ButtonsAndLinks.java b/uitest/src/com/vaadin/tests/themes/valo/ButtonsAndLinks.java
index e66cd2668b..9ed48896eb 100644
--- a/uitest/src/com/vaadin/tests/themes/valo/ButtonsAndLinks.java
+++ b/uitest/src/com/vaadin/tests/themes/valo/ButtonsAndLinks.java
@@ -178,6 +178,11 @@ public class ButtonsAndLinks extends VerticalLayout implements View {
link.setIcon(testIcon.get());
link.addStyleName("large");
row.addComponent(link);
+
+ link = new Link("Disabled", new ExternalResource("https://vaadin.com"));
+ link.setIcon(testIcon.get());
+ link.setEnabled(false);
+ row.addComponent(link);
}
@Override
diff --git a/uitest/src/com/vaadin/tests/themes/valo/CheckBoxes.java b/uitest/src/com/vaadin/tests/themes/valo/CheckBoxes.java
index c7a2610a21..c79447bd86 100644
--- a/uitest/src/com/vaadin/tests/themes/valo/CheckBoxes.java
+++ b/uitest/src/com/vaadin/tests/themes/valo/CheckBoxes.java
@@ -79,6 +79,11 @@ public class CheckBoxes extends VerticalLayout implements View {
check.addStyleName("large");
row.addComponent(check);
+ check = new CheckBox("Disabled", true);
+ check.setEnabled(false);
+ check.setIcon(testIcon.get());
+ row.addComponent(check);
+
h1 = new Label("Option Groups");
h1.addStyleName("h1");
addComponent(h1);
@@ -184,6 +189,17 @@ public class CheckBoxes extends VerticalLayout implements View {
options.setItemIcon(two, testIcon.get());
options.setItemIcon("Option Three", testIcon.get());
row.addComponent(options);
+
+ options = new OptionGroup("Disabled items");
+ options.setEnabled(false);
+ options.addItem("Option One");
+ options.addItem("Option Two");
+ options.addItem("Option Three");
+ options.select("Option One");
+ options.setItemIcon("Option One", testIcon.get());
+ options.setItemIcon("Option Two", testIcon.get());
+ options.setItemIcon("Option Three", testIcon.get(true));
+ row.addComponent(options);
}
@Override
diff --git a/uitest/src/com/vaadin/tests/themes/valo/ModalWindowTest.java b/uitest/src/com/vaadin/tests/themes/valo/ModalWindowTest.java
new file mode 100644
index 0000000000..b97ce43ed6
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/themes/valo/ModalWindowTest.java
@@ -0,0 +1,34 @@
+package com.vaadin.tests.themes.valo;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.tests.ModalWindow;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+public class ModalWindowTest extends SingleBrowserTest {
+
+ @Override
+ protected Class<?> getUIClass() {
+ return ModalWindow.class;
+ }
+
+ @Test
+ public void modalAnimationsAreDisabled() {
+ openTestURL("theme=tests-valo-disabled-animations");
+
+ openModalWindow();
+
+ WebElement modalityCurtain = findElement(By.className("v-window-modalitycurtain"));
+
+ assertThat(modalityCurtain.getCssValue("-webkit-animation-name"), is("none"));
+ }
+
+ private void openModalWindow() {
+ $(ButtonElement.class).get(1).click();
+ }
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/themes/valo/ValoThemeUITest.java b/uitest/src/com/vaadin/tests/themes/valo/ValoThemeUITest.java
index 92cb837b38..13b0c7144c 100644
--- a/uitest/src/com/vaadin/tests/themes/valo/ValoThemeUITest.java
+++ b/uitest/src/com/vaadin/tests/themes/valo/ValoThemeUITest.java
@@ -39,7 +39,7 @@ public class ValoThemeUITest extends MultiBrowserTest {
public void buttonsLinks() throws Exception {
openTestURL("test");
open("Buttons & Links", "Buttons");
- compareScreen("buttonsLinks");
+ compareScreen("buttonsLinks_with_disabled");
}
@Test
@@ -85,7 +85,7 @@ public class ValoThemeUITest extends MultiBrowserTest {
public void checkboxes() throws Exception {
openTestURL("test");
open("Check Boxes & Option Groups", "Check Boxes");
- compareScreen("checkboxes");
+ compareScreen("checkboxes_with_disabled");
}
@Test