forked from upstream-mirrors/OpenTracks
Import: compute TrackStatistics onTrackEnd.
ExportImportTest were not checking TrackStatistics correctly. #316.
This commit is contained in:
+27
-18
@@ -41,8 +41,10 @@ import de.dennisguse.opentracks.stats.TrackStatistics;
|
|||||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
import de.dennisguse.opentracks.util.PreferencesUtils;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Export a track to {@link TrackFileFormat} and verify that the import is identical.
|
* Export a track to {@link TrackFileFormat} and verify that the import is identical.
|
||||||
@@ -93,7 +95,6 @@ public class ExportImportTest {
|
|||||||
service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14.001, 10, 15, 10, 0, 66, 3, 50), 0);
|
service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14.001, 10, 15, 10, 0, 66, 3, 50), 0);
|
||||||
service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14.002, 10, 15, 10, 0, 66, 3, 50), 0);
|
service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14.002, 10, 15, 10, 0, 66, 3, 50), 0);
|
||||||
service.insertMarker("Marker 2", "Marker 2 category", "Marker 2 desc", null);
|
service.insertMarker("Marker 2", "Marker 2 category", "Marker 2 desc", null);
|
||||||
Thread.sleep(10);
|
|
||||||
service.pauseCurrentTrack();
|
service.pauseCurrentTrack();
|
||||||
|
|
||||||
service.resumeCurrentTrack();
|
service.resumeCurrentTrack();
|
||||||
@@ -164,7 +165,7 @@ public class ExportImportTest {
|
|||||||
assertTrackpoints(false, false, false, false, false);
|
assertTrackpoints(false, false, false, false, false);
|
||||||
|
|
||||||
// 3. trackstatistics
|
// 3. trackstatistics
|
||||||
assertTrackStatistics();
|
assertTrackStatistics(false);
|
||||||
|
|
||||||
// 4. markers
|
// 4. markers
|
||||||
assertMarkers();
|
assertMarkers();
|
||||||
@@ -202,7 +203,7 @@ public class ExportImportTest {
|
|||||||
assertTrackpoints(true, true, true, true, true);
|
assertTrackpoints(true, true, true, true, true);
|
||||||
|
|
||||||
// 2. trackstatistics
|
// 2. trackstatistics
|
||||||
assertTrackStatistics();
|
assertTrackStatistics(true);
|
||||||
|
|
||||||
// 4. markers
|
// 4. markers
|
||||||
assertMarkers();
|
assertMarkers();
|
||||||
@@ -298,7 +299,7 @@ public class ExportImportTest {
|
|||||||
assertTrackpoints(false, true, true, true, true);
|
assertTrackpoints(false, true, true, true, true);
|
||||||
|
|
||||||
// 3. trackstatistics
|
// 3. trackstatistics
|
||||||
assertTrackStatistics();
|
assertTrackStatistics(true);
|
||||||
|
|
||||||
// 4. markers
|
// 4. markers
|
||||||
assertMarkers();
|
assertMarkers();
|
||||||
@@ -358,7 +359,8 @@ public class ExportImportTest {
|
|||||||
|
|
||||||
assertEquals(trackPoint.getTime(), importedTrackPoint.getTime());
|
assertEquals(trackPoint.getTime(), importedTrackPoint.getTime());
|
||||||
TrackPoint.Type type = trackPoint.getType();
|
TrackPoint.Type type = trackPoint.getType();
|
||||||
assertEquals("" + i, trackPoint.getType(), importedTrackPoint.getType());
|
Log.e(TAG, "" + importedTrackPoint.getType().equals(type));
|
||||||
|
assertEquals("" + i, type, importedTrackPoint.getType());
|
||||||
|
|
||||||
// TODO Not exported for GPX/KML
|
// TODO Not exported for GPX/KML
|
||||||
// assertEquals(trackPoint.getAccuracy(), importedTrackPoint.getAccuracy(), 0.01);
|
// assertEquals(trackPoint.getAccuracy(), importedTrackPoint.getAccuracy(), 0.01);
|
||||||
@@ -400,7 +402,7 @@ public class ExportImportTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertTrackStatistics() {
|
private void assertTrackStatistics(boolean verifyElevationGainAndLoss) {
|
||||||
Track importedTrack = contentProviderUtils.getTrack(importTrackId);
|
Track importedTrack = contentProviderUtils.getTrack(importTrackId);
|
||||||
|
|
||||||
assertNotNull(importedTrack.getTrackStatistics());
|
assertNotNull(importedTrack.getTrackStatistics());
|
||||||
@@ -409,24 +411,31 @@ public class ExportImportTest {
|
|||||||
TrackStatistics importedTrackStatistics = importedTrack.getTrackStatistics();
|
TrackStatistics importedTrackStatistics = importedTrack.getTrackStatistics();
|
||||||
|
|
||||||
// Time
|
// Time
|
||||||
assertEquals(trackStatistics.getStartTime(), trackStatistics.getStartTime());
|
assertTrue(trackStatistics.getStartTime().isBefore(trackStatistics.getStopTime())); //Just to be sure.
|
||||||
assertEquals(trackStatistics.getStopTime(), trackStatistics.getStopTime());
|
assertEquals(trackStatistics.getStartTime(), importedTrackStatistics.getStartTime());
|
||||||
assertEquals(trackStatistics.getTotalTime(), trackStatistics.getTotalTime());
|
assertEquals(trackStatistics.getStopTime(), importedTrackStatistics.getStopTime());
|
||||||
assertEquals(trackStatistics.getMovingTime(), trackStatistics.getMovingTime());
|
|
||||||
|
assertEquals(trackStatistics.getTotalTime(), importedTrackStatistics.getTotalTime());
|
||||||
|
assertEquals(trackStatistics.getMovingTime(), importedTrackStatistics.getMovingTime());
|
||||||
|
|
||||||
// Distance
|
// Distance
|
||||||
assertEquals(trackStatistics.getTotalDistance(), trackStatistics.getTotalDistance(), 0.01);
|
assertEquals(trackStatistics.getTotalDistance(), importedTrackStatistics.getTotalDistance(), 0.01);
|
||||||
|
|
||||||
// Speed
|
// Speed
|
||||||
assertEquals(trackStatistics.getMaxSpeed(), trackStatistics.getMaxSpeed(), 0.01);
|
assertEquals(trackStatistics.getMaxSpeed(), importedTrackStatistics.getMaxSpeed(), 0.01);
|
||||||
assertEquals(trackStatistics.getAverageSpeed(), trackStatistics.getAverageSpeed(), 0.01);
|
assertEquals(trackStatistics.getAverageSpeed(), importedTrackStatistics.getAverageSpeed(), 0.01);
|
||||||
assertEquals(trackStatistics.getAverageMovingSpeed(), trackStatistics.getAverageMovingSpeed(), 0.01);
|
assertEquals(trackStatistics.getAverageMovingSpeed(), importedTrackStatistics.getAverageMovingSpeed(), 0.01);
|
||||||
|
|
||||||
// Elevation
|
// Elevation
|
||||||
assertEquals(trackStatistics.getMinElevation(), trackStatistics.getMinElevation(), 0.01);
|
assertEquals(trackStatistics.getMinElevation(), importedTrackStatistics.getMinElevation(), 0.01);
|
||||||
assertEquals(trackStatistics.getMaxElevation(), trackStatistics.getMaxElevation(), 0.01);
|
assertEquals(trackStatistics.getMaxElevation(), importedTrackStatistics.getMaxElevation(), 0.01);
|
||||||
assertEquals(trackStatistics.getTotalElevationGain(), trackStatistics.getTotalElevationGain(), 0.01);
|
if (verifyElevationGainAndLoss) {
|
||||||
assertEquals(trackStatistics.getTotalElevationLoss(), trackStatistics.getTotalElevationLoss(), 0.01);
|
assertEquals(trackStatistics.getTotalElevationGain(), importedTrackStatistics.getTotalElevationGain(), 0.01);
|
||||||
|
assertEquals(trackStatistics.getTotalElevationLoss(), importedTrackStatistics.getTotalElevationLoss(), 0.01);
|
||||||
|
} else {
|
||||||
|
assertFalse(importedTrackStatistics.hasTotalElevationGain());
|
||||||
|
assertFalse(importedTrackStatistics.hasTotalElevationLoss());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TrackPoint createTrackPoint(long time, double latitude, double longitude, float accuracy, long speed, long altitude, float elevationGain, float heartRate, float cyclingCadence, float power) {
|
private static TrackPoint createTrackPoint(long time, double latitude, double longitude, float accuracy, long speed, long altitude, float elevationGain, float heartRate, float cyclingCadence, float power) {
|
||||||
|
|||||||
+6
-12
@@ -251,10 +251,13 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
if (icon != null) {
|
if (icon != null) {
|
||||||
trackData.track.setIcon(icon);
|
trackData.track.setIcon(icon);
|
||||||
}
|
}
|
||||||
if (trackData.trackStatisticsUpdater == null) {
|
|
||||||
trackData.trackStatisticsUpdater = new TrackStatisticsUpdater();
|
TrackStatisticsUpdater statistics = new TrackStatisticsUpdater();
|
||||||
|
//TODO I guess, we should not filter by recordingDistanceInterval on import; the data is already recorded, so we should not change it.
|
||||||
|
for (TrackPoint trackPoint : trackData.bufferedTrackPoints) {
|
||||||
|
statistics.addTrackPoint(trackPoint, recordingDistanceInterval);
|
||||||
}
|
}
|
||||||
trackData.track.setTrackStatistics(trackData.trackStatisticsUpdater.getTrackStatistics());
|
trackData.track.setTrackStatistics(statistics.getTrackStatistics());
|
||||||
|
|
||||||
Track track = contentProviderUtils.getTrack(trackData.track.getUuid());
|
Track track = contentProviderUtils.getTrack(trackData.track.getUuid());
|
||||||
if (track != null) {
|
if (track != null) {
|
||||||
@@ -502,12 +505,6 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
* @param trackPoint the trackPoint
|
* @param trackPoint the trackPoint
|
||||||
*/
|
*/
|
||||||
protected void insertTrackPoint(TrackPoint trackPoint) {
|
protected void insertTrackPoint(TrackPoint trackPoint) {
|
||||||
if (trackData.trackStatisticsUpdater == null) {
|
|
||||||
trackData.trackStatisticsUpdater = new TrackStatisticsUpdater();
|
|
||||||
}
|
|
||||||
//TODO I guess, we should not filter by recordingDistanceInterval on import; the data is already recorded, so we should not change it.
|
|
||||||
trackData.trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval);
|
|
||||||
|
|
||||||
trackData.bufferedTrackPoints.add(trackPoint);
|
trackData.bufferedTrackPoints.add(trackPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,9 +545,6 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
// The last location in the current segment; Null if the current segment doesn't have a last location
|
// The last location in the current segment; Null if the current segment doesn't have a last location
|
||||||
TrackPoint lastLocationInCurrentSegment;
|
TrackPoint lastLocationInCurrentSegment;
|
||||||
|
|
||||||
// The TrackStatisticsUpdater for the current track
|
|
||||||
TrackStatisticsUpdater trackStatisticsUpdater;
|
|
||||||
|
|
||||||
// The buffered locations
|
// The buffered locations
|
||||||
final List<TrackPoint> bufferedTrackPoints = new ArrayList<>();
|
final List<TrackPoint> bufferedTrackPoints = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user