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