19
19
import java .util .ArrayList ;
20
20
import java .util .Arrays ;
21
21
import java .util .Collection ;
22
+ import java .util .List ;
22
23
import java .util .concurrent .atomic .AtomicInteger ;
23
24
import java .util .concurrent .atomic .AtomicReference ;
24
25
import java .util .stream .Stream ;
25
26
26
27
import com .vaadin .flow .component .Component ;
27
28
import com .vaadin .flow .component .ComponentUtil ;
28
29
import com .vaadin .flow .component .Tag ;
30
+ import com .vaadin .flow .function .SerializablePredicate ;
29
31
import com .vaadin .flow .function .SerializableSupplier ;
32
+ import com .vaadin .flow .shared .Registration ;
30
33
import com .vaadin .flow .tests .data .bean .Item ;
31
34
import org .junit .Assert ;
32
35
import org .junit .Before ;
@@ -38,6 +41,8 @@ public class AbstractDataViewTest {
38
41
39
42
private ListDataProvider <Item > dataProvider ;
40
43
44
+ private DataProvider <Item , ?> wrapperDataProvider ;
45
+
41
46
private AbstractDataView <Item > dataView ;
42
47
43
48
private Component component ;
@@ -100,6 +105,139 @@ public void refreshAll_listenersNotified() {
100
105
Assert .assertEquals (dataProvider , refreshAllEvent .get ().getSource ());
101
106
}
102
107
108
+ @ Test
109
+ public void verifyDataProviderType_wrappedDataProviderIsSupported () {
110
+ // starting with EmptyDataProvider to bypass checking too early in
111
+ // the DataViewImpl constructor.
112
+ wrapperDataProvider = new DataCommunicator .EmptyDataProvider <>();
113
+ DataViewImpl dataView = new DataViewImpl (() -> wrapperDataProvider ,
114
+ component ) {
115
+ @ Override
116
+ public Class <?> getSupportedDataProviderType () {
117
+ return InMemoryDataProvider .class ;
118
+ }
119
+ };
120
+ wrapperDataProvider = getWrapperDataProvider ();
121
+ dataView .verifyDataProviderType (wrapperDataProvider );
122
+ }
123
+
124
+ @ Test
125
+ public void verifyDataProviderType_withConfigurableFilter_wrappedDataProviderIsSupported () {
126
+ wrapperDataProvider = new DataCommunicator .EmptyDataProvider <>();
127
+ DataViewImpl dataView = new DataViewImpl (() -> wrapperDataProvider ,
128
+ component ) {
129
+ @ Override
130
+ public Class <?> getSupportedDataProviderType () {
131
+ return InMemoryDataProvider .class ;
132
+ }
133
+ };
134
+ wrapperDataProvider = dataProvider .withConfigurableFilter ();
135
+ dataView .verifyDataProviderType (wrapperDataProvider );
136
+ }
137
+
138
+ @ Test
139
+ public void verifyDataProviderType_wrappedDataProviderIsNotSupported () {
140
+ wrapperDataProvider = new DataCommunicator .EmptyDataProvider <>();
141
+ DataViewImpl dataView = new DataViewImpl (() -> wrapperDataProvider ,
142
+ component ) {
143
+ @ Override
144
+ public Class <?> getSupportedDataProviderType () {
145
+ return BackEndDataProvider .class ;
146
+ }
147
+ };
148
+ wrapperDataProvider = getWrapperDataProvider ();
149
+ Assert .assertThrows (IllegalStateException .class ,
150
+ () -> dataView .verifyDataProviderType (wrapperDataProvider ));
151
+ }
152
+
153
+ @ Test
154
+ public void verifyDataProviderType_withConfigurableFilter_wrappedDataProviderIsNotSupported () {
155
+ wrapperDataProvider = new DataCommunicator .EmptyDataProvider <>();
156
+ DataViewImpl dataView = new DataViewImpl (() -> wrapperDataProvider ,
157
+ component ) {
158
+ @ Override
159
+ public Class <?> getSupportedDataProviderType () {
160
+ return BackEndDataProvider .class ;
161
+ }
162
+ };
163
+ wrapperDataProvider = dataProvider .withConfigurableFilter ();
164
+ Assert .assertThrows (IllegalStateException .class ,
165
+ () -> dataView .verifyDataProviderType (wrapperDataProvider ));
166
+ }
167
+
168
+ @ Test
169
+ public void verifyDataProviderType_wrapperIsBackEndDataProvider_wrapperDataProviderIsSupported () {
170
+ wrapperDataProvider = new DataCommunicator .EmptyDataProvider <>();
171
+ DataViewImpl dataView = new DataViewImpl (() -> wrapperDataProvider ,
172
+ component ) {
173
+ @ Override
174
+ public Class <?> getSupportedDataProviderType () {
175
+ return BackEndDataProvider .class ;
176
+ }
177
+ };
178
+ wrapperDataProvider = new BackEndDataProviderWrapper (dataProvider );
179
+ dataView .verifyDataProviderType (wrapperDataProvider );
180
+ }
181
+
182
+ private DataProvider <Item , Object > getWrapperDataProvider () {
183
+ return new DataProviderWrapper <Item , Object , SerializablePredicate <Item >>(
184
+ dataProvider ) {
185
+ @ Override
186
+ protected SerializablePredicate <Item > getFilter (Query query ) {
187
+ return null ;
188
+ }
189
+
190
+ @ Override
191
+ public Stream fetch (Query query ) {
192
+ return null ;
193
+ }
194
+ };
195
+ }
196
+
197
+ // BackEndDataProvider that is also a DataProviderWrapper
198
+ private static class BackEndDataProviderWrapper extends
199
+ DataProviderWrapper <Item , Object , SerializablePredicate <Item >>
200
+ implements BackEndDataProvider <Item , Object > {
201
+ protected BackEndDataProviderWrapper (
202
+ DataProvider <Item , SerializablePredicate <Item >> dataProvider ) {
203
+ super (dataProvider );
204
+ }
205
+
206
+ @ Override
207
+ public Stream fetch (Query query ) {
208
+ return null ;
209
+ }
210
+
211
+ @ Override
212
+ public void setSortOrders (List <QuerySortOrder > sortOrders ) {
213
+ }
214
+
215
+ @ Override
216
+ public int size (Query <Item , Object > query ) {
217
+ return 0 ;
218
+ }
219
+
220
+ @ Override
221
+ protected SerializablePredicate <Item > getFilter (
222
+ Query <Item , Object > query ) {
223
+ return null ;
224
+ }
225
+
226
+ @ Override
227
+ public void refreshItem (Item item ) {
228
+ }
229
+
230
+ @ Override
231
+ public void refreshAll () {
232
+ }
233
+
234
+ @ Override
235
+ public Registration addDataProviderListener (
236
+ DataProviderListener <Item > listener ) {
237
+ return null ;
238
+ }
239
+ }
240
+
103
241
/**
104
242
* setIdentifierProvider is tested in AbstractListDataView since it has the
105
243
* container(T item) method.
0 commit comments