package com.mindbodyonline.ironhide.Infrastructure.IronhideViews; import android.support.test.espresso.Root; import android.support.test.espresso.assertion.LayoutAssertions; import android.support.test.espresso.matcher.LayoutMatchers; import android.view.View; import com.mindbodyonline.ironhide.PageObjects.PageObject; import org.hamcrest.Matcher; /** * Defines a ViewGroup typically referenced as a layout. * Examples include {@link android.widget.LinearLayout}, {@link android.widget.FrameLayout}, and {@link android.widget.RelativeLayout}. * * Provides generic assertions and matchers for Layouts * * @param <T> The model the current element will return when interacted with */ public class LayoutView<T extends PageObject> extends BaseView<T> { /** @see BaseView#BaseView(Class, org.hamcrest.Matcher) */ public LayoutView(Class<T> type, Matcher<View> viewMatcher) { super(type, viewMatcher); } /** @see BaseView#BaseView(Class, int) */ public LayoutView(Class<T> type, int resourceId) { super(type, resourceId); } /** @see BaseView#BaseView(Class, int, int) */ public LayoutView(Class<T> type, int IGNORED, int stringResourceId) { super(type, IGNORED, stringResourceId); } /** {@inheritDoc} */ @Override protected <E extends PageObject> LayoutView<E> goesTo(Class<E> type) { return new LayoutView<>(type, getSelector()); } /** * View matchers specific to layouts */ /** * Checks to see if this view matches {@link LayoutMatchers#hasEllipsizedText()} * @return The model reached by interacting with this element. */ @SuppressWarnings("unchecked") public T hasEllipsizedText() { return matches(LayoutMatchers.hasEllipsizedText()); } /** * Checks to see if this view matches {@link LayoutMatchers#hasMultilineText()} * @return The model reached by interacting with this element. */ @SuppressWarnings("unchecked") public T hasMultilineText() { return matches(LayoutMatchers.hasMultilineText()); } /** * View assertions specific to layouts */ /** * Checks to see if this view matches assertion {@link LayoutAssertions#noEllipsizedText()} * @return The model reached by interacting with this element. */ public T noEllipsizedText() { return checkAssertion(LayoutAssertions.noEllipsizedText()); } /** * Checks to see if this view matches assertion {@link LayoutAssertions#noMultilineButtons()} * @return The model reached by interacting with this element. */ public T noMultilineButtons() { return checkAssertion(LayoutAssertions.noMultilineButtons()); } /** * Checks to see if this view matches assertion {@link LayoutAssertions#noOverlaps(org.hamcrest.Matcher)} * @return The model reached by interacting with this element. */ public T noOverlaps(Matcher<View> selector) { return checkAssertion(LayoutAssertions.noOverlaps(selector)); } /** * Checks to see if this view matches assertion {@link LayoutAssertions#noMultilineButtons()} * @return The model reached by interacting with this element. */ public T noOverlaps() { return checkAssertion(LayoutAssertions.noOverlaps()); } /** * Root Matchers return LayoutView */ /** {@inheritDoc} */ @Override public LayoutView<T> changeRoot() { return (LayoutView<T>) super.changeRoot(); } /** {@inheritDoc} */ @Override public LayoutView<T> inRoot(Matcher<Root> rootMatcher) { return (LayoutView<T>) super.inRoot(rootMatcher); } /** {@inheritDoc} */ @Override public LayoutView<T> inDialogRoot() { return (LayoutView<T>) super.inDialogRoot(); } /** {@inheritDoc} */ @Override public LayoutView<T> inPlatformPopup() { return (LayoutView<T>) super.inPlatformPopup(); } /** {@inheritDoc} */ @Override public LayoutView<T> inTouchableRoot() { return (LayoutView<T>) super.inTouchableRoot(); } /** {@inheritDoc} */ @Override public LayoutView<T> inDecorView(Matcher<View> decorViewMatcher) { return (LayoutView<T>) super.inDecorView(decorViewMatcher); } /** {@inheritDoc} */ @Override public LayoutView<T> inFocusableRoot() { return (LayoutView<T>) super.inFocusableRoot(); } }