package com.jakewharton.rxbinding2.support.v4.widget;
import android.support.test.annotation.UiThreadTest;
import android.support.test.espresso.ViewAction;
import android.support.test.espresso.action.GeneralLocation;
import android.support.test.espresso.action.GeneralSwipeAction;
import android.support.test.espresso.action.Press;
import android.support.test.espresso.action.Swipe;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.support.v4.widget.SwipeRefreshLayout;
import com.jakewharton.rxbinding2.support.v4.test.R;
import com.jakewharton.rxbinding2.RecordingObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(AndroidJUnit4.class) public final class RxSwipeRefreshLayoutTest {
@Rule public final ActivityTestRule<RxSwipeRefreshLayoutTestActivity> activityRule =
new ActivityTestRule<>(RxSwipeRefreshLayoutTestActivity.class);
private SwipeRefreshLayout view;
@Before public void setUp() {
RxSwipeRefreshLayoutTestActivity activity = activityRule.getActivity();
view = activity.swipeRefreshLayout;
}
@Test public void refreshes() throws InterruptedException {
RecordingObserver<Object> o = new RecordingObserver<>();
RxSwipeRefreshLayout.refreshes(view)
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(o);
o.assertNoMoreEvents();
onView(withId(R.id.swipe_refresh_layout)).perform(swipeDown());
o.takeNext();
o.dispose();
onView(withId(R.id.swipe_refresh_layout)).perform(swipeDown());
o.assertNoMoreEvents();
}
@Test @UiThreadTest public void refreshing() throws Exception {
Consumer<? super Boolean> action = RxSwipeRefreshLayout.refreshing(view);
assertFalse(view.isRefreshing());
action.accept(true);
assertTrue(view.isRefreshing());
action.accept(false);
assertFalse(view.isRefreshing());
}
private static ViewAction swipeDown() {
return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.TOP_CENTER,
GeneralLocation.BOTTOM_CENTER, Press.FINGER);
}
}