]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixing RadioButtonGroup exception in Window (#11181)
authorMehdi Javan <32511762+mehdi-vaadin@users.noreply.github.com>
Mon, 17 Sep 2018 13:17:28 +0000 (16:17 +0300)
committerSun Zhe <31067185+ZheSun88@users.noreply.github.com>
Mon, 17 Sep 2018 13:17:28 +0000 (16:17 +0300)
* discardStaleCacheEntries is moved to a proper place before updating indexToRowMap and keyToIndexMap maps. In its previous place, it cleared the data that was just put in the maps.
Fixes #11143

* Adding test

* Removing extra annotations

* Updating chrome version to 69 in tests (#11182)

* Updating Chrome version to 69

* Updating screenshots taken in Chrome 69

* Fixing screenshots

* Fixing screenshots

* Adding some wait commands to tests

* Fixing screenshots

* Revert: Fixing screenshots

* More screenshots

* - Adding wait commands to make sure the transitions end before screenshot
- Fixing a screenshot

* Correcting a mistake of using wait instead of sleep

* Fixing more screenshots

* Increasing the height of ContextMenu (Because of limitation of new Chrome 69 in terms of minimum window height, ContextMenu size can't be tested with a small height.)

client/src/main/java/com/vaadin/client/data/AbstractRemoteDataSource.java
uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupInWindow.java [new file with mode: 0644]
uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupInWindowTest.java [new file with mode: 0644]

index 139612517e6cb6c7942c58599cc02e919472d73c..7a52b0ef9545a46619c3f2695440d2e361993a93 100644 (file)
@@ -496,6 +496,9 @@ public abstract class AbstractRemoteDataSource<T> implements DataSource<T> {
 
         Range newUsefulData = partition[1];
         if (!newUsefulData.isEmpty()) {
+            if (!cached.isEmpty())
+                discardStaleCacheEntries();
+
             // Update the parts that are actually inside
             int start = newUsefulData.getStart();
             for (int i = start; i < newUsefulData.getEnd(); i++) {
@@ -515,7 +518,6 @@ public abstract class AbstractRemoteDataSource<T> implements DataSource<T> {
             if (cached.isEmpty()) {
                 cached = newUsefulData;
             } else {
-                discardStaleCacheEntries();
 
                 /*
                  * everything might've become stale so we need to re-check for
diff --git a/uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupInWindow.java b/uitest/src/main/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupInWindow.java
new file mode 100644 (file)
index 0000000..d8b3c43
--- /dev/null
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.radiobuttongroup;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.RadioButtonGroup;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+
+public class RadioButtonGroupInWindow extends AbstractTestUI {
+    public static final String DEFAULT_DAY_TEXT_FIELD_ID = "defaultDay";
+    public static final String OPEN_WINDOW_BUTTON_ID = "openWindowButton";
+    public static final String WEEK_DAYS_RADIO_BUTTON_GROUP_ID = "weekDaysRadioButtonGroup";
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        String[] weekdays = { "Monday", "Tuesday", "Wednesday", "Thursday",
+                "Friday", "Saturday", "Sunday" };
+        final VerticalLayout layout = new VerticalLayout();
+        final RadioButtonGroup<String> radioButtonGroup = new RadioButtonGroup<>();
+        radioButtonGroup.setId(WEEK_DAYS_RADIO_BUTTON_GROUP_ID);
+        radioButtonGroup.setItems(weekdays);
+
+        Window selectDayWindow = new Window("Select day window");
+        selectDayWindow.setWidth("500px");
+        selectDayWindow.setHeight("500px");
+        VerticalLayout verticalLayout = new VerticalLayout(radioButtonGroup);
+        selectDayWindow.setContent(verticalLayout);
+        selectDayWindow.setModal(true);
+
+        final TextField defaultDay = new TextField("Default day");
+        defaultDay.setId(DEFAULT_DAY_TEXT_FIELD_ID);
+        defaultDay.setValue(weekdays[3]);
+        layout.addComponent(defaultDay);
+
+        final UI ui = getUI();
+        Button openWindowButton = new Button("Select a day", event -> {
+            radioButtonGroup.setValue(defaultDay.getValue());
+            ui.addWindow(selectDayWindow);
+        });
+        openWindowButton.setId(OPEN_WINDOW_BUTTON_ID);
+        layout.addComponents(openWindowButton);
+
+        addComponent(layout);
+    }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupInWindowTest.java b/uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupInWindowTest.java
new file mode 100644 (file)
index 0000000..cdf13e8
--- /dev/null
@@ -0,0 +1,45 @@
+package com.vaadin.tests.components.radiobuttongroup;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.RadioButtonGroupElement;
+import com.vaadin.testbench.elements.TextFieldElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class RadioButtonGroupInWindowTest extends MultiBrowserTest {
+    @Test
+    public void radioButtonGroup_setFirstItemInWindow_valueShouldBeSet() {
+        testSetDayInRadioButtonGroup("Monday");
+    }
+
+    @Test
+    public void radioButtonGroup_setLastItemInWindow_valueShouldBeSet() {
+        testSetDayInRadioButtonGroup("Sunday");
+    }
+
+    @Test
+    public void radioButtonGroup_setMiddleItemInWindow_valueShouldBeSet() {
+        testSetDayInRadioButtonGroup("Thursday");
+    }
+
+    private void testSetDayInRadioButtonGroup(String day) {
+        openTestURL();
+
+        TextFieldElement defaultDay = $(TextFieldElement.class)
+                .id(RadioButtonGroupInWindow.DEFAULT_DAY_TEXT_FIELD_ID);
+        defaultDay.setValue(day);
+        ButtonElement openWindowButton = $(ButtonElement.class)
+                .id(RadioButtonGroupInWindow.OPEN_WINDOW_BUTTON_ID);
+        openWindowButton.click();
+        waitForElementPresent(By
+                .id(RadioButtonGroupInWindow.WEEK_DAYS_RADIO_BUTTON_GROUP_ID));
+        RadioButtonGroupElement radioButtonGroupElement = $(
+                RadioButtonGroupElement.class).id(
+                        RadioButtonGroupInWindow.WEEK_DAYS_RADIO_BUTTON_GROUP_ID);
+        Assert.assertEquals(
+                "The expected value is not set in RadioButtonGroup.", day,
+                radioButtonGroupElement.getValue());
+    }
+}