package edu.illinois.geoalarm.test;
import java.util.Calendar;
import com.jayway.android.robotium.solo.Solo;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.Smoke;
import android.widget.Spinner;
import edu.illinois.geoalarm.RouteMap;
import edu.illinois.geoalarm.TripPlanner;
/**
* Tests that the distance and time data is correctly fetched and displayed
* @author GeoAlarm
*
*/
public class DistanceTimeTest extends ActivityInstrumentationTestCase2<TripPlanner>
{
Activity mActivity;
Activity mCurrentActivity;
Spinner startingSpinner;
Spinner lineSpinner;
Solo solo;
public DistanceTimeTest()
{
super("edu.illinois.geoalarm", TripPlanner.class);
}
@Override
protected void setUp() throws Exception
{
super.setUp();
mActivity = this.getActivity();
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
protected void tearDown() throws Exception
{
mActivity.finish();
super.tearDown();
}
/**
* Setup a trip, and verify the distance and time data
*/
@Smoke
public void testCheckDistanceTime()
{
selectGoldLine();
selectStart();
selectDestination();
setAlarmOptions();
setAlarm();
checkDistanceAndTime();
}
/**
* Select a line
*/
public void selectGoldLine()
{
solo.clickOnEditText(0);
solo.enterText(0, "Gold");
solo.sendKey(Solo.ENTER);
assertTrue("Selected Gold", solo.searchText("Gold")); // make sure Gold was selected
}
/**
* Select starting location
*/
public void selectStart()
{
solo.clickOnEditText(1);
solo.enterText(1, "First & Gregory (NE Corner)");
((TripPlanner)mActivity).makeEditorAction();
assertTrue("Selected First & Gregory", solo.searchText("First & Gregory"));
}
/**
* Select destination location
*/
public void selectDestination()
{
solo.clickOnEditText(2);
solo.enterText(2, "Balboa & Southwest Dr. (NE Corner)");
solo.sendKey(Solo.ENTER);
solo.goBack();
solo.goBack();
assertTrue("Selected Balboa & Southwest", solo.searchText("Balboa & Southwest"));
}
/**
* Set some alarm options
*/
public void setAlarmOptions()
{
solo.clickOnText("Alarm Options");
thisWait(1000);
solo.clickInList(0);
thisWait(2000);
solo.clickInList(0);
solo.clickOnText("At Time");
Calendar c = Calendar.getInstance();
solo.setTimePicker(0, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE) + 2); // Set alarm for two minutes from now
solo.clickOnButton("Set");
solo.clickOnText("PopUp Message");
}
/**
* Set the alarm
*/
public void setAlarm()
{
solo.clickOnText("Set Alarm");
solo.assertCurrentActivity("Expected RouteMap Activity", RouteMap.class);
mCurrentActivity = solo.getCurrentActivity();
}
/**
* Check for data
*/
public void checkDistanceAndTime()
{
assertTrue(solo.searchText("6 mins"));
assertTrue(solo.searchText("1.5 mi"));
}
/**
* Sleeps the thread for milliseconds
* @param millis milliseconds to sleep
*/
private void thisWait(long millis)
{
try
{
Thread.sleep(millis);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}