package com.jakewharton.rxbinding2.widget; import android.app.Instrumentation; import android.support.test.InstrumentationRegistry; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.widget.ListView; import com.jakewharton.rxbinding2.RecordingObserver; import io.reactivex.android.schedulers.AndroidSchedulers; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.assertEquals; @RunWith(AndroidJUnit4.class) public final class RxAbsListViewTest { @Rule public final ActivityTestRule<RxAbsListViewTestActivity> activityRule = new ActivityTestRule<>(RxAbsListViewTestActivity.class); private Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); private RxAbsListViewTestActivity activity; ListView listView; @Before public void setUp() { activity = activityRule.getActivity(); listView = activity.listView; } @Test public void scrollEvents() { RecordingObserver<AbsListViewScrollEvent> o = new RecordingObserver<>(); RxAbsListView.scrollEvents(listView) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(o); AbsListViewScrollEvent event = o.takeNext(); assertEquals(100, event.totalItemCount()); assertEquals(0, event.firstVisibleItem()); assertEquals(0, event.scrollState()); instrumentation.runOnMainSync(new Runnable() { @Override public void run() { listView.smoothScrollToPosition(50); } }); AbsListViewScrollEvent event1 = o.takeNext(); assertEquals(listView, event1.view()); assertEquals(100, event1.totalItemCount()); o.dispose(); instrumentation.runOnMainSync(new Runnable() { @Override public void run() { listView.smoothScrollToPosition(100); } }); o.assertNoMoreEvents(); } }