Parcourir la source

ComboBox no longer displays input prompt if disabled or read-only (#10573)

Change-Id: I3e0ad83bc5ec4a98a0c8e7658dfb606c6c5dc191
tags/7.3.0.beta1
Teemu Pöntelin il y a 10 ans
Parent
révision
dc08a1c857

+ 1
- 1
client/src/com/vaadin/client/ui/VFilterSelect.java Voir le fichier

@@ -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();

+ 4
- 2
client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java Voir le fichier

@@ -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

+ 62
- 0
uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPrompt.java Voir le fichier

@@ -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;
}

}

+ 70
- 0
uitest/src/com/vaadin/tests/components/combobox/ComboBoxInputPromptTest.java Voir le fichier

@@ -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();
}

}

Chargement…
Annuler
Enregistrer