Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

AbstractListingTest.java 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package com.vaadin.ui;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertNotEquals;
  4. import static org.junit.Assert.assertTrue;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.LinkedList;
  8. import java.util.List;
  9. import java.util.stream.Stream;
  10. import org.jsoup.nodes.Element;
  11. import org.junit.Before;
  12. import org.junit.Test;
  13. import com.vaadin.data.HasDataProvider;
  14. import com.vaadin.data.provider.DataProvider;
  15. import com.vaadin.data.provider.ListDataProvider;
  16. import com.vaadin.data.provider.Query;
  17. import com.vaadin.ui.AbstractListing.AbstractListingExtension;
  18. import com.vaadin.ui.declarative.DesignContext;
  19. import elemental.json.JsonObject;
  20. public class AbstractListingTest {
  21. private final class TestListing extends AbstractSingleSelect<String>
  22. implements HasDataProvider<String> {
  23. /**
  24. * Used to execute data generation
  25. *
  26. * @param initial
  27. * {@code true} to mock initial data request; {@code false}
  28. * for follow-up request.
  29. */
  30. public void runDataGeneration(boolean initial) {
  31. super.getDataCommunicator().beforeClientResponse(initial);
  32. }
  33. @Override
  34. protected Element writeItem(Element design, String item,
  35. DesignContext context) {
  36. return null;
  37. }
  38. @Override
  39. protected void readItems(Element design, DesignContext context) {
  40. }
  41. @Override
  42. public DataProvider<String, ?> getDataProvider() {
  43. return internalGetDataProvider();
  44. }
  45. @Override
  46. public void setDataProvider(DataProvider<String, ?> dataProvider) {
  47. internalSetDataProvider(dataProvider);
  48. }
  49. }
  50. private final class CountGenerator
  51. extends AbstractListingExtension<String> {
  52. int callCount = 0;
  53. @Override
  54. public void generateData(String data, JsonObject jsonObject) {
  55. ++callCount;
  56. }
  57. @Override
  58. public void destroyData(String data) {
  59. }
  60. @Override
  61. public void refresh(String data) {
  62. super.refresh(data);
  63. }
  64. }
  65. private static final String[] ITEM_ARRAY = { "Foo", "Bar", "Baz" };
  66. private TestListing listing;
  67. private List<String> items;
  68. @Before
  69. public void setUp() {
  70. items = new ArrayList<>(Arrays.asList(ITEM_ARRAY));
  71. listing = new TestListing();
  72. }
  73. @Test
  74. public void testSetItemsWithCollection() {
  75. listing.setItems(items);
  76. List<String> list = new LinkedList<>(items);
  77. listing.getDataProvider().fetch(new Query())
  78. .forEach(str -> assertTrue("Unexpected item in data provider",
  79. list.remove(str)));
  80. assertTrue("Not all items from list were in data provider",
  81. list.isEmpty());
  82. }
  83. @Test
  84. public void testSetItemsWithVarargs() {
  85. listing.setItems(ITEM_ARRAY);
  86. listing.getDataProvider().fetch(new Query())
  87. .forEach(str -> assertTrue("Unexpected item in data provider",
  88. items.remove(str)));
  89. assertTrue("Not all items from list were in data provider",
  90. items.isEmpty());
  91. }
  92. @Test
  93. public void testSetDataProvider() {
  94. ListDataProvider<String> dataProvider = DataProvider
  95. .ofCollection(items);
  96. listing.setDataProvider(dataProvider);
  97. assertEquals("setDataProvider did not set data provider", dataProvider,
  98. listing.getDataProvider());
  99. listing.setDataProvider(
  100. DataProvider.fromCallbacks(
  101. query -> Stream.of(ITEM_ARRAY).skip(query.getOffset())
  102. .limit(query.getLimit()),
  103. query -> ITEM_ARRAY.length));
  104. assertNotEquals("setDataProvider did not replace data provider",
  105. dataProvider, listing.getDataProvider());
  106. }
  107. @Test
  108. public void testAddDataGeneratorBeforeDataProvider() {
  109. CountGenerator generator = new CountGenerator();
  110. generator.extend(listing);
  111. listing.setItems("Foo");
  112. listing.runDataGeneration(true);
  113. assertEquals("Generator should have been called once", 1,
  114. generator.callCount);
  115. }
  116. @Test
  117. public void testAddDataGeneratorAfterDataProvider() {
  118. CountGenerator generator = new CountGenerator();
  119. listing.setItems("Foo");
  120. generator.extend(listing);
  121. listing.runDataGeneration(true);
  122. assertEquals("Generator should have been called once", 1,
  123. generator.callCount);
  124. }
  125. @Test
  126. public void testDataNotGeneratedTwice() {
  127. listing.setItems("Foo");
  128. CountGenerator generator = new CountGenerator();
  129. generator.extend(listing);
  130. listing.runDataGeneration(true);
  131. assertEquals("Generator should have been called once", 1,
  132. generator.callCount);
  133. listing.runDataGeneration(false);
  134. assertEquals("Generator should not have been called again", 1,
  135. generator.callCount);
  136. }
  137. @Test
  138. public void testRemoveDataGenerator() {
  139. listing.setItems("Foo");
  140. CountGenerator generator = new CountGenerator();
  141. generator.extend(listing);
  142. generator.remove();
  143. listing.runDataGeneration(true);
  144. assertEquals("Generator should not have been called", 0,
  145. generator.callCount);
  146. }
  147. @Test
  148. public void testDataRefresh() {
  149. listing.setItems("Foo");
  150. CountGenerator generator = new CountGenerator();
  151. generator.extend(listing);
  152. listing.runDataGeneration(true);
  153. assertEquals("Generator should have been called once", 1,
  154. generator.callCount);
  155. generator.refresh("Foo");
  156. listing.runDataGeneration(false);
  157. assertEquals("Generator should have been called again", 2,
  158. generator.callCount);
  159. }
  160. }