aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VRadioButtonGroup.java42
-rw-r--r--client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java1
-rw-r--r--testbench-api/src/main/java/com/vaadin/testbench/elements/RadioButtonGroupElement.java10
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupItemDisabled.java21
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupItemDisabled.java21
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupItemDisabledTest.java46
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupItemDisabledTest.java31
7 files changed, 155 insertions, 17 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/VRadioButtonGroup.java b/client/src/main/java/com/vaadin/client/ui/VRadioButtonGroup.java
index 479e41a9b5..30335fd975 100644
--- a/client/src/main/java/com/vaadin/client/ui/VRadioButtonGroup.java
+++ b/client/src/main/java/com/vaadin/client/ui/VRadioButtonGroup.java
@@ -139,6 +139,13 @@ public class VRadioButtonGroup extends FocusableFlowPanelComposite
private void updateItem(RadioButton button, JsonObject item,
boolean requireInitialization) {
+ if (requireInitialization) {
+ getWidget().add(button);
+ button.setStyleName("v-radiobutton");
+ button.addStyleName(CLASSNAME_OPTION);
+ button.addClickHandler(this);
+ }
+
String itemHtml = item
.getString(ListingJsonConstants.JSONKEY_ITEM_VALUE);
if (!isHtmlContentAllowed()) {
@@ -154,22 +161,12 @@ public class VRadioButtonGroup extends FocusableFlowPanelComposite
button.setHTML(itemHtml);
boolean optionEnabled = !item
.getBoolean(ListingJsonConstants.JSONKEY_ITEM_DISABLED);
- boolean enabled = optionEnabled && !isReadonly() && isEnabled();
- button.setEnabled(enabled);
- // #9258 apply the v-disabled class when disabled for UX
- button.setStyleName(StyleConstants.DISABLED,
- !isEnabled() || !optionEnabled);
+ updateItemEnabled(button, optionEnabled);
updateItemSelection(button,
item.getBoolean(ListingJsonConstants.JSONKEY_ITEM_SELECTED));
String key = item.getString(DataCommunicatorConstants.KEY);
- if (requireInitialization) {
- getWidget().add(button);
- button.setStyleName("v-radiobutton");
- button.addStyleName(CLASSNAME_OPTION);
- button.addClickHandler(this);
- }
optionsToItems.put(button, item);
keyToOptions.put(key, button);
}
@@ -205,7 +202,6 @@ public class VRadioButtonGroup extends FocusableFlowPanelComposite
}
protected void updateEnabledState() {
- boolean radioButtonEnabled = isEnabled() && !isReadonly();
// sets options enabled according to the widget's enabled,
// readonly and each options own enabled
for (Map.Entry<RadioButton, JsonObject> entry : optionsToItems
@@ -214,10 +210,7 @@ public class VRadioButtonGroup extends FocusableFlowPanelComposite
JsonObject value = entry.getValue();
boolean optionEnabled = !value
.getBoolean(ListingJsonConstants.JSONKEY_ITEM_DISABLED);
- radioButton.setEnabled(radioButtonEnabled && optionEnabled);
- // #9258 apply the v-disabled class when disabled for UX
- radioButton.setStyleName(StyleConstants.DISABLED,
- !isEnabled() || !optionEnabled);
+ updateItemEnabled(radioButton, optionEnabled);
}
}
@@ -305,6 +298,23 @@ public class VRadioButtonGroup extends FocusableFlowPanelComposite
protected void updateItemSelection(RadioButton radioButton, boolean value) {
radioButton.setValue(value);
radioButton.setStyleName(CLASSNAME_OPTION_SELECTED, value);
+ }
+ /**
+ * Updates the enabled state of a radio button.
+ *
+ * @param radioButton
+ * the radio button to update
+ * @param value
+ * {@code true} if enabled; {@code false} if not
+ *
+ * @since
+ */
+ protected void updateItemEnabled(RadioButton radioButton, boolean value) {
+ boolean enabled = value && !isReadonly() && isEnabled();
+ radioButton.setEnabled(enabled);
+ // #9258 apply the v-disabled class when disabled for UX
+ boolean hasDisabledStyle = !isEnabled() || !value;
+ radioButton.setStyleName(StyleConstants.DISABLED, hasDisabledStyle);
}
}
diff --git a/client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java b/client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java
index ca008d0087..0af2d1f487 100644
--- a/client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java
+++ b/client/src/main/java/com/vaadin/client/ui/optiongroup/RadioButtonGroupConnector.java
@@ -85,7 +85,6 @@ public class RadioButtonGroupConnector
}
@OnStateChange("readOnly")
- @SuppressWarnings("deprecation")
void updateWidgetReadOnly() {
getWidget().setEnabled(isEnabled() && !isReadOnly());
}
diff --git a/testbench-api/src/main/java/com/vaadin/testbench/elements/RadioButtonGroupElement.java b/testbench-api/src/main/java/com/vaadin/testbench/elements/RadioButtonGroupElement.java
index 30952c1e00..67df824fbd 100644
--- a/testbench-api/src/main/java/com/vaadin/testbench/elements/RadioButtonGroupElement.java
+++ b/testbench-api/src/main/java/com/vaadin/testbench/elements/RadioButtonGroupElement.java
@@ -41,6 +41,16 @@ public class RadioButtonGroupElement extends AbstractSingleSelectElement {
return optionTexts;
}
+ /**
+ * Gets the list of option elements for this check box group.
+ *
+ * @return list of option elements
+ * @since
+ */
+ public List<WebElement> getOptionElements() {
+ return findElements(bySelectOption);
+ }
+
public void selectByText(String text) throws ReadOnlyException {
if (isReadOnly()) {
throw new ReadOnlyException();
diff --git a/uitest/src/main/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupItemDisabled.java b/uitest/src/main/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupItemDisabled.java
new file mode 100644
index 0000000000..d929b438ad
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupItemDisabled.java
@@ -0,0 +1,21 @@
+package com.vaadin.tests.components.checkboxgroup;
+
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.SerializablePredicate;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.CheckBoxGroup;
+
+@Widgetset("com.vaadin.DefaultWidgetSet")
+public class CheckBoxGroupItemDisabled extends AbstractTestUI {
+
+ public static final SerializablePredicate<Integer> ENABLED_PROVIDER = i -> i != 3;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ CheckBoxGroup<Integer> cbg = new CheckBoxGroup<>();
+ cbg.setItems(1, 2, 3, 4);
+ cbg.setItemEnabledProvider(ENABLED_PROVIDER);
+ addComponent(cbg);
+ }
+}
diff --git a/uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupItemDisabled.java b/uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupItemDisabled.java
new file mode 100644
index 0000000000..5a3a4674e4
--- /dev/null
+++ b/uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupItemDisabled.java
@@ -0,0 +1,21 @@
+package com.vaadin.tests.components.radiobuttongroup;
+
+import com.vaadin.annotations.Widgetset;
+import com.vaadin.server.SerializablePredicate;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.RadioButtonGroup;
+
+@Widgetset("com.vaadin.DefaultWidgetSet")
+public class RadioButtonGroupItemDisabled extends AbstractTestUI {
+
+ public static final SerializablePredicate<Integer> ENABLED_PROVIDER = i -> i != 3;
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ RadioButtonGroup<Integer> rbg = new RadioButtonGroup<>();
+ rbg.setItems(1, 2, 3, 4);
+ rbg.setItemEnabledProvider(ENABLED_PROVIDER);
+ addComponent(rbg);
+ }
+} \ No newline at end of file
diff --git a/uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupItemDisabledTest.java b/uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupItemDisabledTest.java
new file mode 100644
index 0000000000..979b8deea9
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupItemDisabledTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2000-2016 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.checkboxgroup;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.CheckBoxGroupElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class CheckBoxGroupItemDisabledTest extends MultiBrowserTest {
+
+ @Test
+ public void itemDisabledOnInit() {
+ openTestURL();
+ List<WebElement> options = $(CheckBoxGroupElement.class).first()
+ .getOptionElements();
+ options.stream().forEach(option -> {
+ Integer value = Integer.parseInt(option.getText());
+ boolean disabled = !CheckBoxGroupItemDisabled.ENABLED_PROVIDER
+ .test(value);
+ assertEquals(
+ "Unexpected status of v-disabled stylename for item "
+ + value,
+ disabled,
+ option.getAttribute("class").contains("v-disabled"));
+ });
+ }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupItemDisabledTest.java b/uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupItemDisabledTest.java
new file mode 100644
index 0000000000..a56662f984
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupItemDisabledTest.java
@@ -0,0 +1,31 @@
+package com.vaadin.tests.components.radiobuttongroup;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.RadioButtonGroupElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class RadioButtonGroupItemDisabledTest extends MultiBrowserTest {
+
+ @Test
+ public void itemDisabledOnInit() {
+ openTestURL();
+ List<WebElement> options = $(RadioButtonGroupElement.class).first()
+ .getOptionElements();
+ options.stream().forEach(option -> {
+ Integer value = Integer.parseInt(option.getText());
+ boolean disabled = !RadioButtonGroupItemDisabled.ENABLED_PROVIDER
+ .test(value);
+ assertEquals(
+ "Unexpected status of v-disabled stylename for item "
+ + value,
+ disabled,
+ option.getAttribute("class").contains("v-disabled"));
+ });
+ }
+}