package com.mindbodyonline.ironhide.Infrastructure.IronhideViews; import android.support.test.espresso.Root; import android.support.test.espresso.ViewAction; import android.support.test.espresso.contrib.RecyclerViewActions; import android.support.v7.widget.RecyclerView; import android.view.View; import com.mindbodyonline.ironhide.PageObjects.PageObject; import org.hamcrest.Matcher; /** * Wrapper for RecyclerViewActions that act specifically on RecyclerViews. * * ViewActions to interact RecyclerView. RecyclerView works differently than AdapterView. * RecyclerView is not an {@link android.widget.AdapterView} anymore, hence it can't be used in * combination with {@link android.support.test.espresso.Espresso#onData(org.hamcrest.Matcher)} */ public class Recycler<T extends PageObject> extends BaseView<T> { /** @see BaseView#BaseView(Class, org.hamcrest.Matcher) */ public Recycler(Class<T> type, Matcher<View> viewMatcher) { super(type, viewMatcher); } /** @see BaseView#BaseView(Class, int) */ public Recycler(Class<T> type, int resourceId) { super(type, resourceId); } /** @see BaseView#BaseView(Class,int, int) */ public Recycler(Class<T> type, int IGNORED, int stringResourceId) { super(type, IGNORED, stringResourceId); } /** {@inheritDoc} */ @Override public <E extends PageObject> Recycler<E> goesTo(Class<E> type) { return new Recycler<>(type, getSelector()); } /** * @see android.support.test.espresso.contrib.RecyclerViewActions#actionOnHolderItem(org.hamcrest.Matcher, android.support.test.espresso.ViewAction) * @return The model reached by interacting with this element. */ public T actionOnHolderItem(Matcher<? extends RecyclerView.ViewHolder> viewHolderMatcher, ViewAction viewAction) { return performAction(RecyclerViewActions.actionOnHolderItem(viewHolderMatcher, viewAction)); } /** * @see android.support.test.espresso.contrib.RecyclerViewActions#actionOnItem(org.hamcrest.Matcher, android.support.test.espresso.ViewAction) * @return The model reached by interacting with this element */ public T actionOnItem(Matcher<View> itemViewMatcher, ViewAction viewAction) { return performAction(RecyclerViewActions.actionOnItem(itemViewMatcher, viewAction)); } /** * @see android.support.test.espresso.contrib.RecyclerViewActions#actionOnItemAtPosition(int, android.support.test.espresso.ViewAction) * @return The model reached by interacting with this element */ public T actionOnItemAtPosition(int position, ViewAction viewAction) { return performAction(RecyclerViewActions.actionOnItemAtPosition(position, viewAction)); } /** * @see android.support.test.espresso.contrib.RecyclerViewActions#scrollTo(org.hamcrest.Matcher) * @return The model reached by interacting with this element */ public T scrollTo(Matcher<View> itemViewMatcher) { return performAction(RecyclerViewActions.scrollTo(itemViewMatcher)); } /** * @see android.support.test.espresso.contrib.RecyclerViewActions#scrollToHolder(org.hamcrest.Matcher) * @return The model reached by interacting with this element */ public T scrollToHolder(Matcher<? extends RecyclerView.ViewHolder> viewHolderMatcher) { return performAction(RecyclerViewActions.scrollToHolder(viewHolderMatcher)); } /** * @see android.support.test.espresso.contrib.RecyclerViewActions#scrollToPosition(int) * @return The model reached by interacting with this element */ public T scrollToPosition(int position) { return performAction(RecyclerViewActions.scrollToPosition(position)); } /** * Root Matchers return Recycler */ /** {@inheritDoc} */ @Override public Recycler<T> changeRoot() { return (Recycler<T>) super.changeRoot(); } /** {@inheritDoc} */ @Override public Recycler<T> inRoot(Matcher<Root> rootMatcher) { return (Recycler<T>) super.inRoot(rootMatcher); } /** {@inheritDoc} */ @Override public Recycler<T> inDialogRoot() { return (Recycler<T>) super.inDialogRoot(); } /** {@inheritDoc} */ @Override public Recycler<T> inPlatformPopup() { return (Recycler<T>) super.inPlatformPopup(); } /** {@inheritDoc} */ @Override public Recycler<T> inTouchableRoot() { return (Recycler<T>) super.inTouchableRoot(); } /** {@inheritDoc} */ @Override public Recycler<T> inDecorView(Matcher<View> decorViewMatcher) { return (Recycler<T>) super.inDecorView(decorViewMatcher); } /** {@inheritDoc} */ @Override public Recycler<T> inFocusableRoot() { return (Recycler<T>) super.inFocusableRoot(); } }