aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/test/java/com/vaadin/data/HasItemsTest.java
blob: 8522bcee729968a579efab7ba26298393a63a57a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.vaadin.data;

import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.junit.Assert;
import org.junit.Test;
import org.reflections.Reflections;

import com.vaadin.data.provider.DataProvider;
import com.vaadin.data.provider.ListDataProvider;
import com.vaadin.ui.Tree;
import com.vaadin.ui.TreeGrid;

public class HasItemsTest {

    private static ArrayList<Class<?>> whiteList = new ArrayList<>();
    {
        // these create a hierarchical data provider, which is not using
        // ArrayList or Arrays.ArrayList in the end
        whiteList.add(TreeGrid.class);
        whiteList.add(Tree.class);
    }

    @Test
    public void setItemsVarargsConstructor_createsListDataProvider_itIsEditable()
            throws InstantiationException, IllegalAccessException {
        Set<Class<? extends HasItems>> subTypesOf = new Reflections(
                "com.vaadin.ui").getSubTypesOf(HasItems.class).stream().filter(
                        clazz -> !Modifier.isAbstract(clazz.getModifiers()))
                        .filter(clazz -> Stream.of(clazz.getConstructors())
                                .anyMatch(constuctor -> constuctor
                                        .getParameterCount() == 0))
                        .filter(clazz -> !whiteList.contains(clazz))
                        .collect(Collectors.toSet());

        for (Class<? extends HasItems> hasItemsType : subTypesOf) {
            HasItems hasItems = hasItemsType.newInstance();

            hasItems.setItems("0", "1");

            DataProvider dataProvider = hasItems.getDataProvider();

            Assert.assertTrue(hasItemsType.getSimpleName()
                    + " setItems method with varargs parameters of does not create a list data provider",
                    dataProvider instanceof ListDataProvider);

            ListDataProvider listDataProvider = (ListDataProvider) dataProvider;

            Assert.assertTrue(hasItemsType.getSimpleName()
                    + " does not have setItems method with varargs parameters of does not create an ArrayList backed list data provider",
                    listDataProvider.getItems() instanceof ArrayList);

            List list = (List) listDataProvider.getItems();
            // previously the following would explode since Arrays.ArrayList
            // does not support it
            list.add(0, "2");
        }
    }
}