ListRowDataAdapterTest.java revision dbac8f49866ec226152849e7d3ace3e8263de1e4
1package android.support.v17.leanback.app;
2
3import android.support.test.runner.AndroidJUnitRunner;
4import android.support.v17.leanback.widget.ArrayObjectAdapter;
5import android.support.v17.leanback.widget.DividerRow;
6import android.support.v17.leanback.widget.HeaderItem;
7import android.support.v17.leanback.widget.ListRow;
8import android.support.v17.leanback.widget.ObjectAdapter;
9import android.support.v17.leanback.widget.PresenterSelector;
10import android.support.v17.leanback.widget.SectionRow;
11import android.test.suitebuilder.annotation.SmallTest;
12import org.junit.Before;
13import org.junit.Test;
14import org.junit.runner.RunWith;
15import org.junit.runners.JUnit4;
16import org.mockito.ArgumentCaptor;
17import org.mockito.Mock;
18import org.mockito.Mockito;
19import org.mockito.MockitoAnnotations;
20
21import java.util.ArrayList;
22import java.util.List;
23
24import static org.junit.Assert.assertEquals;
25import static org.mockito.Matchers.any;
26import static org.mockito.Matchers.anyInt;
27import static org.mockito.Matchers.eq;
28import static org.mockito.Mockito.never;
29import static org.mockito.Mockito.times;
30import static org.mockito.Mockito.verify;
31import static org.mockito.Mockito.verifyNoMoreInteractions;
32
33import android.support.test.runner.AndroidJUnit4;
34
35/**
36 * Unit test for {@link ListRowDataAdapter} class.
37 */
38@RunWith(AndroidJUnit4.class)
39@SmallTest
40public class ListRowDataAdapterTest {
41    @Mock
42    private PresenterSelector presenterSelector;
43    @Mock
44    private ObjectAdapter.DataObserver dataObserver;
45
46    @Before
47    public void setUp() throws Exception {
48        MockitoAnnotations.initMocks(this);
49    }
50
51    @Test
52    public void itemRangeChangedTest() {
53        int itemCount = 4;
54        ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenterSelector);
55        adapter.add(new SectionRow("section 1"));
56        for (int i = 0; i < itemCount; i++) {
57            HeaderItem headerItem = new HeaderItem(i, "header "+i);
58            adapter.add(new ListRow(headerItem, createListRowAdapter()));
59        }
60
61        ListRowDataAdapter listRowDataAdapter = new ListRowDataAdapter(adapter);
62        listRowDataAdapter.registerObserver(dataObserver);
63        SectionRow sectionRow = new SectionRow("section 11");
64        adapter.replace(0, sectionRow);
65
66        verify(dataObserver, times(1)).onItemRangeChanged(0, 1);
67        assertEquals(5, listRowDataAdapter.size());
68    }
69
70    @Test
71    public void adapterSize_nonVisibleRowPresent() {
72        int itemCount = 4;
73        ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenterSelector);
74        adapter.add(new SectionRow("section 1"));
75        for (int i = 0; i < itemCount; i++) {
76            HeaderItem headerItem = new HeaderItem(i, "header "+i);
77            adapter.add(new ListRow(headerItem, createListRowAdapter()));
78        }
79
80        ListRowDataAdapter listRowDataAdapter = new ListRowDataAdapter(adapter);
81        assertEquals(5, listRowDataAdapter.size());
82
83        List<DividerRow> invisibleRows = new ArrayList<>();
84        invisibleRows.add(new DividerRow());
85        invisibleRows.add(new DividerRow());
86        adapter.addAll(5, invisibleRows);
87        verify(dataObserver, times(0)).onItemRangeInserted(anyInt(), anyInt());
88        assertEquals(5, listRowDataAdapter.size());
89    }
90
91    @Test
92    public void adapterSize_visibleRowInserted() {
93        int itemCount = 4;
94        ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenterSelector);
95        adapter.add(new SectionRow("section 1"));
96        for (int i = 0; i < itemCount; i++) {
97            HeaderItem headerItem = new HeaderItem(i, "header "+i);
98            adapter.add(new ListRow(headerItem, createListRowAdapter()));
99        }
100
101        ListRowDataAdapter listRowDataAdapter = new ListRowDataAdapter(adapter);
102        assertEquals(5, listRowDataAdapter.size());
103
104        listRowDataAdapter.registerObserver(dataObserver);
105        List<ListRow> visibleRows = new ArrayList<>();
106        visibleRows.add(new ListRow(new HeaderItem(0, "Header 51"), createListRowAdapter()));
107        visibleRows.add(new ListRow(new HeaderItem(0, "Header 52"), createListRowAdapter()));
108        visibleRows.add(new ListRow(new HeaderItem(0, "Header 53"), createListRowAdapter()));
109        adapter.addAll(2, visibleRows);
110        verify(dataObserver, times(1)).onItemRangeInserted(2, 3);
111        assertEquals(8, listRowDataAdapter.size());
112    }
113
114    @Test
115    public void adapterSize_nonVisibleRowInserted() {
116        int itemCount = 4;
117        ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenterSelector);
118        adapter.add(new SectionRow("section 1"));
119        for (int i = 0; i < itemCount; i++) {
120            HeaderItem headerItem = new HeaderItem(i, "header "+i);
121            adapter.add(new ListRow(headerItem, createListRowAdapter()));
122        }
123
124        ListRowDataAdapter listRowDataAdapter = new ListRowDataAdapter(adapter);
125        assertEquals(5, listRowDataAdapter.size());
126
127        List<DividerRow> invisibleRows = new ArrayList<>();
128        invisibleRows.add(new DividerRow());
129        invisibleRows.add(new DividerRow());
130
131        listRowDataAdapter.registerObserver(dataObserver);
132        adapter.addAll(adapter.size(), invisibleRows);
133        verify(dataObserver, times(0)).onItemRangeInserted(anyInt(), anyInt());
134        assertEquals(5, listRowDataAdapter.size());
135
136        adapter.add(new DividerRow());
137        verify(dataObserver, times(0)).onItemRangeInserted(anyInt(), anyInt());
138        assertEquals(5, listRowDataAdapter.size());
139
140        adapter.add(new ListRow(new HeaderItem(0, "Header 5"), createListRowAdapter()));
141        verify(dataObserver, times(1)).onItemRangeInserted(5, 4);
142        assertEquals(9, listRowDataAdapter.size());
143    }
144
145    @Test
146    public void adapterSize_visibleRowRemoved() {
147        int itemCount = 4;
148        ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenterSelector);
149        adapter.add(new SectionRow("section 1"));
150        for (int i = 0; i < itemCount; i++) {
151            HeaderItem headerItem = new HeaderItem(i, "header "+i);
152            adapter.add(new ListRow(headerItem, createListRowAdapter()));
153        }
154
155        ListRowDataAdapter listRowDataAdapter = new ListRowDataAdapter(adapter);
156        assertEquals(5, listRowDataAdapter.size());
157        adapter.add(new DividerRow());
158        assertEquals(5, listRowDataAdapter.size());
159
160        listRowDataAdapter.registerObserver(dataObserver);
161        adapter.removeItems(2, 2);
162        verify(dataObserver, times(1)).onItemRangeRemoved(2, 2);
163        assertEquals(3, listRowDataAdapter.size());
164    }
165
166    @Test
167    public void adapterSize_nonVisibleRowRemoved() {
168        int itemCount = 4;
169        ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenterSelector);
170        adapter.add(new SectionRow("section 1"));
171        for (int i = 0; i < itemCount; i++) {
172            HeaderItem headerItem = new HeaderItem(i, "header "+i);
173            adapter.add(new ListRow(headerItem, createListRowAdapter()));
174        }
175
176        ListRowDataAdapter listRowDataAdapter = new ListRowDataAdapter(adapter);
177        assertEquals(5, listRowDataAdapter.size());
178        adapter.add(new DividerRow());
179        assertEquals(5, listRowDataAdapter.size());
180
181        listRowDataAdapter.registerObserver(dataObserver);
182        adapter.removeItems(4, 1);
183        verify(dataObserver, times(1)).onItemRangeRemoved(4, 1);
184        assertEquals(4, listRowDataAdapter.size());
185
186        adapter.removeItems(4, 1);
187        verify(dataObserver, times(0)).onItemRangeInserted(anyInt(), anyInt());
188        assertEquals(4, listRowDataAdapter.size());
189    }
190
191    @Test
192    public void adapterSize_rowsRemoved() {
193        int itemCount = 4;
194        ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenterSelector);
195        adapter.add(new SectionRow("section 1"));
196        for (int i = 0; i < itemCount; i++) {
197            HeaderItem headerItem = new HeaderItem(i, "header "+i);
198            adapter.add(new ListRow(headerItem, createListRowAdapter()));
199        }
200
201        ListRowDataAdapter listRowDataAdapter = new ListRowDataAdapter(adapter);
202        assertEquals(5, listRowDataAdapter.size());
203
204        adapter.add(new DividerRow());
205        assertEquals(5, listRowDataAdapter.size());
206
207        listRowDataAdapter.registerObserver(dataObserver);
208        adapter.removeItems(3, 3);
209        verify(dataObserver, times(1)).onItemRangeRemoved(3, 2);
210        assertEquals(3, listRowDataAdapter.size());
211    }
212
213    private ArrayObjectAdapter createListRowAdapter() {
214        ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(presenterSelector);
215        listRowAdapter.add(new Integer(1));
216        listRowAdapter.add(new Integer(2));
217        return listRowAdapter;
218    }
219}
220