diff options
author | Anna Koskinen <Ansku@users.noreply.github.com> | 2018-03-08 14:04:54 +0200 |
---|---|---|
committer | Teemu Suo-Anttila <tsuoanttila@users.noreply.github.com> | 2018-03-08 14:04:54 +0200 |
commit | ead24c18282f793231c4ef5015851731693153a8 (patch) | |
tree | 80b7000a61d6df473a9c13797c6e508cd989525b | |
parent | 9c54c201a3baa215857c97394c3d331b0cd7e993 (diff) | |
download | vaadin-framework-ead24c18282f793231c4ef5015851731693153a8.tar.gz vaadin-framework-ead24c18282f793231c4ef5015851731693153a8.zip |
Clear VComboBox selection fields when updated on server (#10692)
Fixes #10660
3 files changed, 130 insertions, 0 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java b/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java index 544f041770..21b4c0b02f 100644 --- a/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java @@ -126,6 +126,10 @@ public class ComboBoxConnector extends AbstractListingConnector @OnStateChange({ "selectedItemKey", "selectedItemCaption", "selectedItemIcon" }) private void onSelectionChange() { + if (getWidget().selectedOptionKey != getState().selectedItemKey) { + getWidget().selectedOptionKey = null; + getWidget().currentSuggestion = null; + } getDataReceivedHandler().updateSelectionFromServer( getState().selectedItemKey, getState().selectedItemCaption, getState().selectedItemIcon); diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxMixedUpdate.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxMixedUpdate.java new file mode 100644 index 0000000000..04957162b0 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxMixedUpdate.java @@ -0,0 +1,75 @@ +package com.vaadin.tests.components.combobox; + +import java.util.Arrays; + +import com.vaadin.data.Binder; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.ui.Button; +import com.vaadin.ui.ComboBox; +import com.vaadin.ui.HorizontalLayout; + +public class ComboBoxMixedUpdate extends AbstractTestUIWithLog { + + private Pojo pojo; + + @Override + protected void setup(VaadinRequest request) { + Binder<Pojo> binder = new Binder<>(); + ComboBox<Integer> numbers = new ComboBox<>(); + numbers.setItems(Arrays.asList(0, 1, 2, 3)); + binder.forField(numbers).bind(Pojo::getNumber, Pojo::setNumber); + + pojo = new Pojo(1); + binder.setBean(pojo); + + Button reset = new Button("reset"); + reset.setId("reset"); + reset.addClickListener(e -> { + pojo.setNumber(0); + // refresh binder + binder.readBean(pojo); + }); + + Button show = new Button("show values"); + show.setId("show"); + show.addClickListener(e -> { + log("Bean value = " + pojo.getNumber() + " - ComboBox value = " + + numbers.getValue()); + }); + + HorizontalLayout buttons = new HorizontalLayout(numbers, show, reset); + + getLayout().addComponents(buttons); + } + + @Override + protected String getTestDescription() { + return "1: Write not null value (1-3) that differs from previous selection and TAB out -- don't select from drop down" + + "<br>2: Click the 'show values' button to confirm both ComboBox and bean values were updated" + + "<br>3: Click the 'reset' button (both ComboBox and bean values should go to 0)" + + "<br>4: Re-focus ComboBox, write the previous value and TAB out -- don't select from drop down" + + "<br>5: Both ComboBox and bean values should have the written value, not 0."; + } + + @Override + protected Integer getTicketNumber() { + return 10660; + } + + public class Pojo { + int number; + + public Pojo(int number) { + this.number = number; + } + + public int getNumber() { + return number; + } + + public void setNumber(int number) { + this.number = number; + } + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxMixedUpdateTest.java b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxMixedUpdateTest.java new file mode 100644 index 0000000000..8644f829e3 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxMixedUpdateTest.java @@ -0,0 +1,51 @@ +package com.vaadin.tests.components.combobox; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.openqa.selenium.Keys; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.testbench.By; +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.ComboBoxElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class ComboBoxMixedUpdateTest extends MultiBrowserTest { + + private ComboBoxElement comboBox; + private ButtonElement reset; + private ButtonElement show; + + @Override + public void setup() throws Exception { + super.setup(); + + openTestURL(); + waitForElementPresent(By.className("v-filterselect")); + comboBox = $(ComboBoxElement.class).first(); + reset = $(ButtonElement.class).id("reset"); + show = $(ButtonElement.class).id("show"); + } + + private void sendKeysToInput(CharSequence... keys) { + comboBox.clear(); + // ensure mouse is located over the ComboBox to avoid hover issues + new Actions(getDriver()).moveToElement(comboBox).perform(); + comboBox.sendKeys(keys); + } + + @Test + public void testMixedUpdateWorks() { + comboBox.focus(); + sendKeysToInput("2", Keys.TAB); + show.click(); + assertEquals("1. Bean value = 2 - ComboBox value = 2", getLogRow(0)); + reset.click(); + show.click(); + assertEquals("2. Bean value = 0 - ComboBox value = 0", getLogRow(0)); + sendKeysToInput("2", Keys.TAB); + show.click(); + assertEquals("3. Bean value = 2 - ComboBox value = 2", getLogRow(0)); + } +} |