package de.vanmar.android.yarrn.test;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import android.view.View;
import com.jayway.android.robotium.solo.Solo;
import junit.framework.Assert;
import de.vanmar.android.yarrn.MainActivity_;
import de.vanmar.android.yarrn.R;
public class MainActivityTest extends
ActivityInstrumentationTestCase2<MainActivity_> {
private Solo solo;
public MainActivityTest() {
super(MainActivity_.class);
}
@Override
public void setUp() {
solo = new Solo(getInstrumentation(), getActivity());
final String ravelryUrl = getActivity().getString(R.string.ravelry_url);
System.out.println("RavelryUrl is: " + ravelryUrl);
assertFalse("Must not be configured for live environment to run tests! Run target <config-dev>",
ravelryUrl.contains("ravelry.com"));
assertFalse("Replace localhost with IP address running the mock server",
ravelryUrl.contains("localhost"));
}
@Override
public void tearDown() {
solo.finishOpenedActivities();
}
public void testStartPage() {
assertText("Welthasen Viajante");
assertText("aqua diva");
}
public void testProjectDetails() {
// when
solo.clickOnText("aqua diva");
// then
assertText("Started:");
assertText("Finished:");
assertText("Notizfeld");
assertText("15%");
}
public void testFavorites() {
// when
openNavigationDrawer();
selectMyFavoritesMenuEntry();
// then
assertText("Trines Sleeves");
assertText("Martian Boy");
// when
solo.clickOnText("Martian Boy");
// then
assertText("Kati Galusz");
assertText("Tenth Doctor");
}
public void testStashes() {
// when
openNavigationDrawer();
selectMyStashesMenuEntry();
// then
assertText("Wollmeise \"Pure\" 100% Merino");
assertText("Wollmeise Lace-Garn");
// when
solo.clickOnText("Wollmeise \"Pure\" 100% Merino");
// then
assertText("Fingering 4ply 100% Merino");
assertText("Flaschenpost");
assertText("dunkler als ich dachte");
}
public void testBackAndForthNavigation() {
// start page
assertText("Welthasen Viajante");
// open detail page
solo.clickOnText("aqua diva");
assertText("Started:");
// navigate to my projects by back button and to project again
solo.goBack();
assertText("Welthasen Viajante");
solo.clickOnText("aqua diva");
assertText("Started:");
// navigate to faqvorites from navigation drawer
openNavigationDrawer();
selectMyFavoritesMenuEntry();
assertText("Trines Sleeves");
// call favorite
solo.clickOnText("Trines Sleeves");
assertText("Trines Sleeves");
assertText("Finished:");
// back to favorites list
solo.goBack();
assertText("Trines Sleeves");
assertText("Strata Sphere");
// back to previous project details
solo.goBack();
assertText("aqua diva");
// navigate to my projects from navigation drawer
openNavigationDrawer();
selectMyProjectsMenuEntry();
// my projects page is shown
assertText("Welthasen Viajante");
// navigate to my projects from navigation drawer again (check for duplicate on stack)
openNavigationDrawer();
selectMyProjectsMenuEntry();
// back button closes the app
solo.goBack();
assertTrue(solo.getCurrentActivity() instanceof MainActivity_);
assertTrue(solo.getCurrentActivity().isFinishing());
}
private void openNavigationDrawer() {
Activity activity = solo.getCurrentActivity();
View homeButton = activity.findViewById(android.R.id.home);
if (homeButton == null) {
homeButton = activity.findViewById(R.id.abs__home);
}
solo.clickOnView(homeButton);
}
private void selectMyProjectsMenuEntry() {
View menuItem = solo.getCurrentActivity().findViewById(R.id.menu_my_projects);
solo.clickOnView(menuItem);
}
private void selectMyFavoritesMenuEntry() {
View menuItem = solo.getCurrentActivity().findViewById(R.id.menu_my_favorites);
solo.clickOnView(menuItem);
}
private void selectMyStashesMenuEntry() {
View menuItem = solo.getCurrentActivity().findViewById(R.id.menu_my_stashes);
solo.clickOnView(menuItem);
}
private void assertText(String text) {
Assert.assertTrue(solo.waitForText(text, 1, 20000));
}
}