package screengrab; import android.app.Instrumentation; import android.content.SharedPreferences; import android.graphics.Point; import android.os.SystemClock; import android.preference.PreferenceManager; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.support.v4.content.SharedPreferencesCompat; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.helper.ItemTouchHelper; import android.test.UiThreadTest; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.mockito.Mockito; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import de.luhmer.owncloudnewsreader.NewsReaderDetailFragment; import de.luhmer.owncloudnewsreader.NewsReaderListActivity; import de.luhmer.owncloudnewsreader.NewsReaderListFragment; import de.luhmer.owncloudnewsreader.R; import de.luhmer.owncloudnewsreader.SettingsActivity; import de.luhmer.owncloudnewsreader.adapter.NewsListRecyclerAdapter; import de.luhmer.owncloudnewsreader.adapter.ViewHolder; import de.luhmer.owncloudnewsreader.database.DatabaseConnectionOrm; import de.luhmer.owncloudnewsreader.model.PodcastItem; import de.luhmer.owncloudnewsreader.model.UserInfo; import tools.fastlane.screengrab.Screengrab; import tools.fastlane.screengrab.locale.LocaleTestRule; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.matcher.ViewMatchers.withId; /** * Created by David on 06.03.2016. */ @RunWith(AndroidJUnit4.class) public class ScreenshotTest { @ClassRule public static final LocaleTestRule localTestRule = new LocaleTestRule(); @Rule public ActivityTestRule<NewsReaderListActivity> mActivityRule = new ActivityTestRule<>(NewsReaderListActivity.class); private MenuItem menuItem; private NewsReaderListActivity activity; private NewsReaderListFragment nrlf; private NewsReaderDetailFragment nrdf; private int itemPos = 0; @Before public void setup() { menuItem = Mockito.mock(MenuItem.class); activity = mActivityRule.getActivity(); nrlf = mActivityRule.getActivity().getSlidingListFragment(); nrdf = mActivityRule.getActivity().getNewsReaderDetailFragment(); SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(mActivityRule.getActivity()); UserInfo userInfo = new UserInfo.Builder() .setUserId("1") .setDisplayName("David") .setAvatar(null) .build(); try { mPrefs.edit().putString("USER_INFO", NewsReaderListFragment.toString(userInfo)).commit(); mPrefs.edit().putBoolean(SettingsActivity.CB_SKIP_DETAILVIEW_AND_OPEN_BROWSER_DIRECTLY_STRING, false).commit(); } catch (IOException e) { e.printStackTrace(); } } @Test public void testTakeScreenshots() { Screengrab.screenshot("startup"); Mockito.when(menuItem.getItemId()).thenReturn(android.R.id.home); activity.runOnUiThread(new Runnable() { public void run() { //Set url to mock nrlf.bindUserInfoToUI(true); mActivityRule.getActivity().onOptionsItemSelected(menuItem); //Open Drawer nrlf.getListView().expandGroup(2); } }); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } Screengrab.screenshot("slider_open"); activity.runOnUiThread(new Runnable() { public void run() { activity.onOptionsItemSelected(menuItem); //Close Drawer try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } activity.onClick(null, itemPos); //Select item } }); try { Thread.sleep(8000); } catch (InterruptedException e) { e.printStackTrace(); } Screengrab.screenshot("detail_activity"); activity.runOnUiThread(new Runnable() { @Override public void run() { NewsListRecyclerAdapter na = (NewsListRecyclerAdapter) nrdf.getRecyclerView().getAdapter(); ViewHolder vh = (ViewHolder) nrdf.getRecyclerView().getChildViewHolder(nrdf.getRecyclerView().getLayoutManager().findViewByPosition(itemPos)); na.ChangeReadStateOfItem(vh, false); } }); } @Test public void testPodcast() { activity.runOnUiThread(new Runnable() { public void run() { //Set url to mock nrlf.bindUserInfoToUI(true); mActivityRule.getActivity().onOptionsItemSelected(menuItem); //Open Drawer nrlf.getListView().expandGroup(2); nrlf.onChildClickListener.onChildClick(null, null, 2, 2, 0); //Click on Android Central Podcast } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } Screengrab.screenshot("podcast_list"); activity.runOnUiThread(new Runnable() { public void run() { ViewHolder vh = (ViewHolder) nrdf.getRecyclerView().getChildViewHolder(nrdf.getRecyclerView().getLayoutManager().findViewByPosition(1)); PodcastItem podcastItem = DatabaseConnectionOrm.ParsePodcastItemFromRssItem(activity, vh.getRssItem()); activity.openMediaItem(podcastItem); } }); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } Screengrab.screenshot("podcast_running"); activity.runOnUiThread(new Runnable() { public void run() { activity.pausePodcast(); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } @Test public void testVideoPodcast() { activity.runOnUiThread(new Runnable() { public void run() { //Set url to mock nrlf.bindUserInfoToUI(true); mActivityRule.getActivity().onOptionsItemSelected(menuItem); //Open Drawer nrlf.onChildClickListener.onChildClick(null, null, 0, 7, 0); //Click on Android Central Podcast } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } activity.runOnUiThread(new Runnable() { public void run() { ViewHolder vh = (ViewHolder) nrdf.getRecyclerView().getChildViewHolder(nrdf.getRecyclerView().getLayoutManager().findViewByPosition(1)); PodcastItem podcastItem = DatabaseConnectionOrm.ParsePodcastItemFromRssItem(activity, vh.getRssItem()); activity.openMediaItem(podcastItem); } }); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } Screengrab.screenshot("video_podcast_running"); activity.runOnUiThread(new Runnable() { public void run() { activity.pausePodcast(); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }