Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

MultiSelectionModelTest.java 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. * Copyright 2000-2016 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 java.util.ArrayList;
  18. import java.util.Arrays;
  19. import java.util.List;
  20. import com.vaadin.ui.LegacyGrid;
  21. import org.junit.After;
  22. import org.junit.Assert;
  23. import org.junit.Before;
  24. import org.junit.Test;
  25. import com.vaadin.data.Container;
  26. import com.vaadin.data.util.IndexedContainer;
  27. import com.vaadin.event.SelectionEvent;
  28. import com.vaadin.event.SelectionEvent.SelectionListener;
  29. import com.vaadin.ui.LegacyGrid.MultiSelectionModel;
  30. import com.vaadin.ui.LegacyGrid.SelectionMode;
  31. public class MultiSelectionModelTest {
  32. private Object itemId1Present = "itemId1Present";
  33. private Object itemId2Present = "itemId2Present";
  34. private Object itemId3Present = "itemId3Present";
  35. private Object itemIdNotPresent = "itemIdNotPresent";
  36. private Container.Indexed dataSource;
  37. private MultiSelectionModel model;
  38. private LegacyGrid grid;
  39. private boolean expectingEvent = false;
  40. private boolean expectingDeselectEvent;
  41. private List<Object> select = new ArrayList<Object>();
  42. private List<Object> deselect = new ArrayList<Object>();
  43. @Before
  44. public void setUp() {
  45. dataSource = createDataSource();
  46. grid = new LegacyGrid(dataSource);
  47. grid.setSelectionMode(SelectionMode.MULTI);
  48. model = (MultiSelectionModel) grid.getSelectionModel();
  49. }
  50. @After
  51. public void tearDown() {
  52. Assert.assertFalse("Some expected select event did not happen.",
  53. expectingEvent);
  54. Assert.assertFalse("Some expected deselect event did not happen.",
  55. expectingDeselectEvent);
  56. }
  57. private IndexedContainer createDataSource() {
  58. final IndexedContainer container = new IndexedContainer();
  59. container.addItem(itemId1Present);
  60. container.addItem(itemId2Present);
  61. container.addItem(itemId3Present);
  62. for (int i = 3; i < 10; i++) {
  63. container.addItem(new Object());
  64. }
  65. return container;
  66. }
  67. @Test
  68. public void testSelectAndDeselectRow() throws Throwable {
  69. try {
  70. expectSelectEvent(itemId1Present);
  71. model.select(itemId1Present);
  72. expectDeselectEvent(itemId1Present);
  73. model.deselect(itemId1Present);
  74. } catch (Exception e) {
  75. throw e.getCause();
  76. }
  77. verifyCurrentSelection();
  78. }
  79. @Test
  80. public void testAddSelection() throws Throwable {
  81. try {
  82. expectSelectEvent(itemId1Present);
  83. model.select(itemId1Present);
  84. expectSelectEvent(itemId2Present);
  85. model.select(itemId2Present);
  86. } catch (Exception e) {
  87. throw e.getCause();
  88. }
  89. verifyCurrentSelection(itemId1Present, itemId2Present);
  90. }
  91. @Test
  92. public void testSettingSelection() throws Throwable {
  93. try {
  94. expectSelectEvent(itemId2Present, itemId1Present);
  95. model.setSelected(Arrays
  96. .asList(new Object[] { itemId1Present, itemId2Present }));
  97. verifyCurrentSelection(itemId1Present, itemId2Present);
  98. expectDeselectEvent(itemId1Present);
  99. expectSelectEvent(itemId3Present);
  100. model.setSelected(Arrays
  101. .asList(new Object[] { itemId3Present, itemId2Present }));
  102. verifyCurrentSelection(itemId3Present, itemId2Present);
  103. } catch (Exception e) {
  104. throw e.getCause();
  105. }
  106. }
  107. private void expectSelectEvent(Object... selectArray) {
  108. select = Arrays.asList(selectArray);
  109. addListener();
  110. }
  111. private void expectDeselectEvent(Object... deselectArray) {
  112. deselect = Arrays.asList(deselectArray);
  113. addListener();
  114. }
  115. private void addListener() {
  116. if (expectingEvent) {
  117. return;
  118. }
  119. expectingEvent = true;
  120. grid.addSelectionListener(new SelectionListener() {
  121. @Override
  122. public void select(SelectionEvent event) {
  123. Assert.assertTrue("Selection did not contain expected items",
  124. event.getAdded().containsAll(select));
  125. Assert.assertTrue("Selection contained unexpected items",
  126. select.containsAll(event.getAdded()));
  127. select = new ArrayList<Object>();
  128. Assert.assertTrue("Deselection did not contain expected items",
  129. event.getRemoved().containsAll(deselect));
  130. Assert.assertTrue("Deselection contained unexpected items",
  131. deselect.containsAll(event.getRemoved()));
  132. deselect = new ArrayList<Object>();
  133. grid.removeSelectionListener(this);
  134. expectingEvent = false;
  135. }
  136. });
  137. }
  138. private void verifyCurrentSelection(Object... selection) {
  139. final List<Object> selected = Arrays.asList(selection);
  140. if (model.getSelectedRows().containsAll(selected)
  141. && selected.containsAll(model.getSelectedRows())) {
  142. return;
  143. }
  144. Assert.fail("Not all items were correctly selected");
  145. }
  146. }