package com.schibsted.spain.barista;
import android.support.annotation.IdRes;
import android.support.test.espresso.AmbiguousViewMatcherException;
import android.support.test.espresso.PerformException;
import android.support.test.espresso.action.ViewActions;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.Espresso.pressBack;
import static android.support.test.espresso.action.ViewActions.scrollTo;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static com.schibsted.spain.barista.custom.DisplayedMatchers.displayedWithId;
import static com.schibsted.spain.barista.custom.DisplayedMatchers.displayedWithText;
public class BaristaClickActions {
public static void click(@IdRes int id) {
try {
scrollAndClickView(id);
} catch (AmbiguousViewMatcherException multipleViewsMatched) {
try {
scrollAndClickDisplayedView(id);
} catch (PerformException parentIsNotAnScrollView) {
clickDisplayedView(id);
}
} catch (PerformException parentIsNotAnScrollView) {
clickDisplayedView(id);
}
}
public static void click(String text) {
try {
scrollAndClickView(text);
} catch (AmbiguousViewMatcherException multipleViewsMatched) {
try {
scrollAndClickDisplayedView(text);
} catch (PerformException parentIsNotAnScrollView) {
clickDisplayedView(text);
}
} catch (PerformException parentIsNotAnScrollView) {
clickDisplayedView(text);
}
}
public static void clickBack() {
pressBack();
}
private static void scrollAndClickView(@IdRes int id) {
onView(withId(id)).perform(scrollTo(), ViewActions.click());
}
private static void scrollAndClickView(String text) {
onView(withText(text)).perform(scrollTo(), ViewActions.click());
}
private static void scrollAndClickDisplayedView(@IdRes int id) {
onView(displayedWithId(id)).perform(scrollTo(), ViewActions.click());
}
private static void scrollAndClickDisplayedView(String text) {
onView(displayedWithText(text)).perform(scrollTo(), ViewActions.click());
}
private static void clickDisplayedView(@IdRes int id) {
onView(displayedWithId(id)).perform(ViewActions.click());
}
private static void clickDisplayedView(String text) {
onView(displayedWithText(text)).perform(ViewActions.click());
}
}