@Before public void register() { pool = new MultiTypePool(); pool.register(TestItem.class, new TestItemViewBinder(), new DefaultLinker<TestItem>()); pool.register(RegisteredSubClass.class, new TestItemViewBinder(), new DefaultLinker<TestItem>()); }
@Test @SuppressWarnings("deprecation") public void testOnBindViewHolder() { MultiTypeAdapter adapter = new MultiTypeAdapter(); adapter.register(TestItem.class, mockedItemViewBinder); TestItem item = new TestItem("testOnCreateViewHolder"); adapter.setItems(Collections.singletonList(item)); TestItemViewBinder.ViewHolder holder = mock(TestItemViewBinder.ViewHolder.class); when(holder.getItemViewType()).thenReturn(adapter.getItemViewType(0)); adapter.onBindViewHolder(holder, 0); verify(mockedItemViewBinder).onBindViewHolder(eq(holder), eq(item), anyList()); List<Object> payloads = Collections.emptyList(); adapter.onBindViewHolder(holder, 0, payloads); verify(mockedItemViewBinder, times(2)).onBindViewHolder(holder, item, payloads); } }
@Test public void testOnCreateViewHolder() { MultiTypeAdapter adapter = new MultiTypeAdapter(); adapter.register(TestItem.class, mockedItemViewBinder); TestItem item = new TestItem("testOnCreateViewHolder"); adapter.setItems(Collections.singletonList(item)); int type = adapter.getItemViewType(0); adapter.onCreateViewHolder(parent, type); verify(mockedItemViewBinder).onCreateViewHolder(inflater, parent); }
@Test public void shouldOverrideRegisteredBinder() { MultiTypeAdapter adapter = new MultiTypeAdapter(); adapter.register(TestItem.class, itemViewBinder); assertEquals(1, adapter.getTypePool().size()); assertEquals(itemViewBinder, adapter.getTypePool().getItemViewBinder(0)); TestItemViewBinder newBinder = new TestItemViewBinder(); adapter.register(TestItem.class, newBinder); assertEquals(newBinder, adapter.getTypePool().getItemViewBinder(0)); }
@Test public void shouldNotOverrideRegisteredBinderWhenToMany() { MultiTypeAdapter adapter = new MultiTypeAdapter(); TestItemViewBinder binder2 = new TestItemViewBinder(); adapter.register(TestItem.class) .to(itemViewBinder, binder2) .withLinker(new Linker<TestItem>() { @Override public int index(int position, @NonNull TestItem testItem) { // ignored return -1; } }); assertEquals(TestItem.class, adapter.getTypePool().getClass(0)); assertEquals(TestItem.class, adapter.getTypePool().getClass(1)); assertEquals(itemViewBinder, adapter.getTypePool().getItemViewBinder(0)); assertEquals(binder2, adapter.getTypePool().getItemViewBinder(1)); }