package me.tatarka.bindingcollectionadapter2;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.test.annotation.UiThreadTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ListView;
import android.widget.WrapperListAdapter;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
import java.util.List;
import me.tatarka.bindingcollectionadapter2.test.R;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(AndroidJUnit4.class)
public class ListViewInflationTest {
@Rule
public ActivityTestRule<EmptyActivity> activityTestRule = new ActivityTestRule<>(EmptyActivity.class);
private LayoutInflater inflater;
@Before
public void setup() throws Exception {
inflater = LayoutInflater.from(activityTestRule.getActivity());
}
@Test
@UiThreadTest
public void listView() {
List<String> items = Arrays.asList("one", "two", "three");
TestHelpers.ViewModel viewModel = new TestHelpers.ViewModel.Builder(items, ItemBinding.<String>of(me.tatarka.bindingcollectionadapter2.BR.item, R.layout.item)).build();
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.list_view, null, false);
binding.setVariable(me.tatarka.bindingcollectionadapter2.BR.viewModel, viewModel);
binding.executePendingBindings();
ListView listView = (ListView) binding.getRoot();
@SuppressWarnings("unchecked")
BindingListViewAdapter<String> adapter = (BindingListViewAdapter<String>) listView.getAdapter();
assertThat(TestHelpers.iterable(adapter)).containsExactlyElementsOf(items);
}
@Test
@UiThreadTest
public void listViewSelector() {
List<String> items = Arrays.asList("one", "two", "three");
TestHelpers.ViewModel viewModel = new TestHelpers.ViewModel.Builder(items, ItemBinding.<String>of(me.tatarka.bindingcollectionadapter2.BR.item, R.layout.item)).build();
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.list_view_selector, null, false);
binding.setVariable(me.tatarka.bindingcollectionadapter2.BR.viewModel, viewModel);
binding.executePendingBindings();
ListView listView = (ListView) binding.getRoot();
@SuppressWarnings("unchecked")
BindingListViewAdapter<String> adapter = (BindingListViewAdapter<String>) listView.getAdapter();
assertThat(TestHelpers.iterable(adapter)).containsExactlyElementsOf(items);
}
@Test
@UiThreadTest
public void listViewItemIds() {
List<String> items = Arrays.asList("one", "two", "three");
List<Long> itemIds = Arrays.asList(1L, 2L, 3L);
TestHelpers.ViewModel viewModel = new TestHelpers.ViewModel.Builder(items, ItemBinding.<String>of(me.tatarka.bindingcollectionadapter2.BR.item, R.layout.item)).itemIds(itemIds).build();
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.list_view_id, null, false);
binding.setVariable(me.tatarka.bindingcollectionadapter2.BR.viewModel, viewModel);
binding.executePendingBindings();
ListView listView = (ListView) binding.getRoot();
@SuppressWarnings("unchecked")
BindingListViewAdapter<String> adapter = (BindingListViewAdapter<String>) listView.getAdapter();
assertThat(TestHelpers.iterableIds(adapter)).containsExactlyElementsOf(itemIds);
}
@Test
@UiThreadTest
public void listViewItemIsEnabled() {
List<String> items = Arrays.asList("one", "two", "three");
List<Boolean> itemIsEnabled = Arrays.asList(true, true, false);
TestHelpers.ViewModel viewModel = new TestHelpers.ViewModel.Builder(items, ItemBinding.<String>of(me.tatarka.bindingcollectionadapter2.BR.item, R.layout.item)).itemIsEnabled(itemIsEnabled).build();
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.list_view_is_enabled, null, false);
binding.setVariable(me.tatarka.bindingcollectionadapter2.BR.viewModel, viewModel);
binding.executePendingBindings();
ListView listView = (ListView) binding.getRoot();
@SuppressWarnings("unchecked")
BindingListViewAdapter<String> adapter = (BindingListViewAdapter<String>) listView.getAdapter();
assertThat(TestHelpers.iterableIsEnabled(adapter)).containsExactlyElementsOf(itemIsEnabled);
}
@Test
@UiThreadTest
public void listViewAdapter() {
List<String> items = Arrays.asList("one", "two", "three");
TestHelpers.ViewModel viewModel = new TestHelpers.ViewModel.Builder(items, ItemBinding.<String>of(me.tatarka.bindingcollectionadapter2.BR.item, R.layout.item)).build();
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.list_view_adapter, null, false);
binding.setVariable(me.tatarka.bindingcollectionadapter2.BR.viewModel, viewModel);
binding.executePendingBindings();
ListView listView = (ListView) binding.getRoot();
@SuppressWarnings("unchecked")
BindingListViewAdapter<String> adapter = (BindingListViewAdapter<String>) listView.getAdapter();
assertThat(adapter).isInstanceOf(TestHelpers.MyBindingListViewAdapter.class);
}
@Test
@UiThreadTest
public void listViewAdapterItemIds() {
List<String> items = Arrays.asList("one", "two", "three");
List<Long> itemIds = Arrays.asList(1L, 2L, 3L);
TestHelpers.ViewModel viewModel = new TestHelpers.ViewModel.Builder(items, ItemBinding.<String>of(me.tatarka.bindingcollectionadapter2.BR.item, R.layout.item)).itemIds(itemIds).build();
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.list_view_adapter_id, null, false);
binding.setVariable(me.tatarka.bindingcollectionadapter2.BR.viewModel, viewModel);
binding.executePendingBindings();
ListView listView = (ListView) binding.getRoot();
@SuppressWarnings("unchecked")
BindingListViewAdapter<String> adapter = (BindingListViewAdapter<String>) listView.getAdapter();
assertThat(adapter).isInstanceOf(TestHelpers.MyBindingListViewAdapter.class);
assertThat(TestHelpers.iterableIds(adapter)).containsExactlyElementsOf(itemIds);
}
@Test
@UiThreadTest
public void listViewHeaderAdapter() {
List<String> items = Arrays.asList("one", "two", "three");
TestHelpers.ViewModel viewModel = new TestHelpers.ViewModel.Builder(items, ItemBinding.<String>of(me.tatarka.bindingcollectionadapter2.BR.item, R.layout.item)).build();
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.list_view, null, false);
binding.setVariable(me.tatarka.bindingcollectionadapter2.BR.viewModel, viewModel);
binding.executePendingBindings();
// addHeaderView must be called after the adapter is set.
((ListView) binding.getRoot()).addHeaderView(new View(binding.getRoot().getContext()));
// Trigger rebind to exercise the case when the adapter it wrapped in a HeaderListViewAdapter
binding.setVariable(me.tatarka.bindingcollectionadapter2.BR.viewModel, viewModel);
binding.executePendingBindings();
ListView listView = (ListView) binding.getRoot();
@SuppressWarnings("unchecked")
BindingListViewAdapter<String> adapter = (BindingListViewAdapter<String>) ((WrapperListAdapter) listView.getAdapter()).getWrappedAdapter();
assertThat(TestHelpers.iterable(adapter)).containsExactlyElementsOf(items);
}
}