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 14KB

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