package com.tenclouds.loadingadaptersample.activities;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.support.v7.widget.RecyclerView;
import android.widget.EditText;
import com.azimolabs.conditionwatcher.ConditionWatcher;
import com.azimolabs.conditionwatcher.Instruction;
import com.tenclouds.infiniterecyclerview.AbstractInfiniteAdapter;
import com.tenclouds.infiniterecyclerview.InfiniteRecyclerView;
import com.tenclouds.loadingadaptersample.R;
import com.tenclouds.loadingadaptersample.utils.ItemsCountInstruction;
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.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.pressImeActionButton;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.contrib.RecyclerViewActions.scrollToPosition;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static junit.framework.Assert.assertEquals;
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
private static final int LOADING_VIEW_ID = -1;
public static final int EMPTY_VIEW_ID = -2;
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Before
public void setUp(){
ConditionWatcher.setTimeoutLimit(5000);
}
@Test
public void testLoadingMoreItems() throws Exception {
InfiniteRecyclerView recyclerView = (InfiniteRecyclerView) mActivityTestRule.getActivity().findViewById(R.id.recycler);
RecyclerView.Adapter adapter = recyclerView.getAdapter();
//load first 6 pages of items
for (int i = 20; i < 120; i += 20) {
ConditionWatcher.waitForCondition(new ItemsCountInstruction(adapter, i));
onView(withId(R.id.recycler)).perform(scrollToPosition(i - 1));
}
}
@Test
public void testShowEmptyMessage() throws Exception {
InfiniteRecyclerView infiniteRecyclerView = (InfiniteRecyclerView) mActivityTestRule.getActivity().findViewById(R.id.recycler);
AbstractInfiniteAdapter adapter = (AbstractInfiniteAdapter) infiniteRecyclerView.getAdapter();
onView(withId(R.id.menu_search)).perform(click());
onView(isAssignableFrom(EditText.class)).perform(typeText("No such item"), pressImeActionButton());
assertEquals(1, adapter.getItemCount());
assertEquals(LOADING_VIEW_ID, adapter.getItemViewType(0));
ConditionWatcher.waitForCondition(new Instruction() {
@Override
public String getDescription() {
return "Empty view is shown";
}
@Override
public boolean checkCondition() {
return adapter.getItemViewType(0) == EMPTY_VIEW_ID && adapter.getItemCount() == 1;
}
});
}
}