From 4932cecca53b25149ec18dd811c89997ee43e8d9 Mon Sep 17 00:00:00 2001 From: elmot Date: Fri, 29 May 2015 18:13:33 +0300 Subject: Fix for javadocs Change-Id: Id8cec85e279907795947e0b0e98649fde6eecb2d --- server/src/com/vaadin/ui/Grid.java | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java index 00ed4a190d..c061a81b73 100644 --- a/server/src/com/vaadin/ui/Grid.java +++ b/server/src/com/vaadin/ui/Grid.java @@ -794,7 +794,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, /** * Marks an item as selected. * - * @param itemIds + * @param itemId * the itemId to mark as selected; null for * deselect * @return true if the selection state changed. @@ -1944,7 +1944,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, /** * Removes the row at the given position. * - * @param index + * @param rowIndex * the position of the row * * @throws IllegalArgumentException @@ -2441,7 +2441,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, private Converter converter; /** - * A check for allowing the {@link #Column(Grid, GridColumnState) + * A check for allowing the {@link #Column(Grid, GridColumnState, Object) * constructor} to call {@link #setConverter(Converter)} with a * null, even if model and renderer aren't compatible. */ @@ -3101,7 +3101,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, * * @throws IllegalArgumentException * if there is no column for the provided property id - * @throws BindException + * @throws FieldGroup.BindException * if no field has been configured and there is a problem * building or binding */ @@ -3272,12 +3272,12 @@ public class Grid extends AbstractComponent implements SelectionNotifier, } /** - * An abstract base class for server-side Grid renderers. - * {@link com.vaadin.client.widget.grid.Renderer Grid renderers}. This class - * currently extends the AbstractGridExtension superclass, but this fact - * should be regarded as an implementation detail and subject to change in a - * future major or minor Vaadin revision. - * + * An abstract base class for server-side + * {@link com.vaadin.ui.renderers.Renderer Grid renderers}. This class + * currently extends the AbstractExtension superclass, but this fact should + * be regarded as an implementation detail and subject to change in a future + * major or minor Vaadin revision. + * * @param * the type this renderer knows how to present */ @@ -3348,7 +3348,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, * is desired. For instance, a {@code Renderer} could first turn a * date value into a formatted string and return * {@code encode(dateString, String.class)}. - * + * * @param value * the value to be encoded * @param type @@ -3363,7 +3363,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, /** * An abstract base class for server-side Grid extensions. - * + * * @since 7.5 */ public static abstract class AbstractGridExtension extends @@ -3378,7 +3378,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, /** * Constructs a new Grid extension and extends given Grid. - * + * * @param grid * a grid instance */ @@ -3537,7 +3537,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, * in Grid() constructor, or false if the user has set their * own Container. * - * @see #setContainerDataSource() + * @see #setContainerDataSource(Indexed) * @see #Grid() */ private boolean defaultContainer = true; @@ -4513,7 +4513,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, * @throws IllegalArgumentException * if {@code rows} is zero or less * @throws IllegalArgumentException - * if {@code rows} is {@link Double#isInifinite(double) + * if {@code rows} is {@link Double#isInfinite(double) * infinite} * @throws IllegalArgumentException * if {@code rows} is {@link Double#isNaN(double) NaN} @@ -4759,7 +4759,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, * {@link SelectionModel.Single} and {@link SelectionModel.Multi} are * supported. * - * @param itemIds + * @param itemId * the itemId to mark as selected * @return true if the selection state changed, * false if the itemId already was selected @@ -4852,10 +4852,10 @@ public class Grid extends AbstractComponent implements SelectionNotifier, * {@link SelectionModel SelectionModels} would be able to inform Grid of * these events. * - * @param addedSelections - * the selections that were added by this event - * @param removedSelections - * the selections that were removed by this event + * @param newSelection + * the selection that was added by this event + * @param oldSelection + * the selection that was removed by this event */ public void fireSelectionEvent(Collection oldSelection, Collection newSelection) { @@ -5235,7 +5235,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, /** * Removes the row at the given position from the header section. * - * @param index + * @param rowIndex * the position of the row * * @throws IllegalArgumentException @@ -5382,7 +5382,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier, /** * Removes the row at the given position from the footer section. * - * @param index + * @param rowIndex * the position of the row * * @throws IllegalArgumentException -- cgit v1.2.3 From 90e75a20bda563f90297840f4feb5668cd524633 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 15 May 2015 12:38:01 +0300 Subject: Properly handle readonly fields when clearing FieldGroup (#17166) Change-Id: I42b9fe5d945d23e202a252a8be12976608da19bf --- .../src/com/vaadin/data/fieldgroup/FieldGroup.java | 17 +++++- .../vaadin/tests/fieldgroup/AbstractBasicCrud.java | 29 ++++++++- .../vaadin/tests/fieldgroup/BasicCrudGridTest.java | 69 ++++++++++++++++++++++ .../com/vaadin/tests/fieldgroup/ComplexPerson.java | 6 +- .../tests/tb3/SingleBrowserTestPhantomJS2.java | 33 +++++++++++ 5 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/fieldgroup/BasicCrudGridTest.java create mode 100644 uitest/src/com/vaadin/tests/tb3/SingleBrowserTestPhantomJS2.java diff --git a/server/src/com/vaadin/data/fieldgroup/FieldGroup.java b/server/src/com/vaadin/data/fieldgroup/FieldGroup.java index d370c3906b..aaaae9e4f7 100644 --- a/server/src/com/vaadin/data/fieldgroup/FieldGroup.java +++ b/server/src/com/vaadin/data/fieldgroup/FieldGroup.java @@ -258,7 +258,19 @@ public class FieldGroup implements Serializable { if (itemDataSource == null) { // Clear any possible existing binding to clear the field field.setPropertyDataSource(null); - field.clear(); + boolean fieldReadOnly = field.isReadOnly(); + if (!fieldReadOnly) { + field.clear(); + } else { + // Temporarily make the field read-write so we can clear the + // value. Needed because setPropertyDataSource(null) does not + // currently clear the field + // (https://dev.vaadin.com/ticket/14733) + field.setReadOnly(false); + field.clear(); + field.setReadOnly(true); + } + // Will be bound when data source is set return; } @@ -1247,4 +1259,5 @@ public class FieldGroup implements Serializable { } } -} + +} \ No newline at end of file diff --git a/uitest/src/com/vaadin/tests/fieldgroup/AbstractBasicCrud.java b/uitest/src/com/vaadin/tests/fieldgroup/AbstractBasicCrud.java index c88047e414..0405ea2e10 100644 --- a/uitest/src/com/vaadin/tests/fieldgroup/AbstractBasicCrud.java +++ b/uitest/src/com/vaadin/tests/fieldgroup/AbstractBasicCrud.java @@ -128,6 +128,19 @@ public abstract class AbstractBasicCrud extends AbstractTestUIWithLog { gender.setNullRepresentation(""); age.setNullRepresentation(""); address_country.setNullRepresentation(""); + + // Last name editing is disabled through property readonly. + // Postal code editing is disabled through disabling field. + /* + * Currently only sets the initial state because of + * https://dev.vaadin.com/ticket/17847 + * + * Must set lastName state initially as BeanFieldGroup can't tell it + * should be read-only before setting an item data source + */ + lastName.setReadOnly(true); + address_postalCode.setEnabled(false); + birthDate.setNullRepresentation(""); age.addValidator(new IntegerRangeValidator( @@ -184,7 +197,21 @@ public abstract class AbstractBasicCrud extends AbstractTestUIWithLog { protected Button cancel = new Button("Cancel"); protected BeanFieldGroup fieldGroup = new BeanFieldGroup( - ComplexPerson.class); + ComplexPerson.class) { + @Override + protected void configureField(com.vaadin.ui.Field field) { + super.configureField(field); + if (field.getCaption().equals("Postal code")) { + // Last name editing is disabled through property. + // Postal code editing is disabled through field. + /* + * This is needed because of + * https://dev.vaadin.com/ticket/17847 + */ + field.setEnabled(false); + } + }; + }; public AbstractForm() { super(5, 1); diff --git a/uitest/src/com/vaadin/tests/fieldgroup/BasicCrudGridTest.java b/uitest/src/com/vaadin/tests/fieldgroup/BasicCrudGridTest.java new file mode 100644 index 0000000000..12bccdd065 --- /dev/null +++ b/uitest/src/com/vaadin/tests/fieldgroup/BasicCrudGridTest.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.fieldgroup; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.AbstractHasTestBenchCommandExecutor; +import com.vaadin.testbench.elements.AbstractComponentElement; +import com.vaadin.testbench.elements.GridElement; +import com.vaadin.testbench.elements.TextFieldElement; +import com.vaadin.tests.tb3.SingleBrowserTestPhantomJS2; + +public class BasicCrudGridTest extends SingleBrowserTestPhantomJS2 { + + @Test + public void fieldsInitiallyEmpty() { + openTestURL(); + List textFields = getFieldsLayout().$( + TextFieldElement.class).all(); + + for (TextFieldElement e : textFields) { + Assert.assertEquals("TextField should be empty", "", e.getValue()); + } + } + + private AbstractHasTestBenchCommandExecutor getFieldsLayout() { + return $(AbstractComponentElement.class).id("form"); + } + + @Test + public void fieldsClearedOnDeselect() { + openTestURL(); + + // Select row + $(GridElement.class).first().getCell(2, 2).click(); + + List textFields = getFieldsLayout().$( + TextFieldElement.class).all(); + + for (TextFieldElement e : textFields) { + Assert.assertNotEquals("TextField should not be empty", "", + e.getValue()); + } + + // Deselect row + $(GridElement.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/ComplexPerson.java b/uitest/src/com/vaadin/tests/fieldgroup/ComplexPerson.java index 2fb7c2ac04..bb4fe89575 100644 --- a/uitest/src/com/vaadin/tests/fieldgroup/ComplexPerson.java +++ b/uitest/src/com/vaadin/tests/fieldgroup/ComplexPerson.java @@ -29,10 +29,6 @@ public class ComplexPerson { return lastName; } - public void setLastName(String lastName) { - this.lastName = lastName; - } - public Integer getAge() { return age; } @@ -97,7 +93,7 @@ public class ComplexPerson { public static ComplexPerson create(Random r) { ComplexPerson cp = new ComplexPerson(); cp.setFirstName(TestDataGenerator.getFirstName(r)); - cp.setLastName(TestDataGenerator.getLastName(r)); + cp.lastName = TestDataGenerator.getLastName(r); cp.setAlive(r.nextBoolean()); cp.setBirthDate(TestDataGenerator.getBirthDate(r)); cp.setAge((int) ((new Date(2014 - 1900, 1, 1).getTime() - cp diff --git a/uitest/src/com/vaadin/tests/tb3/SingleBrowserTestPhantomJS2.java b/uitest/src/com/vaadin/tests/tb3/SingleBrowserTestPhantomJS2.java new file mode 100644 index 0000000000..a5afe3afce --- /dev/null +++ b/uitest/src/com/vaadin/tests/tb3/SingleBrowserTestPhantomJS2.java @@ -0,0 +1,33 @@ +/* + * 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.tb3; + +import java.util.Collections; +import java.util.List; + +import org.openqa.selenium.remote.DesiredCapabilities; + +import com.vaadin.testbench.parallel.Browser; + +public abstract class SingleBrowserTestPhantomJS2 extends + PrivateTB3Configuration { + @Override + public List getBrowsersToTest() { + DesiredCapabilities p2 = Browser.PHANTOMJS.getDesiredCapabilities(); + p2.setVersion("2"); + return Collections.singletonList(p2); + } +} -- cgit v1.2.3 From 0349e002b8904e6d91e7d7938cbe085b3501ce0f Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Mon, 1 Jun 2015 15:46:19 +0300 Subject: Refactor MenuBar handling methods to AbstractTB3Test This patch uses the new menubar handling in AccordionClipsContentTest Change-Id: Ib54b8b7c51b04fb98785af214aebdd33126aa61d --- .../accordion/AccordionClipsContentTest.java | 24 ++------ .../EscalatorBasicClientFeaturesTest.java | 29 +++------- .../grid/basicfeatures/GridBasicFeaturesTest.java | 29 ---------- .../basicfeatures/GridClientDataSourcesTest.java | 27 ++------- .../components/table/TableDragColumnTest.java | 17 ------ .../src/com/vaadin/tests/tb3/AbstractTB3Test.java | 64 +++++++++++++++++++++- 6 files changed, 80 insertions(+), 110 deletions(-) diff --git a/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContentTest.java b/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContentTest.java index 25e40e5ed3..b6fa82aa41 100644 --- a/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContentTest.java +++ b/uitest/src/com/vaadin/tests/components/accordion/AccordionClipsContentTest.java @@ -15,9 +15,10 @@ */ package com.vaadin.tests.components.accordion; +import org.junit.Test; + import com.vaadin.testbench.elements.NativeButtonElement; import com.vaadin.tests.tb3.MultiBrowserTest; -import org.junit.Test; public class AccordionClipsContentTest extends MultiBrowserTest { @Override @@ -29,21 +30,8 @@ public class AccordionClipsContentTest extends MultiBrowserTest { public void testAccordionClipsContent() throws Exception { openTestURL(); - /* - * MenuBarElement doesn't have any API, so this part is ugly until - * #13364 is fixed - */ - - // Component - vaadinElement("PID_Smenu#item0").click(); - // Component container features - clickAt("Root/VOverlay[0]/VMenuBar[0]#item3", 136, 8); - // Add component - clickAt("Root/VOverlay[1]/VMenuBar[0]#item0", 65, 4); - // NativeButton - clickAt("Root/VOverlay[2]/VMenuBar[0]#item1", 86, 2); - // autoxauto - vaadinElement("Root/VOverlay[3]/VMenuBar[0]#item0").click(); + selectMenuPath("Component", "Component container features", + "Add component", "NativeButton", "auto x auto"); $(NativeButtonElement.class).first().click(); @@ -54,8 +42,4 @@ public class AccordionClipsContentTest extends MultiBrowserTest { compareScreen("button-clicked"); } - - private void clickAt(String vaadinLocator, int x, int y) { - testBenchElement(vaadinElement(vaadinLocator)).click(x, y); - } } diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/EscalatorBasicClientFeaturesTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/EscalatorBasicClientFeaturesTest.java index c1b8028cbf..517f657c62 100644 --- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/EscalatorBasicClientFeaturesTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/EscalatorBasicClientFeaturesTest.java @@ -22,10 +22,8 @@ import static org.junit.Assert.fail; import java.util.List; import org.openqa.selenium.By; -import org.openqa.selenium.Dimension; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebElement; -import org.openqa.selenium.interactions.Actions; import com.vaadin.testbench.TestBenchElement; import com.vaadin.testbench.parallel.TestCategory; @@ -204,29 +202,16 @@ public abstract class EscalatorBasicClientFeaturesTest extends MultiBrowserTest return null; } + @Override protected void selectMenu(String menuCaption) { - TestBenchElement menuElement = getMenuElement(menuCaption); - Dimension size = menuElement.getSize(); - new Actions(getDriver()).moveToElement(menuElement, size.width - 10, - size.height / 2).perform(); - } - - private TestBenchElement getMenuElement(String menuCaption) { - return (TestBenchElement) findElement(By.xpath("//td[text() = '" - + menuCaption + "']")); + // GWT menu does not need to be clicked. + selectMenu(menuCaption, false); } - protected void selectMenuPath(String... menuCaptions) { - new Actions(getDriver()).moveToElement(getMenuElement(menuCaptions[0])) - .click().perform(); - for (int i = 1; i < menuCaptions.length - 1; ++i) { - selectMenu(menuCaptions[i]); - new Actions(getDriver()).moveByOffset(20, 0).perform(); - } - new Actions(getDriver()) - .moveToElement( - getMenuElement(menuCaptions[menuCaptions.length - 1])) - .click().perform(); + @Override + protected WebElement getMenuElement(String menuCaption) { + return getDriver().findElement( + By.xpath("//td[text() = '" + menuCaption + "']")); } protected void assertLogContains(String substring) { diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java index aea2892e3e..a0eb8dfefe 100644 --- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.List; import org.openqa.selenium.By; -import org.openqa.selenium.Dimension; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -51,34 +50,6 @@ public abstract class GridBasicFeaturesTest extends MultiBrowserTest { return GridBasicFeatures.class; } - protected void selectMenu(String menuCaption) { - selectMenu(menuCaption, true); - } - - protected void selectMenu(String menuCaption, boolean click) { - WebElement menuElement = getMenuElement(menuCaption); - Dimension size = menuElement.getSize(); - new Actions(getDriver()).moveToElement(menuElement, size.width - 10, - size.height / 2).perform(); - if (click) { - new Actions(getDriver()).click().perform(); - } - } - - protected WebElement getMenuElement(String menuCaption) { - return getDriver().findElement( - By.xpath("//span[text() = '" + menuCaption + "']")); - } - - protected void selectMenuPath(String... menuCaptions) { - selectMenu(menuCaptions[0], true); - for (int i = 1; i < menuCaptions.length - 1; i++) { - selectMenu(menuCaptions[i]); - new Actions(getDriver()).moveByOffset(40, 0).build().perform(); - } - selectMenu(menuCaptions[menuCaptions.length - 1], true); - } - protected CustomGridElement getGridElement() { return ((TestBenchElement) findElement(By.id("testComponent"))) .wrap(CustomGridElement.class); diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridClientDataSourcesTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridClientDataSourcesTest.java index fb12178c9b..c406f85c0c 100644 --- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridClientDataSourcesTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridClientDataSourcesTest.java @@ -21,11 +21,9 @@ import static org.junit.Assert.assertNull; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; -import org.openqa.selenium.Dimension; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.openqa.selenium.interactions.Actions; import com.vaadin.testbench.parallel.TestCategory; import com.vaadin.tests.tb3.MultiBrowserTest; @@ -152,29 +150,16 @@ public class GridClientDataSourcesTest extends MultiBrowserTest { + "\"v-grid-scroller-vertical\")]")); } - private void selectMenu(String menuCaption) { - WebElement menuElement = getMenuElement(menuCaption); - Dimension size = menuElement.getSize(); - new Actions(getDriver()).moveToElement(menuElement, size.width - 10, - size.height / 2).perform(); + @Override + protected void selectMenu(String menuCaption) { + // GWT menu does not need to be clicked. + selectMenu(menuCaption, false); } - private WebElement getMenuElement(String menuCaption) { + @Override + protected WebElement getMenuElement(String menuCaption) { return getDriver().findElement( By.xpath("//td[text() = '" + menuCaption + "']")); } - private void selectMenuPath(String... menuCaptions) { - new Actions(getDriver()).moveToElement(getMenuElement(menuCaptions[0])) - .click().perform(); - for (int i = 1; i < menuCaptions.length - 1; ++i) { - selectMenu(menuCaptions[i]); - new Actions(getDriver()).moveByOffset(20, 0).perform(); - } - new Actions(getDriver()) - .moveToElement( - getMenuElement(menuCaptions[menuCaptions.length - 1])) - .click().perform(); - } - } diff --git a/uitest/src/com/vaadin/tests/components/table/TableDragColumnTest.java b/uitest/src/com/vaadin/tests/components/table/TableDragColumnTest.java index cb7c6a070e..bd2d2ad28b 100644 --- a/uitest/src/com/vaadin/tests/components/table/TableDragColumnTest.java +++ b/uitest/src/com/vaadin/tests/components/table/TableDragColumnTest.java @@ -102,21 +102,4 @@ public class TableDragColumnTest extends MultiBrowserTest { new Actions(getDriver()).release().perform(); } - - protected void selectSubMenu(String menuCaption) { - selectMenu(menuCaption); - new Actions(getDriver()).moveByOffset(100, 0).build().perform(); - } - - protected void selectMenu(String menuCaption) { - getDriver().findElement( - By.xpath("//span[text() = '" + menuCaption + "']")).click(); - } - - protected void selectMenuPath(String... menuCaptions) { - selectMenu(menuCaptions[0]); - for (int i = 1; i < menuCaptions.length; i++) { - selectSubMenu(menuCaptions[i]); - } - } } diff --git a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java index ddf90b080b..7b77aaf817 100644 --- a/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java +++ b/uitest/src/com/vaadin/tests/tb3/AbstractTB3Test.java @@ -26,7 +26,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.NoSuchElementException; import java.util.Set; import java.util.logging.Level; @@ -40,9 +39,12 @@ import org.junit.Assert; import org.junit.Rule; import org.junit.runner.RunWith; import org.openqa.selenium.By; +import org.openqa.selenium.Dimension; import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.interactions.HasInputDevices; import org.openqa.selenium.interactions.Keyboard; import org.openqa.selenium.interactions.Mouse; @@ -976,4 +978,64 @@ public abstract class AbstractTB3Test extends ParallelTest { } }); } + + /** + * Selects a menu item. By default, this will click on the menu item. + * + * @param menuCaption + * caption of the menu item + */ + protected void selectMenu(String menuCaption) { + selectMenu(menuCaption, true); + } + + /** + * Selects a menu item. + * + * @param menuCaption + * caption of the menu item + * @param click + * true if should click the menu item; + * false if not + */ + protected void selectMenu(String menuCaption, boolean click) { + WebElement menuElement = getMenuElement(menuCaption); + Dimension size = menuElement.getSize(); + new Actions(getDriver()).moveToElement(menuElement, size.width - 10, + size.height / 2).perform(); + if (click) { + new Actions(getDriver()).click().perform(); + } + } + + /** + * Finds the menu item from the DOM based on menu item caption. + * + * @param menuCaption + * caption of the menu item + * @return the found menu item + * @throws NoSuchElementException + * if menu item is not found + */ + protected WebElement getMenuElement(String menuCaption) + throws NoSuchElementException { + return getDriver().findElement( + By.xpath("//span[text() = '" + menuCaption + "']")); + } + + /** + * Selects a submenu described by a path of menus from the first MenuBar in + * the UI. + * + * @param menuCaptions + * array of menu captions + */ + protected void selectMenuPath(String... menuCaptions) { + selectMenu(menuCaptions[0], true); + for (int i = 1; i < menuCaptions.length - 1; i++) { + selectMenu(menuCaptions[i]); + new Actions(getDriver()).moveByOffset(40, 0).build().perform(); + } + selectMenu(menuCaptions[menuCaptions.length - 1], true); + } } -- cgit v1.2.3 From 3b96123d2a84204375277c62d906e3167ee4f352 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 25 May 2015 19:20:36 +0300 Subject: Replaced incorrect setter/getter with prope ones and fixed declarative (#17982) Change-Id: If1109d3759d9e6414f7d60ae3b12286aa9e29566 --- server/src/com/vaadin/ui/TabSheet.java | 30 ++++++++++++++++++++-- .../tabsheet/TabSheetDeclarativeTest.java | 19 ++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/server/src/com/vaadin/ui/TabSheet.java b/server/src/com/vaadin/ui/TabSheet.java index 67dfdd4258..592515c560 100644 --- a/server/src/com/vaadin/ui/TabSheet.java +++ b/server/src/com/vaadin/ui/TabSheet.java @@ -478,9 +478,11 @@ public class TabSheet extends AbstractComponentContainer implements Focusable, * Are the tab selection parts ("tabs") hidden. * * @return true if the tabs are hidden in the UI + * @deprecated as of 7.5, use {@link #isTabsVisible()} instead */ + @Deprecated public boolean areTabsHidden() { - return !getState(false).tabsVisible; + return !isTabsVisible(); } /** @@ -488,9 +490,33 @@ public class TabSheet extends AbstractComponentContainer implements Focusable, * * @param tabsHidden * true if the tabs should be hidden + * @deprecated as of 7.5, use {@link #setTabsVisible(boolean)} instead */ + @Deprecated public void hideTabs(boolean tabsHidden) { - getState().tabsVisible = !tabsHidden; + setTabsVisible(!tabsHidden); + } + + /** + * Sets whether the tab selection part should be shown in the UI + * + * @since 7.5 + * @param tabsVisible + * true if the tabs should be shown in the UI, false otherwise + */ + public void setTabsVisible(boolean tabsVisible) { + getState().tabsVisible = tabsVisible; + } + + /** + * Checks if the tab selection part should be shown in the UI + * + * @return true if the tabs are shown in the UI, false otherwise + * @since 7.5 + */ + public boolean isTabsVisible() { + return getState(false).tabsVisible; + } /** diff --git a/server/tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetDeclarativeTest.java b/server/tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetDeclarativeTest.java index bb5669a3a1..a92101f550 100644 --- a/server/tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetDeclarativeTest.java +++ b/server/tests/src/com/vaadin/tests/server/component/tabsheet/TabSheetDeclarativeTest.java @@ -18,7 +18,9 @@ package com.vaadin.tests.server.component.tabsheet; import org.junit.Test; import com.vaadin.server.ExternalResource; +import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.tests.design.DeclarativeTestBase; +import com.vaadin.ui.Label; import com.vaadin.ui.TabSheet; import com.vaadin.ui.TabSheet.Tab; import com.vaadin.ui.TextField; @@ -65,4 +67,21 @@ public class TabSheetDeclarativeTest extends DeclarativeTestBase { testRead(design, ts); testWrite(design, ts); } + + @Test + public void tabsNotShown() { + String design = "\n" + + " \n" + + " My Content\n" + " \n" + + "\n"; + TabSheet ts = new TabSheet(); + ts.setTabsVisible(false); + Label l = new Label("My Content", ContentMode.HTML); + Tab tab = ts.addTab(l); + tab.setCaption("My Tab"); + ts.setSelectedTab(tab); + testRead(design, ts); + testWrite(design, ts); + + } } \ No newline at end of file -- cgit v1.2.3 From 46dde5e088962d0a182c12ac1a45d70186cc12d0 Mon Sep 17 00:00:00 2001 From: Mika Murtojarvi Date: Tue, 2 Jun 2015 17:03:58 +0300 Subject: Update @since tag. Change-Id: I7b403d239168155a1530e82f280189d2f528a3fc --- shared/src/com/vaadin/shared/util/SharedUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/src/com/vaadin/shared/util/SharedUtil.java b/shared/src/com/vaadin/shared/util/SharedUtil.java index d363d767be..28c1ea3734 100644 --- a/shared/src/com/vaadin/shared/util/SharedUtil.java +++ b/shared/src/com/vaadin/shared/util/SharedUtil.java @@ -248,7 +248,7 @@ public class SharedUtil implements Serializable { * {@literal foo} becomes {@literal foo} {@literal foo-bar} becomes * {@literal fooBar} {@literal foo--bar} becomes {@literal fooBar} * - * @since + * @since 7.5 * @param dashSeparated * The dash separated string to convert * @return a camelCase version of the input string -- cgit v1.2.3 From 4724d89af9228edcb9bbff987255122841c6d33e Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Mon, 1 Jun 2015 16:58:28 +0300 Subject: Add screenshot comparison for DisabledMenuBarItemTest Change-Id: Ib4f9531da8b0ebb0b6294b5539bf7ab578a776b8 --- uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItem.java | 2 +- .../src/com/vaadin/tests/themes/base/DisabledMenuBarItemTest.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItem.java b/uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItem.java index 825f267ad3..16a822789a 100644 --- a/uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItem.java +++ b/uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItem.java @@ -12,7 +12,7 @@ public class DisabledMenuBarItem extends AbstractTestUI { MenuBar.MenuItem item = menubar.addItem("Item", null); item.setEnabled(false); - item.setIcon(new ThemeResource("just_a_placeholder.png")); + item.setIcon(new ThemeResource("common/icons/error.png")); addComponent(menubar); } diff --git a/uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItemTest.java b/uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItemTest.java index 0a10a7f38b..bec28d7929 100644 --- a/uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItemTest.java +++ b/uitest/src/com/vaadin/tests/themes/base/DisabledMenuBarItemTest.java @@ -3,6 +3,8 @@ package com.vaadin.tests.themes.base; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; +import java.io.IOException; + import org.junit.Test; import org.openqa.selenium.WebElement; @@ -13,7 +15,7 @@ import com.vaadin.tests.tb3.MultiBrowserTest; public class DisabledMenuBarItemTest extends MultiBrowserTest { @Test - public void disabledMenuItemShouldHaveOpacity() { + public void disabledMenuItemShouldHaveOpacity() throws IOException { openTestURL(); WebElement element = driver.findElement(By @@ -23,8 +25,9 @@ public class DisabledMenuBarItemTest extends MultiBrowserTest { if (browserIsIE8or9()) { assertThat(element.getCssValue("filter"), is("alpha(opacity=50)")); - } + + compareScreen("transparent"); } private boolean browserIsIE8or9() { -- cgit v1.2.3