Skip to content

Commit 913a2ba

Browse files
authoredDec 25, 2024
fix: retain selected value style after further customizations (CP: #9) (#12)
1 parent f490ae0 commit 913a2ba

File tree

4 files changed

+58
-2
lines changed

4 files changed

+58
-2
lines changed
 

‎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

+39-1
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;
@@ -19,6 +20,12 @@
1920

2021
public class ToggleButtonGroupIT extends AbstractViewTest {
2122

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

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

3847
WebElement pastaButton = groupButtons.get(0);
@@ -59,6 +68,8 @@ public void registeredValueChangeListener_IsCalledAccordingly() {
5968
@Test
6069
public void toggleableGroup_clearsSelection_whenSelectedOptionReClicked() {
6170
LabelElement selectedValueLabel = $(LabelElement.class).id("group15-selected-value");
71+
CustomFieldElement group15 = $(CustomFieldElement.class).id("group15");
72+
group15.scrollIntoView();
6273

6374
WebElement burgerButton = getGroupButtons("group15").get(2);
6475
burgerButton.click();
@@ -81,6 +92,8 @@ public void toggleableGroup_clearsSelection_whenSelectedOptionReClicked() {
8192
@Test
8293
public void notToggleableGroup_doesNotClearSelection_whenSelectedOptionReClicked() {
8394
LabelElement selectedValueLabel = $(LabelElement.class).id("group10-selected-value");
95+
CustomFieldElement group10 = $(CustomFieldElement.class).id("group10");
96+
group10.scrollIntoView();
8497

8598
WebElement burgerButton = getGroupButtons("group10").get(2);
8699
burgerButton.click();
@@ -100,6 +113,8 @@ public void notToggleableGroup_doesNotClearSelection_whenSelectedOptionReClicked
100113
public void notToggleableGroup_valueCanBeCleared_Programmatically() {
101114
LabelElement selectedValueLabel = $(LabelElement.class).id("group10-selected-value");
102115
Assert.assertEquals("", selectedValueLabel.getText());
116+
CustomFieldElement group10 = $(CustomFieldElement.class).id("group10");
117+
group10.scrollIntoView();
103118

104119
WebElement pastaButton = getGroupButtons("group10").get(0);
105120
pastaButton.click();
@@ -116,7 +131,7 @@ public void notToggleableGroup_valueCanBeCleared_Programmatically() {
116131
}
117132

118133
@Test
119-
public void widthFullGroup_hasWith100PercentStyle() {
134+
public void widthFullGroup_hasWidth100PercentStyle() {
120135
CustomFieldElement group20 = $(CustomFieldElement.class).id("group20");
121136
Assert.assertTrue(group20.getAttribute("style").contains("width: 100%"));
122137

@@ -129,6 +144,7 @@ public void widthFullGroup_hasWith100PercentStyle() {
129144
@Test
130145
public void group_withTooltip_tooltipOverlayIsShownWhenFocused() {
131146
CustomFieldElement group20 = $(CustomFieldElement.class).id("group20");
147+
group20.scrollIntoView();
132148
hoverOn(group20);
133149
Assert.assertTrue("Tooltip for group with id 'group20' should be visible.", isTooltipVisibleFor(group20));
134150
}
@@ -192,6 +208,8 @@ public void group_withItemTooltipTextGenerator_showsCorrespondentTooltips() {
192208

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

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