Change-Id: I3a9c887196b503eaa8c2307d7a714ce61e6deacctags/8.0.0.alpha4
@@ -229,7 +229,8 @@ public class VRadioButtonGroup extends Composite implements Field, ClickHandler, | |||
public void selectItemKey(String selectedItemKey) { | |||
RadioButton radioButton = keyToOptions.get(selectedItemKey); | |||
assert radioButton != null; | |||
radioButton.setValue(true); | |||
if(radioButton!=null) {//Items might not be loaded yet | |||
radioButton.setValue(true); | |||
} | |||
} | |||
} |
@@ -169,7 +169,7 @@ public class RadioButtonGroup<T> extends AbstractSingleSelect<T> { | |||
* Returns the item icon generator. | |||
* | |||
* @return the currently set icon generator | |||
* @see #setItemIconProvider | |||
* @see #setItemIconGenerator | |||
* @see IconGenerator | |||
*/ | |||
public IconGenerator<T> getItemIconGenerator() { | |||
@@ -179,8 +179,8 @@ public class RadioButtonGroup<T> extends AbstractSingleSelect<T> { | |||
/** | |||
* Sets the item icon generator for this radiobutton group. The icon | |||
* generator is queried for each item to optionally display an icon next to | |||
* the item caption. If the provider returns null for an item, no icon is | |||
* displayed. The default provider always returns null (no icons). | |||
* the item caption. If the generator returns null for an item, no icon is | |||
* displayed. The default generator always returns null (no icons). | |||
* | |||
* @param itemIconGenerator | |||
* the icon generator, not null |
@@ -15,14 +15,15 @@ | |||
*/ | |||
package com.vaadin.tests.components.radiobutton; | |||
import java.util.LinkedHashMap; | |||
import java.util.stream.IntStream; | |||
import com.vaadin.server.FontAwesome; | |||
import com.vaadin.shared.data.selection.SelectionModel; | |||
import com.vaadin.tests.components.abstractlisting.AbstractListingTestUI; | |||
import com.vaadin.ui.ItemCaptionGenerator; | |||
import com.vaadin.ui.RadioButtonGroup; | |||
import java.util.LinkedHashMap; | |||
import java.util.stream.IntStream; | |||
/** | |||
* Test UI for RadioButtonGroup component | |||
* | |||
@@ -44,7 +45,8 @@ public class RadioButtonGroupTestUI | |||
super.createActions(); | |||
createListenerMenu(); | |||
createSelectionMenu(); | |||
createItemGeneratorMenu(); | |||
createItemIconGeneratorMenu(); | |||
createItemCaptionGeneratorMenu(); | |||
} | |||
protected void createSelectionMenu() { | |||
@@ -60,15 +62,30 @@ public class RadioButtonGroupTestUI | |||
.forEach(item -> createClickAction("Toggle " + item, | |||
selectionCategory, toggleSelection, item)); | |||
} | |||
private void createItemIconGeneratorMenu() { | |||
createBooleanAction("Use Item Icon Generator", "Item Icon Generator", false, | |||
this::useItemIconGenerator); | |||
} | |||
private void createItemGeneratorMenu() { | |||
private void useItemIconGenerator(RadioButtonGroup<Object> group, | |||
boolean activate, Object data) { | |||
if (activate) { | |||
group.setItemIconGenerator( | |||
item -> FontAwesome.values()[getIndex(item) + 1]); | |||
} else { | |||
group.setItemIconGenerator(item -> null); | |||
} | |||
group.getDataSource().refreshAll(); | |||
} | |||
private void createItemCaptionGeneratorMenu() { | |||
LinkedHashMap<String, ItemCaptionGenerator<Object>> options = new LinkedHashMap<>(); | |||
options.put("Null Caption Generator", item -> null); | |||
options.put("Default Caption Generator", item -> item.toString()); | |||
options.put("Custom Caption Generator", | |||
item -> item.toString() + " Caption"); | |||
createSelectAction("Item Caption Generator", "Item Generator", options, | |||
createSelectAction("Item Caption Generator", "Item Caption Generator", options, | |||
"None", (radioButtonGroup, captionGenerator, data) -> { | |||
radioButtonGroup.setItemCaptionGenerator(captionGenerator); | |||
radioButtonGroup.getDataSource().refreshAll(); | |||
@@ -91,4 +108,22 @@ public class RadioButtonGroupTestUI | |||
e -> log("Selected: " + e.getSelectedItem()))); | |||
} | |||
private int getIndex(Object item) { | |||
int index = item.toString().indexOf(' '); | |||
if (index < 0) { | |||
return 0; | |||
} | |||
String postfix = item.toString().substring(index + 1); | |||
index = postfix.indexOf(' '); | |||
if (index >= 0) { | |||
postfix = postfix.substring(0, index); | |||
} | |||
try { | |||
return Integer.parseInt(postfix); | |||
} catch (NumberFormatException e) { | |||
return 0; | |||
} | |||
} | |||
} |
@@ -15,17 +15,20 @@ | |||
*/ | |||
package com.vaadin.tests.components.radiobutton; | |||
import static org.junit.Assert.assertEquals; | |||
import java.util.Arrays; | |||
import com.vaadin.server.FontAwesome; | |||
import com.vaadin.testbench.By; | |||
import com.vaadin.testbench.customelements.RadioButtonGroupElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
import org.junit.Assert; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
import org.openqa.selenium.By; | |||
import org.openqa.selenium.WebElement; | |||
import com.vaadin.testbench.customelements.RadioButtonGroupElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertTrue; | |||
/** | |||
* Test for RadioButtonGroup | |||
@@ -92,6 +95,23 @@ public class RadioButtonGroupTest extends MultiBrowserTest { | |||
Assert.assertEquals(lastLogRow, getLogRow(0)); | |||
} | |||
@Test | |||
public void itemIconGenerator() { | |||
selectMenuPath("Component", "Item Icon Generator", "Use Item Icon Generator"); | |||
assertItemsSuffices(20); | |||
List<WebElement> icons = getSelect().findElements(By. | |||
cssSelector(".v-select-optiongroup .v-icon")); | |||
assertEquals(20,icons.size()); | |||
for (int i = 0; i < icons.size(); i++) { | |||
Assert.assertEquals(FontAwesome.values()[i + 1].getCodepoint(), | |||
icons.get(i).getText().charAt(0)); | |||
} | |||
} | |||
@Test | |||
public void clickToSelect_reenable() { | |||
selectMenuPath("Component", "State", "Enabled"); | |||
@@ -113,14 +133,14 @@ public class RadioButtonGroupTest extends MultiBrowserTest { | |||
@Test | |||
public void itemCaptionGenerator() { | |||
selectMenuPath("Component", "Item Generator", "Item Caption Generator", | |||
selectMenuPath("Component", "Item Caption Generator", "Item Caption Generator", | |||
"Custom Caption Generator"); | |||
assertItems(20, " Caption"); | |||
} | |||
@Test | |||
public void nullItemCaptionGenerator() { | |||
selectMenuPath("Component", "Item Generator", "Item Caption Generator", | |||
selectMenuPath("Component", "Item Caption Generator", "Item Caption Generator", | |||
"Null Caption Generator"); | |||
for (String text : getSelect().getOptions()) { | |||
Assert.assertEquals("", text); | |||
@@ -171,4 +191,13 @@ public class RadioButtonGroupTest extends MultiBrowserTest { | |||
} | |||
assertEquals("Number of items", count, i); | |||
} | |||
protected void assertItemsSuffices(int count) { | |||
int i = 0; | |||
for (String text : getSelect().getOptions()) { | |||
assertTrue(text.endsWith("Item " + i)); | |||
i++; | |||
} | |||
assertEquals("Number of items", count, i); | |||
} | |||
} |