Skip to content

Commit b78270e

Browse files
committed
fix: retain selected value style after further customizations (#9)
1 parent fcafb21 commit b78270e

File tree

5 files changed

+59
-3
lines changed

5 files changed

+59
-3
lines changed

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,9 @@
246246
"@polymer/polymer": "$@polymer/polymer",
247247
"@vaadin/vaadin-themable-mixin": "$@vaadin/vaadin-themable-mixin",
248248
"date-fns": "$date-fns",
249-
"@vaadin/cookie-consent": "$@vaadin/cookie-consent",
250249
"@vaadin/a11y-base": "$@vaadin/a11y-base",
251250
"@vaadin/side-nav": "$@vaadin/side-nav",
252-
"mobile-drag-drop": "$mobile-drag-drop"
251+
"mobile-drag-drop": "$mobile-drag-drop",
252+
"@vaadin/cookie-consent": "$@vaadin/cookie-consent"
253253
}
254254
}

src/main/java/org/vaadin/addons/taefi/component/ToggleButtonGroup.java

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ private void init() {
9595
}
9696

9797
addButtonsToLayout(buttons);
98+
updateStyles(getValue(), getValue());
9899
}
99100

100101
protected void addButtonsToLayout(Button[] buttons) {

src/test/java/org/vaadin/addons/taefi/component/AbstractViewTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.openqa.selenium.By;
99
import org.openqa.selenium.WebElement;
1010
import org.openqa.selenium.chrome.ChromeDriver;
11+
import org.openqa.selenium.support.ui.ExpectedConditions;
1112

1213
import com.vaadin.flow.theme.AbstractTheme;
1314
import com.vaadin.testbench.ScreenshotOnFailureRule;
@@ -63,6 +64,10 @@ public void setup() throws Exception {
6364
getDriver().get(getURL(route));
6465
}
6566

67+
protected void waitForElementPresent(By by) {
68+
this.waitUntil(ExpectedConditions.presenceOfElementLocated(by));
69+
}
70+
6671
/**
6772
* Convenience method for getting the root element of the view based on
6873
* the selector passed to the constructor.

src/test/java/org/vaadin/addons/taefi/component/ToggleButtonGroupIT.java

+38
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.vaadin.flow.component.orderedlayout.testbench.VerticalLayoutElement;
88
import com.vaadin.testbench.TestBenchElement;
99
import org.junit.Assert;
10+
import org.junit.Before;
1011
import org.junit.Test;
1112
import org.openqa.selenium.By;
1213
import org.openqa.selenium.NoSuchElementException;
@@ -20,6 +21,12 @@
2021

2122
public class ToggleButtonGroupIT extends AbstractViewTest {
2223

24+
@Before
25+
public void setup() throws Exception {
26+
super.setup();
27+
waitForElementPresent(By.ById.id("group120"));
28+
}
29+
2330
@Test
2431
public void group_withLabelAddedToView_groupIsRendered_labelIsRendered() {
2532
CustomFieldElement group10 = $(CustomFieldElement.class).id("group10");
@@ -34,6 +41,8 @@ public void registeredValueChangeListener_IsCalledAccordingly() {
3441
NativeLabelElement selectedValueLabel = $(NativeLabelElement.class).id("group10-selected-value");
3542
Assert.assertEquals("", selectedValueLabel.getText());
3643

44+
CustomFieldElement group10 = $(CustomFieldElement.class).id("group10");
45+
group10.scrollIntoView();
3746
List<WebElement> groupButtons = getGroupButtons("group10");
3847

3948
WebElement pastaButton = groupButtons.get(0);
@@ -60,6 +69,8 @@ public void registeredValueChangeListener_IsCalledAccordingly() {
6069
@Test
6170
public void toggleableGroup_clearsSelection_whenSelectedOptionReClicked() {
6271
NativeLabelElement selectedValueLabel = $(NativeLabelElement.class).id("group15-selected-value");
72+
CustomFieldElement group15 = $(CustomFieldElement.class).id("group15");
73+
group15.scrollIntoView();
6374

6475
WebElement burgerButton = getGroupButtons("group15").get(2);
6576
burgerButton.click();
@@ -82,6 +93,8 @@ public void toggleableGroup_clearsSelection_whenSelectedOptionReClicked() {
8293
@Test
8394
public void notToggleableGroup_doesNotClearSelection_whenSelectedOptionReClicked() {
8495
NativeLabelElement selectedValueLabel = $(NativeLabelElement.class).id("group10-selected-value");
96+
CustomFieldElement group10 = $(CustomFieldElement.class).id("group10");
97+
group10.scrollIntoView();
8598

8699
WebElement burgerButton = getGroupButtons("group10").get(2);
87100
burgerButton.click();
@@ -101,6 +114,8 @@ public void notToggleableGroup_doesNotClearSelection_whenSelectedOptionReClicked
101114
public void notToggleableGroup_valueCanBeCleared_Programmatically() {
102115
NativeLabelElement selectedValueLabel = $(NativeLabelElement.class).id("group10-selected-value");
103116
Assert.assertEquals("", selectedValueLabel.getText());
117+
CustomFieldElement group10 = $(CustomFieldElement.class).id("group10");
118+
group10.scrollIntoView();
104119

105120
WebElement pastaButton = getGroupButtons("group10").get(0);
106121
pastaButton.click();
@@ -130,6 +145,7 @@ public void widthFullGroup_hasWidth100PercentStyle() {
130145
@Test
131146
public void group_withTooltip_tooltipOverlayIsShownWhenFocused() {
132147
CustomFieldElement group20 = $(CustomFieldElement.class).id("group20");
148+
group20.scrollIntoView();
133149
hoverOn(group20);
134150
Assert.assertTrue("Tooltip for group with id 'group20' should be visible.", isTooltipVisibleFor(group20));
135151
}
@@ -193,6 +209,8 @@ public void group_withItemTooltipTextGenerator_showsCorrespondentTooltips() {
193209

194210
@Test
195211
public void group_withEnabledSetToFalse_hasAllButtonsDisabled() {
212+
CustomFieldElement group60 = $(CustomFieldElement.class).id("group60");
213+
group60.scrollIntoView();
196214
List<WebElement> buttons = getGroupButtons("group60");
197215
buttons.forEach(button -> Assert.assertFalse(isButtonEnabled(button)));
198216
}
@@ -267,6 +285,26 @@ public void group_withVerticalOrientation_rendersItemsInVerticalLayout() {
267285
() -> group100.findElement(By.tagName("vaadin-horizontal-layout")));
268286
}
269287

288+
// https://github.com/taefi/toggle-button-group/issues/8
289+
@Test
290+
public void customizingGroupAfterSetValue_theStylesRemainInTact() {
291+
List<WebElement> buttons = getGroupButtons("group120");
292+
// customization after setting the value should not affect the selected item's style:
293+
Assert.assertEquals("primary", buttons.get(1).getAttribute("theme"));
294+
// customizing using setItemTooltipTextGenerator still works:
295+
hoverOn(buttons.get(0));
296+
Assert.assertEquals("Answer is yes",
297+
getTooltipFor(buttons.get(0))
298+
.map(TestBenchElement::getText)
299+
.orElse(""));
300+
301+
hoverOn(buttons.get(1));
302+
Assert.assertEquals("Answer is no",
303+
getTooltipFor(buttons.get(1))
304+
.map(TestBenchElement::getText)
305+
.orElse(""));
306+
}
307+
270308
private List<WebElement> getGroupButtons(String groupId) {
271309
CustomFieldElement group = $(CustomFieldElement.class).id(groupId);
272310
return group.getWrappedElement().findElements(By.tagName("vaadin-button"));

src/test/java/org/vaadin/addons/taefi/component/ToggleButtonGroupView.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,20 @@ public ToggleButtonGroupView() {
227227
});
228228
group110.setItemLabelGenerator(textAlignment -> "");
229229

230+
ToggleButtonGroup<Answer> group120 = new ToggleButtonGroup<>();
231+
group120.setId("group120");
232+
group120.setItems(List.of(Answer.values()));
233+
group120.setValue(Answer.NO);
234+
// adding the generator last appears to mess with the default selection
235+
group120.setItemTooltipTextGenerator(answer ->
236+
switch (answer) {
237+
case YES -> "Answer is yes";
238+
case NO -> "Answer is no";
239+
default -> throw new IllegalStateException("Unexpected value");
240+
}
241+
);
230242

231-
VerticalLayout halfLayout = new VerticalLayout(line10, line15, group20, group30, line40, line50, group60, group70, group80, line90, group100, group110);
243+
VerticalLayout halfLayout = new VerticalLayout(line10, line15, group20, group30, line40, line50, group60, group70, group80, line90, group100, group110, group120);
232244
halfLayout.setId("parent-layout");
233245
halfLayout.getStyle().set("width", "50%");
234246
halfLayout.getStyle().set("border", "solid red 1px");

0 commit comments

Comments
 (0)