diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/CreateAndSendTrackTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/CreateAndSendTrackTest.java index 55994174a..e6c819a0f 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/CreateAndSendTrackTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/CreateAndSendTrackTest.java @@ -88,80 +88,20 @@ public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2 checkBoxs = EndToEndTestUtils.SOLO.getCurrentCheckBoxes(); - for (int i = 0; i < checkBoxs.size(); i++) { - if (!checkBoxs.get(i).isChecked()) { - EndToEndTestUtils.SOLO.clickOnCheckBox(i); - } - } - - if (checkBoxs.size() < 3) { - EndToEndTestUtils.SOLO.scrollDown(); - checkBoxs = EndToEndTestUtils.SOLO.getCurrentCheckBoxes(); - - // Choose all Google service. - for (int i = 0; i < checkBoxs.size(); i++) { - if (!checkBoxs.get(i).isChecked()) { - EndToEndTestUtils.SOLO.clickOnCheckBox(i); - } - } - } + checkSendTrackToGoogle(); + } + + /** + * Check all services and send to google. + */ + public void testCreateAndSendTrack_sendPausedTrack() { + EndToEndTestUtils.deleteAllTracks(); + EndToEndTestUtils.createTrackWithPause(3); instrumentation.waitForIdleSync(); - EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.send_google_send_now), - true, true); - - // Check whether no account is binded with this device. - if (EndToEndTestUtils.SOLO.waitForText( - activityMyTracks.getString(R.string.send_google_no_account_title), 1, - EndToEndTestUtils.SHORT_WAIT_TIME)) { - EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, - true); - return; - } - - // Check whether need to choose account. - if (EndToEndTestUtils.SOLO.waitForText( - activityMyTracks.getString(R.string.send_google_choose_account_title), 1, - EndToEndTestUtils.SHORT_WAIT_TIME)) { - EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), false, - true); - return; - } - - // Check whether no account permission. - if (EndToEndTestUtils.SOLO.waitForText( - activityMyTracks.getString(R.string.send_google_no_account_permission), 1, - EndToEndTestUtils.SHORT_WAIT_TIME)) { - return; - } - - // Following check the process of "Send to Google". - assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks - .getString(R.string.generic_progress_title))); - // Waiting the send is finish. - while (EndToEndTestUtils.SOLO.waitForText( - activityMyTracks.getString(R.string.generic_progress_title), 1, - EndToEndTestUtils.SHORT_WAIT_TIME)) {} - - // Check whether the result dialog is display. - assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks - .getString(R.string.share_track_share_url))); - EndToEndTestUtils - .getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true); - - // Check whether all data is correct on Google Map, Documents, and - // Spreadsheet. - assertTrue(GoogleUtils.deleteMap(EndToEndTestUtils.trackName, activityMyTracks)); - assertTrue(GoogleUtils.searchFusionTableByTitle(EndToEndTestUtils.TRACK_NAME_PREFIX, - activityMyTracks)); - assertTrue(GoogleUtils.deleteTrackInSpreadSheet(EndToEndTestUtils.trackName, activityMyTracks)); - assertTrue(GoogleUtils.dropFusionTables(EndToEndTestUtils.trackName, activityMyTracks)); - + checkSendTrackToGoogle(); } /** @@ -217,7 +157,7 @@ public class CreateAndSendTrackTest extends ActivityInstrumentationTestCase2 checkBoxs = EndToEndTestUtils.SOLO.getCurrentCheckBoxes(); + for (int i = 0; i < checkBoxs.size(); i++) { + if (!checkBoxs.get(i).isChecked()) { + EndToEndTestUtils.SOLO.clickOnCheckBox(i); + } + } + + if (checkBoxs.size() < 3) { + EndToEndTestUtils.SOLO.scrollDown(); + checkBoxs = EndToEndTestUtils.SOLO.getCurrentCheckBoxes(); + + // Choose all Google service. + for (int i = 0; i < checkBoxs.size(); i++) { + if (!checkBoxs.get(i).isChecked()) { + EndToEndTestUtils.SOLO.clickOnCheckBox(i); + } + } + } + instrumentation.waitForIdleSync(); + EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.send_google_send_now), + true, true); - // Pause - EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.menu_pause_track), - false, true); - assertNotNull(EndToEndTestUtils.SOLO.getButton(activityMyTracks - .getString(R.string.menu_record_track))); - assertNotNull(EndToEndTestUtils.SOLO.getButton(activityMyTracks - .getString(R.string.menu_stop_recording))); - // Resume - EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.menu_record_track), - false, true); - assertNotNull(EndToEndTestUtils.SOLO.getButton(activityMyTracks - .getString(R.string.menu_pause_track))); - assertNotNull(EndToEndTestUtils.SOLO.getButton(activityMyTracks - .getString(R.string.menu_stop_recording))); - // Stop - EndToEndTestUtils.stopRecording(true); + // Check whether no account is binded with this device. + if (EndToEndTestUtils.SOLO.waitForText( + activityMyTracks.getString(R.string.send_google_no_account_title), 1, + EndToEndTestUtils.SHORT_WAIT_TIME)) { + EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, + true); + return; + } + + // Check whether need to choose account. + if (EndToEndTestUtils.SOLO.waitForText( + activityMyTracks.getString(R.string.send_google_choose_account_title), 1, + EndToEndTestUtils.SHORT_WAIT_TIME)) { + EndToEndTestUtils.getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), false, + true); + } + + // Check whether no account permission. + if (EndToEndTestUtils.SOLO.waitForText( + activityMyTracks.getString(R.string.send_google_no_account_permission), 1, + EndToEndTestUtils.SHORT_WAIT_TIME)) { + return; + } + + // Following check the process of "Send to Google". + assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks + .getString(R.string.generic_progress_title))); + // Waiting the send is finish. + while (EndToEndTestUtils.SOLO.waitForText( + activityMyTracks.getString(R.string.generic_progress_title), 1, + EndToEndTestUtils.SHORT_WAIT_TIME)) {} + + // Check whether the result dialog is display. + assertTrue(EndToEndTestUtils.SOLO.waitForText(activityMyTracks + .getString(R.string.share_track_share_url))); + EndToEndTestUtils + .getButtonOnScreen(activityMyTracks.getString(R.string.generic_ok), true, true); + + // Check whether all data is correct on Google Map, Documents, and + // Spreadsheet. + assertTrue(GoogleUtils.deleteMap(EndToEndTestUtils.trackName, activityMyTracks)); + assertTrue(GoogleUtils.searchFusionTableByTitle(EndToEndTestUtils.TRACK_NAME_PREFIX, + activityMyTracks)); + assertTrue(GoogleUtils.deleteTrackInSpreadSheet(EndToEndTestUtils.trackName, activityMyTracks)); + assertTrue(GoogleUtils.dropFusionTables(EndToEndTestUtils.trackName, activityMyTracks)); } /** diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/EndToEndTestUtils.java b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/EndToEndTestUtils.java index 4d0e57abc..bd3ef2e37 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/EndToEndTestUtils.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/EndToEndTestUtils.java @@ -59,10 +59,10 @@ public class EndToEndTestUtils { private static final int ORIENTATION_LANDSCAPE = 0; // Pause 200ms between each send. static int PAUSE = 200; - private static final float START_LONGITUDE = 51; - private static final float START_LATITUDE = -1.3f; - private static final float DELTA_LONGITUDE = 0.0005f; - private static final float DELTA_LADITUDE = 0.0005f; + static final double START_LONGITUDE = 51; + static final double START_LATITUDE = -1.3f; + static final double DELTA_LONGITUDE = 0.0005f; + static final double DELTA_LADITUDE = 0.0005f; private static final String NO_GPS_MESSAGE_PREFIX = "GPS is not available"; private static final String MOREOPTION_CLASSNAME = "com.android.internal.view.menu.ActionMenuPresenter$OverflowMenuButton"; @@ -163,8 +163,9 @@ public class EndToEndTestUtils { * Sends Gps data to emulator. * * @param number send times + * @param numberBofore is used to compute the start latitude and longitude */ - public static void sendGps(int number) { + public static void sendGps(int number, int numberBofore) { if (number < 1) { return; } @@ -178,13 +179,13 @@ public class EndToEndTestUtils { try { socket = new Socket(ANDROID_LOCAL_IP, emulatorPort); out = new PrintStream(socket.getOutputStream()); - float longitude = START_LONGITUDE; - float latitude = START_LATITUDE; + double longitude = START_LONGITUDE + numberBofore * DELTA_LONGITUDE; + double latitude = START_LATITUDE + numberBofore * DELTA_LADITUDE; for (int i = 0; i < number; i++) { - Thread.sleep(PAUSE); - out.println("geo fix " + latitude + " " + longitude); + out.println("geo fix " + longitude + " " + latitude); longitude += DELTA_LONGITUDE; latitude += DELTA_LADITUDE; + Thread.sleep(PAUSE); } // Wait the GPS signal can be obtained by MyTracks. Thread.sleep(SHORT_WAIT_TIME); @@ -302,11 +303,26 @@ public class EndToEndTestUtils { */ static void createSimpleTrack(int numberOfGpsData) { startRecording(); - sendGps(numberOfGpsData); + sendGps(numberOfGpsData, 0); instrumentation.waitForIdleSync(); stopRecording(true); } + /** + * Creates a track which contains pause during recording. + * + * @param numberOfGpsData number of simulated Gps data before pause and after resume + */ + public static void createTrackWithPause(int numberOfGpsData) { + EndToEndTestUtils.startRecording(); + EndToEndTestUtils.sendGps(numberOfGpsData, 0); + EndToEndTestUtils.findMenuItem(activityMytracks.getString(R.string.menu_pause_track), true); + EndToEndTestUtils.findMenuItem(activityMytracks.getString(R.string.menu_record_track), true); + EndToEndTestUtils.sendGps(numberOfGpsData, numberOfGpsData); + EndToEndTestUtils.stopRecording(true); + } + + /** * Checks if there is no track in track list. For some tests need at least one * track, the method can save time to create a new track. diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/ExportAndImportTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/ExportAndImportTest.java index ecc2cdb83..9b2526425 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/ExportAndImportTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/ExportAndImportTest.java @@ -49,14 +49,8 @@ public class ExportAndImportTest extends ActivityInstrumentationTestCase2 - *
  • Create two tracks, one of them is empty(Have no Gps data).
  • - *
  • Tests import when there is no track file.
  • - *
  • Tests export tracks to Gpx files.
  • - *
  • Tests import files to tracks.
  • - *
  • Tests export tracks to Kml files.
  • - * + * Tests export and import tracks after creating a track with Gps signal and + * an empty track. */ public void testExportAndImportTracks() { // Create a new track with 3 gps data. @@ -67,6 +61,39 @@ public class ExportAndImportTest extends ActivityInstrumentationTestCase2 + *
  • Create two tracks, one of them is empty(Have no Gps data).
  • + *
  • Tests import when there is no track file.
  • + *
  • Tests export tracks to Gpx files.
  • + *
  • Tests import files to tracks.
  • + *
  • Tests export tracks to Kml files.
  • + * + */ + private void checkExportAndImport() { // Delete all exported gpx and kml tracks. EndToEndTestUtils.deleteExportedFiles(EndToEndTestUtils.GPX); EndToEndTestUtils.deleteExportedFiles(EndToEndTestUtils.KML); diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/GoToMyLocationTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/GoToMyLocationTest.java index a06719ae3..7d8ef9a24 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/GoToMyLocationTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/GoToMyLocationTest.java @@ -73,7 +73,7 @@ public class GoToMyLocationTest extends ActivityInstrumentationTestCase2 { + + private Instrumentation instrumentation; + private TrackListActivity activityMyTracks; + + @TargetApi(15) + public PauseRecordingTest() { + super(TrackListActivity.class); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + instrumentation = getInstrumentation(); + activityMyTracks = getActivity(); + EndToEndTestUtils.setupForAllTest(instrumentation, activityMyTracks); + } + + /** + * Tests the pause recording feature. Stops the recording after pause. + */ + public void testPauseRecording_stopAfterPause() { + int gpsSignalNumber = 3; + + // Start recording + EndToEndTestUtils.startRecording(); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_pause_track), false)); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_stop_recording), false)); + EndToEndTestUtils.SOLO.goBack(); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_pause_track), false)); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_stop_recording), false)); + EndToEndTestUtils.sendGps(gpsSignalNumber, 0); + + // Pause + EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_pause_track), true); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_record_track), false)); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_stop_recording), false)); + EndToEndTestUtils.sendGps(gpsSignalNumber, gpsSignalNumber); + + // Stop + EndToEndTestUtils.stopRecording(true); + checkPointsInPausedTrack(gpsSignalNumber, 1, 0); + } + + /** + * Tests the pause recording feature. Stops the recording after resume. + */ + public void testPauseRecording_stopAfterResume() { + int gpsSignalNumber = 3; + + // Start recording + EndToEndTestUtils.startRecording(); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_pause_track), false)); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_stop_recording), false)); + EndToEndTestUtils.SOLO.goBack(); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_pause_track), false)); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_stop_recording), false)); + EndToEndTestUtils.sendGps(gpsSignalNumber, 0); + + // Pause + EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_pause_track), true); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_record_track), false)); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_stop_recording), false)); + + // Send Gps signal after pause. + int defaultPause = EndToEndTestUtils.PAUSE; + EndToEndTestUtils.PAUSE = 10; + // Add 100 to make these signals are apparently different. + EndToEndTestUtils.sendGps(gpsSignalNumber, gpsSignalNumber + 100); + EndToEndTestUtils.PAUSE = defaultPause; + + // Resume + EndToEndTestUtils.findMenuItem(activityMyTracks.getString(R.string.menu_record_track), true); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_pause_track), false)); + assertNotNull(EndToEndTestUtils.findMenuItem( + activityMyTracks.getString(R.string.menu_stop_recording), false)); + EndToEndTestUtils.sendGps(gpsSignalNumber, gpsSignalNumber); + + // Stop + EndToEndTestUtils.stopRecording(true); + checkPointsInPausedTrack(gpsSignalNumber * 2, 1, 1); + } + + /** + * Check the points in the last track. + * + * @param expectPointNumber the number of location points + * @param expectPauseNumber the number of pause points + * @param expectResumeNumber the number of resume points + */ + private void checkPointsInPausedTrack(int expectPointNumber, int expectPauseNumber, + int expectResumeNumber) { + if (EndToEndTestUtils.isEmulator) { + int numberOfPoints = 0; + int numberOfPausePoint = 0; + int numberOfResumePoint = 0; + + MyTracksProviderUtils providerUtils = MyTracksProviderUtils.Factory.get(activityMyTracks + .getApplicationContext()); + long trackId = providerUtils.getLastTrack().getId(); + LocationIterator points = providerUtils.getTrackPointLocationIterator(trackId, 0, false, + MyTracksProviderUtils.DEFAULT_LOCATION_FACTORY); + while (points.hasNext()) { + Location onePoint = points.next(); + double latitude = onePoint.getLatitude(); + double longitude = onePoint.getLongitude(); + if (latitude == TrackRecordingService.PAUSE_LATITUDE) { + numberOfPausePoint++; + } else if (latitude == TrackRecordingService.RESUME_LATITUDE) { + numberOfResumePoint++; + } else { + System.out.println(latitude + ":" + longitude); + assertEquals( + numberOfPoints, + (int) ((latitude - EndToEndTestUtils.START_LATITUDE) / EndToEndTestUtils.DELTA_LADITUDE + 0.5)); + assertEquals( + numberOfPoints, + (int) ((longitude - EndToEndTestUtils.START_LONGITUDE) / EndToEndTestUtils.DELTA_LONGITUDE + 0.5)); + numberOfPoints++; + } + } + + assertEquals(expectPointNumber, numberOfPoints); + assertEquals(expectPauseNumber, numberOfPausePoint); + assertEquals(expectResumeNumber, numberOfResumePoint); + } + } + +} diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/SettingTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/SettingTest.java index dbbca90e9..b6b7559fe 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/SettingTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/endtoendtest/SettingTest.java @@ -125,9 +125,9 @@ public class SettingTest extends ActivityInstrumentationTestCase2