Browse Source

Fix ComboBox in read-only mode allowing value change by user (#12022)

* Fix ComboBox in read-only mode allowing value change by user

Fixes #12021

* Fix popup hiding condition

Co-authored-by: Tatu Lund <tatu@vaadin.com>
tags/8.12.0.alpha1
Tarek Oraby 3 years ago
parent
commit
9c9991d887
No account linked to committer's email address

+ 3
- 0
client/src/main/java/com/vaadin/client/ui/VComboBox.java View File

@@ -2028,6 +2028,9 @@ public class VComboBox extends Composite implements Field, KeyDownHandler,

/** For internal use only. May be removed or replaced in the future. */
public void updateReadOnly() {
if (readonly) {
suggestionPopup.hide();
}
debug("VComboBox: updateReadOnly()");
tb.setReadOnly(readonly || !textInputEnabled);
}

+ 45
- 0
uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopup.java View File

@@ -0,0 +1,45 @@
package com.vaadin.tests.components.combobox;

import com.vaadin.event.ShortcutAction;
import com.vaadin.event.ShortcutListener;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractReindeerTestUI;
import com.vaadin.ui.ComboBox;

public class ComboBoxReadOnlyPopup extends AbstractReindeerTestUI {

static final String[] ITEMS = { "First", "Second", "Third" };

@Override
protected void setup(VaadinRequest request) {
String boxLabel = String
.format("Press 'Q' to toggle ComboBox's read-only mode");
final ComboBox<String> comboBox = new ComboBox<>(boxLabel);

comboBox.setItems(ITEMS);
comboBox.setSelectedItem(ITEMS[0]);

ShortcutListener shortcutListener = new ShortcutListener("", null,
ShortcutAction.KeyCode.Q) {
@Override
public void handleAction(Object sender, Object target) {
comboBox.setReadOnly(!comboBox.isReadOnly());
}
};
comboBox.addShortcutListener(shortcutListener);

addComponents(comboBox);
}

@Override
protected String getTestDescription() {
return "ComboBox that turns to read-only mode while expanded "
+ "should have its popup set to hidden.";
}

@Override
protected Integer getTicketNumber() {
return 12021;
}

}

+ 26
- 0
uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxReadOnlyPopupTest.java View File

@@ -0,0 +1,26 @@
package com.vaadin.tests.components.combobox;

import static org.junit.Assert.assertFalse;

import org.junit.Test;

import com.vaadin.testbench.elements.ComboBoxElement;
import com.vaadin.tests.tb3.MultiBrowserTest;

public class ComboBoxReadOnlyPopupTest extends MultiBrowserTest {

@Test
public void expandedComboBoxSetToReadOnlyShouldHidePopup() {
openTestURL();

ComboBoxElement comboBox = $(ComboBoxElement.class).first();
comboBox.openPopup();

// Calls comboBox.setReadOnly(true);
comboBox.sendKeys(String.valueOf('q'));

assertFalse("Read-only ComboBox's popup should be hidden!",
comboBox.isPopupOpen());
}

}

Loading…
Cancel
Save