package com.mindbodyonline.ironhidetestapp.tests; import android.test.suitebuilder.annotation.LargeTest; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import com.mindbodyonline.ironhidetestapp.LongListActivity; import com.mindbodyonline.ironhidetestapp.LongListMatchers; import com.mindbodyonline.ironhidetestapp.TestFixture; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; import org.junit.Test; import static org.hamcrest.Matchers.not; /** * Demonstrates the usage of * {@link com.mindbodyonline.ironhide.Infrastructure.IronhideViews.ListAdapter}s * to match data within list views. */ @LargeTest public class AdapterViewTest extends TestFixture<LongListActivity> { public AdapterViewTest() { super(LongListActivity.class); } @Test public void testClickOnItem50() { LongListPage .Item50Adapter.click() .RowText.withText("50") ; } @Test public void testClickOnSpecificChildOfRow60() { LongListPage .Item60Adapter.getItem(LongListPage.ItemSize).click() .RowText.withText("60") .ColumnText.withText("2") ; } @Test public void testClickOnFirstAndFifthItemOfLength8() { LongListPage .ItemSize8Adapter.getFirst().click() .RowText.withText("10") .ItemSize8Adapter.getItemAtPosition(4).click() .RowText.withText("14") ; } @Test public void testClickFooter() { LongListPage .FooterAdapter.click() .RowText.withText("100") ; } @Test public void testDataItemNotInAdapter() { LongListPage .List.matches(not(withAdaptedData(LongListMatchers.withItemContent("item: 168")))) ; } private static Matcher<View> withAdaptedData(final Matcher<Object> dataMatcher) { return new TypeSafeMatcher<View>() { @Override public void describeTo(Description description) { description.appendText("with class name: "); dataMatcher.describeTo(description); } @Override public boolean matchesSafely(View view) { if (!(view instanceof AdapterView)) { return false; } @SuppressWarnings("rawtypes") Adapter adapter = ((AdapterView) view).getAdapter(); for (int i = 0; i < adapter.getCount(); i++) { if (dataMatcher.matches(adapter.getItem(i))) { return true; } } return false; } }; } }