]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed resetting of ComboBox if focused and new items allowed (#13413).
authorTapio Aali <tapio@vaadin.com>
Wed, 26 Mar 2014 09:09:23 +0000 (11:09 +0200)
committerVaadin Code Review <review@vaadin.com>
Mon, 14 Apr 2014 14:50:44 +0000 (14:50 +0000)
Change-Id: Ibea81666101ff119e1b3e48726224f369e59b00f

client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java
uitest/src/com/vaadin/tests/components/combobox/ComboBoxSetNullWhenNewItemsAllowed.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/combobox/ComboBoxSetNullWhenNewItemsAllowedTest.java [new file with mode: 0644]

index 8dec26cf90ae2bba70163caf3a7361320702eb45..c9c1d9c50c113d0c7cf32821b2c2a6438c37a399 100644 (file)
@@ -267,7 +267,9 @@ public class ComboBoxConnector extends AbstractFieldConnector implements
                 // we have focus in field, prompting can't be set on, instead
                 // just clear the input if the value has changed from something
                 // else to null
-                if (getWidget().selectedOptionKey != null) {
+                if (getWidget().selectedOptionKey != null
+                        || (getWidget().allowNewItem && !getWidget().tb
+                                .getValue().isEmpty())) {
                     getWidget().tb.setValue("");
                 }
             }
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxSetNullWhenNewItemsAllowed.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxSetNullWhenNewItemsAllowed.java
new file mode 100644 (file)
index 0000000..c0ac5cc
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2000-2013 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 com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.ComboBox;
+import com.vaadin.ui.Label;
+
+public class ComboBoxSetNullWhenNewItemsAllowed extends AbstractTestUI {
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        final ComboBox comboBox = new ComboBox("My ComboBox");
+        comboBox.setImmediate(true);
+        comboBox.setNullSelectionAllowed(false);
+        comboBox.setNewItemsAllowed(true);
+        for (int i = 0; i < 10; i++) {
+            comboBox.addItem("Item " + i);
+        }
+
+        final Label value = new Label("Selected: ");
+
+        comboBox.addValueChangeListener(new Property.ValueChangeListener() {
+            @Override
+            public void valueChange(ValueChangeEvent event) {
+                if (comboBox.getValue() != null) {
+                    comboBox.setValue(null);
+                    value.setValue("Selected: " + (String) comboBox.getValue());
+                }
+            }
+        });
+        addComponent(comboBox);
+        addComponent(value);
+    }
+
+    @Override
+    protected String getTestDescription() {
+        return "ComboBox should clear its value when setting to null with new items.";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 13413;
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxSetNullWhenNewItemsAllowedTest.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxSetNullWhenNewItemsAllowedTest.java
new file mode 100644 (file)
index 0000000..1794b98
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2000-2013 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 static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.commands.TestBenchElementCommands;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * ComboBox should clear its value when setting to null with new items.
+ */
+public class ComboBoxSetNullWhenNewItemsAllowedTest extends MultiBrowserTest {
+
+    @Test
+    public void testNewValueIsClearedAppropriately()
+            throws InterruptedException {
+        setDebug(true);
+        openTestURL();
+        Thread.sleep(1000);
+
+        WebElement element = findElement();
+        ((TestBenchElementCommands) element).click(8, 7);
+        element.clear();
+        element.sendKeys("New value");
+        assertEquals("New value", element.getAttribute("value"));
+        element.sendKeys(Keys.RETURN);
+        assertEquals("", element.getAttribute("value"));
+    }
+
+    private WebElement findElement() {
+        return getDriver()
+                .findElement(
+                        By.vaadin("runcomvaadintestscomponentscomboboxComboBoxSetNullWhenNewItemsAllowed::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VFilterSelect[0]#textbox"));
+    }
+
+}