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.

AbstractListingTest.java 5.7KB

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