diff options
author | Teemu Suo-Anttila <tsuoanttila@users.noreply.github.com> | 2018-04-19 12:10:10 +0300 |
---|---|---|
committer | Ilia Motornyi <elmot@vaadin.com> | 2018-04-19 12:10:10 +0300 |
commit | f0bb6f4e35cb4ed3f01ea8cadb521e79d623870a (patch) | |
tree | e3928380bda2a04c412131344bfbc7de117444d3 /uitest | |
parent | 406473ab0b52d0fc4af2c97870e97993321c108f (diff) | |
download | vaadin-framework-f0bb6f4e35cb4ed3f01ea8cadb521e79d623870a.tar.gz vaadin-framework-f0bb6f4e35cb4ed3f01ea8cadb521e79d623870a.zip |
Fix AbstractSingleSelect selection and state updates (#10796)
Diffstat (limited to 'uitest')
3 files changed, 204 insertions, 24 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxCaptionAndIconUpdate.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxCaptionAndIconUpdate.java new file mode 100644 index 0000000000..7e1e200a71 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxCaptionAndIconUpdate.java @@ -0,0 +1,102 @@ +package com.vaadin.tests.components.combobox; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.ClassResource; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.ComboBox; + +@Widgetset("com.vaadin.DefaultWidgetSet") +public class ComboBoxCaptionAndIconUpdate extends AbstractTestUI { + + public static class Commit { + private final long id; + private String message; + private ClassResource icon; + + Commit(long id, String message, ClassResource icon) { + this.id = id; + this.message = message; + this.icon = icon; + } + + public long getId() { + return id; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public ClassResource getIcon() { + return icon; + } + + public void setIcon(ClassResource icon) { + this.icon = icon; + } + } + + List<Commit> backend = new ArrayList<>(); + + private final ClassResource M_RESOURCE = new ClassResource( + "/com/vaadin/tests/m.gif"); + private final ClassResource FI_RESOURCE = new ClassResource( + "/com/vaadin/tests/integration/fi.gif"); + + @Override + protected void setup(VaadinRequest request) { + ComboBox<Commit> comboBox = new ComboBox<Commit>(); + + backend = Stream.of(1, 2) + .map(id -> new Commit(id, "Commit ID " + id, M_RESOURCE)) + .collect(Collectors.toList()); + comboBox.setItems(backend); + comboBox.setValue(backend.get(0)); + + comboBox.setItemIconGenerator(i -> FI_RESOURCE); + comboBox.setItemCaptionGenerator(i -> "Commit " + i.getId()); + comboBox.setWidth("300px"); + + addComponent(comboBox); + addComponent(createButton("Set Icon Generator", "icon", + e -> comboBox.setItemIconGenerator(Commit::getIcon))); + addComponent(createButton("Set Caption Generator", "caption", + e -> comboBox.setItemCaptionGenerator(Commit::getMessage))); + addComponent(createButton("Edit Message", "editMsg", e -> { + Commit item = backend.get(0); + item.setMessage("Edited message"); + comboBox.getDataProvider().refreshItem(item); + })); + addComponent(createButton("Edit Icon", "editIcon", e -> { + Commit item = backend.get(0); + item.setIcon(FI_RESOURCE); + comboBox.getDataProvider().refreshItem(item); + })); + addComponent(createButton("Edit Message and Icon", "editAll", e -> { + Commit item = backend.get(0); + item.setMessage("Edited message and icon"); + item.setIcon(FI_RESOURCE); + comboBox.getDataProvider().refreshItem(item); + })); + } + + private Button createButton(String caption, String id, + ClickListener listener) { + Button button = new Button(caption, listener); + button.setId(id); + return button; + } + +} diff --git a/uitest/src/main/java/com/vaadin/tests/data/DummyData.java b/uitest/src/main/java/com/vaadin/tests/data/DummyData.java index b4ecfd38c7..8842aca1de 100644 --- a/uitest/src/main/java/com/vaadin/tests/data/DummyData.java +++ b/uitest/src/main/java/com/vaadin/tests/data/DummyData.java @@ -47,8 +47,6 @@ public class DummyData extends AbstractTestUIWithLog { public static class DummyComponent extends AbstractSingleSelect<String> implements HasDataProvider<String> { - private String selected; - private DummyComponent() { addDataGenerator((str, json) -> { json.put(DataCommunicatorConstants.DATA, str); @@ -59,22 +57,6 @@ public class DummyData extends AbstractTestUIWithLog { } @Override - public Optional<String> getSelectedItem() { - return Optional.ofNullable(selected); - } - - @Override - public void setValue(String item) { - if (selected != null) { - getDataCommunicator().refresh(selected); - } - selected = item; - if (selected != null) { - getDataCommunicator().refresh(selected); - } - } - - @Override public DataProvider<String, ?> getDataProvider() { return internalGetDataProvider(); } @@ -98,12 +80,10 @@ public class DummyData extends AbstractTestUIWithLog { HorizontalLayout controls = new HorizontalLayout(); addComponent(controls); - controls.addComponent( - new Button("Select Foo 20", - event -> dummy.setValue("Foo " + 20))); - controls.addComponent(new Button("Reset data provider", - event -> dummy - .setDataProvider(new LoggingDataProvider(items)))); + controls.addComponent(new Button("Select Foo 20", + event -> dummy.setValue("Foo " + 20))); + controls.addComponent(new Button("Reset data provider", event -> dummy + .setDataProvider(new LoggingDataProvider(items)))); controls.addComponent( new Button("Remove all data", event -> dummy.setDataProvider( new LoggingDataProvider(Collections.emptyList())))); diff --git a/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxCaptionAndIconUpdateTest.java b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxCaptionAndIconUpdateTest.java new file mode 100644 index 0000000000..5ef0fdf0fa --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxCaptionAndIconUpdateTest.java @@ -0,0 +1,98 @@ +package com.vaadin.tests.components.combobox; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.openqa.selenium.By; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.ComboBoxElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class ComboBoxCaptionAndIconUpdateTest extends SingleBrowserTest { + + @Test + public void testInitialData() { + openTestURL(); + + assertDisplayValues("fi.gif", "Commit 1"); + } + + @Test + public void testChangeIconProvider() { + openTestURL(); + changeIconGenerator(); + + assertDisplayValues("m.gif", "Commit 1"); + } + + @Test + public void testChangeCaptionProvider() { + openTestURL(); + changeCaptionGenerator(); + + assertDisplayValues("fi.gif", "Commit ID 1"); + } + + @Test + public void testItemAndCaptionProvider() { + openTestURL(); + changeCaptionGenerator(); + changeIconGenerator(); + + assertDisplayValues("m.gif", "Commit ID 1"); + } + + @Test + public void testEditCaption() { + openTestURL(); + changeIconGenerator(); + changeCaptionGenerator(); + + clickButton("editMsg"); + assertDisplayValues("m.gif", "Edited message"); + } + + @Test + public void testEditIcon() { + openTestURL(); + changeIconGenerator(); + changeCaptionGenerator(); + + clickButton("editIcon"); + assertDisplayValues("fi.gif", "Commit ID 1"); + } + + @Test + public void testEditIconAndCaption() { + openTestURL(); + changeIconGenerator(); + changeCaptionGenerator(); + + clickButton("editAll"); + assertDisplayValues("fi.gif", "Edited message and icon"); + + } + + private void assertDisplayValues(String iconName, String caption) { + ComboBoxElement comboBox = $(ComboBoxElement.class).first(); + String iconURL = comboBox.findElement(By.tagName("img")) + .getAttribute("src"); + assertTrue("Icon URL did not end with " + iconName, + iconURL.endsWith(iconName)); + assertEquals("Caption did not match", caption, comboBox.getValue()); + } + + private void changeIconGenerator() { + clickButton("icon"); + } + + private void changeCaptionGenerator() { + clickButton("caption"); + } + + private void clickButton(String id) { + $(ButtonElement.class).id(id).click(); + } +} |