Merge heads

This commit is contained in:
youtaol
2012-06-29 12:22:52 +08:00
7 changed files with 188 additions and 104 deletions
@@ -35,7 +35,6 @@ import java.util.ArrayList;
public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2<TrackListActivity> { public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2<TrackListActivity> {
private static final String WAYPOINT_NAME = "testWaypoint"; private static final String WAYPOINT_NAME = "testWaypoint";
private static final String RELATIVE_STARTTIME_POSTFIX = "mins ago";
private Instrumentation instrumentation; private Instrumentation instrumentation;
private TrackListActivity activityMyTracks; private TrackListActivity activityMyTracks;
@@ -116,8 +115,8 @@ public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2<Tra
// If no account is binded with this device. // If no account is binded with this device.
if (EndToEndTestUtils.SOLO.waitForText(activityMyTracks if (EndToEndTestUtils.SOLO.waitForText(activityMyTracks
.getString(R.string.send_google_no_account_title), 1, 500)) { .getString(R.string.send_google_no_account_title), 1, 10000)) {
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
} else { } else {
assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks
.getString(R.string.generic_progress_title))); .getString(R.string.generic_progress_title)));
@@ -129,7 +128,7 @@ public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2<Tra
// For we not sure the send will be successful, just check whether the result dialog is display. // For we not sure the send will be successful, just check whether the result dialog is display.
assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks
.getString(R.string.share_track_share_url))); .getString(R.string.share_track_share_url)));
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
} }
} }
@@ -148,6 +147,7 @@ public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2<Tra
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
EndToEndTestUtils.rotateAllActivities(); EndToEndTestUtils.rotateAllActivities();
EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.generic_save));
sendKeys(KeyEvent.KEYCODE_DEL); sendKeys(KeyEvent.KEYCODE_DEL);
ArrayList<EditText> editTexts = EndToEndTestUtils.SOLO.getCurrentEditTexts(); ArrayList<EditText> editTexts = EndToEndTestUtils.SOLO.getCurrentEditTexts();
@@ -212,14 +212,12 @@ public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2<Tra
public void testTrackStartTime() { public void testTrackStartTime() {
// Delete all track first. // Delete all track first.
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete_all), true); EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete_all), true);
EndToEndTestUtils.SOLO.clickOnButton(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
// Reset all settings. // Reset all settings.
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_settings), true); EndToEndTestUtils.resetAllSettings(activityMyTracks, false);
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.settings_reset));
EndToEndTestUtils.SOLO.clickOnButton(activityMyTracks.getString(R.string.generic_ok)); assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.track_list_empty_message)));
instrumentation.waitForIdleSync();
EndToEndTestUtils.SOLO.goBack();
// Test should not show relative time. // Test should not show relative time.
EndToEndTestUtils.startRecording(); EndToEndTestUtils.startRecording();
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
@@ -229,13 +227,13 @@ public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2<Tra
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
assertFalse(EndToEndTestUtils.SOLO.waitForText(RELATIVE_STARTTIME_POSTFIX, 1, 500)); assertFalse(EndToEndTestUtils.SOLO.waitForText(EndToEndTestUtils.RELATIVE_STARTTIME_POSTFIX, 1, 5000));
// Test should show relative time for createSimpleTrack would save a track // Test should show relative time for createSimpleTrack would save a track
// name that is different with the start time. // name that is different with the start time.
EndToEndTestUtils.createSimpleTrack(2); EndToEndTestUtils.createSimpleTrack(2);
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
assertTrue(EndToEndTestUtils.SOLO.waitForText(RELATIVE_STARTTIME_POSTFIX, 1, 5000)); assertTrue(EndToEndTestUtils.SOLO.waitForText(EndToEndTestUtils.RELATIVE_STARTTIME_POSTFIX, 1, 5000));
} }
/** /**
@@ -62,7 +62,7 @@ public class DeleteTest extends ActivityInstrumentationTestCase2<TrackListActivi
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete_all), true); EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete_all), true);
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
EndToEndTestUtils.rotateAllActivities(); EndToEndTestUtils.rotateAllActivities();
EndToEndTestUtils.SOLO.clickOnButton(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
// There is no track now. // There is no track now.
trackListView = EndToEndTestUtils.SOLO.getCurrentListViews(); trackListView = EndToEndTestUtils.SOLO.getCurrentListViews();
@@ -74,7 +74,7 @@ public class DeleteTest extends ActivityInstrumentationTestCase2<TrackListActivi
EndToEndTestUtils.GPX.toUpperCase())); EndToEndTestUtils.GPX.toUpperCase()));
assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks
.getString(R.string.sd_card_save_error_no_track))); .getString(R.string.sd_card_save_error_no_track)));
EndToEndTestUtils.SOLO.clickLongOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
} }
/** /**
@@ -89,7 +89,8 @@ public class DeleteTest extends ActivityInstrumentationTestCase2<TrackListActivi
EndToEndTestUtils.SOLO.clickOnView(trackListView.get(0).getChildAt(0)); EndToEndTestUtils.SOLO.clickOnView(trackListView.get(0).getChildAt(0));
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete), true); EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete), true);
EndToEndTestUtils.SOLO.clickLongOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils
.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
trackListView = EndToEndTestUtils.SOLO.getCurrentListViews(); trackListView = EndToEndTestUtils.SOLO.getCurrentListViews();
int trackNumberNew = trackListView.get(0).getCount(); int trackNumberNew = trackListView.get(0).getCount();
@@ -102,15 +103,15 @@ public class DeleteTest extends ActivityInstrumentationTestCase2<TrackListActivi
public void testDeleteOneTrackUnderRecording() { public void testDeleteOneTrackUnderRecording() {
EndToEndTestUtils.startRecording(); EndToEndTestUtils.startRecording();
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
assertTrue(EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_stop_recording), assertTrue(EndToEndTestUtils.findMenuItem(
false)); activityMyTracks.getString(R.string.menu_stop_recording), false));
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete), EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete), true);
true); EndToEndTestUtils
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); .getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
assertTrue(EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_record_track), assertTrue(EndToEndTestUtils.findMenuItem(
false)); activityMyTracks.getString(R.string.menu_record_track), false));
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
assertTrue(EndToEndTestUtils.findMenuItem( assertTrue(EndToEndTestUtils.findMenuItem(
activityMyTracks.getString(R.string.menu_record_track), false)); activityMyTracks.getString(R.string.menu_record_track), false));
@@ -37,6 +37,7 @@ import java.io.PrintStream;
import java.net.Socket; import java.net.Socket;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
/** /**
* Provides utilities to smoke test. * Provides utilities to smoke test.
@@ -67,10 +68,16 @@ public class EndToEndTestUtils {
static final String BACKUPS = "backups"; static final String BACKUPS = "backups";
static final String MENU_MORE = "More"; static final String MENU_MORE = "More";
static String trackName; static String trackName;
// Following is some check strings in English and Chinese
private static final HashMap<String, String> RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL = new HashMap<String, String>();
private static final HashMap<String, String> VIEW_MODE_ENGLISH_MULTILINGUAL = new HashMap<String, String>();
public static String RELATIVE_STARTTIME_POSTFIX = "";
public static String VIEW_MODE = "";
static Solo SOLO; static Solo SOLO;
static Instrumentation INSTRUMENTATION; static Instrumentation instrumentation;
static TrackListActivity ACTIVITYMYTRACKS; static TrackListActivity activityMytracks;
// Check whether the UI has an action bar which is related with the version of // Check whether the UI has an action bar which is related with the version of
// Android OS. // Android OS.
static boolean hasActionBar = false; static boolean hasActionBar = false;
@@ -78,6 +85,31 @@ public class EndToEndTestUtils {
static boolean isCheckedFirstLaunch = false; static boolean isCheckedFirstLaunch = false;
private EndToEndTestUtils() {} private EndToEndTestUtils() {}
private static void checkLanguage() {
RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL.put("es", "mins ago");
RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL.put("de", "minute");
RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL.put("fr", "Minuten");
RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL.put("ar", "دقيقة");
RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL.put("zh", "分钟前");
VIEW_MODE_ENGLISH_MULTILINGUAL.put("es", "mode");
VIEW_MODE_ENGLISH_MULTILINGUAL.put("de", "modus");
VIEW_MODE_ENGLISH_MULTILINGUAL.put("fr", "Mode");
VIEW_MODE_ENGLISH_MULTILINGUAL.put("ar", "وضع");
VIEW_MODE_ENGLISH_MULTILINGUAL.put("zh", "模式");
// Check the language, test in Chinese or English.
String deviceLanguage = instrumentation.getContext().getResources().getConfiguration().locale.getLanguage();
if (RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL.get(deviceLanguage) != null) {
RELATIVE_STARTTIME_POSTFIX = RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL.get(deviceLanguage);
VIEW_MODE = VIEW_MODE_ENGLISH_MULTILINGUAL.get(deviceLanguage);
} else {
RELATIVE_STARTTIME_POSTFIX = RELATIVE_STARTTIME_POSTFIX_MULTILINGUAL.get("es");
VIEW_MODE = VIEW_MODE_ENGLISH_MULTILINGUAL.get("es");
}
}
/** /**
* Sends Gps data to emulator. * Sends Gps data to emulator.
@@ -134,27 +166,27 @@ public class EndToEndTestUtils {
*/ */
static void setupForAllTest(Instrumentation instrumentation, TrackListActivity activityMyTracks) { static void setupForAllTest(Instrumentation instrumentation, TrackListActivity activityMyTracks) {
setIsEmulator(); setIsEmulator();
EndToEndTestUtils.INSTRUMENTATION = instrumentation; EndToEndTestUtils.instrumentation = instrumentation;
EndToEndTestUtils.ACTIVITYMYTRACKS = activityMyTracks; EndToEndTestUtils.activityMytracks = activityMyTracks;
EndToEndTestUtils.SOLO = new Solo(EndToEndTestUtils.INSTRUMENTATION, EndToEndTestUtils.SOLO = new Solo(EndToEndTestUtils.instrumentation,
EndToEndTestUtils.ACTIVITYMYTRACKS); EndToEndTestUtils.activityMytracks);
// Check if open MyTracks first time after install. If so, there would be a // Check if open MyTracks first time after install. If so, there would be a
// welcome view with accept buttons. And makes sure only check once. // welcome view with accept buttons. And makes sure only check once.
if (!EndToEndTestUtils.isCheckedFirstLaunch) { if (!EndToEndTestUtils.isCheckedFirstLaunch) {
if ((EndToEndTestUtils.getButtonOnScreen(EndToEndTestUtils.ACTIVITYMYTRACKS if ((EndToEndTestUtils.getButtonOnScreen(EndToEndTestUtils.activityMytracks
.getString(R.string.eula_accept)) != null)) { .getString(R.string.eula_accept), false, false) != null)) {
EndToEndTestUtils.verifyFirstLaunch(); EndToEndTestUtils.verifyFirstLaunch();
} else if (EndToEndTestUtils.SOLO.waitForText( } else if (EndToEndTestUtils.SOLO.waitForText(
// After reset setting, welcome page will show again. // After reset setting, welcome page will show again.
ACTIVITYMYTRACKS.getString(R.string.welcome_title), 0, 500)) { activityMytracks.getString(R.string.welcome_title), 0, 500)) {
resetPreferredUnits(); resetPreferredUnits();
} }
checkLanguage();
EndToEndTestUtils.isCheckedFirstLaunch = true; EndToEndTestUtils.isCheckedFirstLaunch = true;
EndToEndTestUtils.setHasActionBar(); EndToEndTestUtils.setHasActionBar();
} else if (EndToEndTestUtils.SOLO.waitForText( } else if (EndToEndTestUtils.SOLO.waitForText(
// After reset setting, welcome page will show again. // After reset setting, welcome page will show again.
ACTIVITYMYTRACKS.getString(R.string.welcome_title), 0, 500)) { activityMytracks.getString(R.string.welcome_title), 0, 500)) {
resetPreferredUnits(); resetPreferredUnits();
} }
@@ -169,10 +201,10 @@ public class EndToEndTestUtils {
* Checks if need reset preferred units. * Checks if need reset preferred units.
*/ */
private static void resetPreferredUnits() { private static void resetPreferredUnits() {
EndToEndTestUtils.SOLO.clickOnText(ACTIVITYMYTRACKS.getString(R.string.generic_ok)); getButtonOnScreen(activityMytracks.getString(R.string.generic_ok), true, true);
SOLO.waitForText(ACTIVITYMYTRACKS.getString(R.string.settings_stats_units_title)); SOLO.waitForText(activityMytracks.getString(R.string.settings_stats_units_title));
EndToEndTestUtils.SOLO.clickOnText(ACTIVITYMYTRACKS.getString(R.string.generic_ok)); getButtonOnScreen(activityMytracks.getString(R.string.generic_ok), true, true);
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
} }
@@ -191,12 +223,14 @@ public class EndToEndTestUtils {
* Accepts terms and configures units. * Accepts terms and configures units.
*/ */
static void verifyFirstLaunch() { static void verifyFirstLaunch() {
SOLO.clickOnText(ACTIVITYMYTRACKS.getString(R.string.eula_accept)); getButtonOnScreen(activityMytracks.getString(R.string.eula_accept), true, true);
// Click for welcome. if (SOLO.waitForText(activityMytracks.getString(R.string.generic_ok))) {
SOLO.clickOnText(ACTIVITYMYTRACKS.getString(R.string.generic_ok)); // Click for welcome.
// Click for choose units. getButtonOnScreen(activityMytracks.getString(R.string.generic_ok), true, true);
SOLO.clickOnText(ACTIVITYMYTRACKS.getString(R.string.generic_ok)); // Click for choose units.
INSTRUMENTATION.waitForIdleSync(); getButtonOnScreen(activityMytracks.getString(R.string.generic_ok), true, true);
instrumentation.waitForIdleSync();
}
} }
/** /**
@@ -208,7 +242,7 @@ public class EndToEndTestUtils {
static void createSimpleTrack(int numberOfGpsData) { static void createSimpleTrack(int numberOfGpsData) {
startRecording(); startRecording();
EndToEndTestUtils.sendGps(numberOfGpsData); EndToEndTestUtils.sendGps(numberOfGpsData);
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
stopRecording(true); stopRecording(true);
} }
@@ -228,6 +262,7 @@ public class EndToEndTestUtils {
View oneTrack = SOLO.getCurrentListViews().get(0).getChildAt(0); View oneTrack = SOLO.getCurrentListViews().get(0).getChildAt(0);
trackName = (String) ((TextView) oneTrack.findViewById(R.id.list_item_name)).getText(); trackName = (String) ((TextView) oneTrack.findViewById(R.id.list_item_name)).getText();
if (isClick) { if (isClick) {
SOLO.scrollUp();
SOLO.clickOnView(oneTrack); SOLO.clickOnView(oneTrack);
} }
return false; return false;
@@ -255,18 +290,18 @@ public class EndToEndTestUtils {
*/ */
static void startRecording() { static void startRecording() {
if (hasActionBar) { if (hasActionBar) {
Button startButton = getButtonOnScreen(ACTIVITYMYTRACKS.getString(R.string.menu_record_track)); Button startButton = getButtonOnScreen(activityMytracks.getString(R.string.menu_record_track), false, false);
// In case a track is recording. // In case a track is recording.
if (startButton == null) { if (startButton == null) {
stopRecording(true); stopRecording(true);
startButton = getButtonOnScreen(ACTIVITYMYTRACKS.getString(R.string.menu_record_track)); startButton = getButtonOnScreen(activityMytracks.getString(R.string.menu_record_track), false, false);
} }
SOLO.clickOnView(startButton); SOLO.clickOnView(startButton);
} else { } else {
showMoreMenuItem(); showMoreMenuItem();
if (!SOLO.searchText(ACTIVITYMYTRACKS.getString(R.string.menu_record_track))) { if (!SOLO.searchText(activityMytracks.getString(R.string.menu_record_track))) {
// Check if in TrackDetailActivity. // Check if in TrackDetailActivity.
if (SOLO.searchText(ACTIVITYMYTRACKS.getString(R.string.menu_play))) { if (SOLO.searchText(activityMytracks.getString(R.string.menu_play))) {
SOLO.goBack(); SOLO.goBack();
} else { } else {
// In case a track is recording. // In case a track is recording.
@@ -274,8 +309,8 @@ public class EndToEndTestUtils {
showMoreMenuItem(); showMoreMenuItem();
} }
} }
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
SOLO.clickOnText(ACTIVITYMYTRACKS.getString(R.string.menu_record_track)); SOLO.clickOnText(activityMytracks.getString(R.string.menu_record_track));
} }
} }
@@ -286,12 +321,12 @@ public class EndToEndTestUtils {
*/ */
static boolean isUnderRecording() { static boolean isUnderRecording() {
if (hasActionBar) { if (hasActionBar) {
return getButtonOnScreen(ACTIVITYMYTRACKS return getButtonOnScreen(activityMytracks
.getString(R.string.menu_record_track)) == null; .getString(R.string.menu_record_track), false, false) == null;
} }
showMoreMenuItem(); showMoreMenuItem();
if (SOLO.searchText(ACTIVITYMYTRACKS.getString(R.string.menu_record_track)) if (SOLO.searchText(activityMytracks.getString(R.string.menu_record_track))
|| SOLO.searchText(ACTIVITYMYTRACKS.getString(R.string.menu_play))) { || SOLO.searchText(activityMytracks.getString(R.string.menu_play))) {
SOLO.goBack(); SOLO.goBack();
return false; return false;
} }
@@ -302,18 +337,18 @@ public class EndToEndTestUtils {
/** /**
* Stops recoding track. * Stops recoding track.
* *
* @param isSave ture means should save this track * @param isSave true means should save this track
*/ */
static void stopRecording(boolean isSave) { static void stopRecording(boolean isSave) {
if (hasActionBar) { if (hasActionBar) {
SOLO.clickOnView(getButtonOnScreen(ACTIVITYMYTRACKS.getString(R.string.menu_stop_recording))); getButtonOnScreen(activityMytracks.getString(R.string.menu_stop_recording), false, true);
} else { } else {
showMoreMenuItem(); showMoreMenuItem();
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
SOLO.clickOnText(ACTIVITYMYTRACKS.getString(R.string.menu_stop_recording)); SOLO.clickOnText(activityMytracks.getString(R.string.menu_stop_recording));
} }
if (isSave) { if (isSave) {
INSTRUMENTATION.waitForIdleSync(); EndToEndTestUtils.SOLO.waitForText(activityMytracks.getString(R.string.generic_save), 1, 5000);
// Make every track name is unique to make sure every check can be // Make every track name is unique to make sure every check can be
// trusted. // trusted.
EndToEndTestUtils.trackName = EndToEndTestUtils.TRACK_NAME_PREFIX EndToEndTestUtils.trackName = EndToEndTestUtils.TRACK_NAME_PREFIX
@@ -323,7 +358,7 @@ public class EndToEndTestUtils {
// Close soft keyboard. // Close soft keyboard.
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
} }
SOLO.clickLongOnText(ACTIVITYMYTRACKS.getString(R.string.generic_save)); SOLO.clickLongOnText(activityMytracks.getString(R.string.generic_save));
} }
} }
@@ -366,25 +401,34 @@ public class EndToEndTestUtils {
*/ */
static void saveTrackToSdCard(String trackKind) { static void saveTrackToSdCard(String trackKind) {
deleteExportedFiles(trackKind); deleteExportedFiles(trackKind);
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
findMenuItem(ACTIVITYMYTRACKS.getString(R.string.menu_save), true); findMenuItem(activityMytracks.getString(R.string.menu_save), true);
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
SOLO.clickOnText(trackKind.toUpperCase()); SOLO.clickOnText(trackKind.toUpperCase());
rotateAllActivities(); // rotateAllActivities();
SOLO.waitForText(ACTIVITYMYTRACKS.getString(R.string.generic_success_title)); SOLO.waitForText(activityMytracks.getString(R.string.generic_success_title));
} }
/** /**
* Checks if a button is existed in the screen. * Checks if a button is existed in the screen.
* *
* @param buttonName the name string of the button * @param buttonName the name string of the button
* @param isWait whether wait the text
* @param isClick whether click the button if find it
* @return the button to search, and null means can not find the button * @return the button to search, and null means can not find the button
*/ */
static Button getButtonOnScreen(String buttonName) { static Button getButtonOnScreen(String buttonName, boolean isWait,boolean isClick) {
instrumentation.waitForIdleSync();
if (isWait) {
SOLO.waitForText(buttonName);
}
ArrayList<Button> currentButtons = SOLO.getCurrentButtons(); ArrayList<Button> currentButtons = SOLO.getCurrentButtons();
for (Button button : currentButtons) { for (Button button : currentButtons) {
String title = (String) button.getText(); String title = (String) button.getText();
if (title.equalsIgnoreCase(buttonName)) { if (title.equalsIgnoreCase(buttonName)) {
if(isClick) {
SOLO.clickOnView(button);
}
return button; return button;
} }
} }
@@ -397,17 +441,17 @@ public class EndToEndTestUtils {
* @return false means can not check failed. * @return false means can not check failed.
*/ */
static boolean setHasActionBar() { static boolean setHasActionBar() {
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
// If can find record button without pressing Menu, it should be an action // If can find record button without pressing Menu, it should be an action
// bar. // bar.
Button startButton = getButtonOnScreen(ACTIVITYMYTRACKS.getString(R.string.menu_record_track)); Button startButton = getButtonOnScreen(activityMytracks.getString(R.string.menu_record_track), false, false);
Button stopButton = getButtonOnScreen(ACTIVITYMYTRACKS.getString(R.string.menu_stop_recording)); Button stopButton = getButtonOnScreen(activityMytracks.getString(R.string.menu_stop_recording), false, false);
if (startButton != null || stopButton != null) { if (startButton != null || stopButton != null) {
hasActionBar = true; hasActionBar = true;
} else { } else {
showMoreMenuItem(); showMoreMenuItem();
if (SOLO.searchText(ACTIVITYMYTRACKS.getString(R.string.menu_record_track)) if (SOLO.searchText(activityMytracks.getString(R.string.menu_record_track))
|| SOLO.searchText(ACTIVITYMYTRACKS.getString(R.string.menu_stop_recording))) { || SOLO.searchText(activityMytracks.getString(R.string.menu_stop_recording))) {
hasActionBar = false; hasActionBar = false;
} else { } else {
return false; return false;
@@ -422,7 +466,7 @@ public class EndToEndTestUtils {
*/ */
static void rotateCurrentActivity() { static void rotateCurrentActivity() {
EndToEndTestUtils.rotateActivity(SOLO.getCurrentActivity()); EndToEndTestUtils.rotateActivity(SOLO.getCurrentActivity());
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
} }
/** /**
@@ -434,7 +478,7 @@ public class EndToEndTestUtils {
EndToEndTestUtils.rotateActivity(activity); EndToEndTestUtils.rotateActivity(activity);
} }
INSTRUMENTATION.waitForIdleSync(); instrumentation.waitForIdleSync();
} }
/** /**
@@ -448,11 +492,12 @@ public class EndToEndTestUtils {
boolean findResult = false; boolean findResult = false;
// Firstly find in action bar. // Firstly find in action bar.
Button button = getButtonOnScreen(menuName); Button button = getButtonOnScreen(menuName, false, false);
if (button != null) { if (button != null) {
findResult = true; findResult = true;
if (click) { if (click) {
SOLO.clickOnView(button); SOLO.clickOnView(button);
instrumentation.waitForIdleSync();
} }
return findResult; return findResult;
} }
@@ -467,6 +512,7 @@ public class EndToEndTestUtils {
if (findResult && click) { if (findResult && click) {
SOLO.clickOnText(menuName); SOLO.clickOnText(menuName);
instrumentation.waitForIdleSync();
} else { } else {
SOLO.goBack(); SOLO.goBack();
} }
@@ -537,4 +583,21 @@ public class EndToEndTestUtils {
} }
return null; return null;
} }
/**
* Resets all settings of MyTracks.
*
* @param activityMyTracks current activity
* @param keepInSettingList whether keep in setting list or not
*/
public static void resetAllSettings(Activity activityMyTracks, boolean keepInSettingList) {
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_settings), true);
SOLO.waitForText(activityMyTracks.getString(R.string.settings_reset));
SOLO.clickOnText(activityMyTracks.getString(R.string.settings_reset));
getButtonOnScreen(activityMytracks.getString(R.string.generic_ok), true, true);
instrumentation.waitForIdleSync();
if (!keepInSettingList) {
EndToEndTestUtils.SOLO.goBack();
}
}
} }
@@ -84,7 +84,7 @@ public class ExportAndImportTest extends ActivityInstrumentationTestCase2<TrackL
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_import), true); EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_import), true);
EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.sd_card_import_error_no_file, EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.sd_card_import_error_no_file,
FileUtils.buildExternalDirectoryPath(EndToEndTestUtils.GPX))); FileUtils.buildExternalDirectoryPath(EndToEndTestUtils.GPX)));
EndToEndTestUtils.SOLO.clickOnButton(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
// Click to export tracks(At least one track) to Gpx files. // Click to export tracks(At least one track) to Gpx files.
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_save_all), true); EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_save_all), true);
@@ -93,7 +93,7 @@ public class ExportAndImportTest extends ActivityInstrumentationTestCase2<TrackL
EndToEndTestUtils.GPX.toUpperCase())); EndToEndTestUtils.GPX.toUpperCase()));
EndToEndTestUtils.rotateAllActivities(); EndToEndTestUtils.rotateAllActivities();
EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.sd_card_save_success)); EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.sd_card_save_success));
EndToEndTestUtils.SOLO.clickLongOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
// Check export file. // Check export file.
assertEquals(gpxFilesNumber + trackNumber, assertEquals(gpxFilesNumber + trackNumber,
EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length); EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length);
@@ -111,7 +111,7 @@ public class ExportAndImportTest extends ActivityInstrumentationTestCase2<TrackL
"%")[0]); "%")[0]);
// Check import tracks should be equal with the sum of trackNumber and // Check import tracks should be equal with the sum of trackNumber and
// gpxFilesNumber; // gpxFilesNumber;
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
assertEquals(trackNumber + gpxFilesNumber, EndToEndTestUtils.SOLO.getCurrentListViews().get(0) assertEquals(trackNumber + gpxFilesNumber, EndToEndTestUtils.SOLO.getCurrentListViews().get(0)
.getCount()); .getCount());
@@ -124,7 +124,7 @@ public class ExportAndImportTest extends ActivityInstrumentationTestCase2<TrackL
.clickOnText(String.format(activityMyTracks.getString(R.string.menu_save_format), .clickOnText(String.format(activityMyTracks.getString(R.string.menu_save_format),
EndToEndTestUtils.KML.toUpperCase())); EndToEndTestUtils.KML.toUpperCase()));
EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.sd_card_save_success)); EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.sd_card_save_success));
EndToEndTestUtils.SOLO.clickLongOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
// Check export files. // Check export files.
assertEquals(gpxFilesNumber, EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length); assertEquals(gpxFilesNumber, EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.GPX).length);
assertEquals(trackNumber, EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.KML).length); assertEquals(trackNumber, EndToEndTestUtils.getExportedFiles(EndToEndTestUtils.KML).length);
@@ -74,8 +74,8 @@ public class MenuItemsTest extends ActivityInstrumentationTestCase2<TrackListAct
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_help), true); EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_help), true);
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.help_about)); EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.help_about));
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
} }
/** /**
@@ -84,8 +84,7 @@ public class MenuItemsTest extends ActivityInstrumentationTestCase2<TrackListAct
public void testSearch() { public void testSearch() {
EndToEndTestUtils.createSimpleTrack(1); EndToEndTestUtils.createSimpleTrack(1);
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.SOLO.clickOnView(EndToEndTestUtils.getButtonOnScreen(activityMyTracks EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_search), true);
.getString(R.string.menu_search)));
ArrayList<EditText> editTexts = EndToEndTestUtils.SOLO.getCurrentEditTexts(); ArrayList<EditText> editTexts = EndToEndTestUtils.SOLO.getCurrentEditTexts();
EndToEndTestUtils.SOLO.enterText(editTexts.get(0), EndToEndTestUtils.trackName); EndToEndTestUtils.SOLO.enterText(editTexts.get(0), EndToEndTestUtils.trackName);
sendKeys(KeyEvent.KEYCODE_ENTER); sendKeys(KeyEvent.KEYCODE_ENTER);
@@ -61,14 +61,8 @@ public class SettingTest extends ActivityInstrumentationTestCase2<TrackListActiv
* </ul> * </ul>
*/ */
public void testChangeAndReset() { public void testChangeAndReset() {
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_settings), true); // Reset all settings.
instrumentation.waitForIdleSync(); EndToEndTestUtils.resetAllSettings(activityMyTracks, true);
// Rotate on the settings page.
EndToEndTestUtils.rotateAllActivities();
EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.settings_reset));
// Reset all settings at first.
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.settings_reset));
EndToEndTestUtils.SOLO.clickOnButton(activityMyTracks.getString(R.string.generic_ok));
// Change a setting of Map. // Change a setting of Map.
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab)); EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab));
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
@@ -96,12 +90,12 @@ public class SettingTest extends ActivityInstrumentationTestCase2<TrackListActiv
// Reset all settings. // Reset all settings.
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.settings_reset)); EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.settings_reset));
EndToEndTestUtils.SOLO.clickOnButton(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
// Check settings. // Check settings.
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab)); EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab));
EndToEndTestUtils.SOLO.waitForText(activityMyTracks EndToEndTestUtils.SOLO.waitForText(activityMyTracks
.getString(R.string.settings_stats_units_title)); .getString(R.string.settings_stats_units_title), 1, 20000);
displayCheckBoxs = EndToEndTestUtils.SOLO.getCurrentCheckBoxes(); displayCheckBoxs = EndToEndTestUtils.SOLO.getCurrentCheckBoxes();
assertEquals(useMetric, displayCheckBoxs.get(0).isChecked()); assertEquals(useMetric, displayCheckBoxs.get(0).isChecked());
@@ -132,33 +126,53 @@ public class SettingTest extends ActivityInstrumentationTestCase2<TrackListActiv
// Test just change preferred units when display CHART tab. // Test just change preferred units when display CHART tab.
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_chart_tab)); EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_chart_tab));
EndToEndTestUtils.sendGps(3); EndToEndTestUtils.sendGps(3);
ChangeStatsSettings(true, false); ChangeStatsSettings(true, false, false, false, false);
EndToEndTestUtils.sendGps(3); EndToEndTestUtils.sendGps(3);
EndToEndTestUtils.stopRecording(true); EndToEndTestUtils.stopRecording(true);
} }
/** /**
* Tests the change of stats settings during recording on stats view. * Tests the change of stats settings during recording on stats tab.
*/ */
public void testChangeStatsSettings_underRecording_stats() { public void testChangeStatsSettings_underRecording_stats() {
EndToEndTestUtils.startRecording(); EndToEndTestUtils.startRecording();
// Test change preferred units and preferred rate when display STATS tab. // Test change preferred units and preferred rate when display STATS tab.
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab)); EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab));
EndToEndTestUtils.sendGps(3); EndToEndTestUtils.sendGps(3);
ChangeStatsSettings(true, true); ChangeStatsSettings(true, true, false, false, false);
EndToEndTestUtils.sendGps(3); EndToEndTestUtils.sendGps(3);
EndToEndTestUtils.stopRecording(true); EndToEndTestUtils.stopRecording(true);
} }
/**
* Tests displaying elevation, grade and latitude and longitude information in Stats tab.
*/
public void testChangeStatsSettings_showExtraInfos() {
EndToEndTestUtils.createTrackIfEmpty(5, false);
EndToEndTestUtils.resetAllSettings(activityMyTracks, true);
ChangeStatsSettings(false, false, true, true, true);
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab));
assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks
.getString(R.string.stats_min_elevation)));
assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks
.getString(R.string.stats_min_grade)));
assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks
.getString(R.string.stats_latitude)));
}
/** /**
* Changes settings of preferred units and preferred rate. * Changes settings of preferred units and preferred rate.
* *
* @param changeUnits is change the preferred unit * @param changeUnits is change the preferred unit
* @param changeRate is change the preferred rate * @param changeRate is change the preferred rate
* @param changeElevation is change the elevation
* @param changeGrade is change the grade
* @param changeLatLong is change the latitude and longitude
*/ */
private void ChangeStatsSettings(boolean changeUnits, boolean changeRate) { private void ChangeStatsSettings(boolean changeUnits, boolean changeRate,
boolean changeElevation, boolean changeGrade, boolean changeLatLong) {
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_settings), true); EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_settings), true);
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab)); EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.track_detail_stats_tab));
assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks
@@ -173,6 +187,18 @@ public class SettingTest extends ActivityInstrumentationTestCase2<TrackListActiv
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks EndToEndTestUtils.SOLO.clickOnText(activityMyTracks
.getString(R.string.settings_stats_rate_title)); .getString(R.string.settings_stats_rate_title));
} }
if (changeElevation) {
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks
.getString(R.string.stats_elevation));
}
if (changeGrade) {
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks
.getString(R.string.settings_stats_grade));
}
if (changeLatLong) {
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks
.getString(R.string.settings_stats_coordinate));
}
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
} }
@@ -225,7 +251,7 @@ public class SettingTest extends ActivityInstrumentationTestCase2<TrackListActiv
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete_all), true); EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_delete_all), true);
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
instrumentation.waitForIdleSync(); instrumentation.waitForIdleSync();
// Read from SD card. // Read from SD card.
@@ -233,7 +259,7 @@ public class SettingTest extends ActivityInstrumentationTestCase2<TrackListActiv
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.settings_backup)); EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.settings_backup));
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks EndToEndTestUtils.SOLO.clickOnText(activityMyTracks
.getString(R.string.settings_backup_restore)); .getString(R.string.settings_backup_restore));
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
assertTrue(EndToEndTestUtils.SOLO.waitForText( assertTrue(EndToEndTestUtils.SOLO.waitForText(
activityMyTracks.getString(R.string.sd_card_import_success), 0, 10000)); activityMyTracks.getString(R.string.sd_card_import_success), 0, 10000));
// Check restore track. // Check restore track.
@@ -260,7 +286,7 @@ public class SettingTest extends ActivityInstrumentationTestCase2<TrackListActiv
// Close soft keyboard. // Close soft keyboard.
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
} }
EndToEndTestUtils.SOLO.clickOnText(activityMyTracks.getString(R.string.generic_ok)); EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true);
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
EndToEndTestUtils.SOLO.goBack(); EndToEndTestUtils.SOLO.goBack();
@@ -88,10 +88,7 @@ public class ViewsTest extends ActivityInstrumentationTestCase2<TrackListActivit
EndToEndTestUtils.showMoreMenuItem(); EndToEndTestUtils.showMoreMenuItem();
assertTrue(EndToEndTestUtils.SOLO.waitForText( assertTrue(EndToEndTestUtils.SOLO.waitForText(
activityMyTracks.getString(R.string.menu_settings), 1, 3000)); activityMyTracks.getString(R.string.menu_settings), 1, 3000));
assertTrue(EndToEndTestUtils.SOLO.waitForText( assertTrue(EndToEndTestUtils.SOLO.searchText(EndToEndTestUtils.VIEW_MODE, 1, true, false));
activityMyTracks.getString(R.string.menu_satellite_mode), 1, 0)
|| EndToEndTestUtils.SOLO.waitForText(activityMyTracks.getString(R.string.menu_map_mode),
1, 0));
} }
/** /**