You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GridSelectionTest.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. /*
  2. * Copyright 2000-2013 Vaadin Ltd.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.vaadin.tests.server.component.grid;
  17. import static org.junit.Assert.assertEquals;
  18. import static org.junit.Assert.assertFalse;
  19. import static org.junit.Assert.assertTrue;
  20. import java.util.Collection;
  21. import org.junit.Before;
  22. import org.junit.Test;
  23. import com.vaadin.data.util.IndexedContainer;
  24. import com.vaadin.event.SelectionEvent;
  25. import com.vaadin.event.SelectionEvent.SelectionListener;
  26. import com.vaadin.ui.LegacyGrid;
  27. import com.vaadin.ui.LegacyGrid.SelectionMode;
  28. import com.vaadin.ui.LegacyGrid.SelectionModel;
  29. public class GridSelectionTest {
  30. private static class MockSelectionChangeListener
  31. implements SelectionListener {
  32. private SelectionEvent event;
  33. @Override
  34. public void select(final SelectionEvent event) {
  35. this.event = event;
  36. }
  37. public Collection<?> getAdded() {
  38. return event.getAdded();
  39. }
  40. public Collection<?> getRemoved() {
  41. return event.getRemoved();
  42. }
  43. public void clearEvent() {
  44. /*
  45. * This method is not strictly needed as the event will simply be
  46. * overridden, but it's good practice, and makes the code more
  47. * obvious.
  48. */
  49. event = null;
  50. }
  51. public boolean eventHasHappened() {
  52. return event != null;
  53. }
  54. }
  55. private LegacyGrid grid;
  56. private MockSelectionChangeListener mockListener;
  57. private final Object itemId1Present = "itemId1Present";
  58. private final Object itemId2Present = "itemId2Present";
  59. private final Object itemId1NotPresent = "itemId1NotPresent";
  60. private final Object itemId2NotPresent = "itemId2NotPresent";
  61. @Before
  62. public void setup() {
  63. final IndexedContainer container = new IndexedContainer();
  64. container.addItem(itemId1Present);
  65. container.addItem(itemId2Present);
  66. for (int i = 2; i < 10; i++) {
  67. container.addItem(new Object());
  68. }
  69. assertEquals("init size", 10, container.size());
  70. assertTrue("itemId1Present", container.containsId(itemId1Present));
  71. assertTrue("itemId2Present", container.containsId(itemId2Present));
  72. assertFalse("itemId1NotPresent",
  73. container.containsId(itemId1NotPresent));
  74. assertFalse("itemId2NotPresent",
  75. container.containsId(itemId2NotPresent));
  76. grid = new LegacyGrid(container);
  77. mockListener = new MockSelectionChangeListener();
  78. grid.addSelectionListener(mockListener);
  79. assertFalse("eventHasHappened", mockListener.eventHasHappened());
  80. }
  81. @Test
  82. public void defaultSelectionModeIsSingle() {
  83. assertTrue(grid.getSelectionModel() instanceof SelectionModel.Single);
  84. }
  85. @Test(expected = IllegalStateException.class)
  86. public void getSelectedRowThrowsExceptionMulti() {
  87. grid.setSelectionMode(SelectionMode.MULTI);
  88. grid.getSelectedRow();
  89. }
  90. @Test(expected = IllegalStateException.class)
  91. public void getSelectedRowThrowsExceptionNone() {
  92. grid.setSelectionMode(SelectionMode.NONE);
  93. grid.getSelectedRow();
  94. }
  95. @Test(expected = IllegalStateException.class)
  96. public void selectThrowsExceptionNone() {
  97. grid.setSelectionMode(SelectionMode.NONE);
  98. grid.select(itemId1Present);
  99. }
  100. @Test(expected = IllegalStateException.class)
  101. public void deselectRowThrowsExceptionNone() {
  102. grid.setSelectionMode(SelectionMode.NONE);
  103. grid.deselect(itemId1Present);
  104. }
  105. @Test
  106. public void selectionModeMapsToMulti() {
  107. assertTrue(grid.setSelectionMode(
  108. SelectionMode.MULTI) instanceof SelectionModel.Multi);
  109. }
  110. @Test
  111. public void selectionModeMapsToSingle() {
  112. assertTrue(grid.setSelectionMode(
  113. SelectionMode.SINGLE) instanceof SelectionModel.Single);
  114. }
  115. @Test
  116. public void selectionModeMapsToNone() {
  117. assertTrue(grid.setSelectionMode(
  118. SelectionMode.NONE) instanceof SelectionModel.None);
  119. }
  120. @Test(expected = IllegalArgumentException.class)
  121. public void selectionModeNullThrowsException() {
  122. grid.setSelectionMode(null);
  123. }
  124. @Test
  125. public void noSelectModel_isSelected() {
  126. grid.setSelectionMode(SelectionMode.NONE);
  127. assertFalse("itemId1Present", grid.isSelected(itemId1Present));
  128. assertFalse("itemId1NotPresent", grid.isSelected(itemId1NotPresent));
  129. }
  130. @Test(expected = IllegalStateException.class)
  131. public void noSelectModel_getSelectedRow() {
  132. grid.setSelectionMode(SelectionMode.NONE);
  133. grid.getSelectedRow();
  134. }
  135. @Test
  136. public void noSelectModel_getSelectedRows() {
  137. grid.setSelectionMode(SelectionMode.NONE);
  138. assertTrue(grid.getSelectedRows().isEmpty());
  139. }
  140. @Test
  141. public void selectionCallsListenerMulti() {
  142. grid.setSelectionMode(SelectionMode.MULTI);
  143. selectionCallsListener();
  144. }
  145. @Test
  146. public void selectionCallsListenerSingle() {
  147. grid.setSelectionMode(SelectionMode.SINGLE);
  148. selectionCallsListener();
  149. }
  150. private void selectionCallsListener() {
  151. grid.select(itemId1Present);
  152. assertEquals("added size", 1, mockListener.getAdded().size());
  153. assertEquals("added item", itemId1Present,
  154. mockListener.getAdded().iterator().next());
  155. assertEquals("removed size", 0, mockListener.getRemoved().size());
  156. }
  157. @Test
  158. public void deselectionCallsListenerMulti() {
  159. grid.setSelectionMode(SelectionMode.MULTI);
  160. deselectionCallsListener();
  161. }
  162. @Test
  163. public void deselectionCallsListenerSingle() {
  164. grid.setSelectionMode(SelectionMode.SINGLE);
  165. deselectionCallsListener();
  166. }
  167. private void deselectionCallsListener() {
  168. grid.select(itemId1Present);
  169. mockListener.clearEvent();
  170. grid.deselect(itemId1Present);
  171. assertEquals("removed size", 1, mockListener.getRemoved().size());
  172. assertEquals("removed item", itemId1Present,
  173. mockListener.getRemoved().iterator().next());
  174. assertEquals("removed size", 0, mockListener.getAdded().size());
  175. }
  176. @Test
  177. public void deselectPresentButNotSelectedItemIdShouldntFireListenerMulti() {
  178. grid.setSelectionMode(SelectionMode.MULTI);
  179. deselectPresentButNotSelectedItemIdShouldntFireListener();
  180. }
  181. @Test
  182. public void deselectPresentButNotSelectedItemIdShouldntFireListenerSingle() {
  183. grid.setSelectionMode(SelectionMode.SINGLE);
  184. deselectPresentButNotSelectedItemIdShouldntFireListener();
  185. }
  186. private void deselectPresentButNotSelectedItemIdShouldntFireListener() {
  187. grid.deselect(itemId1Present);
  188. assertFalse(mockListener.eventHasHappened());
  189. }
  190. @Test
  191. public void deselectNotPresentItemIdShouldNotThrowExceptionMulti() {
  192. grid.setSelectionMode(SelectionMode.MULTI);
  193. grid.deselect(itemId1NotPresent);
  194. }
  195. @Test
  196. public void deselectNotPresentItemIdShouldNotThrowExceptionSingle() {
  197. grid.setSelectionMode(SelectionMode.SINGLE);
  198. grid.deselect(itemId1NotPresent);
  199. }
  200. @Test(expected = IllegalArgumentException.class)
  201. public void selectNotPresentItemIdShouldThrowExceptionMulti() {
  202. grid.setSelectionMode(SelectionMode.MULTI);
  203. grid.select(itemId1NotPresent);
  204. }
  205. @Test(expected = IllegalArgumentException.class)
  206. public void selectNotPresentItemIdShouldThrowExceptionSingle() {
  207. grid.setSelectionMode(SelectionMode.SINGLE);
  208. grid.select(itemId1NotPresent);
  209. }
  210. @Test
  211. public void selectAllMulti() {
  212. grid.setSelectionMode(SelectionMode.MULTI);
  213. final SelectionModel.Multi select = (SelectionModel.Multi) grid
  214. .getSelectionModel();
  215. select.selectAll();
  216. assertEquals("added size", 10, mockListener.getAdded().size());
  217. assertEquals("removed size", 0, mockListener.getRemoved().size());
  218. assertTrue("itemId1Present",
  219. mockListener.getAdded().contains(itemId1Present));
  220. assertTrue("itemId2Present",
  221. mockListener.getAdded().contains(itemId2Present));
  222. }
  223. @Test
  224. public void deselectAllMulti() {
  225. grid.setSelectionMode(SelectionMode.MULTI);
  226. final SelectionModel.Multi select = (SelectionModel.Multi) grid
  227. .getSelectionModel();
  228. select.selectAll();
  229. mockListener.clearEvent();
  230. select.deselectAll();
  231. assertEquals("removed size", 10, mockListener.getRemoved().size());
  232. assertEquals("added size", 0, mockListener.getAdded().size());
  233. assertTrue("itemId1Present",
  234. mockListener.getRemoved().contains(itemId1Present));
  235. assertTrue("itemId2Present",
  236. mockListener.getRemoved().contains(itemId2Present));
  237. assertTrue("selectedRows is empty", grid.getSelectedRows().isEmpty());
  238. }
  239. @Test
  240. public void gridDeselectAllMultiAllSelected() {
  241. grid.setSelectionMode(SelectionMode.MULTI);
  242. final SelectionModel.Multi select = (SelectionModel.Multi) grid
  243. .getSelectionModel();
  244. select.selectAll();
  245. mockListener.clearEvent();
  246. assertTrue(grid.deselectAll());
  247. assertEquals("removed size", 10, mockListener.getRemoved().size());
  248. assertEquals("added size", 0, mockListener.getAdded().size());
  249. assertTrue("itemId1Present",
  250. mockListener.getRemoved().contains(itemId1Present));
  251. assertTrue("itemId2Present",
  252. mockListener.getRemoved().contains(itemId2Present));
  253. assertTrue("selectedRows is empty", grid.getSelectedRows().isEmpty());
  254. }
  255. @Test
  256. public void gridDeselectAllMultiOneSelected() {
  257. grid.setSelectionMode(SelectionMode.MULTI);
  258. final SelectionModel.Multi select = (SelectionModel.Multi) grid
  259. .getSelectionModel();
  260. select.select(itemId2Present);
  261. mockListener.clearEvent();
  262. assertTrue(grid.deselectAll());
  263. assertEquals("removed size", 1, mockListener.getRemoved().size());
  264. assertEquals("added size", 0, mockListener.getAdded().size());
  265. assertFalse("itemId1Present",
  266. mockListener.getRemoved().contains(itemId1Present));
  267. assertTrue("itemId2Present",
  268. mockListener.getRemoved().contains(itemId2Present));
  269. assertTrue("selectedRows is empty", grid.getSelectedRows().isEmpty());
  270. }
  271. @Test
  272. public void gridDeselectAllSingleNoneSelected() {
  273. grid.setSelectionMode(SelectionMode.SINGLE);
  274. assertFalse(grid.deselectAll());
  275. assertTrue("selectedRows is empty", grid.getSelectedRows().isEmpty());
  276. }
  277. @Test
  278. public void gridDeselectAllSingleOneSelected() {
  279. grid.setSelectionMode(SelectionMode.SINGLE);
  280. final SelectionModel.Single select = (SelectionModel.Single) grid
  281. .getSelectionModel();
  282. select.select(itemId2Present);
  283. mockListener.clearEvent();
  284. assertTrue(grid.deselectAll());
  285. assertEquals("removed size", 1, mockListener.getRemoved().size());
  286. assertEquals("added size", 0, mockListener.getAdded().size());
  287. assertFalse("itemId1Present",
  288. mockListener.getRemoved().contains(itemId1Present));
  289. assertTrue("itemId2Present",
  290. mockListener.getRemoved().contains(itemId2Present));
  291. assertTrue("selectedRows is empty", grid.getSelectedRows().isEmpty());
  292. }
  293. @Test
  294. public void gridDeselectAllMultiNoneSelected() {
  295. grid.setSelectionMode(SelectionMode.MULTI);
  296. assertFalse(grid.deselectAll());
  297. assertTrue("selectedRows is empty", grid.getSelectedRows().isEmpty());
  298. }
  299. @Test
  300. public void reselectionDeselectsPreviousSingle() {
  301. grid.setSelectionMode(SelectionMode.SINGLE);
  302. grid.select(itemId1Present);
  303. mockListener.clearEvent();
  304. grid.select(itemId2Present);
  305. assertEquals("added size", 1, mockListener.getAdded().size());
  306. assertEquals("removed size", 1, mockListener.getRemoved().size());
  307. assertEquals("added item", itemId2Present,
  308. mockListener.getAdded().iterator().next());
  309. assertEquals("removed item", itemId1Present,
  310. mockListener.getRemoved().iterator().next());
  311. assertEquals("selectedRows is correct", itemId2Present,
  312. grid.getSelectedRow());
  313. }
  314. }