package me.tatarka.bindingcollectionadapter2; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.util.Arrays; import java.util.List; import me.tatarka.bindingcollectionadapter2.itembindings.OnItemBindClass; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @RunWith(JUnit4.class) public class OnItemBindClassTest { @Test public void selectsBasedOnClass() { OnItemBindClass<Object> onItemBind = new OnItemBindClass<>() .map(String.class, 0, 1) .map(Integer.class, 2, 3); ItemBinding<Object> itemBinding = ItemBinding.of(onItemBind); List<Object> list = Arrays.<Object>asList("one", 2); itemBinding.onItemBind(0, list.get(0)); assertThat(itemBinding.variableId()).isEqualTo(0); assertThat(itemBinding.layoutRes()).isEqualTo(1); itemBinding.onItemBind(1, list.get(1)); assertThat(itemBinding.variableId()).isEqualTo(2); assertThat(itemBinding.layoutRes()).isEqualTo(3); try { itemBinding.onItemBind(3, new Object()); fail(); } catch (IllegalArgumentException e) { // pass } } @Test public void selectsBasedOnSubclass() { OnItemBindClass<Object> onItemBind = new OnItemBindClass<>() .map(A.class, 0, 1) .map(C.class, 2, 3); ItemBinding<Object> itemBinding = ItemBinding.of(onItemBind); List<Object> list = Arrays.asList(new B(), new C()); itemBinding.onItemBind(0, list.get(0)); assertThat(itemBinding.variableId()).isEqualTo(0); assertThat(itemBinding.layoutRes()).isEqualTo(1); itemBinding.onItemBind(1, list.get(1)); assertThat(itemBinding.variableId()).isEqualTo(2); assertThat(itemBinding.layoutRes()).isEqualTo(3); } private static class A { } private static class B extends A { } private static class C { } }