]> source.dussan.org Git - vaadin-framework.git/commitdiff
Never check the selectAll checkbox in an empty grid (#20301)
authorArtur Signell <artur@vaadin.com>
Thu, 13 Oct 2016 19:40:03 +0000 (22:40 +0300)
committerPekka Hyvönen <pekka@vaadin.com>
Fri, 9 Dec 2016 07:39:00 +0000 (09:39 +0200)
Change-Id: Ia15edb5a10de9bff047044161ffe83dd09f51098

compatibility-server/src/main/java/com/vaadin/v7/ui/Grid.java
compatibility-server/src/test/java/com/vaadin/v7/tests/server/component/grid/MultiSelectionModelTest.java

index 627b4cf25cf9ebefcdcb5f46fe239119daac5291..e47294d440de4fecd86549e6c054c8d1d7e74924 100644 (file)
@@ -1918,7 +1918,9 @@ public class Grid extends AbstractComponent
         private void updateAllSelectedState() {
             int totalRowCount = getParentGrid().datasource.size();
             int rows = Math.min(totalRowCount, selectionLimit);
-            if (getState().allSelected != selection.size() >= rows) {
+            if (totalRowCount == 0) {
+                getState().allSelected = false;
+            } else {
                 getState().allSelected = selection.size() >= rows;
             }
         }
index f30b5ea141d2798308d73f41344fc429ebb429a2..044124bc8acc34efc20afee1bf2fa6c6e535fb05 100644 (file)
@@ -28,12 +28,20 @@ import com.vaadin.v7.data.Container;
 import com.vaadin.v7.data.util.IndexedContainer;
 import com.vaadin.v7.event.SelectionEvent;
 import com.vaadin.v7.event.SelectionEvent.SelectionListener;
+import com.vaadin.v7.shared.ui.grid.selection.MultiSelectionModelState;
 import com.vaadin.v7.ui.Grid;
-import com.vaadin.v7.ui.Grid.MultiSelectionModel;
-import com.vaadin.v7.ui.Grid.SelectionMode;
 
 public class MultiSelectionModelTest {
 
+    private static class MultiSelectionModel
+            extends com.vaadin.v7.ui.Grid.MultiSelectionModel {
+        @Override
+        protected MultiSelectionModelState getState() {
+            // Overridden to be accessible from test
+            return super.getState();
+        }
+    }
+
     private Object itemId1Present = "itemId1Present";
     private Object itemId2Present = "itemId2Present";
     private Object itemId3Present = "itemId3Present";
@@ -52,8 +60,8 @@ public class MultiSelectionModelTest {
     public void setUp() {
         dataSource = createDataSource();
         grid = new Grid(dataSource);
-        grid.setSelectionMode(SelectionMode.MULTI);
-        model = (MultiSelectionModel) grid.getSelectionModel();
+        model = new MultiSelectionModel();
+        grid.setSelectionModel(model);
     }
 
     @After
@@ -104,6 +112,17 @@ public class MultiSelectionModelTest {
         verifyCurrentSelection(itemId1Present, itemId2Present);
     }
 
+    @Test
+    public void testSelectAllWithoutItems() throws Throwable {
+        Assert.assertFalse(model.getState().allSelected);
+        dataSource.removeAllItems();
+        Assert.assertFalse(model.getState().allSelected);
+        model.select();
+        Assert.assertFalse(model.getState().allSelected);
+        model.deselect();
+        Assert.assertFalse(model.getState().allSelected);
+    }
+
     @Test
     public void testSettingSelection() throws Throwable {
         try {