From dc08a1c857d75e964a47842f4a2a9538878457b9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Teemu=20Po=CC=88ntelin?= Date: Fri, 13 Jun 2014 18:07:48 +0300 Subject: [PATCH] ComboBox no longer displays input prompt if disabled or read-only (#10573) Change-Id: I3e0ad83bc5ec4a98a0c8e7658dfb606c6c5dc191 --- .../com/vaadin/client/ui/VFilterSelect.java | 2 +- .../client/ui/combobox/ComboBoxConnector.java | 6 +- .../combobox/ComboBoxInputPrompt.java | 62 ++++++++++++++++ .../combobox/ComboBoxInputPromptTest.java | 70 +++++++++++++++++++ 4 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPrompt.java create mode 100644 uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPromptTest.java diff --git a/client/src/com/vaadin/client/ui/VFilterSelect.java b/client/src/com/vaadin/client/ui/VFilterSelect.java index a1de2c2b6d..d4e76e07a6 100644 --- a/client/src/com/vaadin/client/ui/VFilterSelect.java +++ b/client/src/com/vaadin/client/ui/VFilterSelect.java @@ -1716,7 +1716,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, setPromptingOff(text); selectedOptionKey = currentSuggestion.key; } else { - if (focused) { + if (focused || readonly || !enabled) { setPromptingOff(""); } else { setPromptingOn(); diff --git a/client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java b/client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java index c3cdb43703..2e64fcba46 100644 --- a/client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java +++ b/client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java @@ -303,8 +303,10 @@ public class ComboBoxConnector extends AbstractFieldConnector implements * ALWAYS set the prompting style at this point, even though we * think it has been set already... */ - getWidget().prompting = false; - getWidget().setPromptingOn(); + getWidget().setPromptingOff(""); + if (getWidget().enabled && !getWidget().readonly) { + getWidget().setPromptingOn(); + } } else { // we have focus in field, prompting can't be set on, instead // just clear the input if the value has changed from something diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPrompt.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPrompt.java new file mode 100644 index 0000000000..082aca6989 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPrompt.java @@ -0,0 +1,62 @@ +/* + * 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 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.ComboBox; + +public class ComboBoxInputPrompt extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + final ComboBox cb1 = new ComboBox("Normal"); + cb1.setInputPrompt("Normal input prompt"); + + final ComboBox cb2 = new ComboBox("Disabled"); + cb2.setEnabled(false); + cb2.setInputPrompt("Disabled input prompt"); + + final ComboBox cb3 = new ComboBox("Read-only"); + cb3.setReadOnly(true); + cb3.setInputPrompt("Read-only input prompt"); + + Button enableButton = new Button("Toggle enabled", + new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + cb2.setEnabled(!cb2.isEnabled()); + cb3.setReadOnly(!cb3.isReadOnly()); + } + }); + + addComponents(cb1, cb2, cb3, enableButton); + } + + @Override + protected String getTestDescription() { + return "ComboBox should not display the input prompt if disabled or read-only."; + } + + @Override + protected Integer getTicketNumber() { + return 10573; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPromptTest.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPromptTest.java new file mode 100644 index 0000000000..96151022ff --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPromptTest.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.combobox; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; +import static org.junit.Assert.assertEquals; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.ComboBoxElement; +import com.vaadin.testbench.elements.TextFieldElement; +import com.vaadin.tests.tb3.AbstractTB3Test; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class ComboBoxInputPromptTest extends MultiBrowserTest { + + @Test + public void promptIsHiddenForDisabledAndReadonly() { + openTestURL(); + + ComboBoxElement normalComboBox = getComboBoxWithCaption("Normal"); + ComboBoxElement disabledComboBox = getComboBoxWithCaption("Disabled"); + ComboBoxElement readOnlyComboBox = getComboBoxWithCaption("Read-only"); + + assertThat(getInputPromptValue(normalComboBox), is("Normal input prompt")); + assertThat(getInputPromptValue(disabledComboBox), isEmptyString()); + assertThat(getInputPromptValue(readOnlyComboBox), isEmptyString()); + + toggleDisabledAndReadonly(); + assertThat(getInputPromptValue(disabledComboBox), is("Disabled input prompt")); + assertThat(getInputPromptValue(readOnlyComboBox), is("Read-only input prompt")); + + toggleDisabledAndReadonly(); + assertThat(getInputPromptValue(disabledComboBox), isEmptyString()); + assertThat(getInputPromptValue(readOnlyComboBox), isEmptyString()); + } + + private void toggleDisabledAndReadonly() { + $(ButtonElement.class).first().click(); + } + + private String getInputPromptValue(ComboBoxElement comboBox) { + WebElement input = comboBox.findElement(By.tagName("input")); + + return input.getAttribute("value"); + } + + private ComboBoxElement getComboBoxWithCaption(String caption) { + return $(ComboBoxElement.class).caption(caption).first(); + } + +} -- 2.39.5